hyprutils/tests/cli/Logger.cpp

93 lines
2.6 KiB
C++
Raw Normal View History

2025-11-23 01:10:32 +00:00
#include <cli/Logger.hpp>
#include <hyprutils/os/File.hpp>
#include <gtest/gtest.h>
#include <filesystem>
using namespace Hyprutils::CLI;
using namespace Hyprutils;
TEST(CLI, Logger) {
CLogger logger;
logger.log(Hyprutils::CLI::LOG_DEBUG, "Hello!");
EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!");
logger.log(Hyprutils::CLI::LOG_TRACE, "Hello!");
EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!");
2025-11-23 14:04:11 +00:00
logger.setLogLevel(LOG_TRACE);
2025-11-23 01:10:32 +00:00
logger.log(Hyprutils::CLI::LOG_TRACE, "Hello, {}!", "Trace");
EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!\nTRACE ]: Hello, Trace!");
2025-11-23 01:41:37 +00:00
CLoggerConnection connection(logger);
connection.setName("conn");
2025-11-23 14:04:11 +00:00
connection.log(Hyprutils::CLI::LOG_TRACE, "Hello from connection!");
EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!\nTRACE ]: Hello, Trace!\nTRACE from conn ]: Hello from connection!");
connection.setLogLevel(Hyprutils::CLI::LOG_WARN);
2025-11-23 01:41:37 +00:00
connection.log(Hyprutils::CLI::LOG_DEBUG, "Hello from connection!");
2025-11-23 14:04:11 +00:00
EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!\nTRACE ]: Hello, Trace!\nTRACE from conn ]: Hello from connection!");
2025-11-23 01:41:37 +00:00
2025-11-23 01:17:27 +00:00
logger.setEnableStdout(false);
logger.log(Hyprutils::CLI::LOG_ERR, "Error");
2025-11-23 14:04:11 +00:00
EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!\nTRACE ]: Hello, Trace!\nTRACE from conn ]: Hello from connection!");
2025-11-23 01:17:27 +00:00
2025-11-23 01:10:32 +00:00
auto res = logger.setOutputFile("./loggerFile.log");
EXPECT_TRUE(res);
logger.log(LOG_DEBUG, "Hi file!");
res = logger.setOutputFile(""); // clear
EXPECT_TRUE(res);
auto fileRead = File::readFileAsString("./loggerFile.log");
EXPECT_TRUE(fileRead);
EXPECT_EQ(fileRead.value_or(""), "DEBUG ]: Hi file!\n");
std::error_code ec;
std::filesystem::remove("./loggerFile.log", ec);
2025-11-23 01:17:27 +00:00
// TODO: maybe find a way to test the times and color?
logger.setEnableStdout(true);
logger.setTime(true);
logger.log(Hyprutils::CLI::LOG_WARN, "Timed warning!");
logger.setEnableColor(false);
logger.log(Hyprutils::CLI::LOG_CRIT, "rip");
// spam some logs to check rolling
2025-11-23 01:41:37 +00:00
for (size_t i = 0; i < 200; ++i) {
2025-11-23 14:04:11 +00:00
logger.log(LOG_ERR, "Oh noes!!!");
2025-11-23 01:17:27 +00:00
}
EXPECT_TRUE(logger.rollingLog().size() < 4096);
2025-11-23 14:04:11 +00:00
EXPECT_TRUE(logger.rollingLog().starts_with("ERR")); // test the breaking is done correctly
// test scoping
CLogger* pLogger = new CLogger();
CLoggerConnection* pConnection = new CLoggerConnection(*pLogger);
pLogger->setEnableStdout(false);
pConnection->log(LOG_DEBUG, "This shouldn't log anything.");
EXPECT_TRUE(pLogger->rollingLog().empty());
delete pLogger;
pConnection->log(LOG_DEBUG, "This shouldn't do anything, or crash.");
2025-11-23 01:10:32 +00:00
}