#include #include #include #include "logger.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() { const std::string fileName = "logger_test.log"; Logger logger(fileName, LogLevel::info()); auto result = logger.writeMessage(LogLevel::info(), "Application started"); assert(result.isSuccess()); assert(result.getValue()); std::ifstream file(fileName); assert(file.is_open()); std::string content; std::getline(file, content); assert(content.find("Application started") != std::string::npos); file.close(); std::remove(fileName.c_str()); } void testWriteLogFailure() { Logger logger("/invalid/path/logger.log", LogLevel::info()); auto result = logger.writeMessage(LogLevel::info(), "message"); assert(result.isFailure()); assert(!result.getError().empty()); } void testMultipleWrites() { const std::string fileName = "multiple.log"; Logger logger(fileName, LogLevel::info()); assert(logger.writeMessage(LogLevel::info(), "first").isSuccess()); assert(logger.writeMessage(LogLevel::error(), "second").isSuccess()); std::ifstream file(fileName); assert(file.is_open()); std::string line1; std::string line2; std::getline(file, line1); std::getline(file, line2); assert(line1.find("first") != std::string::npos); assert(line2.find("second") != std::string::npos); file.close(); std::remove(fileName.c_str()); } void runTests() { testLoggerCreation(); testWithLogLevel(); testWithFileName(); testWriteLogSuccess(); testWriteLogFailure(); testMultipleWrites(); } } // namespace int main() { runTests(); return 0; }