aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/spdlog/tests/test_ringbuffer.cpp
blob: 81d791656eaeefd14cfb8476f506792e13c421d8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "includes.h"
#include "spdlog/sinks/ringbuffer_sink.h"

TEST_CASE("ringbuffer invalid size", "[ringbuffer]") {
    REQUIRE_THROWS_AS(spdlog::sinks::ringbuffer_sink_mt(0), spdlog::spdlog_ex);
}

TEST_CASE("ringbuffer stores formatted messages", "[ringbuffer]") {
    spdlog::sinks::ringbuffer_sink_st sink(3);
    sink.set_pattern("%v");

    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "msg1"});
    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "msg2"});
    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "msg3"});

    auto formatted = sink.last_formatted();
    REQUIRE(formatted.size() == 3);
    using spdlog::details::os::default_eol;
    REQUIRE(formatted[0] == spdlog::fmt_lib::format("msg1{}", default_eol));
    REQUIRE(formatted[1] == spdlog::fmt_lib::format("msg2{}", default_eol));
    REQUIRE(formatted[2] == spdlog::fmt_lib::format("msg3{}", default_eol));
}

TEST_CASE("ringbuffer overrun keeps last items", "[ringbuffer]") {
    spdlog::sinks::ringbuffer_sink_st sink(2);
    sink.set_pattern("%v");

    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "first"});
    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "second"});
    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "third"});

    auto formatted = sink.last_formatted();
    REQUIRE(formatted.size() == 2);
    using spdlog::details::os::default_eol;
    REQUIRE(formatted[0] == spdlog::fmt_lib::format("second{}", default_eol));
    REQUIRE(formatted[1] == spdlog::fmt_lib::format("third{}", default_eol));
}

TEST_CASE("ringbuffer retrieval limit", "[ringbuffer]") {
    spdlog::sinks::ringbuffer_sink_st sink(3);
    sink.set_pattern("%v");

    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "A"});
    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "B"});
    sink.log(spdlog::details::log_msg{"test", spdlog::level::info, "C"});

    auto formatted = sink.last_formatted(2);
    REQUIRE(formatted.size() == 2);
    using spdlog::details::os::default_eol;
    REQUIRE(formatted[0] == spdlog::fmt_lib::format("B{}", default_eol));
    REQUIRE(formatted[1] == spdlog::fmt_lib::format("C{}", default_eol));
}