//
//  OmLogTests.cpp
//  OmUtil
//
//  Created by David Van Brink on 1/8/17.
//  Copyright (c) 2017 omino.com. All rights reserved.
//

#include "OmLogTests.h"
#include "Om.h"
#include "OmAsserts.h"






//
//  MeLogTests.cpp
//  MetarealEngine
//
//  Created by David Van Brink on 1/22/15.
//  Copyright (c) 2015 David Van Brink. All rights reserved.
//

#include "OmAsserts.h"
#include "OmLog.h"

class Listener: public OmILogListener
{
public:
    int lastLogLevel = -1;
    std::string lastMessage;
    void logMessage(int level, const std::string &message)
    {
        this->lastLogLevel = level;
        this->lastMessage = message;
    }
};
void testListener()
{
    Listener n;
    
    omLogAddListener(&n);
    omLogError("error!");
    ASSERT_EQUALS_STRING("listened to log", "error!", n.lastMessage.c_str());
    ASSERT_EQUALS_INT("level", 1, n.lastLogLevel);
    
    omLogRemoveListener(&n);
    n.lastLogLevel = -1;
    n.lastMessage = "erased";
    
    omLogError("error 2");
    ASSERT_EQUALS_STRING("listened to log", "erased", n.lastMessage.c_str());
    ASSERT_EQUALS_INT("level", -1, n.lastLogLevel);
    
}

void testEnabledAndCount()
{
    omLogEnable(true);
    int k0 = omLogGetPrintCount();
    omLogInfo("hi");
    int k1 = omLogGetPrintCount();
    omLogEnable(false);
    omLogInfo("hi");
    int k2 = omLogGetPrintCount();
    omLogEnable(true);
    
    ASSERT_TRUE("counting?", k1 > k0);
    ASSERT_EQUALS_INT("disabled?", k2, k1);
}


void allOmLogTests()
{
    testListener();
    testEnabledAndCount();
}