| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  | #include "includes.h"
 | 
					
						
							| 
									
										
										
										
											2018-07-21 23:30:26 +03:00
										 |  |  | #include "test_sink.h"
 | 
					
						
							| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-16 17:35:56 +02:00
										 |  |  | template<class T> | 
					
						
							|  |  |  | std::string log_info(const T &what, spdlog::level::level_enum logger_level = spdlog::level::info) | 
					
						
							| 
									
										
										
										
											2015-05-15 21:45:10 +03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     std::ostringstream oss; | 
					
						
							|  |  |  |     auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spdlog::logger oss_logger("oss", oss_sink); | 
					
						
							|  |  |  |     oss_logger.set_level(logger_level); | 
					
						
							|  |  |  |     oss_logger.set_pattern("%v"); | 
					
						
							| 
									
										
										
										
											2016-07-03 03:43:55 +03:00
										 |  |  |     oss_logger.info(what); | 
					
						
							| 
									
										
										
										
											2016-05-15 01:01:01 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-04 23:36:54 -05:00
										 |  |  |     return oss.str().substr(0, oss.str().length() - strlen(spdlog::details::os::default_eol)); | 
					
						
							| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-15 21:45:10 +03:00
										 |  |  | TEST_CASE("basic_logging ", "[basic_logging]") | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-09 15:24:37 +02:00
										 |  |  |     // const char
 | 
					
						
							| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  |     REQUIRE(log_info("Hello") == "Hello"); | 
					
						
							|  |  |  |     REQUIRE(log_info("") == ""); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-09 15:24:37 +02:00
										 |  |  |     // std::string
 | 
					
						
							| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  |     REQUIRE(log_info(std::string("Hello")) == "Hello"); | 
					
						
							|  |  |  |     REQUIRE(log_info(std::string()) == std::string()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-09 15:24:37 +02:00
										 |  |  |     // Numbers
 | 
					
						
							| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  |     REQUIRE(log_info(5) == "5"); | 
					
						
							|  |  |  |     REQUIRE(log_info(5.6) == "5.6"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-09 15:24:37 +02:00
										 |  |  |     // User defined class
 | 
					
						
							|  |  |  |     // REQUIRE(log_info(some_logged_class("some_val")) == "some_val");
 | 
					
						
							| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE("log_levels", "[log_levels]") | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     REQUIRE(log_info("Hello", spdlog::level::err) == ""); | 
					
						
							| 
									
										
										
										
											2016-07-09 01:00:16 +03:00
										 |  |  |     REQUIRE(log_info("Hello", spdlog::level::critical) == ""); | 
					
						
							| 
									
										
										
										
											2015-05-15 20:30:37 +03:00
										 |  |  |     REQUIRE(log_info("Hello", spdlog::level::info) == "Hello"); | 
					
						
							|  |  |  |     REQUIRE(log_info("Hello", spdlog::level::debug) == "Hello"); | 
					
						
							|  |  |  |     REQUIRE(log_info("Hello", spdlog::level::trace) == "Hello"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 09:59:26 +03:00
										 |  |  | TEST_CASE("to_c_str", "[convert_to_c_str]") | 
					
						
							| 
									
										
										
										
											2018-03-08 19:08:24 -03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-07-04 09:59:26 +03:00
										 |  |  |     REQUIRE(std::string(spdlog::level::to_c_str(spdlog::level::trace)) == "trace"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_c_str(spdlog::level::debug)) == "debug"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_c_str(spdlog::level::info)) == "info"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_c_str(spdlog::level::warn)) == "warning"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_c_str(spdlog::level::err)) == "error"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_c_str(spdlog::level::critical)) == "critical"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_c_str(spdlog::level::off)) == "off"); | 
					
						
							| 
									
										
										
										
											2018-03-08 19:08:24 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 09:59:26 +03:00
										 |  |  | TEST_CASE("to_short_c_str", "[convert_to_short_c_str]") | 
					
						
							| 
									
										
										
										
											2018-03-08 19:08:24 -03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-07-04 09:59:26 +03:00
										 |  |  |     REQUIRE(std::string(spdlog::level::to_short_c_str(spdlog::level::trace)) == "T"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_short_c_str(spdlog::level::debug)) == "D"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_short_c_str(spdlog::level::info)) == "I"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_short_c_str(spdlog::level::warn)) == "W"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_short_c_str(spdlog::level::err)) == "E"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_short_c_str(spdlog::level::critical)) == "C"); | 
					
						
							|  |  |  |     REQUIRE(std::string(spdlog::level::to_short_c_str(spdlog::level::off)) == "O"); | 
					
						
							| 
									
										
										
										
											2018-03-08 19:08:24 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE("to_level_enum", "[convert_to_level_enum]") | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-03-09 15:24:37 +02:00
										 |  |  |     REQUIRE(spdlog::level::from_str("trace") == spdlog::level::trace); | 
					
						
							|  |  |  |     REQUIRE(spdlog::level::from_str("debug") == spdlog::level::debug); | 
					
						
							|  |  |  |     REQUIRE(spdlog::level::from_str("info") == spdlog::level::info); | 
					
						
							|  |  |  |     REQUIRE(spdlog::level::from_str("warning") == spdlog::level::warn); | 
					
						
							|  |  |  |     REQUIRE(spdlog::level::from_str("error") == spdlog::level::err); | 
					
						
							|  |  |  |     REQUIRE(spdlog::level::from_str("critical") == spdlog::level::critical); | 
					
						
							|  |  |  |     REQUIRE(spdlog::level::from_str("off") == spdlog::level::off); | 
					
						
							|  |  |  |     REQUIRE(spdlog::level::from_str("null") == spdlog::level::off); | 
					
						
							| 
									
										
										
										
											2018-03-08 19:08:24 -03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-21 23:30:26 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE("periodic flush", "[periodic_flush]") | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     using namespace spdlog; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto logger = spdlog::create<sinks::test_sink_mt>("periodic_flush"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto test_sink = std::static_pointer_cast<sinks::test_sink_mt>(logger->sinks()[0]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spdlog::flush_every(std::chrono::seconds(1)); | 
					
						
							|  |  |  |     std::this_thread::sleep_for(std::chrono::milliseconds(1100)); | 
					
						
							|  |  |  |     REQUIRE(test_sink->flush_counter() == 1); | 
					
						
							|  |  |  |     spdlog::flush_every(std::chrono::seconds(0)); | 
					
						
							|  |  |  |     spdlog::drop_all(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-08-25 18:10:42 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE("clone", "[clone]") | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     using namespace spdlog; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto logger = spdlog::create<sinks::test_sink_mt>("orig"); | 
					
						
							|  |  |  |     auto cloned = logger->clone("clone"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(cloned->name() == "clone"); | 
					
						
							|  |  |  |     REQUIRE(logger->sinks() == cloned->sinks()); | 
					
						
							|  |  |  |     REQUIRE(logger->level() == cloned->level()); | 
					
						
							|  |  |  |     REQUIRE(logger->flush_level() == cloned->flush_level()); | 
					
						
							|  |  |  |     logger->info("Some message 1"); | 
					
						
							|  |  |  |     cloned->info("Some message 2"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto test_sink = std::static_pointer_cast<sinks::test_sink_mt>(cloned->sinks()[0]); | 
					
						
							|  |  |  |     REQUIRE(test_sink->msg_counter() == 2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spdlog::drop_all(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE("clone async", "[clone]") | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     using namespace spdlog; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto logger = spdlog::create_async<sinks::test_sink_mt>("orig"); | 
					
						
							|  |  |  |     auto cloned = logger->clone("clone"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(cloned->name() == "clone"); | 
					
						
							|  |  |  |     REQUIRE(logger->sinks() == cloned->sinks()); | 
					
						
							|  |  |  |     REQUIRE(logger->level() == cloned->level()); | 
					
						
							|  |  |  |     REQUIRE(logger->flush_level() == cloned->flush_level()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     logger->info("Some message 1"); | 
					
						
							|  |  |  |     cloned->info("Some message 2"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spdlog::details::os::sleep_for_millis(10); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto test_sink = std::static_pointer_cast<sinks::test_sink_mt>(cloned->sinks()[0]); | 
					
						
							|  |  |  |     REQUIRE(test_sink->msg_counter() == 2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     spdlog::drop_all(); | 
					
						
							|  |  |  | } |