#include #include #include #include #include "logger.hpp" #include "scoped_file.hpp" namespace { void testLoggerCreation() { logger::Logger logger("test.log", logger::LogLevel::Info); assert(logger.getFileName() == "test.log"); assert(logger.getLogLevel() == logger::LogLevel::Info); } void testWithLogLevel() { logger::Logger logger("test.log", logger::LogLevel::Info); auto debugLogger = logger.withLogLevel(logger::LogLevel::Debug); assert(logger.getLogLevel() == logger::LogLevel::Info); assert(debugLogger.getLogLevel() == logger::LogLevel::Debug); assert(debugLogger.getFileName() == "test.log"); } void testWithFileName() { logger::Logger logger("old.log", logger::LogLevel::Info); auto newLogger = logger.withFileName("new.log"); assert(logger.getFileName() == "old.log"); assert(newLogger.getFileName() == "new.log"); assert(newLogger.getLogLevel() == logger::LogLevel::Info); } void testWriteLogSuccess() { ScopedFile file("logger_test.log"); file.throwIfExists(); logger::Logger logger(file.getFileName(), logger::LogLevel::Info); auto result = logger.writeLog(logger::LogLevel::Info, "Application started"); assert(result.isSuccess()); assert(result.getValue()); std::ifstream input(file.getFileName()); assert(input.is_open()); std::string content; std::getline(input, content); assert(content.find("Application started") != std::string::npos); } void testWriteLogFailure() { ScopedFile file("logger_test_directory"); file.throwIfExists(); std::filesystem::create_directory(file.getFileName()); logger::Logger logger(file.getFileName(), logger::LogLevel::Info); auto result = logger.writeLog(logger::LogLevel::Info, "message"); assert(result.isFailure()); assert(!result.getError().empty()); std::filesystem::remove(file.getFileName()); } void testMultipleWrites() { ScopedFile file("multiple.log"); file.throwIfExists(); logger::Logger logger(file.getFileName(), logger::LogLevel::Info); auto first = logger.writeLog(logger::LogLevel::Info, "first message"); auto second = logger.writeLog(logger::LogLevel::Error, "second message"); assert(first.isSuccess()); assert(second.isSuccess()); std::ifstream input(file.getFileName()); assert(input.is_open()); std::string firstLine; std::string secondLine; std::getline(input, firstLine); std::getline(input, secondLine); assert(firstLine.find("first message") != std::string::npos); assert(secondLine.find("second message") != std::string::npos); } void runTests() { testLoggerCreation(); testWithLogLevel(); testWithFileName(); testWriteLogSuccess(); testWriteLogFailure(); testMultipleWrites(); } } // namespace int main() { runTests(); return 0; }