refactor(Core/sLog): improve singleton management (#3801)

This commit is contained in:
Francesco Borzì
2020-12-06 15:59:08 +01:00
committed by GitHub
parent a06bfa6e5b
commit 9facd81e54
6 changed files with 214 additions and 92 deletions

View File

@@ -3,6 +3,10 @@ CollectSourceFiles(
PRIVATE_SOURCES
)
include_directories(
"mocks"
)
add_executable(
unit_tests
${PRIVATE_SOURCES}
@@ -12,6 +16,7 @@ target_link_libraries(
unit_tests
game
gtest_main
gmock_main
game-interface
)

51
src/test/mocks/LogMock.h Normal file
View File

@@ -0,0 +1,51 @@
#ifndef AZEROTHCORE_LOGMOCK_H
#define AZEROTHCORE_LOGMOCK_H
#include "gmock/gmock.h"
#include "ILog.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
class LogMock: public ILog {
public:
~LogMock() override {}
MOCK_METHOD(void, outDB, (LogTypes type), (const char* str));
MOCK_METHOD(void, Initialize, ());
MOCK_METHOD(void, ReloadConfig, ());
MOCK_METHOD(void, InitColors, (const std::string& init_str));
void SetColor(bool stdout_stream, ColorTypes color) override {}
MOCK_METHOD(void, ResetColor, (bool stdout_stream));
MOCK_METHOD(void, outDB, (LogTypes type, const char* str));
void outString(const char* str, ...) override {}
MOCK_METHOD(void, outString, ());
void outStringInLine(const char* str, ...) override {}
MOCK_METHOD(void, outErrorMock, ()); // because outError has variadic type and cannot be directly mocked
void outError(const char* err, ...) override { outErrorMock(); }
void outCrash(const char* err, ...) override {}
void outBasic(const char* str, ...) override {}
void outDetail(const char* str, ...) override {}
void outSQLDev(const char* str, ...) override {}
void outDebug(DebugLogFilters f, const char* str, ...) override {}
void outStaticDebug(const char* str, ...) override {}
void outErrorDb(const char* str, ...) override {}
void outChar(const char* str, ...) override {}
void outCommand(uint32 account, const char* str, ...) override {}
void outChat(const char* str, ...) override {}
void outRemote(const char* str, ...) override {}
void outSQLDriver(const char* str, ...) override {}
void outMisc(const char* str, ...) override {}
void outCharDump(const char* str, uint32 account_id, uint32 guid, const char* name) override {}
MOCK_METHOD(void, SetLogLevel, (char* Level));
MOCK_METHOD(void, SetLogFileLevel, (char* Level));
MOCK_METHOD(void, SetSQLDriverQueryLogging, (bool newStatus));
MOCK_METHOD(void, SetRealmID, (uint32 id));
MOCK_METHOD(bool, IsOutDebug, (), (const));
MOCK_METHOD(bool, IsOutCharDump, (), (const));
MOCK_METHOD(bool, GetLogDB, (), (const));
MOCK_METHOD(void, SetLogDB, (bool enable));
MOCK_METHOD(bool, GetSQLDriverQueryLogging, (), (const));
};
#pragma GCC diagnostic pop
#endif //AZEROTHCORE_LOGMOCK_H

View File

@@ -1,6 +1,10 @@
#include "gtest/gtest.h"
#include "Formulas.h"
#include "SharedDefines.h"
#include "Log.h"
#include "LogMock.h"
LoginDatabaseWorkerPool LoginDatabase;
using namespace acore::Honor;
using namespace acore::XP;
@@ -69,3 +73,19 @@ TEST(FormulasTest, GetZeroDifference)
EXPECT_EQ(GetZeroDifference(60), 17);
EXPECT_EQ(GetZeroDifference(80), 17);
}
TEST(FormulasTest, BaseGain)
{
auto logMock = new LogMock();
sLog.reset(logMock);
EXPECT_EQ(BaseGain(60, 40, CONTENT_1_60), 0);
EXPECT_EQ(BaseGain(60, 60, CONTENT_1_60), 345);
EXPECT_EQ(BaseGain(50, 60, CONTENT_1_60), 354);
EXPECT_EQ(BaseGain(65, 66, CONTENT_61_70), 588);
EXPECT_EQ(BaseGain(79, 78, CONTENT_71_80), 917);
// check outError() has been called after passing an invalid ContentLevels content
EXPECT_CALL(*logMock, outErrorMock()).Times(1);
EXPECT_EQ(BaseGain(79, 1, ContentLevels(999)), 0);
}