diff --git a/bin/test/data/log/test_log.txt b/bin/test/data/log/test_log.txt new file mode 100644 index 00000000..257d6d46 --- /dev/null +++ b/bin/test/data/log/test_log.txt @@ -0,0 +1,6 @@ +Graph.cpp removeEdge() ERROR: Can't remove member edge, without removing the child node. +TextAccess.cpp checkIndexIntervalInRange() WARNING: Index 'firstLine' has to be lower or equal index 'lastLine', is 2 > 1 +TextAccess.cpp checkIndexInRange() WARNING: Tried to access index 9. Maximum index is 7 +TextAccess.cpp checkIndexInRange() WARNING: Tried to access index 9. Maximum index is 7 +TextAccess.cpp getLine() WARNING: Line numbers start with one, is 0 +TextAccess.cpp getLines() WARNING: Line numbers start with one, is 0 diff --git a/script/clean.sh b/script/clean.sh index b6240709..57fd49fd 100755 --- a/script/clean.sh +++ b/script/clean.sh @@ -15,4 +15,7 @@ rm -rf bin/lib/Release rm -rf bin/test/Debug rm -rf bin/test/Release +# Remove log files +find bin/test/data/log -type f -name 'log*' -delete + echo -e $SUCCESS "clean complete" diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 42447cfe..9b40aaa1 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -94,6 +94,8 @@ add_files( gui/WidgetWrapper.cpp gui/WidgetWrapper.h + utility/logging/PlainFileLogger.cpp + utility/logging/PlainFileLogger.h utility/logging/ConsoleLogger.cpp utility/logging/ConsoleLogger.h utility/logging/FileLogger.cpp diff --git a/src/lib/utility/logging/PlainFileLogger.cpp b/src/lib/utility/logging/PlainFileLogger.cpp new file mode 100644 index 00000000..452a5e41 --- /dev/null +++ b/src/lib/utility/logging/PlainFileLogger.cpp @@ -0,0 +1,47 @@ +#include "utility/logging/PlainFileLogger.h" + +#include +#include + +PlainFileLogger::PlainFileLogger(std::string filePath) + : Logger("PlainFileLogger") + , m_filePath(filePath) +{ + std::ofstream fileStream; + fileStream.open(m_filePath, std::ios::trunc); + fileStream.close(); +} + +PlainFileLogger::~PlainFileLogger() +{ +} + +void PlainFileLogger::logString(std::string str) +{ + std::ofstream fileStream; + fileStream.open(m_filePath, std::ios::app); + fileStream << str; + fileStream.close(); +} + +void PlainFileLogger::logInfo(const LogMessage& message) +{ + logMessage("INFO", message); +} + +void PlainFileLogger::logWarning(const LogMessage& message) +{ + logMessage("WARNING", message); +} + +void PlainFileLogger::logError(const LogMessage& message) +{ + logMessage("ERROR", message); +} + +void PlainFileLogger::logMessage(const std::string& type, const LogMessage& message) +{ + std::stringstream ss; + ss << message.getFileName() << " " << message.functionName << "() " << type << ": " << message.message << std::endl; + logString(ss.str()); +} diff --git a/src/lib/utility/logging/PlainFileLogger.h b/src/lib/utility/logging/PlainFileLogger.h new file mode 100644 index 00000000..4e87710c --- /dev/null +++ b/src/lib/utility/logging/PlainFileLogger.h @@ -0,0 +1,27 @@ +#ifndef PLAIN_FILE_LOGGER_H +#define PLAIN_FILE_LOGGER_H + +#include + +#include "utility/logging/Logger.h" +#include "utility/logging/LogMessage.h" + +class PlainFileLogger: public Logger +{ +public: + PlainFileLogger(std::string filePath); + virtual ~PlainFileLogger(); + + void logString(std::string str); + + virtual void logInfo(const LogMessage& message); + virtual void logWarning(const LogMessage& message); + virtual void logError(const LogMessage& message); + +private: + void logMessage(const std::string& type, const LogMessage& message); + + std::string m_filePath; +}; + +#endif // PLAIN_FILE_LOGGER_H diff --git a/src/test/TestSuiteFixture.cpp b/src/test/TestSuiteFixture.cpp index 5ac209b3..602e2a89 100644 --- a/src/test/TestSuiteFixture.cpp +++ b/src/test/TestSuiteFixture.cpp @@ -1,9 +1,11 @@ #include "TestSuiteFixture.h" -#include "utility/logging/ConsoleLogger.h" +#include + #include "utility/logging/FileLogger.h" #include "utility/logging/logging.h" #include "utility/logging/LogManager.h" +#include "utility/logging/PlainFileLogger.h" TestSuiteFixture::TestSuiteFixture() { @@ -13,15 +15,15 @@ TestSuiteFixture::~TestSuiteFixture() { } -bool TestSuiteFixture::setUp() +bool TestSuiteFixture::setUpWorld() { - LogManager::getInstance()->addLogger(std::make_shared()); + LogManager::getInstance()->addLogger(std::make_shared("data/log/test_log.txt")); LogManager::getInstance()->addLogger(std::make_shared()); return true; } -bool TestSuiteFixture::tearDown() +bool TestSuiteFixture::tearDownWorld() { LogManager::destroyInstance(); diff --git a/src/test/TestSuiteFixture.h b/src/test/TestSuiteFixture.h index 29bcc8ee..ac822e78 100644 --- a/src/test/TestSuiteFixture.h +++ b/src/test/TestSuiteFixture.h @@ -9,8 +9,8 @@ public: TestSuiteFixture(); virtual ~TestSuiteFixture(); - virtual bool setUp(); - virtual bool tearDown(); + virtual bool setUpWorld(); + virtual bool tearDownWorld(); }; // According to the CxxTest Documentation global fixtures are actually supposed to be implemented as global static instances