File: test_logging.cpp

package info (click to toggle)
libtcod 1.24.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 5,728 kB
  • sloc: ansic: 46,186; cpp: 13,523; python: 4,814; makefile: 44; sh: 25
file content (41 lines) | stat: -rw-r--r-- 1,339 bytes parent folder | download | duplicates (2)
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
#include <libtcod/logging.h>

#include <catch2/catch_all.hpp>
#include <string>

struct CapturedLog {
  friend bool operator==(const CapturedLog& lhs, const CapturedLog& rhs) {
    return lhs.message == rhs.message && lhs.level == rhs.level && lhs.source == rhs.source && lhs.line == rhs.line;
  }
  std::string message;
  int level;
  std::string source;
  int line;
};

using LogStorage = std::vector<CapturedLog>;

static void logger_callback(const TCOD_LogMessage* message, void* userdata) {
  static_cast<LogStorage*>(userdata)->push_back(CapturedLog{
      message->message,
      message->level,
      message->source,
      message->lineno,
  });
}

TEST_CASE("Logging tests") {
  auto log = LogStorage{};
  TCOD_set_log_callback(&logger_callback, static_cast<void*>(&log));
  TCOD_set_log_level(TCOD_LOG_INFO);
  TCOD_log_verbose_("DEBUG", TCOD_LOG_DEBUG, "source", 0);
  TCOD_log_verbose_fmt_(TCOD_LOG_INFO, "source", 1, "%s", "INFO");
  TCOD_log_verbose_fmt_(TCOD_LOG_WARNING, "source", 2, "%s", "WARNING");
  TCOD_log_verbose_("ERROR", TCOD_LOG_ERROR, "source", 3);
  REQUIRE(
      log == LogStorage{
                 CapturedLog{"INFO", TCOD_LOG_INFO, "source", 1},
                 CapturedLog{"WARNING", TCOD_LOG_WARNING, "source", 2},
                 CapturedLog{"ERROR", TCOD_LOG_ERROR, "source", 3},
             });
}