12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // Copyright Catch2 Authors
- // Distributed under the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt or copy at
- // https://www.boost.org/LICENSE_1_0.txt)
- // SPDX-License-Identifier: BSL-1.0
- /**\file
- * Test that the cumulative reporter base stores both assertions and
- * benchmarks, and stores them in the right order.
- *
- * This is done through a custom reporter that writes out the assertions
- * and benchmarks and checking that the output is in right order.
- */
- #include <catch2/catch_test_macros.hpp>
- #include <catch2/benchmark/catch_benchmark.hpp>
- #include <catch2/reporters/catch_reporter_cumulative_base.hpp>
- #include <catch2/reporters/catch_reporter_registrars.hpp>
- #include <iostream>
- #include <utility>
- class CumulativeBenchmarkReporter final : public Catch::CumulativeReporterBase {
- public:
- CumulativeBenchmarkReporter(Catch::ReporterConfig&& _config) :
- CumulativeReporterBase(std::move(_config)) {
- m_preferences.shouldReportAllAssertions = true;
- }
- static std::string getDescription() {
- return "Custom reporter for testing cumulative reporter base";
- }
- virtual void testRunEndedCumulative() override;
- };
- CATCH_REGISTER_REPORTER("testReporter", CumulativeBenchmarkReporter)
- #include <chrono>
- #include <thread>
- TEST_CASE("Some assertions and benchmarks") {
- using namespace std::chrono_literals;
- REQUIRE(1);
- BENCHMARK("2") {
- std::this_thread::sleep_for(1ms);
- };
- REQUIRE(3);
- BENCHMARK("4") {
- std::this_thread::sleep_for(1ms);
- };
- REQUIRE(5);
- }
- void CumulativeBenchmarkReporter::testRunEndedCumulative() {
- auto const& testCases = m_testRun->children;
- assert(testCases.size() == 1);
- auto const& testCase = *testCases.front();
- auto const& sections = testCase.children;
- assert(sections.size() == 1);
- auto const& section = *sections.front();
- assert(section.childSections.empty());
- for (auto const& aob : section.assertionsAndBenchmarks) {
- if (aob.isAssertion()) {
- auto const& assertion = aob.asAssertion();
- std::cout << assertion.assertionResult.getExpandedExpression() << '\n';
- }
- if (aob.isBenchmark()) {
- auto const& bench = aob.asBenchmark();
- std::cout << bench.info.name << '\n';
- }
- }
- }
|