1 | #include "includes.h" |
2 | |
3 | static const char *const tested_logger_name = "null_logger" ; |
4 | static const char *const tested_logger_name2 = "null_logger2" ; |
5 | |
6 | #ifndef SPDLOG_NO_EXCEPTIONS |
7 | TEST_CASE("register_drop" , "[registry]" ) |
8 | { |
9 | spdlog::drop_all(); |
10 | spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name); |
11 | REQUIRE(spdlog::get(tested_logger_name) != nullptr); |
12 | // Throw if registering existing name |
13 | REQUIRE_THROWS_AS(spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name), spdlog::spdlog_ex); |
14 | } |
15 | |
16 | TEST_CASE("explicit register" , "[registry]" ) |
17 | { |
18 | spdlog::drop_all(); |
19 | auto logger = std::make_shared<spdlog::logger>(tested_logger_name, std::make_shared<spdlog::sinks::null_sink_st>()); |
20 | spdlog::register_logger(logger); |
21 | REQUIRE(spdlog::get(tested_logger_name) != nullptr); |
22 | // Throw if registering existing name |
23 | REQUIRE_THROWS_AS(spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name), spdlog::spdlog_ex); |
24 | } |
25 | #endif |
26 | |
27 | TEST_CASE("apply_all" , "[registry]" ) |
28 | { |
29 | spdlog::drop_all(); |
30 | auto logger = std::make_shared<spdlog::logger>(tested_logger_name, std::make_shared<spdlog::sinks::null_sink_st>()); |
31 | spdlog::register_logger(logger); |
32 | auto logger2 = std::make_shared<spdlog::logger>(tested_logger_name2, std::make_shared<spdlog::sinks::null_sink_st>()); |
33 | spdlog::register_logger(logger2); |
34 | |
35 | int counter = 0; |
36 | spdlog::apply_all([&counter](std::shared_ptr<spdlog::logger>) { counter++; }); |
37 | REQUIRE(counter == 2); |
38 | |
39 | counter = 0; |
40 | spdlog::drop(tested_logger_name2); |
41 | spdlog::apply_all([&counter](std::shared_ptr<spdlog::logger> l) { |
42 | REQUIRE(l->name() == tested_logger_name); |
43 | counter++; |
44 | }); |
45 | REQUIRE(counter == 1); |
46 | } |
47 | |
48 | TEST_CASE("drop" , "[registry]" ) |
49 | { |
50 | spdlog::drop_all(); |
51 | spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name); |
52 | spdlog::drop(tested_logger_name); |
53 | REQUIRE_FALSE(spdlog::get(tested_logger_name)); |
54 | } |
55 | |
56 | TEST_CASE("drop-default" , "[registry]" ) |
57 | { |
58 | spdlog::set_default_logger(spdlog::null_logger_st(tested_logger_name)); |
59 | spdlog::drop(tested_logger_name); |
60 | REQUIRE_FALSE(spdlog::default_logger()); |
61 | REQUIRE_FALSE(spdlog::get(tested_logger_name)); |
62 | } |
63 | |
64 | TEST_CASE("drop_all" , "[registry]" ) |
65 | { |
66 | spdlog::drop_all(); |
67 | spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name); |
68 | spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name2); |
69 | spdlog::drop_all(); |
70 | REQUIRE_FALSE(spdlog::get(tested_logger_name)); |
71 | REQUIRE_FALSE(spdlog::get(tested_logger_name2)); |
72 | REQUIRE_FALSE(spdlog::default_logger()); |
73 | } |
74 | |
75 | TEST_CASE("drop non existing" , "[registry]" ) |
76 | { |
77 | spdlog::drop_all(); |
78 | spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name); |
79 | spdlog::drop("some_name" ); |
80 | REQUIRE_FALSE(spdlog::get("some_name" )); |
81 | REQUIRE(spdlog::get(tested_logger_name)); |
82 | spdlog::drop_all(); |
83 | } |
84 | |
85 | TEST_CASE("default logger" , "[registry]" ) |
86 | { |
87 | spdlog::drop_all(); |
88 | spdlog::set_default_logger(spdlog::null_logger_st(tested_logger_name)); |
89 | REQUIRE(spdlog::get(tested_logger_name) == spdlog::default_logger()); |
90 | spdlog::drop_all(); |
91 | } |
92 | |
93 | TEST_CASE("set_default_logger(nullptr)" , "[registry]" ) |
94 | { |
95 | spdlog::set_default_logger(nullptr); |
96 | REQUIRE_FALSE(spdlog::default_logger()); |
97 | } |
98 | |
99 | TEST_CASE("disable automatic registration" , "[registry]" ) |
100 | { |
101 | // set some global parameters |
102 | spdlog::level::level_enum log_level = spdlog::level::level_enum::warn; |
103 | spdlog::set_level(log_level); |
104 | // but disable automatic registration |
105 | spdlog::set_automatic_registration(false); |
106 | auto logger1 = spdlog::create<spdlog::sinks::daily_file_sink_st>(tested_logger_name, SPDLOG_FILENAME_T("filename" ), 11, 59); |
107 | auto logger2 = spdlog::create_async<spdlog::sinks::stdout_color_sink_mt>(tested_logger_name2); |
108 | // loggers should not be part of the registry |
109 | REQUIRE_FALSE(spdlog::get(tested_logger_name)); |
110 | REQUIRE_FALSE(spdlog::get(tested_logger_name2)); |
111 | // but make sure they are still initialized according to global defaults |
112 | REQUIRE(logger1->level() == log_level); |
113 | REQUIRE(logger2->level() == log_level); |
114 | spdlog::set_level(spdlog::level::info); |
115 | spdlog::set_automatic_registration(true); |
116 | } |
117 | |