1#include "includes.h"
2
3static const char *const tested_logger_name = "null_logger";
4static const char *const tested_logger_name2 = "null_logger2";
5
6#ifndef SPDLOG_NO_EXCEPTIONS
7TEST_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
16TEST_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
27TEST_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
48TEST_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
56TEST_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
64TEST_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
75TEST_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
85TEST_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
93TEST_CASE("set_default_logger(nullptr)", "[registry]")
94{
95 spdlog::set_default_logger(nullptr);
96 REQUIRE_FALSE(spdlog::default_logger());
97}
98
99TEST_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