#include #include #include #include #include "logger.hpp" #include "scoped_file.hpp" namespace { using namespace logger; void testLoggerCreation() { Logger logger("test.log", LogLevel::info()); assert(logger.getFileName() == "test.log"); assert(logger.getLogLevel() == LogLevel::info()); } void testWithLogLevel() { Logger logger("test.log", LogLevel::info()); auto debugLogger = logger.withLogLevel(LogLevel::debug()); assert(logger.getLogLevel() == LogLevel::info()); assert(debugLogger.getLogLevel() == LogLevel::debug()); assert(debugLogger.getFileName() == "test.log"); } void testWithFileName() { Logger logger("old.log", LogLevel::info()); auto newLogger = logger.withFileName("new.log"); assert(logger.getFileName() == "old.log"); assert(newLogger.getFileName() == "new.log"); assert(newLogger.getLogLevel() == LogLevel::info()); } void testWriteLogSuccess() { ScopedFile file("logger_test.log"); file.throwIfExists(); Logger logger(file.getFileName(), LogLevel::info()); auto result = logger.writeMessage(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(file.getFileName(), LogLevel::info()); auto result = logger.writeMessage(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(file.getFileName(), LogLevel::info()); auto first = logger.writeMessage(LogLevel::info(), "first message"); auto second = logger.writeMessage(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; }