mirror of
https://github.com/gabime/spdlog.git
synced 2025-09-28 17:19:34 +08:00
Updated clang-format
Merged with origin
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ == 12
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" // Workaround for GCC 12
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" // Workaround for GCC 12
|
||||
#endif
|
||||
#include <catch2/catch_all.hpp>
|
||||
#if defined(__GNUC__) && __GNUC__ == 12
|
||||
# pragma GCC diagnostic pop
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#include "utils.h"
|
||||
|
@@ -1,10 +1,10 @@
|
||||
#if defined(__GNUC__) && __GNUC__ == 12
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" // Workaround for GCC 12
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" // Workaround for GCC 12
|
||||
#endif
|
||||
|
||||
#include <catch2/catch_all.hpp>
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ == 12
|
||||
# pragma GCC diagnostic pop
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
@@ -5,17 +5,16 @@
|
||||
|
||||
#define TEST_FILENAME "test_logs/async_test.log"
|
||||
|
||||
TEST_CASE("basic async test ", "[async]")
|
||||
{
|
||||
TEST_CASE("basic async test ", "[async]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
|
||||
size_t overrun_counter = 0;
|
||||
size_t queue_size = 128;
|
||||
size_t messages = 256;
|
||||
{
|
||||
auto tp = std::make_shared<spdlog::details::thread_pool>(queue_size, 1);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp, spdlog::async_overflow_policy::block);
|
||||
for (size_t i = 0; i < messages; i++)
|
||||
{
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp,
|
||||
spdlog::async_overflow_policy::block);
|
||||
for (size_t i = 0; i < messages; i++) {
|
||||
logger->info("Hello message #{}", i);
|
||||
}
|
||||
logger->flush();
|
||||
@@ -26,42 +25,39 @@ TEST_CASE("basic async test ", "[async]")
|
||||
REQUIRE(overrun_counter == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("discard policy ", "[async]")
|
||||
{
|
||||
TEST_CASE("discard policy ", "[async]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
|
||||
test_sink->set_delay(std::chrono::milliseconds(1));
|
||||
size_t queue_size = 4;
|
||||
size_t messages = 1024;
|
||||
|
||||
auto tp = std::make_shared<spdlog::details::thread_pool>(queue_size, 1);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp, spdlog::async_overflow_policy::overrun_oldest);
|
||||
for (size_t i = 0; i < messages; i++)
|
||||
{
|
||||
auto logger = std::make_shared<spdlog::async_logger>(
|
||||
"as", test_sink, tp, spdlog::async_overflow_policy::overrun_oldest);
|
||||
for (size_t i = 0; i < messages; i++) {
|
||||
logger->info("Hello message");
|
||||
}
|
||||
REQUIRE(test_sink->msg_counter() < messages);
|
||||
REQUIRE(tp->overrun_counter() > 0);
|
||||
}
|
||||
|
||||
TEST_CASE("discard policy discard_new ", "[async]")
|
||||
{
|
||||
TEST_CASE("discard policy discard_new ", "[async]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
|
||||
test_sink->set_delay(std::chrono::milliseconds(1));
|
||||
size_t queue_size = 4;
|
||||
size_t messages = 1024;
|
||||
|
||||
auto tp = std::make_shared<spdlog::details::thread_pool>(queue_size, 1);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp, spdlog::async_overflow_policy::discard_new);
|
||||
for (size_t i = 0; i < messages; i++)
|
||||
{
|
||||
auto logger = std::make_shared<spdlog::async_logger>(
|
||||
"as", test_sink, tp, spdlog::async_overflow_policy::discard_new);
|
||||
for (size_t i = 0; i < messages; i++) {
|
||||
logger->info("Hello message");
|
||||
}
|
||||
REQUIRE(test_sink->msg_counter() < messages);
|
||||
REQUIRE(tp->discard_counter() > 0);
|
||||
}
|
||||
|
||||
TEST_CASE("discard policy using factory ", "[async]")
|
||||
{
|
||||
TEST_CASE("discard policy using factory ", "[async]") {
|
||||
size_t queue_size = 4;
|
||||
size_t messages = 1024;
|
||||
spdlog::init_thread_pool(queue_size, 1);
|
||||
@@ -70,8 +66,7 @@ TEST_CASE("discard policy using factory ", "[async]")
|
||||
auto test_sink = std::static_pointer_cast<spdlog::sinks::test_sink_mt>(logger->sinks()[0]);
|
||||
test_sink->set_delay(std::chrono::milliseconds(3));
|
||||
|
||||
for (size_t i = 0; i < messages; i++)
|
||||
{
|
||||
for (size_t i = 0; i < messages; i++) {
|
||||
logger->info("Hello message");
|
||||
}
|
||||
|
||||
@@ -79,16 +74,15 @@ TEST_CASE("discard policy using factory ", "[async]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("flush", "[async]")
|
||||
{
|
||||
TEST_CASE("flush", "[async]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
|
||||
size_t queue_size = 256;
|
||||
size_t messages = 256;
|
||||
{
|
||||
auto tp = std::make_shared<spdlog::details::thread_pool>(queue_size, 1);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp, spdlog::async_overflow_policy::block);
|
||||
for (size_t i = 0; i < messages; i++)
|
||||
{
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp,
|
||||
spdlog::async_overflow_policy::block);
|
||||
for (size_t i = 0; i < messages; i++) {
|
||||
logger->info("Hello message #{}", i);
|
||||
}
|
||||
|
||||
@@ -99,8 +93,7 @@ TEST_CASE("flush", "[async]")
|
||||
REQUIRE(test_sink->flush_counter() == 1);
|
||||
}
|
||||
|
||||
TEST_CASE("async periodic flush", "[async]")
|
||||
{
|
||||
TEST_CASE("async periodic flush", "[async]") {
|
||||
|
||||
auto logger = spdlog::create_async<spdlog::sinks::test_sink_mt>("as");
|
||||
auto test_sink = std::static_pointer_cast<spdlog::sinks::test_sink_mt>(logger->sinks()[0]);
|
||||
@@ -112,16 +105,15 @@ TEST_CASE("async periodic flush", "[async]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("tp->wait_empty() ", "[async]")
|
||||
{
|
||||
TEST_CASE("tp->wait_empty() ", "[async]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
|
||||
test_sink->set_delay(std::chrono::milliseconds(5));
|
||||
size_t messages = 100;
|
||||
|
||||
auto tp = std::make_shared<spdlog::details::thread_pool>(messages, 2);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp, spdlog::async_overflow_policy::block);
|
||||
for (size_t i = 0; i < messages; i++)
|
||||
{
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp,
|
||||
spdlog::async_overflow_policy::block);
|
||||
for (size_t i = 0; i < messages; i++) {
|
||||
logger->info("Hello message #{}", i);
|
||||
}
|
||||
logger->flush();
|
||||
@@ -131,30 +123,27 @@ TEST_CASE("tp->wait_empty() ", "[async]")
|
||||
REQUIRE(test_sink->flush_counter() == 1);
|
||||
}
|
||||
|
||||
TEST_CASE("multi threads", "[async]")
|
||||
{
|
||||
TEST_CASE("multi threads", "[async]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
|
||||
size_t queue_size = 128;
|
||||
size_t messages = 256;
|
||||
size_t n_threads = 10;
|
||||
{
|
||||
auto tp = std::make_shared<spdlog::details::thread_pool>(queue_size, 1);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp, spdlog::async_overflow_policy::block);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, tp,
|
||||
spdlog::async_overflow_policy::block);
|
||||
|
||||
std::vector<std::thread> threads;
|
||||
for (size_t i = 0; i < n_threads; i++)
|
||||
{
|
||||
for (size_t i = 0; i < n_threads; i++) {
|
||||
threads.emplace_back([logger, messages] {
|
||||
for (size_t j = 0; j < messages; j++)
|
||||
{
|
||||
for (size_t j = 0; j < messages; j++) {
|
||||
logger->info("Hello message #{}", j);
|
||||
}
|
||||
});
|
||||
logger->flush();
|
||||
}
|
||||
|
||||
for (auto &t : threads)
|
||||
{
|
||||
for (auto &t : threads) {
|
||||
t.join();
|
||||
}
|
||||
}
|
||||
@@ -163,8 +152,7 @@ TEST_CASE("multi threads", "[async]")
|
||||
REQUIRE(test_sink->flush_counter() == n_threads);
|
||||
}
|
||||
|
||||
TEST_CASE("to_file", "[async]")
|
||||
{
|
||||
TEST_CASE("to_file", "[async]") {
|
||||
prepare_logdir();
|
||||
size_t messages = 1024;
|
||||
size_t tp_threads = 1;
|
||||
@@ -172,10 +160,10 @@ TEST_CASE("to_file", "[async]")
|
||||
{
|
||||
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(filename, true);
|
||||
auto tp = std::make_shared<spdlog::details::thread_pool>(messages, tp_threads);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", std::move(file_sink), std::move(tp));
|
||||
auto logger =
|
||||
std::make_shared<spdlog::async_logger>("as", std::move(file_sink), std::move(tp));
|
||||
|
||||
for (size_t j = 0; j < messages; j++)
|
||||
{
|
||||
for (size_t j = 0; j < messages; j++) {
|
||||
logger->info("Hello message #{}", j);
|
||||
}
|
||||
}
|
||||
@@ -186,8 +174,7 @@ TEST_CASE("to_file", "[async]")
|
||||
REQUIRE(ends_with(contents, spdlog::fmt_lib::format("Hello message #1023{}", default_eol)));
|
||||
}
|
||||
|
||||
TEST_CASE("to_file multi-workers", "[async]")
|
||||
{
|
||||
TEST_CASE("to_file multi-workers", "[async]") {
|
||||
prepare_logdir();
|
||||
size_t messages = 1024 * 10;
|
||||
size_t tp_threads = 10;
|
||||
@@ -195,18 +182,17 @@ TEST_CASE("to_file multi-workers", "[async]")
|
||||
{
|
||||
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(filename, true);
|
||||
auto tp = std::make_shared<spdlog::details::thread_pool>(messages, tp_threads);
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", std::move(file_sink), std::move(tp));
|
||||
auto logger =
|
||||
std::make_shared<spdlog::async_logger>("as", std::move(file_sink), std::move(tp));
|
||||
|
||||
for (size_t j = 0; j < messages; j++)
|
||||
{
|
||||
for (size_t j = 0; j < messages; j++) {
|
||||
logger->info("Hello message #{}", j);
|
||||
}
|
||||
}
|
||||
require_message_count(TEST_FILENAME, messages);
|
||||
}
|
||||
|
||||
TEST_CASE("bad_tp", "[async]")
|
||||
{
|
||||
TEST_CASE("bad_tp", "[async]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_mt>();
|
||||
std::shared_ptr<spdlog::details::thread_pool> const empty_tp;
|
||||
auto logger = std::make_shared<spdlog::async_logger>("as", test_sink, empty_tp);
|
||||
|
@@ -2,8 +2,7 @@
|
||||
#include "test_sink.h"
|
||||
#include "spdlog/fmt/bin_to_hex.h"
|
||||
|
||||
TEST_CASE("to_hex", "[to_hex]")
|
||||
{
|
||||
TEST_CASE("to_hex", "[to_hex]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
spdlog::logger oss_logger("oss", oss_sink);
|
||||
@@ -12,11 +11,11 @@ TEST_CASE("to_hex", "[to_hex]")
|
||||
oss_logger.info("{}", spdlog::to_hex(v));
|
||||
|
||||
auto output = oss.str();
|
||||
REQUIRE(ends_with(output, "0000: 09 0a 0b 0c ff ff" + std::string(spdlog::details::os::default_eol)));
|
||||
REQUIRE(ends_with(output,
|
||||
"0000: 09 0a 0b 0c ff ff" + std::string(spdlog::details::os::default_eol)));
|
||||
}
|
||||
|
||||
TEST_CASE("to_hex_upper", "[to_hex]")
|
||||
{
|
||||
TEST_CASE("to_hex_upper", "[to_hex]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
spdlog::logger oss_logger("oss", oss_sink);
|
||||
@@ -25,11 +24,11 @@ TEST_CASE("to_hex_upper", "[to_hex]")
|
||||
oss_logger.info("{:X}", spdlog::to_hex(v));
|
||||
|
||||
auto output = oss.str();
|
||||
REQUIRE(ends_with(output, "0000: 09 0A 0B 0C FF FF" + std::string(spdlog::details::os::default_eol)));
|
||||
REQUIRE(ends_with(output,
|
||||
"0000: 09 0A 0B 0C FF FF" + std::string(spdlog::details::os::default_eol)));
|
||||
}
|
||||
|
||||
TEST_CASE("to_hex_no_delimiter", "[to_hex]")
|
||||
{
|
||||
TEST_CASE("to_hex_no_delimiter", "[to_hex]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
spdlog::logger oss_logger("oss", oss_sink);
|
||||
@@ -38,11 +37,11 @@ TEST_CASE("to_hex_no_delimiter", "[to_hex]")
|
||||
oss_logger.info("{:sX}", spdlog::to_hex(v));
|
||||
|
||||
auto output = oss.str();
|
||||
REQUIRE(ends_with(output, "0000: 090A0B0CFFFF" + std::string(spdlog::details::os::default_eol)));
|
||||
REQUIRE(
|
||||
ends_with(output, "0000: 090A0B0CFFFF" + std::string(spdlog::details::os::default_eol)));
|
||||
}
|
||||
|
||||
TEST_CASE("to_hex_show_ascii", "[to_hex]")
|
||||
{
|
||||
TEST_CASE("to_hex_show_ascii", "[to_hex]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
spdlog::logger oss_logger("oss", oss_sink);
|
||||
@@ -50,11 +49,11 @@ TEST_CASE("to_hex_show_ascii", "[to_hex]")
|
||||
std::vector<unsigned char> v{9, 0xa, 0xb, 0x41, 0xc, 0x4b, 0xff, 0xff};
|
||||
oss_logger.info("{:Xsa}", spdlog::to_hex(v, 8));
|
||||
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4BFFFF ...A.K.." + std::string(spdlog::details::os::default_eol)));
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4BFFFF ...A.K.." +
|
||||
std::string(spdlog::details::os::default_eol)));
|
||||
}
|
||||
|
||||
TEST_CASE("to_hex_different_size_per_line", "[to_hex]")
|
||||
{
|
||||
TEST_CASE("to_hex_different_size_per_line", "[to_hex]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
spdlog::logger oss_logger("oss", oss_sink);
|
||||
@@ -62,22 +61,25 @@ TEST_CASE("to_hex_different_size_per_line", "[to_hex]")
|
||||
std::vector<unsigned char> v{9, 0xa, 0xb, 0x41, 0xc, 0x4b, 0xff, 0xff};
|
||||
|
||||
oss_logger.info("{:Xsa}", spdlog::to_hex(v, 10));
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4BFFFF ...A.K.." + std::string(spdlog::details::os::default_eol)));
|
||||
|
||||
oss_logger.info("{:Xs}", spdlog::to_hex(v, 10));
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4BFFFF" + std::string(spdlog::details::os::default_eol)));
|
||||
|
||||
oss_logger.info("{:Xsa}", spdlog::to_hex(v, 6));
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4B ...A.K" + std::string(spdlog::details::os::default_eol) + "0006: FFFF .." +
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4BFFFF ...A.K.." +
|
||||
std::string(spdlog::details::os::default_eol)));
|
||||
|
||||
oss_logger.info("{:Xs}", spdlog::to_hex(v, 10));
|
||||
REQUIRE(ends_with(oss.str(),
|
||||
"0000: 090A0B410C4BFFFF" + std::string(spdlog::details::os::default_eol)));
|
||||
|
||||
oss_logger.info("{:Xsa}", spdlog::to_hex(v, 6));
|
||||
REQUIRE(ends_with(
|
||||
oss.str(), "0000: 090A0B410C4B ...A.K" + std::string(spdlog::details::os::default_eol) +
|
||||
"0006: FFFF .." + std::string(spdlog::details::os::default_eol)));
|
||||
|
||||
oss_logger.info("{:Xs}", spdlog::to_hex(v, 6));
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4B" + std::string(spdlog::details::os::default_eol) + "0006: FFFF" +
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4B" +
|
||||
std::string(spdlog::details::os::default_eol) + "0006: FFFF" +
|
||||
std::string(spdlog::details::os::default_eol)));
|
||||
}
|
||||
|
||||
TEST_CASE("to_hex_no_ascii", "[to_hex]")
|
||||
{
|
||||
TEST_CASE("to_hex_no_ascii", "[to_hex]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
spdlog::logger oss_logger("oss", oss_sink);
|
||||
@@ -85,9 +87,11 @@ TEST_CASE("to_hex_no_ascii", "[to_hex]")
|
||||
std::vector<unsigned char> v{9, 0xa, 0xb, 0x41, 0xc, 0x4b, 0xff, 0xff};
|
||||
oss_logger.info("{:Xs}", spdlog::to_hex(v, 8));
|
||||
|
||||
REQUIRE(ends_with(oss.str(), "0000: 090A0B410C4BFFFF" + std::string(spdlog::details::os::default_eol)));
|
||||
REQUIRE(ends_with(oss.str(),
|
||||
"0000: 090A0B410C4BFFFF" + std::string(spdlog::details::os::default_eol)));
|
||||
|
||||
oss_logger.info("{:Xsna}", spdlog::to_hex(v, 8));
|
||||
|
||||
REQUIRE(ends_with(oss.str(), "090A0B410C4BFFFF" + std::string(spdlog::details::os::default_eol)));
|
||||
REQUIRE(
|
||||
ends_with(oss.str(), "090A0B410C4BFFFF" + std::string(spdlog::details::os::default_eol)));
|
||||
}
|
||||
|
@@ -9,8 +9,7 @@ using spdlog::cfg::load_argv_levels;
|
||||
using spdlog::cfg::load_env_levels;
|
||||
using spdlog::sinks::test_sink_st;
|
||||
|
||||
TEST_CASE("env", "[cfg]")
|
||||
{
|
||||
TEST_CASE("env", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
auto l1 = spdlog::create<test_sink_st>("l1");
|
||||
#ifdef CATCH_PLATFORM_WINDOWS
|
||||
@@ -24,8 +23,7 @@ TEST_CASE("env", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv1", "[cfg]")
|
||||
{
|
||||
TEST_CASE("argv1", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=warn"};
|
||||
load_argv_levels(2, argv);
|
||||
@@ -34,8 +32,7 @@ TEST_CASE("argv1", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv2", "[cfg]")
|
||||
{
|
||||
TEST_CASE("argv2", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=warn,trace"};
|
||||
load_argv_levels(2, argv);
|
||||
@@ -44,8 +41,7 @@ TEST_CASE("argv2", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::trace);
|
||||
}
|
||||
|
||||
TEST_CASE("argv3", "[cfg]")
|
||||
{
|
||||
TEST_CASE("argv3", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::trace);
|
||||
|
||||
spdlog::drop("l1");
|
||||
@@ -56,8 +52,7 @@ TEST_CASE("argv3", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::trace);
|
||||
}
|
||||
|
||||
TEST_CASE("argv4", "[cfg]")
|
||||
{
|
||||
TEST_CASE("argv4", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=junk"};
|
||||
@@ -66,8 +61,7 @@ TEST_CASE("argv4", "[cfg]")
|
||||
REQUIRE(l1->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv5", "[cfg]")
|
||||
{
|
||||
TEST_CASE("argv5", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", "ignore", "SPDLOG_LEVEL=l1=warn,trace"};
|
||||
@@ -78,8 +72,7 @@ TEST_CASE("argv5", "[cfg]")
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv6", "[cfg]")
|
||||
{
|
||||
TEST_CASE("argv6", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::err);
|
||||
const char *argv[] = {""};
|
||||
load_argv_levels(1, argv);
|
||||
@@ -87,8 +80,7 @@ TEST_CASE("argv6", "[cfg]")
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("argv7", "[cfg]")
|
||||
{
|
||||
TEST_CASE("argv7", "[cfg]") {
|
||||
spdlog::set_level(spdlog::level::err);
|
||||
const char *argv[] = {""};
|
||||
load_argv_levels(0, argv);
|
||||
@@ -96,8 +88,7 @@ TEST_CASE("argv7", "[cfg]")
|
||||
spdlog::set_level(spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test1", "[cfg]")
|
||||
{
|
||||
TEST_CASE("level-not-set-test1", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
const char *argv[] = {"ignore", ""};
|
||||
load_argv_levels(2, argv);
|
||||
@@ -107,8 +98,7 @@ TEST_CASE("level-not-set-test1", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test2", "[cfg]")
|
||||
{
|
||||
TEST_CASE("level-not-set-test2", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace"};
|
||||
@@ -125,8 +115,7 @@ TEST_CASE("level-not-set-test2", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test3", "[cfg]")
|
||||
{
|
||||
TEST_CASE("level-not-set-test3", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace"};
|
||||
@@ -141,8 +130,7 @@ TEST_CASE("level-not-set-test3", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::info);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test4", "[cfg]")
|
||||
{
|
||||
TEST_CASE("level-not-set-test4", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace,warn"};
|
||||
@@ -157,8 +145,7 @@ TEST_CASE("level-not-set-test4", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::warn);
|
||||
}
|
||||
|
||||
TEST_CASE("level-not-set-test5", "[cfg]")
|
||||
{
|
||||
TEST_CASE("level-not-set-test5", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=junk,warn"};
|
||||
@@ -173,8 +160,7 @@ TEST_CASE("level-not-set-test5", "[cfg]")
|
||||
REQUIRE(spdlog::default_logger()->log_level() == spdlog::level::warn);
|
||||
}
|
||||
|
||||
TEST_CASE("restore-to-default", "[cfg]")
|
||||
{
|
||||
TEST_CASE("restore-to-default", "[cfg]") {
|
||||
spdlog::drop("l1");
|
||||
spdlog::drop("l2");
|
||||
const char *argv[] = {"ignore", "SPDLOG_LEVEL=info"};
|
||||
|
@@ -3,15 +3,13 @@
|
||||
|
||||
using q_type = spdlog::details::circular_q<size_t>;
|
||||
|
||||
TEST_CASE("test_size", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_size", "[circular_q]") {
|
||||
const size_t q_size = 4;
|
||||
q_type q(q_size);
|
||||
REQUIRE(q.size() == 0);
|
||||
REQUIRE(q.empty() == true);
|
||||
REQUIRE(q.full() == false);
|
||||
for (size_t i = 0; i < q_size; i++)
|
||||
{
|
||||
for (size_t i = 0; i < q_size; i++) {
|
||||
q.push_back(10);
|
||||
}
|
||||
REQUIRE(q.size() == q_size);
|
||||
@@ -19,13 +17,11 @@ TEST_CASE("test_size", "[circular_q]")
|
||||
REQUIRE(q.size() == q_size);
|
||||
}
|
||||
|
||||
TEST_CASE("test_rolling", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_rolling", "[circular_q]") {
|
||||
const size_t q_size = 4;
|
||||
q_type q(q_size);
|
||||
|
||||
for (size_t i = 0; i < q_size + 2; i++)
|
||||
{
|
||||
for (size_t i = 0; i < q_size + 2; i++) {
|
||||
auto val = i;
|
||||
q.push_back(std::move(val)); // arg to push_back must be r value
|
||||
}
|
||||
@@ -50,8 +46,7 @@ TEST_CASE("test_rolling", "[circular_q]")
|
||||
REQUIRE(q.front() == 6);
|
||||
}
|
||||
|
||||
TEST_CASE("test_empty", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_empty", "[circular_q]") {
|
||||
q_type q1(0);
|
||||
REQUIRE(q1.empty());
|
||||
REQUIRE(q1.full()); // q with capacity 0 is considered full
|
||||
@@ -66,8 +61,7 @@ TEST_CASE("test_empty", "[circular_q]")
|
||||
REQUIRE(q2.empty());
|
||||
}
|
||||
|
||||
TEST_CASE("test_full", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_full", "[circular_q]") {
|
||||
q_type q1(0);
|
||||
REQUIRE(q1.full());
|
||||
|
||||
@@ -81,8 +75,7 @@ TEST_CASE("test_full", "[circular_q]")
|
||||
REQUIRE(q2.full());
|
||||
}
|
||||
|
||||
TEST_CASE("test_operator[]", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_operator[]", "[circular_q]") {
|
||||
q_type q(2);
|
||||
q.push_back(100);
|
||||
q.push_back(200);
|
||||
@@ -90,8 +83,7 @@ TEST_CASE("test_operator[]", "[circular_q]")
|
||||
REQUIRE(q[1] == 200);
|
||||
}
|
||||
|
||||
TEST_CASE("test_operator=", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_operator=", "[circular_q]") {
|
||||
q_type q1(2);
|
||||
q1.push_back(100);
|
||||
q1.push_back(200);
|
||||
@@ -101,20 +93,17 @@ TEST_CASE("test_operator=", "[circular_q]")
|
||||
REQUIRE(q2[1] == 200);
|
||||
}
|
||||
|
||||
TEST_CASE("test_front", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_front", "[circular_q]") {
|
||||
q_type q(2);
|
||||
q.push_back(100);
|
||||
q.push_back(200);
|
||||
REQUIRE(q.front() == 100);
|
||||
}
|
||||
|
||||
TEST_CASE("test_overrun_counter", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_overrun_counter", "[circular_q]") {
|
||||
q_type q(2);
|
||||
REQUIRE(q.overrun_counter() == 0);
|
||||
for (size_t i = 0; i < 10; i++)
|
||||
{
|
||||
for (size_t i = 0; i < 10; i++) {
|
||||
q.push_back(100);
|
||||
}
|
||||
REQUIRE(q.overrun_counter() == 8);
|
||||
@@ -123,8 +112,7 @@ TEST_CASE("test_overrun_counter", "[circular_q]")
|
||||
REQUIRE(q.overrun_counter() == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("test_move", "[circular_q]")
|
||||
{
|
||||
TEST_CASE("test_move", "[circular_q]") {
|
||||
q_type q1(2);
|
||||
q1.push_back(100);
|
||||
q1.push_back(200);
|
||||
|
@@ -1,40 +1,46 @@
|
||||
/*
|
||||
* This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
* This content is released under the MIT License as specified in
|
||||
* https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
*/
|
||||
#include "includes.h"
|
||||
|
||||
using spdlog::details::os::create_dir;
|
||||
using spdlog::details::os::path_exists;
|
||||
|
||||
bool try_create_dir(const spdlog::filename_t &path, const spdlog::filename_t &normalized_path)
|
||||
{
|
||||
bool try_create_dir(const spdlog::filename_t &path, const spdlog::filename_t &normalized_path) {
|
||||
auto rv = create_dir(path);
|
||||
REQUIRE(rv == true);
|
||||
return path_exists(normalized_path);
|
||||
}
|
||||
|
||||
TEST_CASE("create_dir", "[create_dir]")
|
||||
{
|
||||
TEST_CASE("create_dir", "[create_dir]") {
|
||||
prepare_logdir();
|
||||
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1/dir1"), SPDLOG_FILENAME_T("test_logs/dir1/dir1")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1/dir1"), SPDLOG_FILENAME_T("test_logs/dir1/dir1"))); // test existing
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1///dir2//"), SPDLOG_FILENAME_T("test_logs/dir1/dir2")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("./test_logs/dir1/dir3"), SPDLOG_FILENAME_T("test_logs/dir1/dir3")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/../test_logs/dir1/dir4"), SPDLOG_FILENAME_T("test_logs/dir1/dir4")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1/dir1"),
|
||||
SPDLOG_FILENAME_T("test_logs/dir1/dir1")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1/dir1"),
|
||||
SPDLOG_FILENAME_T("test_logs/dir1/dir1"))); // test existing
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/dir1///dir2//"),
|
||||
SPDLOG_FILENAME_T("test_logs/dir1/dir2")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("./test_logs/dir1/dir3"),
|
||||
SPDLOG_FILENAME_T("test_logs/dir1/dir3")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs/../test_logs/dir1/dir4"),
|
||||
SPDLOG_FILENAME_T("test_logs/dir1/dir4")));
|
||||
|
||||
#ifdef WIN32
|
||||
// test backslash folder separator
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\dir1\\dir222"), SPDLOG_FILENAME_T("test_logs\\dir1\\dir222")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\dir1\\dir223\\"), SPDLOG_FILENAME_T("test_logs\\dir1\\dir223\\")));
|
||||
REQUIRE(
|
||||
try_create_dir(SPDLOG_FILENAME_T(".\\test_logs\\dir1\\dir2\\dir99\\..\\dir23"), SPDLOG_FILENAME_T("test_logs\\dir1\\dir2\\dir23")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\..\\test_logs\\dir1\\dir5"), SPDLOG_FILENAME_T("test_logs\\dir1\\dir5")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\dir1\\dir222"),
|
||||
SPDLOG_FILENAME_T("test_logs\\dir1\\dir222")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\dir1\\dir223\\"),
|
||||
SPDLOG_FILENAME_T("test_logs\\dir1\\dir223\\")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T(".\\test_logs\\dir1\\dir2\\dir99\\..\\dir23"),
|
||||
SPDLOG_FILENAME_T("test_logs\\dir1\\dir2\\dir23")));
|
||||
REQUIRE(try_create_dir(SPDLOG_FILENAME_T("test_logs\\..\\test_logs\\dir1\\dir5"),
|
||||
SPDLOG_FILENAME_T("test_logs\\dir1\\dir5")));
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST_CASE("create_invalid_dir", "[create_dir]")
|
||||
{
|
||||
TEST_CASE("create_invalid_dir", "[create_dir]") {
|
||||
REQUIRE(create_dir(SPDLOG_FILENAME_T("")) == false);
|
||||
REQUIRE(create_dir(spdlog::filename_t{}) == false);
|
||||
#ifdef __linux__
|
||||
@@ -42,8 +48,7 @@ TEST_CASE("create_invalid_dir", "[create_dir]")
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST_CASE("dir_name", "[create_dir]")
|
||||
{
|
||||
TEST_CASE("dir_name", "[create_dir]") {
|
||||
using spdlog::details::os::dir_name;
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("")).empty());
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir")).empty());
|
||||
@@ -55,13 +60,16 @@ TEST_CASE("dir_name", "[create_dir]")
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir/file)")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\file.txt)")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir/file)")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\file.txt\)")) == SPDLOG_FILENAME_T(R"(dir\file.txt)"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(dir\file.txt\)")) ==
|
||||
SPDLOG_FILENAME_T(R"(dir\file.txt)"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(\dir\file.txt)")) == SPDLOG_FILENAME_T(R"(\dir)"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(\\dir\file.txt)")) == SPDLOG_FILENAME_T(R"(\\dir)"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(..\file.txt)")) == SPDLOG_FILENAME_T(".."));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(.\file.txt)")) == SPDLOG_FILENAME_T("."));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(c:\\a\b\c\d\file.txt)")) == SPDLOG_FILENAME_T(R"(c:\\a\b\c\d)"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(c://a/b/c/d/file.txt)")) == SPDLOG_FILENAME_T(R"(c://a/b/c/d)"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(c:\\a\b\c\d\file.txt)")) ==
|
||||
SPDLOG_FILENAME_T(R"(c:\\a\b\c\d)"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T(R"(c://a/b/c/d/file.txt)")) ==
|
||||
SPDLOG_FILENAME_T(R"(c://a/b/c/d)"));
|
||||
#endif
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir/")) == SPDLOG_FILENAME_T("dir"));
|
||||
REQUIRE(dir_name(SPDLOG_FILENAME_T("dir///")) == SPDLOG_FILENAME_T("dir//"));
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
* This content is released under the MIT License as specified in
|
||||
* https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
*/
|
||||
#include "includes.h"
|
||||
#include "test_sink.h"
|
||||
@@ -7,16 +8,16 @@
|
||||
#include "spdlog/async.h"
|
||||
#include "spdlog/common.h"
|
||||
|
||||
TEST_CASE("custom_callback_logger", "[custom_callback_logger]")
|
||||
{
|
||||
TEST_CASE("custom_callback_logger", "[custom_callback_logger]") {
|
||||
std::vector<std::string> lines;
|
||||
spdlog::pattern_formatter formatter;
|
||||
auto callback_logger = std::make_shared<spdlog::sinks::callback_sink_st>([&](const spdlog::details::log_msg &msg) {
|
||||
spdlog::memory_buf_t formatted;
|
||||
formatter.format(msg, formatted);
|
||||
auto eol_len = strlen(spdlog::details::os::default_eol);
|
||||
lines.emplace_back(formatted.begin(), formatted.end() - eol_len);
|
||||
});
|
||||
auto callback_logger =
|
||||
std::make_shared<spdlog::sinks::callback_sink_st>([&](const spdlog::details::log_msg &msg) {
|
||||
spdlog::memory_buf_t formatted;
|
||||
formatter.format(msg, formatted);
|
||||
auto eol_len = strlen(spdlog::details::os::default_eol);
|
||||
lines.emplace_back(formatted.begin(), formatted.end() - eol_len);
|
||||
});
|
||||
std::shared_ptr<spdlog::sinks::test_sink_st> test_sink(new spdlog::sinks::test_sink_st);
|
||||
|
||||
spdlog::logger logger("test-callback", {callback_logger, test_sink});
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
* This content is released under the MIT License as specified in
|
||||
* https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
*/
|
||||
#include "includes.h"
|
||||
|
||||
@@ -10,22 +11,20 @@ using filename_memory_buf_t = fmt::basic_memory_buffer<spdlog::filename_t::value
|
||||
#endif
|
||||
|
||||
#ifdef SPDLOG_WCHAR_FILENAMES
|
||||
std::string filename_buf_to_utf8string(const filename_memory_buf_t &w)
|
||||
{
|
||||
std::string filename_buf_to_utf8string(const filename_memory_buf_t &w) {
|
||||
spdlog::memory_buf_t buf;
|
||||
spdlog::details::os::wstr_to_utf8buf(spdlog::wstring_view_t(w.data(), w.size()), buf);
|
||||
return SPDLOG_BUF_TO_STRING(buf);
|
||||
}
|
||||
#else
|
||||
std::string filename_buf_to_utf8string(const filename_memory_buf_t &w)
|
||||
{
|
||||
std::string filename_buf_to_utf8string(const filename_memory_buf_t &w) {
|
||||
return SPDLOG_BUF_TO_STRING(w);
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST_CASE("daily_logger with dateonly calculator", "[daily_logger]")
|
||||
{
|
||||
using sink_type = spdlog::sinks::daily_file_sink<std::mutex, spdlog::sinks::daily_filename_calculator>;
|
||||
TEST_CASE("daily_logger with dateonly calculator", "[daily_logger]") {
|
||||
using sink_type =
|
||||
spdlog::sinks::daily_file_sink<std::mutex, spdlog::sinks::daily_filename_calculator>;
|
||||
|
||||
prepare_logdir();
|
||||
|
||||
@@ -33,12 +32,11 @@ TEST_CASE("daily_logger with dateonly calculator", "[daily_logger]")
|
||||
spdlog::filename_t basename = SPDLOG_FILENAME_T("test_logs/daily_dateonly");
|
||||
std::tm tm = spdlog::details::os::localtime();
|
||||
filename_memory_buf_t w;
|
||||
spdlog::fmt_lib::format_to(
|
||||
std::back_inserter(w), SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}"), basename, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
|
||||
spdlog::fmt_lib::format_to(std::back_inserter(w), SPDLOG_FILENAME_T("{}_{:04d}-{:02d}-{:02d}"),
|
||||
basename, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
|
||||
|
||||
auto logger = spdlog::create<sink_type>("logger", basename, 0, 0);
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
|
||||
logger->info("Test message {}", i);
|
||||
}
|
||||
@@ -47,20 +45,18 @@ TEST_CASE("daily_logger with dateonly calculator", "[daily_logger]")
|
||||
require_message_count(filename_buf_to_utf8string(w), 10);
|
||||
}
|
||||
|
||||
struct custom_daily_file_name_calculator
|
||||
{
|
||||
static spdlog::filename_t calc_filename(const spdlog::filename_t &basename, const tm &now_tm)
|
||||
{
|
||||
struct custom_daily_file_name_calculator {
|
||||
static spdlog::filename_t calc_filename(const spdlog::filename_t &basename, const tm &now_tm) {
|
||||
filename_memory_buf_t w;
|
||||
spdlog::fmt_lib::format_to(std::back_inserter(w), SPDLOG_FILENAME_T("{}{:04d}{:02d}{:02d}"), basename, now_tm.tm_year + 1900,
|
||||
now_tm.tm_mon + 1, now_tm.tm_mday);
|
||||
spdlog::fmt_lib::format_to(std::back_inserter(w), SPDLOG_FILENAME_T("{}{:04d}{:02d}{:02d}"),
|
||||
basename, now_tm.tm_year + 1900, now_tm.tm_mon + 1,
|
||||
now_tm.tm_mday);
|
||||
|
||||
return SPDLOG_BUF_TO_STRING(w);
|
||||
}
|
||||
};
|
||||
|
||||
TEST_CASE("daily_logger with custom calculator", "[daily_logger]")
|
||||
{
|
||||
TEST_CASE("daily_logger with custom calculator", "[daily_logger]") {
|
||||
using sink_type = spdlog::sinks::daily_file_sink<std::mutex, custom_daily_file_name_calculator>;
|
||||
|
||||
prepare_logdir();
|
||||
@@ -69,12 +65,11 @@ TEST_CASE("daily_logger with custom calculator", "[daily_logger]")
|
||||
spdlog::filename_t basename = SPDLOG_FILENAME_T("test_logs/daily_dateonly");
|
||||
std::tm tm = spdlog::details::os::localtime();
|
||||
filename_memory_buf_t w;
|
||||
spdlog::fmt_lib::format_to(
|
||||
std::back_inserter(w), SPDLOG_FILENAME_T("{}{:04d}{:02d}{:02d}"), basename, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
|
||||
spdlog::fmt_lib::format_to(std::back_inserter(w), SPDLOG_FILENAME_T("{}{:04d}{:02d}{:02d}"),
|
||||
basename, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
|
||||
|
||||
auto logger = spdlog::create<sink_type>("logger", basename, 0, 0);
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
logger->info("Test message {}", i);
|
||||
}
|
||||
|
||||
@@ -87,34 +82,33 @@ TEST_CASE("daily_logger with custom calculator", "[daily_logger]")
|
||||
* File name calculations
|
||||
*/
|
||||
|
||||
TEST_CASE("rotating_file_sink::calc_filename1", "[rotating_file_sink]")
|
||||
{
|
||||
auto filename = spdlog::sinks::rotating_file_sink_st::calc_filename(SPDLOG_FILENAME_T("rotated.txt"), 3);
|
||||
TEST_CASE("rotating_file_sink::calc_filename1", "[rotating_file_sink]") {
|
||||
auto filename =
|
||||
spdlog::sinks::rotating_file_sink_st::calc_filename(SPDLOG_FILENAME_T("rotated.txt"), 3);
|
||||
REQUIRE(filename == SPDLOG_FILENAME_T("rotated.3.txt"));
|
||||
}
|
||||
|
||||
TEST_CASE("rotating_file_sink::calc_filename2", "[rotating_file_sink]")
|
||||
{
|
||||
auto filename = spdlog::sinks::rotating_file_sink_st::calc_filename(SPDLOG_FILENAME_T("rotated"), 3);
|
||||
TEST_CASE("rotating_file_sink::calc_filename2", "[rotating_file_sink]") {
|
||||
auto filename =
|
||||
spdlog::sinks::rotating_file_sink_st::calc_filename(SPDLOG_FILENAME_T("rotated"), 3);
|
||||
REQUIRE(filename == SPDLOG_FILENAME_T("rotated.3"));
|
||||
}
|
||||
|
||||
TEST_CASE("rotating_file_sink::calc_filename3", "[rotating_file_sink]")
|
||||
{
|
||||
auto filename = spdlog::sinks::rotating_file_sink_st::calc_filename(SPDLOG_FILENAME_T("rotated.txt"), 0);
|
||||
TEST_CASE("rotating_file_sink::calc_filename3", "[rotating_file_sink]") {
|
||||
auto filename =
|
||||
spdlog::sinks::rotating_file_sink_st::calc_filename(SPDLOG_FILENAME_T("rotated.txt"), 0);
|
||||
REQUIRE(filename == SPDLOG_FILENAME_T("rotated.txt"));
|
||||
}
|
||||
|
||||
// regex supported only from gcc 4.9 and above
|
||||
#if defined(_MSC_VER) || !(__GNUC__ <= 4 && __GNUC_MINOR__ < 9)
|
||||
|
||||
# include <regex>
|
||||
#include <regex>
|
||||
|
||||
TEST_CASE("daily_file_sink::daily_filename_calculator", "[daily_file_sink]")
|
||||
{
|
||||
TEST_CASE("daily_file_sink::daily_filename_calculator", "[daily_file_sink]") {
|
||||
// daily_YYYY-MM-DD_hh-mm.txt
|
||||
auto filename =
|
||||
spdlog::sinks::daily_filename_calculator::calc_filename(SPDLOG_FILENAME_T("daily.txt"), spdlog::details::os::localtime());
|
||||
auto filename = spdlog::sinks::daily_filename_calculator::calc_filename(
|
||||
SPDLOG_FILENAME_T("daily.txt"), spdlog::details::os::localtime());
|
||||
// date regex based on https://www.regular-expressions.info/dates.html
|
||||
std::basic_regex<spdlog::filename_t::value_type> re(
|
||||
SPDLOG_FILENAME_T(R"(^daily_(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])\.txt$)"));
|
||||
@@ -123,27 +117,26 @@ TEST_CASE("daily_file_sink::daily_filename_calculator", "[daily_file_sink]")
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST_CASE("daily_file_sink::daily_filename_format_calculator", "[daily_file_sink]")
|
||||
{
|
||||
TEST_CASE("daily_file_sink::daily_filename_format_calculator", "[daily_file_sink]") {
|
||||
std::tm tm = spdlog::details::os::localtime();
|
||||
// example-YYYY-MM-DD.log
|
||||
auto filename = spdlog::sinks::daily_filename_format_calculator::calc_filename(SPDLOG_FILENAME_T("example-%Y-%m-%d.log"), tm);
|
||||
auto filename = spdlog::sinks::daily_filename_format_calculator::calc_filename(
|
||||
SPDLOG_FILENAME_T("example-%Y-%m-%d.log"), tm);
|
||||
|
||||
REQUIRE(filename ==
|
||||
spdlog::fmt_lib::format(SPDLOG_FILENAME_T("example-{:04d}-{:02d}-{:02d}.log"), tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday));
|
||||
spdlog::fmt_lib::format(SPDLOG_FILENAME_T("example-{:04d}-{:02d}-{:02d}.log"),
|
||||
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday));
|
||||
}
|
||||
|
||||
/* Test removal of old files */
|
||||
static spdlog::details::log_msg create_msg(std::chrono::seconds offset)
|
||||
{
|
||||
static spdlog::details::log_msg create_msg(std::chrono::seconds offset) {
|
||||
using spdlog::log_clock;
|
||||
spdlog::details::log_msg msg{"test", spdlog::level::info, "Hello Message"};
|
||||
msg.time = log_clock::now() + offset;
|
||||
return msg;
|
||||
}
|
||||
|
||||
static void test_rotate(int days_to_run, uint16_t max_days, uint16_t expected_n_files)
|
||||
{
|
||||
static void test_rotate(int days_to_run, uint16_t max_days, uint16_t expected_n_files) {
|
||||
using spdlog::log_clock;
|
||||
using spdlog::details::log_msg;
|
||||
using spdlog::sinks::daily_file_sink_st;
|
||||
@@ -155,8 +148,7 @@ static void test_rotate(int days_to_run, uint16_t max_days, uint16_t expected_n_
|
||||
|
||||
// simulate messages with 24 intervals
|
||||
|
||||
for (int i = 0; i < days_to_run; i++)
|
||||
{
|
||||
for (int i = 0; i < days_to_run; i++) {
|
||||
auto offset = std::chrono::seconds{24 * 3600 * i};
|
||||
sink.log(create_msg(offset));
|
||||
}
|
||||
@@ -164,8 +156,7 @@ static void test_rotate(int days_to_run, uint16_t max_days, uint16_t expected_n_
|
||||
REQUIRE(count_files("test_logs") == static_cast<size_t>(expected_n_files));
|
||||
}
|
||||
|
||||
TEST_CASE("daily_logger rotate", "[daily_file_sink]")
|
||||
{
|
||||
TEST_CASE("daily_logger rotate", "[daily_file_sink]") {
|
||||
int days_to_run = 1;
|
||||
test_rotate(days_to_run, 0, 1);
|
||||
test_rotate(days_to_run, 1, 1);
|
||||
|
@@ -2,8 +2,7 @@
|
||||
#include "spdlog/sinks/dup_filter_sink.h"
|
||||
#include "test_sink.h"
|
||||
|
||||
TEST_CASE("dup_filter_test1", "[dup_filter_sink]")
|
||||
{
|
||||
TEST_CASE("dup_filter_test1", "[dup_filter_sink]") {
|
||||
using spdlog::sinks::dup_filter_sink_st;
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
|
||||
@@ -11,16 +10,14 @@ TEST_CASE("dup_filter_test1", "[dup_filter_sink]")
|
||||
auto test_sink = std::make_shared<test_sink_mt>();
|
||||
dup_sink.add_sink(test_sink);
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
for (int i = 0; i < 10; i++) {
|
||||
dup_sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "message1"});
|
||||
}
|
||||
|
||||
REQUIRE(test_sink->msg_counter() == 1);
|
||||
}
|
||||
|
||||
TEST_CASE("dup_filter_test2", "[dup_filter_sink]")
|
||||
{
|
||||
TEST_CASE("dup_filter_test2", "[dup_filter_sink]") {
|
||||
using spdlog::sinks::dup_filter_sink_st;
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
|
||||
@@ -28,8 +25,7 @@ TEST_CASE("dup_filter_test2", "[dup_filter_sink]")
|
||||
auto test_sink = std::make_shared<test_sink_mt>();
|
||||
dup_sink.add_sink(test_sink);
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
for (int i = 0; i < 10; i++) {
|
||||
dup_sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "message1"});
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
}
|
||||
@@ -37,8 +33,7 @@ TEST_CASE("dup_filter_test2", "[dup_filter_sink]")
|
||||
REQUIRE(test_sink->msg_counter() == 10);
|
||||
}
|
||||
|
||||
TEST_CASE("dup_filter_test3", "[dup_filter_sink]")
|
||||
{
|
||||
TEST_CASE("dup_filter_test3", "[dup_filter_sink]") {
|
||||
using spdlog::sinks::dup_filter_sink_st;
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
|
||||
@@ -46,8 +41,7 @@ TEST_CASE("dup_filter_test3", "[dup_filter_sink]")
|
||||
auto test_sink = std::make_shared<test_sink_mt>();
|
||||
dup_sink.add_sink(test_sink);
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
for (int i = 0; i < 10; i++) {
|
||||
dup_sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "message1"});
|
||||
dup_sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "message2"});
|
||||
}
|
||||
@@ -55,8 +49,7 @@ TEST_CASE("dup_filter_test3", "[dup_filter_sink]")
|
||||
REQUIRE(test_sink->msg_counter() == 20);
|
||||
}
|
||||
|
||||
TEST_CASE("dup_filter_test4", "[dup_filter_sink]")
|
||||
{
|
||||
TEST_CASE("dup_filter_test4", "[dup_filter_sink]") {
|
||||
using spdlog::sinks::dup_filter_sink_mt;
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
|
||||
@@ -70,8 +63,7 @@ TEST_CASE("dup_filter_test4", "[dup_filter_sink]")
|
||||
REQUIRE(test_sink->msg_counter() == 2);
|
||||
}
|
||||
|
||||
TEST_CASE("dup_filter_test5", "[dup_filter_sink]")
|
||||
{
|
||||
TEST_CASE("dup_filter_test5", "[dup_filter_sink]") {
|
||||
using spdlog::sinks::dup_filter_sink_mt;
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
|
||||
@@ -85,6 +77,7 @@ TEST_CASE("dup_filter_test5", "[dup_filter_sink]")
|
||||
dup_sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "message1"});
|
||||
dup_sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "message2"});
|
||||
|
||||
REQUIRE(test_sink->msg_counter() == 3); // skip 2 messages but log the "skipped.." message before message2
|
||||
REQUIRE(test_sink->msg_counter() ==
|
||||
3); // skip 2 messages but log the "skipped.." message before message2
|
||||
REQUIRE(test_sink->lines()[1] == "Skipped 2 duplicate messages..");
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
* This content is released under the MIT License as specified in
|
||||
* https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
*/
|
||||
#include "includes.h"
|
||||
|
||||
@@ -8,25 +9,18 @@
|
||||
#define SIMPLE_LOG "test_logs/simple_log.txt"
|
||||
#define SIMPLE_ASYNC_LOG "test_logs/simple_async_log.txt"
|
||||
|
||||
class failing_sink : public spdlog::sinks::base_sink<std::mutex>
|
||||
{
|
||||
class failing_sink : public spdlog::sinks::base_sink<std::mutex> {
|
||||
protected:
|
||||
void sink_it_(const spdlog::details::log_msg &) final
|
||||
{
|
||||
void sink_it_(const spdlog::details::log_msg &) final {
|
||||
throw std::runtime_error("some error happened during log");
|
||||
}
|
||||
|
||||
void flush_() final
|
||||
{
|
||||
throw std::runtime_error("some error happened during flush");
|
||||
}
|
||||
void flush_() final { throw std::runtime_error("some error happened during flush"); }
|
||||
};
|
||||
struct custom_ex
|
||||
{};
|
||||
struct custom_ex {};
|
||||
|
||||
#if !defined(SPDLOG_USE_STD_FORMAT) // std formt doesn't fully support runtime format strings
|
||||
TEST_CASE("default_error_handler", "[errors]")
|
||||
{
|
||||
TEST_CASE("default_error_handler", "[errors]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
|
||||
|
||||
@@ -40,8 +34,7 @@ TEST_CASE("default_error_handler", "[errors]")
|
||||
REQUIRE(count_lines(SIMPLE_LOG) == 1);
|
||||
}
|
||||
|
||||
TEST_CASE("custom_error_handler", "[errors]")
|
||||
{
|
||||
TEST_CASE("custom_error_handler", "[errors]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
|
||||
auto logger = spdlog::create<spdlog::sinks::basic_file_sink_mt>("logger", filename, true);
|
||||
@@ -55,16 +48,14 @@ TEST_CASE("custom_error_handler", "[errors]")
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST_CASE("default_error_handler2", "[errors]")
|
||||
{
|
||||
TEST_CASE("default_error_handler2", "[errors]") {
|
||||
spdlog::drop_all();
|
||||
auto logger = spdlog::create<failing_sink>("failed_logger");
|
||||
logger->set_error_handler([=](const std::string &) { throw custom_ex(); });
|
||||
REQUIRE_THROWS_AS(logger->info("Some message"), custom_ex);
|
||||
}
|
||||
|
||||
TEST_CASE("flush_error_handler", "[errors]")
|
||||
{
|
||||
TEST_CASE("flush_error_handler", "[errors]") {
|
||||
spdlog::drop_all();
|
||||
auto logger = spdlog::create<failing_sink>("failed_logger");
|
||||
logger->set_error_handler([=](const std::string &) { throw custom_ex(); });
|
||||
@@ -72,19 +63,18 @@ TEST_CASE("flush_error_handler", "[errors]")
|
||||
}
|
||||
|
||||
#if !defined(SPDLOG_USE_STD_FORMAT) // std formt doesn't fully support runtime format strings
|
||||
TEST_CASE("async_error_handler", "[errors]")
|
||||
{
|
||||
TEST_CASE("async_error_handler", "[errors]") {
|
||||
prepare_logdir();
|
||||
std::string err_msg("log failed with some msg");
|
||||
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_ASYNC_LOG);
|
||||
{
|
||||
spdlog::init_thread_pool(128, 1);
|
||||
auto logger = spdlog::create_async<spdlog::sinks::basic_file_sink_mt>("logger", filename, true);
|
||||
auto logger =
|
||||
spdlog::create_async<spdlog::sinks::basic_file_sink_mt>("logger", filename, true);
|
||||
logger->set_error_handler([=](const std::string &) {
|
||||
std::ofstream ofs("test_logs/custom_err.txt");
|
||||
if (!ofs)
|
||||
{
|
||||
if (!ofs) {
|
||||
throw std::runtime_error("Failed open test_logs/custom_err.txt");
|
||||
}
|
||||
ofs << err_msg;
|
||||
@@ -101,8 +91,7 @@ TEST_CASE("async_error_handler", "[errors]")
|
||||
#endif
|
||||
|
||||
// Make sure async error handler is executed
|
||||
TEST_CASE("async_error_handler2", "[errors]")
|
||||
{
|
||||
TEST_CASE("async_error_handler2", "[errors]") {
|
||||
prepare_logdir();
|
||||
std::string err_msg("This is async handler error message");
|
||||
{
|
||||
|
@@ -1,26 +1,25 @@
|
||||
#if _WIN32
|
||||
|
||||
# include "includes.h"
|
||||
# include "test_sink.h"
|
||||
#include "includes.h"
|
||||
#include "test_sink.h"
|
||||
|
||||
# include "spdlog/sinks/win_eventlog_sink.h"
|
||||
#include "spdlog/sinks/win_eventlog_sink.h"
|
||||
|
||||
static const LPCSTR TEST_SOURCE = "spdlog_test";
|
||||
|
||||
static void test_single_print(std::function<void(std::string const &)> do_log, std::string const &expected_contents, WORD expected_ev_type)
|
||||
{
|
||||
static void test_single_print(std::function<void(std::string const &)> do_log,
|
||||
std::string const &expected_contents,
|
||||
WORD expected_ev_type) {
|
||||
using namespace std::chrono;
|
||||
do_log(expected_contents);
|
||||
const auto expected_time_generated = duration_cast<seconds>(system_clock::now().time_since_epoch()).count();
|
||||
const auto expected_time_generated =
|
||||
duration_cast<seconds>(system_clock::now().time_since_epoch()).count();
|
||||
|
||||
struct handle_t
|
||||
{
|
||||
struct handle_t {
|
||||
HANDLE handle_;
|
||||
|
||||
~handle_t()
|
||||
{
|
||||
if (handle_)
|
||||
{
|
||||
~handle_t() {
|
||||
if (handle_) {
|
||||
REQUIRE(CloseEventLog(handle_));
|
||||
}
|
||||
}
|
||||
@@ -29,16 +28,16 @@ static void test_single_print(std::function<void(std::string const &)> do_log, s
|
||||
REQUIRE(event_log.handle_);
|
||||
|
||||
DWORD read_bytes{}, size_needed{};
|
||||
auto ok = ::ReadEventLogA(
|
||||
event_log.handle_, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_BACKWARDS_READ, 0, &read_bytes, 0, &read_bytes, &size_needed);
|
||||
auto ok = ::ReadEventLogA(event_log.handle_, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_BACKWARDS_READ,
|
||||
0, &read_bytes, 0, &read_bytes, &size_needed);
|
||||
REQUIRE(!ok);
|
||||
REQUIRE(::GetLastError() == ERROR_INSUFFICIENT_BUFFER);
|
||||
|
||||
std::vector<char> record_buffer(size_needed);
|
||||
PEVENTLOGRECORD record = (PEVENTLOGRECORD)record_buffer.data();
|
||||
|
||||
ok = ::ReadEventLogA(
|
||||
event_log.handle_, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_BACKWARDS_READ, 0, record, size_needed, &read_bytes, &size_needed);
|
||||
ok = ::ReadEventLogA(event_log.handle_, EVENTLOG_SEQUENTIAL_READ | EVENTLOG_BACKWARDS_READ, 0,
|
||||
record, size_needed, &read_bytes, &size_needed);
|
||||
REQUIRE(ok);
|
||||
|
||||
REQUIRE(record->NumStrings == 1);
|
||||
@@ -49,8 +48,7 @@ static void test_single_print(std::function<void(std::string const &)> do_log, s
|
||||
REQUIRE(message_in_log == expected_contents + spdlog::details::os::default_eol);
|
||||
}
|
||||
|
||||
TEST_CASE("eventlog", "[eventlog]")
|
||||
{
|
||||
TEST_CASE("eventlog", "[eventlog]") {
|
||||
using namespace spdlog;
|
||||
|
||||
auto test_sink = std::make_shared<sinks::win_eventlog_sink_mt>(TEST_SOURCE);
|
||||
@@ -60,12 +58,18 @@ TEST_CASE("eventlog", "[eventlog]")
|
||||
|
||||
test_sink->set_pattern("%v");
|
||||
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.trace(msg); }, "my trace message", EVENTLOG_SUCCESS);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.debug(msg); }, "my debug message", EVENTLOG_SUCCESS);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.info(msg); }, "my info message", EVENTLOG_INFORMATION_TYPE);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.warn(msg); }, "my warn message", EVENTLOG_WARNING_TYPE);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.error(msg); }, "my error message", EVENTLOG_ERROR_TYPE);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.critical(msg); }, "my critical message", EVENTLOG_ERROR_TYPE);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.trace(msg); },
|
||||
"my trace message", EVENTLOG_SUCCESS);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.debug(msg); },
|
||||
"my debug message", EVENTLOG_SUCCESS);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.info(msg); },
|
||||
"my info message", EVENTLOG_INFORMATION_TYPE);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.warn(msg); },
|
||||
"my warn message", EVENTLOG_WARNING_TYPE);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.error(msg); },
|
||||
"my error message", EVENTLOG_ERROR_TYPE);
|
||||
test_single_print([&test_logger](std::string const &msg) { test_logger.critical(msg); },
|
||||
"my critical message", EVENTLOG_ERROR_TYPE);
|
||||
}
|
||||
|
||||
#endif //_WIN32
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
* This content is released under the MIT License as specified in
|
||||
* https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
*/
|
||||
#include "includes.h"
|
||||
|
||||
@@ -7,16 +8,14 @@
|
||||
|
||||
using spdlog::details::file_helper;
|
||||
|
||||
static void write_with_helper(file_helper &helper, size_t howmany)
|
||||
{
|
||||
static void write_with_helper(file_helper &helper, size_t howmany) {
|
||||
spdlog::memory_buf_t formatted;
|
||||
spdlog::fmt_lib::format_to(std::back_inserter(formatted), "{}", std::string(howmany, '1'));
|
||||
helper.write(formatted);
|
||||
helper.flush();
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_filename", "[file_helper::filename()]")
|
||||
{
|
||||
TEST_CASE("file_helper_filename", "[file_helper::filename()]") {
|
||||
prepare_logdir();
|
||||
|
||||
file_helper helper;
|
||||
@@ -25,8 +24,7 @@ TEST_CASE("file_helper_filename", "[file_helper::filename()]")
|
||||
REQUIRE(helper.filename() == target_filename);
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_size", "[file_helper::size()]")
|
||||
{
|
||||
TEST_CASE("file_helper_size", "[file_helper::size()]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t target_filename = SPDLOG_FILENAME_T(TEST_FILENAME);
|
||||
size_t expected_size = 123;
|
||||
@@ -39,8 +37,7 @@ TEST_CASE("file_helper_size", "[file_helper::size()]")
|
||||
REQUIRE(get_filesize(TEST_FILENAME) == expected_size);
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_reopen", "[file_helper::reopen()]")
|
||||
{
|
||||
TEST_CASE("file_helper_reopen", "[file_helper::reopen()]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t target_filename = SPDLOG_FILENAME_T(TEST_FILENAME);
|
||||
file_helper helper;
|
||||
@@ -51,8 +48,7 @@ TEST_CASE("file_helper_reopen", "[file_helper::reopen()]")
|
||||
REQUIRE(helper.size() == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_reopen2", "[file_helper::reopen(false)]")
|
||||
{
|
||||
TEST_CASE("file_helper_reopen2", "[file_helper::reopen(false)]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t target_filename = SPDLOG_FILENAME_T(TEST_FILENAME);
|
||||
size_t expected_size = 14;
|
||||
@@ -64,9 +60,9 @@ TEST_CASE("file_helper_reopen2", "[file_helper::reopen(false)]")
|
||||
REQUIRE(helper.size() == expected_size);
|
||||
}
|
||||
|
||||
static void test_split_ext(const spdlog::filename_t::value_type *fname, const spdlog::filename_t::value_type *expect_base,
|
||||
const spdlog::filename_t::value_type *expect_ext)
|
||||
{
|
||||
static void test_split_ext(const spdlog::filename_t::value_type *fname,
|
||||
const spdlog::filename_t::value_type *expect_base,
|
||||
const spdlog::filename_t::value_type *expect_ext) {
|
||||
spdlog::filename_t filename(fname);
|
||||
spdlog::filename_t expected_base(expect_base);
|
||||
spdlog::filename_t expected_ext(expect_ext);
|
||||
@@ -78,37 +74,43 @@ static void test_split_ext(const spdlog::filename_t::value_type *fname, const sp
|
||||
REQUIRE(ext == expected_ext);
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_split_by_extension", "[file_helper::split_by_extension()]")
|
||||
{
|
||||
test_split_ext(SPDLOG_FILENAME_T("mylog.txt"), SPDLOG_FILENAME_T("mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T(".mylog.txt"), SPDLOG_FILENAME_T(".mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
TEST_CASE("file_helper_split_by_extension", "[file_helper::split_by_extension()]") {
|
||||
test_split_ext(SPDLOG_FILENAME_T("mylog.txt"), SPDLOG_FILENAME_T("mylog"),
|
||||
SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T(".mylog.txt"), SPDLOG_FILENAME_T(".mylog"),
|
||||
SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T(".mylog"), SPDLOG_FILENAME_T(".mylog"), SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/aaa/bb.d/mylog"), SPDLOG_FILENAME_T("/aaa/bb.d/mylog"), SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/aaa/bb.d/mylog.txt"), SPDLOG_FILENAME_T("/aaa/bb.d/mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("aaa/bbb/ccc/mylog.txt"), SPDLOG_FILENAME_T("aaa/bbb/ccc/mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("aaa/bbb/ccc/mylog."), SPDLOG_FILENAME_T("aaa/bbb/ccc/mylog."), SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("aaa/bbb/ccc/.mylog.txt"), SPDLOG_FILENAME_T("aaa/bbb/ccc/.mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/aaa/bbb/ccc/mylog.txt"), SPDLOG_FILENAME_T("/aaa/bbb/ccc/mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/aaa/bbb/ccc/.mylog"), SPDLOG_FILENAME_T("/aaa/bbb/ccc/.mylog"), SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("../mylog.txt"), SPDLOG_FILENAME_T("../mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T(".././mylog.txt"), SPDLOG_FILENAME_T(".././mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T(".././mylog.txt/xxx"), SPDLOG_FILENAME_T(".././mylog.txt/xxx"), SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/mylog.txt"), SPDLOG_FILENAME_T("/mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("//mylog.txt"), SPDLOG_FILENAME_T("//mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/aaa/bb.d/mylog"), SPDLOG_FILENAME_T("/aaa/bb.d/mylog"),
|
||||
SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/aaa/bb.d/mylog.txt"), SPDLOG_FILENAME_T("/aaa/bb.d/mylog"),
|
||||
SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("aaa/bbb/ccc/mylog.txt"),
|
||||
SPDLOG_FILENAME_T("aaa/bbb/ccc/mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("aaa/bbb/ccc/mylog."), SPDLOG_FILENAME_T("aaa/bbb/ccc/mylog."),
|
||||
SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("aaa/bbb/ccc/.mylog.txt"),
|
||||
SPDLOG_FILENAME_T("aaa/bbb/ccc/.mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/aaa/bbb/ccc/mylog.txt"),
|
||||
SPDLOG_FILENAME_T("/aaa/bbb/ccc/mylog"), SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/aaa/bbb/ccc/.mylog"),
|
||||
SPDLOG_FILENAME_T("/aaa/bbb/ccc/.mylog"), SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("../mylog.txt"), SPDLOG_FILENAME_T("../mylog"),
|
||||
SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T(".././mylog.txt"), SPDLOG_FILENAME_T(".././mylog"),
|
||||
SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T(".././mylog.txt/xxx"), SPDLOG_FILENAME_T(".././mylog.txt/xxx"),
|
||||
SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("/mylog.txt"), SPDLOG_FILENAME_T("/mylog"),
|
||||
SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T("//mylog.txt"), SPDLOG_FILENAME_T("//mylog"),
|
||||
SPDLOG_FILENAME_T(".txt"));
|
||||
test_split_ext(SPDLOG_FILENAME_T(""), SPDLOG_FILENAME_T(""), SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("."), SPDLOG_FILENAME_T("."), SPDLOG_FILENAME_T(""));
|
||||
test_split_ext(SPDLOG_FILENAME_T("..txt"), SPDLOG_FILENAME_T("."), SPDLOG_FILENAME_T(".txt"));
|
||||
}
|
||||
|
||||
TEST_CASE("file_event_handlers", "[file_helper]")
|
||||
{
|
||||
enum class flags
|
||||
{
|
||||
before_open,
|
||||
after_open,
|
||||
before_close,
|
||||
after_close
|
||||
};
|
||||
TEST_CASE("file_event_handlers", "[file_helper]") {
|
||||
enum class flags { before_open, after_open, before_close, after_close };
|
||||
prepare_logdir();
|
||||
|
||||
spdlog::filename_t test_filename = SPDLOG_FILENAME_T(TEST_FILENAME);
|
||||
@@ -155,8 +157,7 @@ TEST_CASE("file_event_handlers", "[file_helper]")
|
||||
REQUIRE(file_contents(TEST_FILENAME) == "after_open\nbefore_close\n");
|
||||
}
|
||||
|
||||
TEST_CASE("file_helper_open", "[file_helper]")
|
||||
{
|
||||
TEST_CASE("file_helper_open", "[file_helper]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t target_filename = SPDLOG_FILENAME_T(TEST_FILENAME);
|
||||
file_helper helper;
|
||||
|
@@ -1,13 +1,13 @@
|
||||
/*
|
||||
* This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
* This content is released under the MIT License as specified in
|
||||
* https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
*/
|
||||
#include "includes.h"
|
||||
|
||||
#define SIMPLE_LOG "test_logs/simple_log"
|
||||
#define ROTATING_LOG "test_logs/rotating_log"
|
||||
|
||||
TEST_CASE("simple_file_logger", "[simple_logger]")
|
||||
{
|
||||
TEST_CASE("simple_file_logger", "[simple_logger]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
|
||||
|
||||
@@ -20,11 +20,11 @@ TEST_CASE("simple_file_logger", "[simple_logger]")
|
||||
logger->flush();
|
||||
require_message_count(SIMPLE_LOG, 2);
|
||||
using spdlog::details::os::default_eol;
|
||||
REQUIRE(file_contents(SIMPLE_LOG) == spdlog::fmt_lib::format("Test message 1{}Test message 2{}", default_eol, default_eol));
|
||||
REQUIRE(file_contents(SIMPLE_LOG) ==
|
||||
spdlog::fmt_lib::format("Test message 1{}Test message 2{}", default_eol, default_eol));
|
||||
}
|
||||
|
||||
TEST_CASE("flush_on", "[flush_on]")
|
||||
{
|
||||
TEST_CASE("flush_on", "[flush_on]") {
|
||||
prepare_logdir();
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(SIMPLE_LOG);
|
||||
|
||||
@@ -41,18 +41,17 @@ TEST_CASE("flush_on", "[flush_on]")
|
||||
require_message_count(SIMPLE_LOG, 3);
|
||||
using spdlog::details::os::default_eol;
|
||||
REQUIRE(file_contents(SIMPLE_LOG) ==
|
||||
spdlog::fmt_lib::format("Should not be flushed{}Test message 1{}Test message 2{}", default_eol, default_eol, default_eol));
|
||||
spdlog::fmt_lib::format("Should not be flushed{}Test message 1{}Test message 2{}",
|
||||
default_eol, default_eol, default_eol));
|
||||
}
|
||||
|
||||
TEST_CASE("rotating_file_logger1", "[rotating_logger]")
|
||||
{
|
||||
TEST_CASE("rotating_file_logger1", "[rotating_logger]") {
|
||||
prepare_logdir();
|
||||
size_t max_size = 1024 * 10;
|
||||
spdlog::filename_t basename = SPDLOG_FILENAME_T(ROTATING_LOG);
|
||||
auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 0);
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
logger->info("Test message {}", i);
|
||||
}
|
||||
|
||||
@@ -60,8 +59,7 @@ TEST_CASE("rotating_file_logger1", "[rotating_logger]")
|
||||
require_message_count(ROTATING_LOG, 10);
|
||||
}
|
||||
|
||||
TEST_CASE("rotating_file_logger2", "[rotating_logger]")
|
||||
{
|
||||
TEST_CASE("rotating_file_logger2", "[rotating_logger]") {
|
||||
prepare_logdir();
|
||||
size_t max_size = 1024 * 10;
|
||||
spdlog::filename_t basename = SPDLOG_FILENAME_T(ROTATING_LOG);
|
||||
@@ -69,8 +67,7 @@ TEST_CASE("rotating_file_logger2", "[rotating_logger]")
|
||||
{
|
||||
// make an initial logger to create the first output file
|
||||
auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 2, true);
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
logger->info("Test message {}", i);
|
||||
}
|
||||
// drop causes the logger destructor to be called, which is required so the
|
||||
@@ -79,8 +76,7 @@ TEST_CASE("rotating_file_logger2", "[rotating_logger]")
|
||||
}
|
||||
|
||||
auto logger = spdlog::rotating_logger_mt("logger", basename, max_size, 2, true);
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
logger->info("Test message {}", i);
|
||||
}
|
||||
|
||||
@@ -88,8 +84,7 @@ TEST_CASE("rotating_file_logger2", "[rotating_logger]")
|
||||
|
||||
require_message_count(ROTATING_LOG, 10);
|
||||
|
||||
for (int i = 0; i < 1000; i++)
|
||||
{
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
|
||||
logger->info("Test message {}", i);
|
||||
}
|
||||
@@ -100,10 +95,10 @@ TEST_CASE("rotating_file_logger2", "[rotating_logger]")
|
||||
}
|
||||
|
||||
// test that passing max_size=0 throws
|
||||
TEST_CASE("rotating_file_logger3", "[rotating_logger]")
|
||||
{
|
||||
TEST_CASE("rotating_file_logger3", "[rotating_logger]") {
|
||||
prepare_logdir();
|
||||
size_t max_size = 0;
|
||||
spdlog::filename_t basename = SPDLOG_FILENAME_T(ROTATING_LOG);
|
||||
REQUIRE_THROWS_AS(spdlog::rotating_logger_mt("logger", basename, max_size, 0), spdlog::spdlog_ex);
|
||||
REQUIRE_THROWS_AS(spdlog::rotating_logger_mt("logger", basename, max_size, 0),
|
||||
spdlog::spdlog_ex);
|
||||
}
|
||||
|
@@ -4,40 +4,35 @@
|
||||
using spdlog::memory_buf_t;
|
||||
using spdlog::details::to_string_view;
|
||||
|
||||
void test_pad2(int n, const char *expected)
|
||||
{
|
||||
void test_pad2(int n, const char *expected) {
|
||||
memory_buf_t buf;
|
||||
spdlog::details::fmt_helper::pad2(n, buf);
|
||||
|
||||
REQUIRE(to_string_view(buf) == expected);
|
||||
}
|
||||
|
||||
void test_pad3(uint32_t n, const char *expected)
|
||||
{
|
||||
void test_pad3(uint32_t n, const char *expected) {
|
||||
memory_buf_t buf;
|
||||
spdlog::details::fmt_helper::pad3(n, buf);
|
||||
|
||||
REQUIRE(to_string_view(buf) == expected);
|
||||
}
|
||||
|
||||
void test_pad6(std::size_t n, const char *expected)
|
||||
{
|
||||
void test_pad6(std::size_t n, const char *expected) {
|
||||
memory_buf_t buf;
|
||||
spdlog::details::fmt_helper::pad6(n, buf);
|
||||
|
||||
REQUIRE(to_string_view(buf) == expected);
|
||||
}
|
||||
|
||||
void test_pad9(std::size_t n, const char *expected)
|
||||
{
|
||||
void test_pad9(std::size_t n, const char *expected) {
|
||||
memory_buf_t buf;
|
||||
spdlog::details::fmt_helper::pad9(n, buf);
|
||||
|
||||
REQUIRE(to_string_view(buf) == expected);
|
||||
}
|
||||
|
||||
TEST_CASE("pad2", "[fmt_helper]")
|
||||
{
|
||||
TEST_CASE("pad2", "[fmt_helper]") {
|
||||
test_pad2(0, "00");
|
||||
test_pad2(3, "03");
|
||||
test_pad2(10, "10");
|
||||
@@ -49,8 +44,7 @@ TEST_CASE("pad2", "[fmt_helper]")
|
||||
test_pad2(-5, "-5");
|
||||
}
|
||||
|
||||
TEST_CASE("pad3", "[fmt_helper]")
|
||||
{
|
||||
TEST_CASE("pad3", "[fmt_helper]") {
|
||||
test_pad3(0, "000");
|
||||
test_pad3(3, "003");
|
||||
test_pad3(10, "010");
|
||||
@@ -63,8 +57,7 @@ TEST_CASE("pad3", "[fmt_helper]")
|
||||
test_pad3(1234, "1234");
|
||||
}
|
||||
|
||||
TEST_CASE("pad6", "[fmt_helper]")
|
||||
{
|
||||
TEST_CASE("pad6", "[fmt_helper]") {
|
||||
test_pad6(0, "000000");
|
||||
test_pad6(3, "000003");
|
||||
test_pad6(23, "000023");
|
||||
@@ -74,8 +67,7 @@ TEST_CASE("pad6", "[fmt_helper]")
|
||||
test_pad6(123456, "123456");
|
||||
}
|
||||
|
||||
TEST_CASE("pad9", "[fmt_helper]")
|
||||
{
|
||||
TEST_CASE("pad9", "[fmt_helper]") {
|
||||
test_pad9(0, "000000000");
|
||||
test_pad9(3, "000000003");
|
||||
test_pad9(23, "000000023");
|
||||
|
@@ -3,8 +3,7 @@
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
TEST_CASE("test_default_level", "[log_level]")
|
||||
{
|
||||
TEST_CASE("test_default_level", "[log_level]") {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_st>();
|
||||
REQUIRE(test_sink->log_level() == spdlog::level::trace);
|
||||
spdlog::logger logger("test-level", test_sink);
|
||||
@@ -14,10 +13,8 @@ TEST_CASE("test_default_level", "[log_level]")
|
||||
|
||||
// test that logger log only messages with level bigger or equal to its level
|
||||
void test_logger_level(spdlog::level level);
|
||||
TEST_CASE("test_logger_levels", "[log_level]")
|
||||
{
|
||||
for (size_t i = 0; i < spdlog::levels_count; i++)
|
||||
{
|
||||
TEST_CASE("test_logger_levels", "[log_level]") {
|
||||
for (size_t i = 0; i < spdlog::levels_count; i++) {
|
||||
auto level = static_cast<spdlog::level>(i);
|
||||
test_logger_level(level);
|
||||
}
|
||||
@@ -25,32 +22,35 @@ TEST_CASE("test_logger_levels", "[log_level]")
|
||||
|
||||
// test that logger log all messages with level bigger or equal to its level
|
||||
void test_sink_level(spdlog::level level);
|
||||
TEST_CASE("test_sink_levels", "[log_level]")
|
||||
{
|
||||
for (size_t i = 0; i < spdlog::levels_count; i++)
|
||||
{
|
||||
TEST_CASE("test_sink_levels", "[log_level]") {
|
||||
for (size_t i = 0; i < spdlog::levels_count; i++) {
|
||||
auto level = static_cast<spdlog::level>(i);
|
||||
test_sink_level(level);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// test helpers to check that logger/sink displays only messages with level bigger or equal to its level
|
||||
// test helpers to check that logger/sink displays only messages with level bigger or equal to its
|
||||
// level
|
||||
//
|
||||
auto get_expected_messages(spdlog::level level)
|
||||
{
|
||||
auto get_expected_messages(spdlog::level level) {
|
||||
// expected messages for each level
|
||||
static const std::map<spdlog::level, std::vector<std::string>> messages = {
|
||||
{spdlog::level::trace, {"trace hello", "debug hello", "info hello", "warning hello", "error hello", "critical hello"}},
|
||||
{spdlog::level::debug, {"debug hello", "info hello", "warning hello", "error hello", "critical hello"}},
|
||||
{spdlog::level::trace,
|
||||
{"trace hello", "debug hello", "info hello", "warning hello", "error hello",
|
||||
"critical hello"}},
|
||||
{spdlog::level::debug,
|
||||
{"debug hello", "info hello", "warning hello", "error hello", "critical hello"}},
|
||||
{spdlog::level::info, {"info hello", "warning hello", "error hello", "critical hello"}},
|
||||
{spdlog::level::warn, {"warning hello", "error hello", "critical hello"}}, {spdlog::level::err, {"error hello", "critical hello"}},
|
||||
{spdlog::level::critical, {"critical hello"}}, {spdlog::level::off, {}}, {spdlog::level::n_levels, {}}};
|
||||
{spdlog::level::warn, {"warning hello", "error hello", "critical hello"}},
|
||||
{spdlog::level::err, {"error hello", "critical hello"}},
|
||||
{spdlog::level::critical, {"critical hello"}},
|
||||
{spdlog::level::off, {}},
|
||||
{spdlog::level::n_levels, {}}};
|
||||
return messages.at(level);
|
||||
}
|
||||
|
||||
void test_logger_level(spdlog::level level)
|
||||
{
|
||||
void test_logger_level(spdlog::level level) {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_st>();
|
||||
spdlog::logger logger("test-level", test_sink);
|
||||
logger.set_level(level);
|
||||
@@ -70,8 +70,7 @@ void test_logger_level(spdlog::level level)
|
||||
}
|
||||
|
||||
// test that sink displays all messages with level bigger or equal to its level
|
||||
void test_sink_level(spdlog::level level)
|
||||
{
|
||||
void test_sink_level(spdlog::level level) {
|
||||
auto test_sink = std::make_shared<spdlog::sinks::test_sink_st>();
|
||||
spdlog::logger logger("test-level", test_sink);
|
||||
logger.set_level(spdlog::level::trace);
|
||||
|
@@ -1,17 +1,17 @@
|
||||
/*
|
||||
* This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
* This content is released under the MIT License as specified in
|
||||
* https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
#if SPDLOG_ACTIVE_LEVEL != SPDLOG_LEVEL_DEBUG
|
||||
# error "Invalid SPDLOG_ACTIVE_LEVEL in test. Should be SPDLOG_LEVEL_DEBUG"
|
||||
#error "Invalid SPDLOG_ACTIVE_LEVEL in test. Should be SPDLOG_LEVEL_DEBUG"
|
||||
#endif
|
||||
|
||||
#define TEST_FILENAME "test_logs/simple_log"
|
||||
|
||||
TEST_CASE("debug and trace w/o format string", "[macros]")
|
||||
{
|
||||
TEST_CASE("debug and trace w/o format string", "[macros]") {
|
||||
|
||||
prepare_logdir();
|
||||
spdlog::filename_t filename = SPDLOG_FILENAME_T(TEST_FILENAME);
|
||||
@@ -25,7 +25,8 @@ TEST_CASE("debug and trace w/o format string", "[macros]")
|
||||
logger->flush();
|
||||
|
||||
using spdlog::details::os::default_eol;
|
||||
REQUIRE(ends_with(file_contents(TEST_FILENAME), spdlog::fmt_lib::format("Test message 2{}", default_eol)));
|
||||
REQUIRE(ends_with(file_contents(TEST_FILENAME),
|
||||
spdlog::fmt_lib::format("Test message 2{}", default_eol)));
|
||||
REQUIRE(count_lines(TEST_FILENAME) == 1);
|
||||
|
||||
auto orig_default_logger = spdlog::default_logger();
|
||||
@@ -36,17 +37,16 @@ TEST_CASE("debug and trace w/o format string", "[macros]")
|
||||
logger->flush();
|
||||
|
||||
require_message_count(TEST_FILENAME, 2);
|
||||
REQUIRE(ends_with(file_contents(TEST_FILENAME), spdlog::fmt_lib::format("Test message 4{}", default_eol)));
|
||||
REQUIRE(ends_with(file_contents(TEST_FILENAME),
|
||||
spdlog::fmt_lib::format("Test message 4{}", default_eol)));
|
||||
spdlog::set_default_logger(std::move(orig_default_logger));
|
||||
}
|
||||
|
||||
TEST_CASE("disable param evaluation", "[macros]")
|
||||
{
|
||||
TEST_CASE("disable param evaluation", "[macros]") {
|
||||
SPDLOG_TRACE("Test message {}", throw std::runtime_error("Should not be evaluated"));
|
||||
}
|
||||
|
||||
TEST_CASE("pass logger pointer", "[macros]")
|
||||
{
|
||||
TEST_CASE("pass logger pointer", "[macros]") {
|
||||
auto logger = spdlog::create<spdlog::sinks::null_sink_mt>("refmacro");
|
||||
auto &ref = *logger;
|
||||
SPDLOG_LOGGER_TRACE(&ref, "Test message 1");
|
||||
|
@@ -1,9 +1,8 @@
|
||||
#include "includes.h"
|
||||
#include "test_sink.h"
|
||||
|
||||
template<class T>
|
||||
std::string log_info(const T &what, spdlog::level logger_level = spdlog::level::info)
|
||||
{
|
||||
template <class T>
|
||||
std::string log_info(const T &what, spdlog::level logger_level = spdlog::level::info) {
|
||||
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
@@ -16,8 +15,7 @@ std::string log_info(const T &what, spdlog::level logger_level = spdlog::level::
|
||||
return oss.str().substr(0, oss.str().length() - strlen(spdlog::details::os::default_eol));
|
||||
}
|
||||
|
||||
TEST_CASE("basic_logging ", "[basic_logging]")
|
||||
{
|
||||
TEST_CASE("basic_logging ", "[basic_logging]") {
|
||||
// const char
|
||||
REQUIRE(log_info("Hello") == "Hello");
|
||||
REQUIRE(log_info("").empty());
|
||||
@@ -27,8 +25,7 @@ TEST_CASE("basic_logging ", "[basic_logging]")
|
||||
REQUIRE(log_info(std::string()).empty());
|
||||
}
|
||||
|
||||
TEST_CASE("log_levels", "[log_levels]")
|
||||
{
|
||||
TEST_CASE("log_levels", "[log_levels]") {
|
||||
REQUIRE(log_info("Hello", spdlog::level::err).empty());
|
||||
REQUIRE(log_info("Hello", spdlog::level::critical).empty());
|
||||
REQUIRE(log_info("Hello", spdlog::level::info) == "Hello");
|
||||
@@ -36,8 +33,7 @@ TEST_CASE("log_levels", "[log_levels]")
|
||||
REQUIRE(log_info("Hello", spdlog::level::trace) == "Hello");
|
||||
}
|
||||
|
||||
TEST_CASE("level_to_string_view", "[convert_to_string_view]")
|
||||
{
|
||||
TEST_CASE("level_to_string_view", "[convert_to_string_view]") {
|
||||
REQUIRE(spdlog::to_string_view(spdlog::level::trace) == "trace");
|
||||
REQUIRE(spdlog::to_string_view(spdlog::level::debug) == "debug");
|
||||
REQUIRE(spdlog::to_string_view(spdlog::level::info) == "info");
|
||||
@@ -47,8 +43,7 @@ TEST_CASE("level_to_string_view", "[convert_to_string_view]")
|
||||
REQUIRE(spdlog::to_string_view(spdlog::level::off) == "off");
|
||||
}
|
||||
|
||||
TEST_CASE("to_short_c_str", "[convert_to_short_c_str]")
|
||||
{
|
||||
TEST_CASE("to_short_c_str", "[convert_to_short_c_str]") {
|
||||
REQUIRE(std::string(spdlog::to_short_c_str(spdlog::level::trace)) == "T");
|
||||
REQUIRE(std::string(spdlog::to_short_c_str(spdlog::level::debug)) == "D");
|
||||
REQUIRE(std::string(spdlog::to_short_c_str(spdlog::level::info)) == "I");
|
||||
@@ -58,8 +53,7 @@ TEST_CASE("to_short_c_str", "[convert_to_short_c_str]")
|
||||
REQUIRE(std::string(spdlog::to_short_c_str(spdlog::level::off)) == "O");
|
||||
}
|
||||
|
||||
TEST_CASE("to_level_enum", "[convert_to_level_enum]")
|
||||
{
|
||||
TEST_CASE("to_level_enum", "[convert_to_level_enum]") {
|
||||
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);
|
||||
@@ -71,8 +65,7 @@ TEST_CASE("to_level_enum", "[convert_to_level_enum]")
|
||||
REQUIRE(spdlog::level_from_str("null") == spdlog::level::off);
|
||||
}
|
||||
|
||||
TEST_CASE("periodic flush", "[periodic_flush]")
|
||||
{
|
||||
TEST_CASE("periodic flush", "[periodic_flush]") {
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
auto logger = spdlog::create<test_sink_mt>("periodic_flush");
|
||||
auto test_sink = std::static_pointer_cast<test_sink_mt>(logger->sinks()[0]);
|
||||
@@ -84,8 +77,7 @@ TEST_CASE("periodic flush", "[periodic_flush]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("clone-logger", "[clone]")
|
||||
{
|
||||
TEST_CASE("clone-logger", "[clone]") {
|
||||
using spdlog::sinks::test_sink_mt;
|
||||
auto test_sink = std::make_shared<test_sink_mt>();
|
||||
auto logger = std::make_shared<spdlog::logger>("orig", test_sink);
|
||||
@@ -106,8 +98,7 @@ TEST_CASE("clone-logger", "[clone]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("clone async", "[clone]")
|
||||
{
|
||||
TEST_CASE("clone async", "[clone]") {
|
||||
using spdlog::sinks::test_sink_st;
|
||||
spdlog::init_thread_pool(4, 1);
|
||||
auto test_sink = std::make_shared<test_sink_st>();
|
||||
@@ -132,8 +123,7 @@ TEST_CASE("clone async", "[clone]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("default logger API", "[default logger]")
|
||||
{
|
||||
TEST_CASE("default logger API", "[default logger]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
|
||||
|
@@ -3,12 +3,10 @@
|
||||
using std::chrono::milliseconds;
|
||||
using test_clock = std::chrono::high_resolution_clock;
|
||||
|
||||
static milliseconds millis_from(const test_clock::time_point &tp0)
|
||||
{
|
||||
static milliseconds millis_from(const test_clock::time_point &tp0) {
|
||||
return std::chrono::duration_cast<milliseconds>(test_clock::now() - tp0);
|
||||
}
|
||||
TEST_CASE("dequeue-empty-nowait", "[mpmc_blocking_q]")
|
||||
{
|
||||
TEST_CASE("dequeue-empty-nowait", "[mpmc_blocking_q]") {
|
||||
size_t q_size = 100;
|
||||
milliseconds tolerance_wait(20);
|
||||
spdlog::details::mpmc_blocking_queue<int> q(q_size);
|
||||
@@ -23,8 +21,7 @@ TEST_CASE("dequeue-empty-nowait", "[mpmc_blocking_q]")
|
||||
REQUIRE(delta_ms <= tolerance_wait);
|
||||
}
|
||||
|
||||
TEST_CASE("dequeue-empty-wait", "[mpmc_blocking_q]")
|
||||
{
|
||||
TEST_CASE("dequeue-empty-wait", "[mpmc_blocking_q]") {
|
||||
|
||||
size_t q_size = 100;
|
||||
milliseconds wait_ms(250);
|
||||
@@ -43,8 +40,7 @@ TEST_CASE("dequeue-empty-wait", "[mpmc_blocking_q]")
|
||||
REQUIRE(delta_ms <= wait_ms + tolerance_wait);
|
||||
}
|
||||
|
||||
TEST_CASE("dequeue-full-nowait", "[mpmc_blocking_q]")
|
||||
{
|
||||
TEST_CASE("dequeue-full-nowait", "[mpmc_blocking_q]") {
|
||||
spdlog::details::mpmc_blocking_queue<int> q(1);
|
||||
q.enqueue(42);
|
||||
|
||||
@@ -53,8 +49,7 @@ TEST_CASE("dequeue-full-nowait", "[mpmc_blocking_q]")
|
||||
REQUIRE(item == 42);
|
||||
}
|
||||
|
||||
TEST_CASE("dequeue-full-wait", "[mpmc_blocking_q]")
|
||||
{
|
||||
TEST_CASE("dequeue-full-wait", "[mpmc_blocking_q]") {
|
||||
spdlog::details::mpmc_blocking_queue<int> q(1);
|
||||
q.enqueue(42);
|
||||
|
||||
@@ -63,8 +58,7 @@ TEST_CASE("dequeue-full-wait", "[mpmc_blocking_q]")
|
||||
REQUIRE(item == 42);
|
||||
}
|
||||
|
||||
TEST_CASE("enqueue_nowait", "[mpmc_blocking_q]")
|
||||
{
|
||||
TEST_CASE("enqueue_nowait", "[mpmc_blocking_q]") {
|
||||
|
||||
size_t q_size = 1;
|
||||
spdlog::details::mpmc_blocking_queue<int> q(q_size);
|
||||
@@ -82,8 +76,7 @@ TEST_CASE("enqueue_nowait", "[mpmc_blocking_q]")
|
||||
REQUIRE(q.overrun_counter() == 1);
|
||||
}
|
||||
|
||||
TEST_CASE("bad_queue", "[mpmc_blocking_q]")
|
||||
{
|
||||
TEST_CASE("bad_queue", "[mpmc_blocking_q]") {
|
||||
size_t q_size = 0;
|
||||
spdlog::details::mpmc_blocking_queue<int> q(q_size);
|
||||
q.enqueue_nowait(1);
|
||||
@@ -92,28 +85,25 @@ TEST_CASE("bad_queue", "[mpmc_blocking_q]")
|
||||
REQUIRE(q.dequeue_for(i, milliseconds(0)) == false);
|
||||
}
|
||||
|
||||
TEST_CASE("empty_queue", "[mpmc_blocking_q]")
|
||||
{
|
||||
TEST_CASE("empty_queue", "[mpmc_blocking_q]") {
|
||||
size_t q_size = 10;
|
||||
spdlog::details::mpmc_blocking_queue<int> q(q_size);
|
||||
int i = 0;
|
||||
REQUIRE(q.dequeue_for(i, milliseconds(10)) == false);
|
||||
}
|
||||
|
||||
TEST_CASE("full_queue", "[mpmc_blocking_q]")
|
||||
{
|
||||
TEST_CASE("full_queue", "[mpmc_blocking_q]") {
|
||||
size_t q_size = 100;
|
||||
spdlog::details::mpmc_blocking_queue<int> q(q_size);
|
||||
for (int i = 0; i < static_cast<int>(q_size); i++)
|
||||
{
|
||||
q.enqueue(i + 0); // i+0 to force rvalue and avoid tidy warnings on the same time if we std::move(i) instead
|
||||
for (int i = 0; i < static_cast<int>(q_size); i++) {
|
||||
q.enqueue(i + 0); // i+0 to force rvalue and avoid tidy warnings on the same time if we
|
||||
// std::move(i) instead
|
||||
}
|
||||
|
||||
q.enqueue_nowait(123456);
|
||||
REQUIRE(q.overrun_counter() == 1);
|
||||
|
||||
for (int i = 1; i < static_cast<int>(q_size); i++)
|
||||
{
|
||||
for (int i = 1; i < static_cast<int>(q_size); i++) {
|
||||
int item = -1;
|
||||
q.dequeue(item);
|
||||
REQUIRE(item == i);
|
||||
|
@@ -5,79 +5,78 @@ using spdlog::memory_buf_t;
|
||||
using spdlog::details::to_string_view;
|
||||
|
||||
// log to str and return it
|
||||
template<typename... Args>
|
||||
static std::string log_to_str(const std::string &msg, const Args &...args)
|
||||
{
|
||||
template <typename... Args>
|
||||
static std::string log_to_str(const std::string &msg, const Args &...args) {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
|
||||
spdlog::logger oss_logger("pattern_tester", oss_sink);
|
||||
oss_logger.set_level(spdlog::level::info);
|
||||
|
||||
oss_logger.set_formatter(std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter(args...)));
|
||||
oss_logger.set_formatter(
|
||||
std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter(args...)));
|
||||
|
||||
oss_logger.info(msg);
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
TEST_CASE("custom eol", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("custom eol", "[pattern_formatter]") {
|
||||
std::string msg = "Hello custom eol test";
|
||||
std::string eol = ";)";
|
||||
REQUIRE(log_to_str(msg, "%v", spdlog::pattern_time_type::local, ";)") == msg + eol);
|
||||
}
|
||||
|
||||
TEST_CASE("empty format", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("empty format", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "", spdlog::pattern_time_type::local, "").empty());
|
||||
}
|
||||
|
||||
TEST_CASE("empty format2", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("empty format2", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "", spdlog::pattern_time_type::local, "\n") == "\n");
|
||||
}
|
||||
|
||||
TEST_CASE("level", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%l] %v", spdlog::pattern_time_type::local, "\n") == "[info] Some message\n");
|
||||
TEST_CASE("level", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%l] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[info] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("short level", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%L] %v", spdlog::pattern_time_type::local, "\n") == "[I] Some message\n");
|
||||
TEST_CASE("short level", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%L] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[I] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("name", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%n] %v", spdlog::pattern_time_type::local, "\n") == "[pattern_tester] Some message\n");
|
||||
TEST_CASE("name", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pattern_tester] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("date MM/DD/YY ", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("date MM/DD/YY ", "[pattern_formatter]") {
|
||||
auto now_tm = spdlog::details::os::localtime();
|
||||
std::stringstream oss;
|
||||
oss << std::setfill('0') << std::setw(2) << now_tm.tm_mon + 1 << "/" << std::setw(2) << now_tm.tm_mday << "/" << std::setw(2)
|
||||
<< (now_tm.tm_year + 1900) % 1000 << " Some message\n";
|
||||
REQUIRE(log_to_str("Some message", "%D %v", spdlog::pattern_time_type::local, "\n") == oss.str());
|
||||
oss << std::setfill('0') << std::setw(2) << now_tm.tm_mon + 1 << "/" << std::setw(2)
|
||||
<< now_tm.tm_mday << "/" << std::setw(2) << (now_tm.tm_year + 1900) % 1000
|
||||
<< " Some message\n";
|
||||
REQUIRE(log_to_str("Some message", "%D %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
oss.str());
|
||||
}
|
||||
|
||||
TEST_CASE("color range test1", "[pattern_formatter]")
|
||||
{
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>("%^%v%$", spdlog::pattern_time_type::local, "\n");
|
||||
TEST_CASE("color range test1", "[pattern_formatter]") {
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>(
|
||||
"%^%v%$", spdlog::pattern_time_type::local, "\n");
|
||||
|
||||
memory_buf_t buf;
|
||||
spdlog::fmt_lib::format_to(std::back_inserter(buf), "Hello");
|
||||
memory_buf_t formatted;
|
||||
std::string logger_name = "test";
|
||||
spdlog::details::log_msg msg(logger_name, spdlog::level::info, spdlog::string_view_t(buf.data(), buf.size()));
|
||||
spdlog::details::log_msg msg(logger_name, spdlog::level::info,
|
||||
spdlog::string_view_t(buf.data(), buf.size()));
|
||||
formatter->format(msg, formatted);
|
||||
REQUIRE(msg.color_range_start == 0);
|
||||
REQUIRE(msg.color_range_end == 5);
|
||||
REQUIRE(log_to_str("hello", "%^%v%$", spdlog::pattern_time_type::local, "\n") == "hello\n");
|
||||
}
|
||||
|
||||
TEST_CASE("color range test2", "[pattern_formatter]")
|
||||
{
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>("%^%$", spdlog::pattern_time_type::local, "\n");
|
||||
TEST_CASE("color range test2", "[pattern_formatter]") {
|
||||
auto formatter =
|
||||
std::make_shared<spdlog::pattern_formatter>("%^%$", spdlog::pattern_time_type::local, "\n");
|
||||
std::string logger_name = "test";
|
||||
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "");
|
||||
memory_buf_t formatted;
|
||||
@@ -87,8 +86,7 @@ TEST_CASE("color range test2", "[pattern_formatter]")
|
||||
REQUIRE(log_to_str("", "%^%$", spdlog::pattern_time_type::local, "\n") == "\n");
|
||||
}
|
||||
|
||||
TEST_CASE("color range test3", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("color range test3", "[pattern_formatter]") {
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>("%^***%$");
|
||||
std::string logger_name = "test";
|
||||
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "ignored");
|
||||
@@ -98,9 +96,9 @@ TEST_CASE("color range test3", "[pattern_formatter]")
|
||||
REQUIRE(msg.color_range_end == 3);
|
||||
}
|
||||
|
||||
TEST_CASE("color range test4", "[pattern_formatter]")
|
||||
{
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>("XX%^YYY%$", spdlog::pattern_time_type::local, "\n");
|
||||
TEST_CASE("color range test4", "[pattern_formatter]") {
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>(
|
||||
"XX%^YYY%$", spdlog::pattern_time_type::local, "\n");
|
||||
std::string logger_name = "test";
|
||||
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "ignored");
|
||||
|
||||
@@ -108,11 +106,11 @@ TEST_CASE("color range test4", "[pattern_formatter]")
|
||||
formatter->format(msg, formatted);
|
||||
REQUIRE(msg.color_range_start == 2);
|
||||
REQUIRE(msg.color_range_end == 5);
|
||||
REQUIRE(log_to_str("ignored", "XX%^YYY%$", spdlog::pattern_time_type::local, "\n") == "XXYYY\n");
|
||||
REQUIRE(log_to_str("ignored", "XX%^YYY%$", spdlog::pattern_time_type::local, "\n") ==
|
||||
"XXYYY\n");
|
||||
}
|
||||
|
||||
TEST_CASE("color range test5", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("color range test5", "[pattern_formatter]") {
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>("**%^");
|
||||
std::string logger_name = "test";
|
||||
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "ignored");
|
||||
@@ -122,8 +120,7 @@ TEST_CASE("color range test5", "[pattern_formatter]")
|
||||
REQUIRE(msg.color_range_end == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("color range test6", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("color range test6", "[pattern_formatter]") {
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>("**%$");
|
||||
std::string logger_name = "test";
|
||||
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "ignored");
|
||||
@@ -137,62 +134,70 @@ TEST_CASE("color range test6", "[pattern_formatter]")
|
||||
// Test padding
|
||||
//
|
||||
|
||||
TEST_CASE("level_left_padded", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%8l] %v", spdlog::pattern_time_type::local, "\n") == "[ info] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%8!l] %v", spdlog::pattern_time_type::local, "\n") == "[ info] Some message\n");
|
||||
TEST_CASE("level_left_padded", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%8l] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[ info] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%8!l] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[ info] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("level_right_padded", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%-8l] %v", spdlog::pattern_time_type::local, "\n") == "[info ] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%-8!l] %v", spdlog::pattern_time_type::local, "\n") == "[info ] Some message\n");
|
||||
TEST_CASE("level_right_padded", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%-8l] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[info ] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%-8!l] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[info ] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("level_center_padded", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%=8l] %v", spdlog::pattern_time_type::local, "\n") == "[ info ] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%=8!l] %v", spdlog::pattern_time_type::local, "\n") == "[ info ] Some message\n");
|
||||
TEST_CASE("level_center_padded", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%=8l] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[ info ] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%=8!l] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[ info ] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("short level_left_padded", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%3L] %v", spdlog::pattern_time_type::local, "\n") == "[ I] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%3!L] %v", spdlog::pattern_time_type::local, "\n") == "[ I] Some message\n");
|
||||
TEST_CASE("short level_left_padded", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%3L] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[ I] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%3!L] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[ I] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("short level_right_padded", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%-3L] %v", spdlog::pattern_time_type::local, "\n") == "[I ] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%-3!L] %v", spdlog::pattern_time_type::local, "\n") == "[I ] Some message\n");
|
||||
TEST_CASE("short level_right_padded", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%-3L] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[I ] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%-3!L] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[I ] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("short level_center_padded", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%=3L] %v", spdlog::pattern_time_type::local, "\n") == "[ I ] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%=3!L] %v", spdlog::pattern_time_type::local, "\n") == "[ I ] Some message\n");
|
||||
TEST_CASE("short level_center_padded", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%=3L] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[ I ] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%=3!L] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[ I ] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("left_padded_short", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%3n] %v", spdlog::pattern_time_type::local, "\n") == "[pattern_tester] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%3!n] %v", spdlog::pattern_time_type::local, "\n") == "[pat] Some message\n");
|
||||
TEST_CASE("left_padded_short", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%3n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pattern_tester] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%3!n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pat] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("right_padded_short", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%-3n] %v", spdlog::pattern_time_type::local, "\n") == "[pattern_tester] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%-3!n] %v", spdlog::pattern_time_type::local, "\n") == "[pat] Some message\n");
|
||||
TEST_CASE("right_padded_short", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%-3n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pattern_tester] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%-3!n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pat] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("center_padded_short", "[pattern_formatter]")
|
||||
{
|
||||
REQUIRE(log_to_str("Some message", "[%=3n] %v", spdlog::pattern_time_type::local, "\n") == "[pattern_tester] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%=3!n] %v", spdlog::pattern_time_type::local, "\n") == "[pat] Some message\n");
|
||||
TEST_CASE("center_padded_short", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%=3n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pattern_tester] Some message\n");
|
||||
REQUIRE(log_to_str("Some message", "[%=3!n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pat] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("left_padded_huge", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("left_padded_huge", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%-300n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pattern_tester ] Some message\n");
|
||||
|
||||
@@ -200,8 +205,7 @@ TEST_CASE("left_padded_huge", "[pattern_formatter]")
|
||||
"[pattern_tester ] Some message\n");
|
||||
}
|
||||
|
||||
TEST_CASE("left_padded_max", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("left_padded_max", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("Some message", "[%-64n] %v", spdlog::pattern_time_type::local, "\n") ==
|
||||
"[pattern_tester ] Some message\n");
|
||||
|
||||
@@ -211,8 +215,7 @@ TEST_CASE("left_padded_max", "[pattern_formatter]")
|
||||
|
||||
// Test padding + truncate flag
|
||||
|
||||
TEST_CASE("paddinng_truncate", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("paddinng_truncate", "[pattern_formatter]") {
|
||||
REQUIRE(log_to_str("123456", "%6!v", spdlog::pattern_time_type::local, "\n") == "123456\n");
|
||||
REQUIRE(log_to_str("123456", "%5!v", spdlog::pattern_time_type::local, "\n") == "12345\n");
|
||||
REQUIRE(log_to_str("123456", "%7!v", spdlog::pattern_time_type::local, "\n") == " 123456\n");
|
||||
@@ -228,42 +231,43 @@ TEST_CASE("paddinng_truncate", "[pattern_formatter]")
|
||||
REQUIRE(log_to_str("123456", "%0!v", spdlog::pattern_time_type::local, "\n") == "\n");
|
||||
}
|
||||
|
||||
TEST_CASE("padding_truncate_funcname", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("padding_truncate_funcname", "[pattern_formatter]") {
|
||||
spdlog::sinks::test_sink_st test_sink;
|
||||
|
||||
const char *pattern = "%v [%5!!]";
|
||||
auto formatter = std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter(pattern));
|
||||
test_sink.set_formatter(std::move(formatter));
|
||||
|
||||
spdlog::details::log_msg msg1{spdlog::source_loc{"ignored", 1, "func"}, "test_logger", spdlog::level::info, "message"};
|
||||
spdlog::details::log_msg msg1{spdlog::source_loc{"ignored", 1, "func"}, "test_logger",
|
||||
spdlog::level::info, "message"};
|
||||
test_sink.log(msg1);
|
||||
REQUIRE(test_sink.lines()[0] == "message [ func]");
|
||||
|
||||
spdlog::details::log_msg msg2{spdlog::source_loc{"ignored", 1, "function"}, "test_logger", spdlog::level::info, "message"};
|
||||
spdlog::details::log_msg msg2{spdlog::source_loc{"ignored", 1, "function"}, "test_logger",
|
||||
spdlog::level::info, "message"};
|
||||
test_sink.log(msg2);
|
||||
REQUIRE(test_sink.lines()[1] == "message [funct]");
|
||||
}
|
||||
|
||||
TEST_CASE("padding_funcname", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("padding_funcname", "[pattern_formatter]") {
|
||||
spdlog::sinks::test_sink_st test_sink;
|
||||
|
||||
const char *pattern = "%v [%10!]";
|
||||
auto formatter = std::unique_ptr<spdlog::formatter>(new spdlog::pattern_formatter(pattern));
|
||||
test_sink.set_formatter(std::move(formatter));
|
||||
|
||||
spdlog::details::log_msg msg1{spdlog::source_loc{"ignored", 1, "func"}, "test_logger", spdlog::level::info, "message"};
|
||||
spdlog::details::log_msg msg1{spdlog::source_loc{"ignored", 1, "func"}, "test_logger",
|
||||
spdlog::level::info, "message"};
|
||||
test_sink.log(msg1);
|
||||
REQUIRE(test_sink.lines()[0] == "message [ func]");
|
||||
|
||||
spdlog::details::log_msg msg2{spdlog::source_loc{"ignored", 1, "func567890123"}, "test_logger", spdlog::level::info, "message"};
|
||||
spdlog::details::log_msg msg2{spdlog::source_loc{"ignored", 1, "func567890123"}, "test_logger",
|
||||
spdlog::level::info, "message"};
|
||||
test_sink.log(msg2);
|
||||
REQUIRE(test_sink.lines()[1] == "message [func567890123]");
|
||||
}
|
||||
|
||||
TEST_CASE("clone-default-formatter", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("clone-default-formatter", "[pattern_formatter]") {
|
||||
auto formatter_1 = std::make_shared<spdlog::pattern_formatter>();
|
||||
auto formatter_2 = formatter_1->clone();
|
||||
std::string logger_name = "test";
|
||||
@@ -277,8 +281,7 @@ TEST_CASE("clone-default-formatter", "[pattern_formatter]")
|
||||
REQUIRE(to_string_view(formatted_1) == to_string_view(formatted_2));
|
||||
}
|
||||
|
||||
TEST_CASE("clone-default-formatter2", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("clone-default-formatter2", "[pattern_formatter]") {
|
||||
auto formatter_1 = std::make_shared<spdlog::pattern_formatter>("%+");
|
||||
auto formatter_2 = formatter_1->clone();
|
||||
std::string logger_name = "test";
|
||||
@@ -292,8 +295,7 @@ TEST_CASE("clone-default-formatter2", "[pattern_formatter]")
|
||||
REQUIRE(to_string_view(formatted_1) == to_string_view(formatted_2));
|
||||
}
|
||||
|
||||
TEST_CASE("clone-formatter", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("clone-formatter", "[pattern_formatter]") {
|
||||
auto formatter_1 = std::make_shared<spdlog::pattern_formatter>("%D %X [%] [%n] %v");
|
||||
auto formatter_2 = formatter_1->clone();
|
||||
std::string logger_name = "test";
|
||||
@@ -307,10 +309,10 @@ TEST_CASE("clone-formatter", "[pattern_formatter]")
|
||||
REQUIRE(to_string_view(formatted_1) == to_string_view(formatted_2));
|
||||
}
|
||||
|
||||
TEST_CASE("clone-formatter-2", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("clone-formatter-2", "[pattern_formatter]") {
|
||||
using spdlog::pattern_time_type;
|
||||
auto formatter_1 = std::make_shared<spdlog::pattern_formatter>("%D %X [%] [%n] %v", pattern_time_type::utc, "xxxxxx\n");
|
||||
auto formatter_1 = std::make_shared<spdlog::pattern_formatter>(
|
||||
"%D %X [%] [%n] %v", pattern_time_type::utc, "xxxxxx\n");
|
||||
auto formatter_2 = formatter_1->clone();
|
||||
std::string logger_name = "test2";
|
||||
spdlog::details::log_msg msg(logger_name, spdlog::level::info, "some message");
|
||||
@@ -323,43 +325,35 @@ TEST_CASE("clone-formatter-2", "[pattern_formatter]")
|
||||
REQUIRE(to_string_view(formatted_1) == to_string_view(formatted_2));
|
||||
}
|
||||
|
||||
class custom_test_flag : public spdlog::custom_flag_formatter
|
||||
{
|
||||
class custom_test_flag : public spdlog::custom_flag_formatter {
|
||||
public:
|
||||
explicit custom_test_flag(std::string txt)
|
||||
: some_txt{std::move(txt)}
|
||||
{}
|
||||
: some_txt{std::move(txt)} {}
|
||||
|
||||
void format(const spdlog::details::log_msg &, const std::tm &tm, spdlog::memory_buf_t &dest) override
|
||||
{
|
||||
if (some_txt == "throw_me")
|
||||
{
|
||||
void format(const spdlog::details::log_msg &,
|
||||
const std::tm &tm,
|
||||
spdlog::memory_buf_t &dest) override {
|
||||
if (some_txt == "throw_me") {
|
||||
throw spdlog::spdlog_ex("custom_flag_exception_test");
|
||||
}
|
||||
else if (some_txt == "time")
|
||||
{
|
||||
auto formatted = spdlog::fmt_lib::format("{:d}:{:02d}{:s}", tm.tm_hour % 12, tm.tm_min, tm.tm_hour / 12 ? "PM" : "AM");
|
||||
} else if (some_txt == "time") {
|
||||
auto formatted = spdlog::fmt_lib::format("{:d}:{:02d}{:s}", tm.tm_hour % 12, tm.tm_min,
|
||||
tm.tm_hour / 12 ? "PM" : "AM");
|
||||
dest.append(formatted.data(), formatted.data() + formatted.size());
|
||||
return;
|
||||
}
|
||||
some_txt = std::string(padinfo_.width_, ' ') + some_txt;
|
||||
dest.append(some_txt.data(), some_txt.data() + some_txt.size());
|
||||
}
|
||||
spdlog::details::padding_info get_padding_info()
|
||||
{
|
||||
return padinfo_;
|
||||
}
|
||||
spdlog::details::padding_info get_padding_info() { return padinfo_; }
|
||||
|
||||
std::string some_txt;
|
||||
|
||||
std::unique_ptr<custom_flag_formatter> clone() const override
|
||||
{
|
||||
std::unique_ptr<custom_flag_formatter> clone() const override {
|
||||
return std::make_unique<custom_test_flag>(some_txt);
|
||||
}
|
||||
};
|
||||
// test clone with custom flag formatters
|
||||
TEST_CASE("clone-custom_formatter", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("clone-custom_formatter", "[pattern_formatter]") {
|
||||
auto formatter_1 = std::make_shared<spdlog::pattern_formatter>();
|
||||
formatter_1->add_flag<custom_test_flag>('t', "custom_output").set_pattern("[%n] [%t] %v");
|
||||
auto formatter_2 = formatter_1->clone();
|
||||
@@ -371,7 +365,8 @@ TEST_CASE("clone-custom_formatter", "[pattern_formatter]")
|
||||
formatter_1->format(msg, formatted_1);
|
||||
formatter_2->format(msg, formatted_2);
|
||||
|
||||
auto expected = spdlog::fmt_lib::format("[logger-name] [custom_output] some message{}", spdlog::details::os::default_eol);
|
||||
auto expected = spdlog::fmt_lib::format("[logger-name] [custom_output] some message{}",
|
||||
spdlog::details::os::default_eol);
|
||||
|
||||
REQUIRE(to_string_view(formatted_1) == expected);
|
||||
REQUIRE(to_string_view(formatted_2) == expected);
|
||||
@@ -387,8 +382,7 @@ static const char *const test_path = "\\a\\b\\c/myfile.cpp";
|
||||
static const char *const test_path = "/a/b//myfile.cpp";
|
||||
#endif
|
||||
|
||||
TEST_CASE("short filename formatter-1", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("short filename formatter-1", "[pattern_formatter]") {
|
||||
spdlog::pattern_formatter formatter("%s", spdlog::pattern_time_type::local, "");
|
||||
memory_buf_t formatted;
|
||||
std::string logger_name = "logger-name";
|
||||
@@ -399,8 +393,7 @@ TEST_CASE("short filename formatter-1", "[pattern_formatter]")
|
||||
REQUIRE(to_string_view(formatted) == "myfile.cpp");
|
||||
}
|
||||
|
||||
TEST_CASE("short filename formatter-2", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("short filename formatter-2", "[pattern_formatter]") {
|
||||
spdlog::pattern_formatter formatter("%s:%#", spdlog::pattern_time_type::local, "");
|
||||
memory_buf_t formatted;
|
||||
std::string logger_name = "logger-name";
|
||||
@@ -411,8 +404,7 @@ TEST_CASE("short filename formatter-2", "[pattern_formatter]")
|
||||
REQUIRE(to_string_view(formatted) == "myfile.cpp:123");
|
||||
}
|
||||
|
||||
TEST_CASE("short filename formatter-3", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("short filename formatter-3", "[pattern_formatter]") {
|
||||
spdlog::pattern_formatter formatter("%s %v", spdlog::pattern_time_type::local, "");
|
||||
memory_buf_t formatted;
|
||||
std::string logger_name = "logger-name";
|
||||
@@ -423,8 +415,7 @@ TEST_CASE("short filename formatter-3", "[pattern_formatter]")
|
||||
REQUIRE(to_string_view(formatted) == " Hello");
|
||||
}
|
||||
|
||||
TEST_CASE("full filename formatter", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("full filename formatter", "[pattern_formatter]") {
|
||||
spdlog::pattern_formatter formatter("%g", spdlog::pattern_time_type::local, "");
|
||||
memory_buf_t formatted;
|
||||
std::string logger_name = "logger-name";
|
||||
@@ -435,52 +426,61 @@ TEST_CASE("full filename formatter", "[pattern_formatter]")
|
||||
REQUIRE(to_string_view(formatted) == test_path);
|
||||
}
|
||||
|
||||
TEST_CASE("custom flags", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("custom flags", "[pattern_formatter]") {
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>();
|
||||
formatter->add_flag<custom_test_flag>('t', "custom1").add_flag<custom_test_flag>('u', "custom2").set_pattern("[%n] [%t] [%u] %v");
|
||||
formatter->add_flag<custom_test_flag>('t', "custom1")
|
||||
.add_flag<custom_test_flag>('u', "custom2")
|
||||
.set_pattern("[%n] [%t] [%u] %v");
|
||||
|
||||
memory_buf_t formatted;
|
||||
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
||||
"some message");
|
||||
formatter->format(msg, formatted);
|
||||
auto expected = spdlog::fmt_lib::format("[logger-name] [custom1] [custom2] some message{}", spdlog::details::os::default_eol);
|
||||
auto expected = spdlog::fmt_lib::format("[logger-name] [custom1] [custom2] some message{}",
|
||||
spdlog::details::os::default_eol);
|
||||
|
||||
REQUIRE(to_string_view(formatted) == expected);
|
||||
}
|
||||
|
||||
TEST_CASE("custom flags-padding", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("custom flags-padding", "[pattern_formatter]") {
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>();
|
||||
formatter->add_flag<custom_test_flag>('t', "custom1").add_flag<custom_test_flag>('u', "custom2").set_pattern("[%n] [%t] [%5u] %v");
|
||||
formatter->add_flag<custom_test_flag>('t', "custom1")
|
||||
.add_flag<custom_test_flag>('u', "custom2")
|
||||
.set_pattern("[%n] [%t] [%5u] %v");
|
||||
|
||||
memory_buf_t formatted;
|
||||
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
||||
"some message");
|
||||
formatter->format(msg, formatted);
|
||||
auto expected = spdlog::fmt_lib::format("[logger-name] [custom1] [ custom2] some message{}", spdlog::details::os::default_eol);
|
||||
auto expected = spdlog::fmt_lib::format("[logger-name] [custom1] [ custom2] some message{}",
|
||||
spdlog::details::os::default_eol);
|
||||
|
||||
REQUIRE(to_string_view(formatted) == expected);
|
||||
}
|
||||
|
||||
TEST_CASE("custom flags-exception", "[pattern_formatter]")
|
||||
{
|
||||
TEST_CASE("custom flags-exception", "[pattern_formatter]") {
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>();
|
||||
formatter->add_flag<custom_test_flag>('t', "throw_me").add_flag<custom_test_flag>('u', "custom2").set_pattern("[%n] [%t] [%u] %v");
|
||||
formatter->add_flag<custom_test_flag>('t', "throw_me")
|
||||
.add_flag<custom_test_flag>('u', "custom2")
|
||||
.set_pattern("[%n] [%t] [%u] %v");
|
||||
|
||||
memory_buf_t formatted;
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
||||
"some message");
|
||||
CHECK_THROWS_AS(formatter->format(msg, formatted), spdlog::spdlog_ex);
|
||||
}
|
||||
|
||||
TEST_CASE("override need_localtime", "[pattern_formatter]")
|
||||
{
|
||||
auto formatter = std::make_shared<spdlog::pattern_formatter>(spdlog::pattern_time_type::local, "\n");
|
||||
TEST_CASE("override need_localtime", "[pattern_formatter]") {
|
||||
auto formatter =
|
||||
std::make_shared<spdlog::pattern_formatter>(spdlog::pattern_time_type::local, "\n");
|
||||
formatter->add_flag<custom_test_flag>('t', "time").set_pattern("%t> %v");
|
||||
|
||||
{
|
||||
memory_buf_t formatted;
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
||||
"some message");
|
||||
formatter->format(msg, formatted);
|
||||
REQUIRE(to_string_view(formatted) == "0:00AM> some message\n");
|
||||
}
|
||||
@@ -490,11 +490,12 @@ TEST_CASE("override need_localtime", "[pattern_formatter]")
|
||||
|
||||
auto now_tm = spdlog::details::os::localtime();
|
||||
std::stringstream oss;
|
||||
oss << (now_tm.tm_hour % 12) << ":" << std::setfill('0') << std::setw(2) << now_tm.tm_min << (now_tm.tm_hour / 12 ? "PM" : "AM")
|
||||
<< "> some message\n";
|
||||
oss << (now_tm.tm_hour % 12) << ":" << std::setfill('0') << std::setw(2) << now_tm.tm_min
|
||||
<< (now_tm.tm_hour / 12 ? "PM" : "AM") << "> some message\n";
|
||||
|
||||
memory_buf_t formatted;
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info, "some message");
|
||||
spdlog::details::log_msg msg(spdlog::source_loc{}, "logger-name", spdlog::level::info,
|
||||
"some message");
|
||||
formatter->format(msg, formatted);
|
||||
REQUIRE(to_string_view(formatted) == oss.str());
|
||||
}
|
||||
|
@@ -4,32 +4,34 @@ static const char *const tested_logger_name = "null_logger";
|
||||
static const char *const tested_logger_name2 = "null_logger2";
|
||||
|
||||
#ifndef SPDLOG_NO_EXCEPTIONS
|
||||
TEST_CASE("register_drop", "[registry]")
|
||||
{
|
||||
TEST_CASE("register_drop", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
REQUIRE(spdlog::get(tested_logger_name) != nullptr);
|
||||
// Throw if registering existing name
|
||||
REQUIRE_THROWS_AS(spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name), spdlog::spdlog_ex);
|
||||
REQUIRE_THROWS_AS(spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name),
|
||||
spdlog::spdlog_ex);
|
||||
}
|
||||
|
||||
TEST_CASE("explicit register", "[registry]")
|
||||
{
|
||||
TEST_CASE("explicit register", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
auto logger = std::make_shared<spdlog::logger>(tested_logger_name, std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
auto logger = std::make_shared<spdlog::logger>(tested_logger_name,
|
||||
std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
spdlog::register_logger(logger);
|
||||
REQUIRE(spdlog::get(tested_logger_name) != nullptr);
|
||||
// Throw if registering existing name
|
||||
REQUIRE_THROWS_AS(spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name), spdlog::spdlog_ex);
|
||||
REQUIRE_THROWS_AS(spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name),
|
||||
spdlog::spdlog_ex);
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST_CASE("apply_all", "[registry]")
|
||||
{
|
||||
TEST_CASE("apply_all", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
auto logger = std::make_shared<spdlog::logger>(tested_logger_name, std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
auto logger = std::make_shared<spdlog::logger>(tested_logger_name,
|
||||
std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
spdlog::register_logger(logger);
|
||||
auto logger2 = std::make_shared<spdlog::logger>(tested_logger_name2, std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
auto logger2 = std::make_shared<spdlog::logger>(
|
||||
tested_logger_name2, std::make_shared<spdlog::sinks::null_sink_st>());
|
||||
spdlog::register_logger(logger2);
|
||||
|
||||
int counter = 0;
|
||||
@@ -45,24 +47,21 @@ TEST_CASE("apply_all", "[registry]")
|
||||
REQUIRE(counter == 1);
|
||||
}
|
||||
|
||||
TEST_CASE("drop", "[registry]")
|
||||
{
|
||||
TEST_CASE("drop", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
spdlog::drop(tested_logger_name);
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name));
|
||||
}
|
||||
|
||||
TEST_CASE("drop-default", "[registry]")
|
||||
{
|
||||
TEST_CASE("drop-default", "[registry]") {
|
||||
spdlog::set_default_logger(spdlog::null_logger_st(tested_logger_name));
|
||||
spdlog::drop(tested_logger_name);
|
||||
REQUIRE_FALSE(spdlog::default_logger());
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name));
|
||||
}
|
||||
|
||||
TEST_CASE("drop_all", "[registry]")
|
||||
{
|
||||
TEST_CASE("drop_all", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name2);
|
||||
@@ -72,8 +71,7 @@ TEST_CASE("drop_all", "[registry]")
|
||||
REQUIRE_FALSE(spdlog::default_logger());
|
||||
}
|
||||
|
||||
TEST_CASE("drop non existing", "[registry]")
|
||||
{
|
||||
TEST_CASE("drop non existing", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::create<spdlog::sinks::null_sink_mt>(tested_logger_name);
|
||||
spdlog::drop("some_name");
|
||||
@@ -82,28 +80,26 @@ TEST_CASE("drop non existing", "[registry]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("default logger", "[registry]")
|
||||
{
|
||||
TEST_CASE("default logger", "[registry]") {
|
||||
spdlog::drop_all();
|
||||
spdlog::set_default_logger(spdlog::null_logger_st(tested_logger_name));
|
||||
REQUIRE(spdlog::get(tested_logger_name) == spdlog::default_logger());
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("set_default_logger(nullptr)", "[registry]")
|
||||
{
|
||||
TEST_CASE("set_default_logger(nullptr)", "[registry]") {
|
||||
spdlog::set_default_logger(nullptr);
|
||||
REQUIRE_FALSE(spdlog::default_logger());
|
||||
}
|
||||
|
||||
TEST_CASE("disable automatic registration", "[registry]")
|
||||
{
|
||||
TEST_CASE("disable automatic registration", "[registry]") {
|
||||
// set some global parameters
|
||||
spdlog::level level = spdlog::level::warn;
|
||||
spdlog::set_level(level);
|
||||
// but disable automatic registration
|
||||
spdlog::set_automatic_registration(false);
|
||||
auto logger1 = spdlog::create<spdlog::sinks::daily_file_sink_st>(tested_logger_name, SPDLOG_FILENAME_T("filename"), 11, 59);
|
||||
auto logger1 = spdlog::create<spdlog::sinks::daily_file_sink_st>(
|
||||
tested_logger_name, SPDLOG_FILENAME_T("filename"), 11, 59);
|
||||
auto logger2 = spdlog::create_async<spdlog::sinks::stdout_color_sink_mt>(tested_logger_name2);
|
||||
// loggers should not be part of the registry
|
||||
REQUIRE_FALSE(spdlog::get(tested_logger_name));
|
||||
|
@@ -1,8 +1,7 @@
|
||||
#include "includes.h"
|
||||
#include "spdlog/sinks/ringbuffer_sink.h"
|
||||
|
||||
TEST_CASE("test_drain", "[ringbuffer_sink]")
|
||||
{
|
||||
TEST_CASE("test_drain", "[ringbuffer_sink]") {
|
||||
const size_t sink_size = 3;
|
||||
auto sink = std::make_shared<spdlog::sinks::ringbuffer_sink_mt>(sink_size);
|
||||
spdlog::logger l("logger", sink);
|
||||
@@ -10,16 +9,15 @@ TEST_CASE("test_drain", "[ringbuffer_sink]")
|
||||
|
||||
// log more than the sink size by one and test that the first message is dropped
|
||||
// test 3 times to make sure the ringbuffer is working correctly multiple times
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
for (size_t i = 0; i < sink_size + 1; ++i)
|
||||
{
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (size_t i = 0; i < sink_size + 1; ++i) {
|
||||
l.info("{}", i);
|
||||
}
|
||||
|
||||
int counter = 0;
|
||||
sink->drain([&](std::string_view msg) {
|
||||
REQUIRE(msg == spdlog::fmt_lib::format("*** {}{}", counter + 1, spdlog::details::os::default_eol));
|
||||
REQUIRE(msg == spdlog::fmt_lib::format("*** {}{}", counter + 1,
|
||||
spdlog::details::os::default_eol));
|
||||
counter++;
|
||||
});
|
||||
|
||||
@@ -27,18 +25,15 @@ TEST_CASE("test_drain", "[ringbuffer_sink]")
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("test_drain_raw", "[ringbuffer_sink]")
|
||||
{
|
||||
TEST_CASE("test_drain_raw", "[ringbuffer_sink]") {
|
||||
const size_t sink_size = 3;
|
||||
auto sink = std::make_shared<spdlog::sinks::ringbuffer_sink_mt>(sink_size);
|
||||
spdlog::logger l("logger", sink);
|
||||
|
||||
// log more than the sink size by one and test that the first message is dropped
|
||||
// test 3 times to make sure the ringbuffer is working correctly multiple times
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
for (size_t i = 0; i < sink_size + 1; ++i)
|
||||
{
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (size_t i = 0; i < sink_size + 1; ++i) {
|
||||
l.info("{}", i);
|
||||
}
|
||||
|
||||
@@ -52,8 +47,7 @@ TEST_CASE("test_drain_raw", "[ringbuffer_sink]")
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("test_empty", "[ringbuffer_sink]")
|
||||
{
|
||||
TEST_CASE("test_empty", "[ringbuffer_sink]") {
|
||||
const size_t sink_size = 3;
|
||||
auto sink = std::make_shared<spdlog::sinks::ringbuffer_sink_mt>(sink_size);
|
||||
spdlog::logger l("logger", sink);
|
||||
@@ -63,14 +57,12 @@ TEST_CASE("test_empty", "[ringbuffer_sink]")
|
||||
});
|
||||
}
|
||||
|
||||
TEST_CASE("test_empty_size", "[ringbuffer_sink]")
|
||||
{
|
||||
TEST_CASE("test_empty_size", "[ringbuffer_sink]") {
|
||||
const size_t sink_size = 0;
|
||||
auto sink = std::make_shared<spdlog::sinks::ringbuffer_sink_mt>(sink_size);
|
||||
spdlog::logger l("logger", sink);
|
||||
|
||||
for (size_t i = 0; i < sink_size + 1; ++i)
|
||||
{
|
||||
for (size_t i = 0; i < sink_size + 1; ++i) {
|
||||
l.info("{}", i);
|
||||
}
|
||||
|
||||
|
@@ -15,56 +15,46 @@
|
||||
namespace spdlog {
|
||||
namespace sinks {
|
||||
|
||||
template<class Mutex>
|
||||
class test_sink : public base_sink<Mutex>
|
||||
{
|
||||
template <class Mutex>
|
||||
class test_sink : public base_sink<Mutex> {
|
||||
const size_t lines_to_save = 100;
|
||||
|
||||
public:
|
||||
size_t msg_counter()
|
||||
{
|
||||
size_t msg_counter() {
|
||||
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
||||
return msg_counter_;
|
||||
}
|
||||
|
||||
size_t flush_counter()
|
||||
{
|
||||
size_t flush_counter() {
|
||||
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
||||
return flush_counter_;
|
||||
}
|
||||
|
||||
void set_delay(std::chrono::milliseconds delay)
|
||||
{
|
||||
void set_delay(std::chrono::milliseconds delay) {
|
||||
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
||||
delay_ = delay;
|
||||
}
|
||||
|
||||
// return last output without the eol
|
||||
std::vector<std::string> lines()
|
||||
{
|
||||
std::vector<std::string> lines() {
|
||||
std::lock_guard<Mutex> lock(base_sink<Mutex>::mutex_);
|
||||
return lines_;
|
||||
}
|
||||
|
||||
protected:
|
||||
void sink_it_(const details::log_msg &msg) override
|
||||
{
|
||||
void sink_it_(const details::log_msg &msg) override {
|
||||
memory_buf_t formatted;
|
||||
base_sink<Mutex>::formatter_->format(msg, formatted);
|
||||
// save the line without the eol
|
||||
auto eol_len = strlen(details::os::default_eol);
|
||||
if (lines_.size() < lines_to_save)
|
||||
{
|
||||
if (lines_.size() < lines_to_save) {
|
||||
lines_.emplace_back(formatted.begin(), formatted.end() - eol_len);
|
||||
}
|
||||
msg_counter_++;
|
||||
std::this_thread::sleep_for(delay_);
|
||||
}
|
||||
|
||||
void flush_() override
|
||||
{
|
||||
flush_counter_++;
|
||||
}
|
||||
void flush_() override { flush_counter_++; }
|
||||
|
||||
size_t msg_counter_{0};
|
||||
size_t flush_counter_{0};
|
||||
|
@@ -6,15 +6,15 @@
|
||||
|
||||
using spdlog::details::os::default_eol;
|
||||
|
||||
TEST_CASE("test_source_location", "[source_location]")
|
||||
{
|
||||
TEST_CASE("test_source_location", "[source_location]") {
|
||||
std::ostringstream oss;
|
||||
auto oss_sink = std::make_shared<spdlog::sinks::ostream_sink_st>(oss);
|
||||
spdlog::logger oss_logger("oss", oss_sink);
|
||||
oss_logger.set_pattern("%s:%# %v");
|
||||
|
||||
oss_logger.info("Hello {}", "source location");
|
||||
REQUIRE(oss.str() == std::string("test_source_location.cpp:16 Hello source location") + default_eol);
|
||||
REQUIRE(oss.str() ==
|
||||
std::string("test_source_location.cpp:16 Hello source location") + default_eol);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -1,11 +1,11 @@
|
||||
/*
|
||||
* This content is released under the MIT License as specified in https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
* This content is released under the MIT License as specified in
|
||||
* https://raw.githubusercontent.com/gabime/spdlog/master/LICENSE
|
||||
*/
|
||||
#include "includes.h"
|
||||
#include "spdlog/sinks/stdout_sinks.h"
|
||||
#include "spdlog/sinks/stdout_color_sinks.h"
|
||||
TEST_CASE("stdout_st", "[stdout]")
|
||||
{
|
||||
TEST_CASE("stdout_st", "[stdout]") {
|
||||
auto l = spdlog::stdout_logger_st("test");
|
||||
l->set_pattern("%+");
|
||||
l->set_level(spdlog::level::trace);
|
||||
@@ -13,8 +13,7 @@ TEST_CASE("stdout_st", "[stdout]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stdout_mt", "[stdout]")
|
||||
{
|
||||
TEST_CASE("stdout_mt", "[stdout]") {
|
||||
auto l = spdlog::stdout_logger_mt("test");
|
||||
l->set_pattern("%+");
|
||||
l->set_level(spdlog::level::debug);
|
||||
@@ -22,16 +21,14 @@ TEST_CASE("stdout_mt", "[stdout]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stderr_st", "[stderr]")
|
||||
{
|
||||
TEST_CASE("stderr_st", "[stderr]") {
|
||||
auto l = spdlog::stderr_logger_st("test");
|
||||
l->set_pattern("%+");
|
||||
l->info("Test stderr_st");
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stderr_mt", "[stderr]")
|
||||
{
|
||||
TEST_CASE("stderr_mt", "[stderr]") {
|
||||
auto l = spdlog::stderr_logger_mt("test");
|
||||
l->set_pattern("%+");
|
||||
l->info("Test stderr_mt");
|
||||
@@ -42,16 +39,14 @@ TEST_CASE("stderr_mt", "[stderr]")
|
||||
}
|
||||
|
||||
// color loggers
|
||||
TEST_CASE("stdout_color_st", "[stdout]")
|
||||
{
|
||||
TEST_CASE("stdout_color_st", "[stdout]") {
|
||||
auto l = spdlog::stdout_color_st("test");
|
||||
l->set_pattern("%+");
|
||||
l->info("Test stdout_color_st");
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stdout_color_mt", "[stdout]")
|
||||
{
|
||||
TEST_CASE("stdout_color_mt", "[stdout]") {
|
||||
auto l = spdlog::stdout_color_mt("test");
|
||||
l->set_pattern("%+");
|
||||
l->set_level(spdlog::level::trace);
|
||||
@@ -59,8 +54,7 @@ TEST_CASE("stdout_color_mt", "[stdout]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stderr_color_st", "[stderr]")
|
||||
{
|
||||
TEST_CASE("stderr_color_st", "[stderr]") {
|
||||
auto l = spdlog::stderr_color_st("test");
|
||||
l->set_pattern("%+");
|
||||
l->set_level(spdlog::level::debug);
|
||||
@@ -68,8 +62,7 @@ TEST_CASE("stderr_color_st", "[stderr]")
|
||||
spdlog::drop_all();
|
||||
}
|
||||
|
||||
TEST_CASE("stderr_color_mt", "[stderr]")
|
||||
{
|
||||
TEST_CASE("stderr_color_mt", "[stderr]") {
|
||||
auto l = spdlog::stderr_color_mt("test");
|
||||
l->set_pattern("%+");
|
||||
l->info("Test stderr_color_mt");
|
||||
|
@@ -2,8 +2,7 @@
|
||||
#include "test_sink.h"
|
||||
#include "spdlog/stopwatch.h"
|
||||
|
||||
TEST_CASE("stopwatch1", "[stopwatch]")
|
||||
{
|
||||
TEST_CASE("stopwatch1", "[stopwatch]") {
|
||||
using std::chrono::milliseconds;
|
||||
using clock = std::chrono::steady_clock;
|
||||
milliseconds wait_ms(200);
|
||||
@@ -17,8 +16,7 @@ TEST_CASE("stopwatch1", "[stopwatch]")
|
||||
REQUIRE(sw.elapsed() <= diff_ms + tolerance_ms);
|
||||
}
|
||||
|
||||
TEST_CASE("stopwatch2", "[stopwatch]")
|
||||
{
|
||||
TEST_CASE("stopwatch2", "[stopwatch]") {
|
||||
using spdlog::sinks::test_sink_st;
|
||||
using std::chrono::duration_cast;
|
||||
using std::chrono::milliseconds;
|
||||
|
@@ -1,8 +1,7 @@
|
||||
#include "includes.h"
|
||||
#include "spdlog/sinks/systemd_sink.h"
|
||||
|
||||
TEST_CASE("systemd", "[all]")
|
||||
{
|
||||
TEST_CASE("systemd", "[all]") {
|
||||
auto systemd_sink = std::make_shared<spdlog::sinks::systemd_sink_st>();
|
||||
spdlog::logger logger("spdlog_systemd_test", systemd_sink);
|
||||
logger.set_level(spdlog::level::trace);
|
||||
|
@@ -2,8 +2,7 @@
|
||||
#include "test_sink.h"
|
||||
#include "spdlog/async.h"
|
||||
|
||||
TEST_CASE("time_point1", "[time_point log_msg]")
|
||||
{
|
||||
TEST_CASE("time_point1", "[time_point log_msg]") {
|
||||
std::shared_ptr<spdlog::sinks::test_sink_st> test_sink(new spdlog::sinks::test_sink_st);
|
||||
spdlog::logger logger("test-time_point", test_sink);
|
||||
|
||||
@@ -13,8 +12,7 @@ TEST_CASE("time_point1", "[time_point log_msg]")
|
||||
|
||||
// all the following should have the same time
|
||||
test_sink->set_delay(std::chrono::milliseconds(10));
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
for (int i = 0; i < 5; i++) {
|
||||
spdlog::details::log_msg msg{tp, source, "test_logger", spdlog::level::info, "message"};
|
||||
test_sink->log(msg);
|
||||
}
|
||||
@@ -23,7 +21,8 @@ TEST_CASE("time_point1", "[time_point log_msg]")
|
||||
logger.log(tp, source, spdlog::level::info, "formatted message");
|
||||
logger.log(tp, source, spdlog::level::info, "formatted message");
|
||||
logger.log(tp, source, spdlog::level::info, "formatted message");
|
||||
logger.log(source, spdlog::level::info, "formatted message"); // last line has different time_point
|
||||
logger.log(source, spdlog::level::info,
|
||||
"formatted message"); // last line has different time_point
|
||||
|
||||
// now the real test... that the times are the same.
|
||||
std::vector<std::string> lines = test_sink->lines();
|
||||
|
@@ -1,41 +1,35 @@
|
||||
#include "includes.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <windows.h>
|
||||
#include <windows.h>
|
||||
#else
|
||||
# include <sys/types.h>
|
||||
# include <dirent.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#endif
|
||||
|
||||
void prepare_logdir()
|
||||
{
|
||||
void prepare_logdir() {
|
||||
spdlog::drop_all();
|
||||
#ifdef _WIN32
|
||||
system("rmdir /S /Q test_logs");
|
||||
#else
|
||||
auto rv = system("rm -rf test_logs");
|
||||
if (rv != 0)
|
||||
{
|
||||
if (rv != 0) {
|
||||
throw std::runtime_error("Failed to rm -rf test_logs");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string file_contents(const std::string &filename)
|
||||
{
|
||||
std::string file_contents(const std::string &filename) {
|
||||
std::ifstream ifs(filename, std::ios_base::binary);
|
||||
if (!ifs)
|
||||
{
|
||||
if (!ifs) {
|
||||
throw std::runtime_error("Failed open file ");
|
||||
}
|
||||
return std::string((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
|
||||
}
|
||||
|
||||
std::size_t count_lines(const std::string &filename)
|
||||
{
|
||||
std::size_t count_lines(const std::string &filename) {
|
||||
std::ifstream ifs(filename);
|
||||
if (!ifs)
|
||||
{
|
||||
if (!ifs) {
|
||||
throw std::runtime_error("Failed open file ");
|
||||
}
|
||||
|
||||
@@ -46,23 +40,17 @@ std::size_t count_lines(const std::string &filename)
|
||||
return counter;
|
||||
}
|
||||
|
||||
void require_message_count(const std::string &filename, const std::size_t messages)
|
||||
{
|
||||
if (strlen(spdlog::details::os::default_eol) == 0)
|
||||
{
|
||||
void require_message_count(const std::string &filename, const std::size_t messages) {
|
||||
if (strlen(spdlog::details::os::default_eol) == 0) {
|
||||
REQUIRE(count_lines(filename) == 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
REQUIRE(count_lines(filename) == messages);
|
||||
}
|
||||
}
|
||||
|
||||
std::size_t get_filesize(const std::string &filename)
|
||||
{
|
||||
std::size_t get_filesize(const std::string &filename) {
|
||||
std::ifstream ifs(filename, std::ifstream::ate | std::ifstream::binary);
|
||||
if (!ifs)
|
||||
{
|
||||
if (!ifs) {
|
||||
throw std::runtime_error("Failed open file ");
|
||||
}
|
||||
|
||||
@@ -70,10 +58,8 @@ std::size_t get_filesize(const std::string &filename)
|
||||
}
|
||||
|
||||
// source: https://stackoverflow.com/a/2072890/192001
|
||||
bool ends_with(std::string const &value, std::string const &ending)
|
||||
{
|
||||
if (ending.size() > value.size())
|
||||
{
|
||||
bool ends_with(std::string const &value, std::string const &ending) {
|
||||
if (ending.size() > value.size()) {
|
||||
return false;
|
||||
}
|
||||
return std::equal(ending.rbegin(), ending.rend(), value.rbegin());
|
||||
@@ -81,24 +67,20 @@ bool ends_with(std::string const &value, std::string const &ending)
|
||||
|
||||
#ifdef _WIN32
|
||||
// Based on: https://stackoverflow.com/a/37416569/192001
|
||||
std::size_t count_files(const std::string &folder)
|
||||
{
|
||||
std::size_t count_files(const std::string &folder) {
|
||||
size_t counter = 0;
|
||||
WIN32_FIND_DATAA ffd;
|
||||
|
||||
// Start iterating over the files in the folder directory.
|
||||
HANDLE hFind = ::FindFirstFileA((folder + "\\*").c_str(), &ffd);
|
||||
if (hFind != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (hFind != INVALID_HANDLE_VALUE) {
|
||||
do // Managed to locate and create an handle to that folder.
|
||||
{
|
||||
if (ffd.cFileName[0] != '.')
|
||||
counter++;
|
||||
} while (::FindNextFileA(hFind, &ffd) != 0);
|
||||
::FindClose(hFind);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
throw std::runtime_error("Failed open folder " + folder);
|
||||
}
|
||||
|
||||
@@ -106,18 +88,15 @@ std::size_t count_files(const std::string &folder)
|
||||
}
|
||||
#else
|
||||
// Based on: https://stackoverflow.com/a/2802255/192001
|
||||
std::size_t count_files(const std::string &folder)
|
||||
{
|
||||
std::size_t count_files(const std::string &folder) {
|
||||
size_t counter = 0;
|
||||
DIR *dp = opendir(folder.c_str());
|
||||
if (dp == nullptr)
|
||||
{
|
||||
if (dp == nullptr) {
|
||||
throw std::runtime_error("Failed open folder " + folder);
|
||||
}
|
||||
|
||||
struct dirent *ep = nullptr;
|
||||
while ((ep = readdir(dp)) != nullptr)
|
||||
{
|
||||
while ((ep = readdir(dp)) != nullptr) {
|
||||
if (ep->d_name[0] != '.')
|
||||
counter++;
|
||||
}
|
||||
|
Reference in New Issue
Block a user