From 9f2a7e58fb8a30e630d8b465d2ba832a861579c2 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Wed, 15 Nov 2023 12:13:00 +0100 Subject: add doctest listener so we can output when test/subtests begin (#538) * add doctest listener so we can output when test/subtests begin * disable sentry when running a test server --- src/zencore/testing.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src/zencore/testing.cpp') diff --git a/src/zencore/testing.cpp b/src/zencore/testing.cpp index 54d89ded2..936424e0f 100644 --- a/src/zencore/testing.cpp +++ b/src/zencore/testing.cpp @@ -5,12 +5,64 @@ #if ZEN_WITH_TESTS +# include + namespace zen::testing { using namespace std::literals; +struct TestListener : public doctest::IReporter +{ + const std::string_view ColorYellow = "\033[0;33m"sv; + const std::string_view ColorNone = "\033[0m"sv; + + // constructor has to accept the ContextOptions by ref as a single argument + TestListener(const doctest::ContextOptions&) {} + + void report_query(const doctest::QueryData& /*in*/) override {} + + void test_run_start() override {} + + void test_run_end(const doctest::TestRunStats& /*in*/) override {} + + void test_case_start(const doctest::TestCaseData& in) override + { + Current = ∈ + ZEN_CONSOLE("{}======== TEST_CASE: {:<50} ========{}", ColorYellow, Current->m_name, ColorNone); + } + + // called when a test case is reentered because of unfinished subcases + void test_case_reenter(const doctest::TestCaseData& /*in*/) override + { + ZEN_CONSOLE("{}-------------------------------------------------------------------------------{}", ColorYellow, ColorNone); + } + + void test_case_end(const doctest::CurrentTestCaseStats& /*in*/) override { Current = nullptr; } + + void test_case_exception(const doctest::TestCaseException& /*in*/) override {} + + void subcase_start(const doctest::SubcaseSignature& in) override + { + ZEN_CONSOLE("{}-------- SUBCASE: {:<50} --------{}", + ColorYellow, + fmt::format("{}/{}", Current->m_name, in.m_name.c_str()), + ColorNone); + } + + void subcase_end() override {} + + void log_assert(const doctest::AssertData& /*in*/) override {} + + void log_message(const doctest::MessageData& /*in*/) override {} + + void test_case_skipped(const doctest::TestCaseData& /*in*/) override {} + + const doctest::TestCaseData* Current = nullptr; +}; + struct TestRunner::Impl { + Impl() { REGISTER_LISTENER("ZenTestListener", 1, TestListener); } doctest::Context Session; }; -- cgit v1.2.3