#include #include #include #include "logger.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() { const std::string fileName = "logger_test.log"; logger::Logger logger(fileName, logger::LogLevel::Info); auto result = logger.writeLog(logger::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 logger("/invalid/path/logger.log", logger::LogLevel::Info); auto result = logger.writeLog(logger::LogLevel::Info, "message"); assert(result.isFailure()); assert(!result.getError().empty()); } void testMultipleWrites() { const std::string fileName = "multiple.log"; logger::Logger logger(fileName, logger::LogLevel::Info); assert(logger.writeLog(logger::LogLevel::Info, "first").isSuccess()); assert(logger.writeLog(logger::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; }