NewLang Project
Yet another programm language
Loading...
Searching...
No Matches
logger_test.cpp
Go to the documentation of this file.
1#ifdef BUILD_UNITTEST
2
3#include "warning_push.h"
4#include <gtest/gtest.h>
5#include "warning_pop.h"
6
7#include "logger.h"
8
9using namespace newlang;
10
11TEST(Logger, Logger) {
12
13 LOG_DUMP("LOG_DEBUG");
14
15 LOG_DEBUG("LOG_DEBUG");
16 LOG_DEBUG("LOG_DEBUG %s", "sssssssssss");
17 LOG_DEBUG("LOG_DEBUG %i", 11111111);
18
19 LOG_ERROR("LOG_ERROR");
20 LOG_ERROR("LOG_ERROR %f", 333.3333);
21
22 LOG_INFO("LOG_INFO %s %s %s\n\n", "a", "bb", "ccc");
23
24}
25
26TEST(Logger, HexToByte) {
27 EXPECT_EQ(HexToByte('0'), 0);
28 EXPECT_EQ(HexToByte('1'), 1);
29 EXPECT_EQ(HexToByte('2'), 2);
30 EXPECT_EQ(HexToByte('3'), 3);
31 EXPECT_EQ(HexToByte('4'), 4);
32 EXPECT_EQ(HexToByte('5'), 5);
33 EXPECT_EQ(HexToByte('6'), 6);
34 EXPECT_EQ(HexToByte('7'), 7);
35 EXPECT_EQ(HexToByte('8'), 8);
36 EXPECT_EQ(HexToByte('9'), 9);
37
38 EXPECT_EQ(HexToByte('A'), 0xA);
39 EXPECT_EQ(HexToByte('B'), 0xB);
40 EXPECT_EQ(HexToByte('C'), 0xC);
41 EXPECT_EQ(HexToByte('D'), 0xD);
42 EXPECT_EQ(HexToByte('E'), 0xE);
43 EXPECT_EQ(HexToByte('F'), 0xF);
44
45 EXPECT_EQ(HexToByte('a'), 0xA);
46 EXPECT_EQ(HexToByte('b'), 0xB);
47 EXPECT_EQ(HexToByte('c'), 0xC);
48 EXPECT_EQ(HexToByte('d'), 0xD);
49 EXPECT_EQ(HexToByte('e'), 0xE);
50 EXPECT_EQ(HexToByte('f'), 0xF);
51
52 EXPECT_THROW(HexToByte('w'), std::runtime_error);
53 EXPECT_THROW(HexToByte('+'), std::runtime_error);
54 EXPECT_THROW(HexToByte('S'), std::runtime_error);
55}
56
57TEST(Logger, HexToBin) {
58 std::array<uint8_t, 100> buffer;
59
60 EXPECT_EQ(0, HexToBin("", buffer.data(), buffer.size()));
61 EXPECT_EQ(0, HexToBin("12", buffer.data(), 0));
62 EXPECT_EQ(1, HexToBin("01", buffer.data(), buffer.size()));
63 EXPECT_EQ(2, HexToBin("2345", buffer.data(), buffer.size()));
64 EXPECT_EQ(3, HexToBin("678910", buffer.data(), buffer.size()));
65
66 EXPECT_EQ(2, HexToBin("ABCD", buffer.data(), 2));
67
68 EXPECT_EQ(11, HexToBin("0123456789ABCDEFabcdef", buffer.data(), buffer.size()));
69 EXPECT_EQ(buffer[0], 0x01);
70 EXPECT_EQ(buffer[1], 0x23);
71 EXPECT_EQ(buffer[2], 0x45);
72 EXPECT_EQ(buffer[3], 0x67);
73 EXPECT_EQ(buffer[4], 0x89);
74 EXPECT_EQ(buffer[5], 0xAB);
75 EXPECT_EQ(buffer[6], 0xCD);
76 EXPECT_EQ(buffer[7], 0xEF);
77 EXPECT_EQ(buffer[8], 0xAB);
78 EXPECT_EQ(buffer[9], 0xCD);
79 EXPECT_EQ(buffer[10], 0xEF);
80
81 EXPECT_TRUE(HexToBinEq("", buffer.data(), 0));
82 EXPECT_TRUE(HexToBinEq("01", buffer.data(), 1));
83 EXPECT_TRUE(HexToBinEq("0123", buffer.data(), 2));
84 EXPECT_TRUE(HexToBinEq("012345", buffer.data(), 3));
85 EXPECT_TRUE(HexToBinEq("0123456789ABCDEFabcdef", buffer.data(), 11));
86
87 EXPECT_FALSE(HexToBinEq("11", buffer.data(), 1));
88 EXPECT_FALSE(HexToBinEq("0123456789ABCDEFabcdef", buffer.data(), 12));
89 EXPECT_FALSE(HexToBinEq("0123456789ABCDEFabcdefFF", buffer.data(), 11));
90
91
92// EXPECT_THROW(HexToBin(nullptr, buffer.data(), buffer.size()), std::runtime_error);
93// EXPECT_THROW(HexToBin(nullptr, nullptr, buffer.size()), std::runtime_error);
94// EXPECT_THROW(HexToBin("", nullptr, buffer.size()), std::runtime_error);
95
96 uint8_t buf[17] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0xF, 0};
97 EXPECT_STREQ(BinToHex(buf, sizeof (buf)).c_str(), "0102030405060708090A0B0C0D0E0F0F00");
98}
99
100
101std::string test_log_out;
102
103void test_log_callback(void *, Logger::LogLevelType, const char * str, bool) {
104 test_log_out.append(str);
105}
106
107TEST(Logger, Duplicate) {
108
109 Logger::Instance()->SetLogLevel(LOG_LEVEL_DEBUG);
110 Logger::Instance()->SetCallback(&test_log_callback, nullptr);
111
112 LOG_DEBUG("Test 1");
113 EXPECT_TRUE(test_log_out.find("D:Test 1 (logger_test.cpp:") == 0);
114 test_log_out.clear();
115 LOG_DEBUG("Test");
116 EXPECT_TRUE(test_log_out.find("D:Test (logger_test.cpp:") == 0);
117 test_log_out.clear();
118
119 Logger::Instance()->SetLogLevel(LOG_LEVEL_NORMAL);
120 LOG_INFO("123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 ");
121 EXPECT_STREQ(test_log_out.c_str(), "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 \n");
122 test_log_out.clear();
123
124 Logger::Instance()->SetLogLevel(LOG_LEVEL_MAX);
125 LOG_INFO("123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 ");
126 EXPECT_TRUE(test_log_out.find("123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 (logger_test.cpp:") == 0);
127 test_log_out.clear();
128
129 Logger::Instance()->SetCallback(nullptr, nullptr);
130
131}
132
133#endif
uint8_t LogLevelType
Definition logger.h:319
size_t HexToBin(const char *str, uint8_t *buf, const size_t size)
Definition logger.cpp:130
std::string BinToHex(const uint8_t *buf, const size_t size)
Definition logger.cpp:168
uint8_t HexToByte(const char c)
Definition logger.cpp:117
int HexToBinEq(const char *str, const uint8_t *buf, size_t size)
Definition logger.cpp:147
#define LOG_LEVEL_DEBUG
Definition logger.h:86
#define LOG_INFO(...)
Definition logger.h:120
#define LOG_DEBUG(...)
Definition logger.h:119
#define LOG_LEVEL_MAX
Definition logger.h:101
#define LOG_DUMP(...)
Definition logger.h:118
#define LOG_ERROR(...)
Definition logger.h:122
#define LOG_LEVEL_NORMAL
Definition logger.h:113
Definition nlc.h:59