File: Logger.cpp

package info (click to toggle)
hyprutils 0.11.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 576 kB
  • sloc: cpp: 5,624; sh: 10; makefile: 3
file content (104 lines) | stat: -rw-r--r-- 2,988 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#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.setEnableRolling(true);

    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!");

    logger.setLogLevel(LOG_TRACE);

    logger.log(Hyprutils::CLI::LOG_TRACE, "Hello, {}!", "Trace");

    EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!\nTRACE ]: Hello, Trace!");

    CLoggerConnection connection(logger);
    connection.setName("conn");

    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);

    connection.log(Hyprutils::CLI::LOG_DEBUG, "Hello from connection!");

    EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!\nTRACE ]: Hello, Trace!\nTRACE from conn ]: Hello from connection!");

    logger.setEnableRolling(false);

    connection.log(Hyprutils::CLI::LOG_ERR, "Err!");

    EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!\nTRACE ]: Hello, Trace!\nTRACE from conn ]: Hello from connection!");

    logger.setEnableStdout(false);

    logger.log(Hyprutils::CLI::LOG_ERR, "Error");

    EXPECT_EQ(logger.rollingLog(), "DEBUG ]: Hello!\nTRACE ]: Hello, Trace!\nTRACE from conn ]: Hello from connection!");

    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);

    // 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");

    logger.setEnableRolling(true);

    // spam some logs to check rolling
    for (size_t i = 0; i < 200; ++i) {
        logger.log(LOG_ERR, "Oh noes!!!");
    }

    EXPECT_TRUE(logger.rollingLog().size() < 4096);
    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.");
}