mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-29 16:53:30 +01:00
Add common ReporterBase as parent of the helper bases
This is useful as a centralized place for handling common reporter problems like handling output streams, and soon also colour impl handling.
This commit is contained in:
parent
4dd5e2eece
commit
05d4ec62c8
@ -70,7 +70,7 @@ out in batch after each runthrough of a test case is finished.
|
||||
You can also write your own custom reporter and tell Catch2 to use it.
|
||||
When writing your reporter, you have two options:
|
||||
|
||||
* Derive from `Catch::IStreamingReporter`. When doing this, you will have
|
||||
* Derive from `Catch::ReporterBase`. When doing this, you will have
|
||||
to provide handling for all [reporter events](reporter-events.md#top).
|
||||
* Derive from one of the provided [utility reporter bases in
|
||||
Catch2](#utility-reporter-bases).
|
||||
|
@ -213,6 +213,7 @@ set(INTERNAL_FILES ${IMPL_SOURCES} ${INTERNAL_HEADERS})
|
||||
set(REPORTER_HEADERS
|
||||
${SOURCES_DIR}/reporters/catch_reporters_all.hpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_automake.hpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_common_base.hpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_compact.hpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_console.hpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_cumulative_base.hpp
|
||||
@ -229,6 +230,7 @@ set(REPORTER_HEADERS
|
||||
set(REPORTER_SOURCES
|
||||
${SOURCES_DIR}/reporters/catch_reporter_automake.cpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_combined_tu.cpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_common_base.cpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_compact.cpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_console.cpp
|
||||
${SOURCES_DIR}/reporters/catch_reporter_cumulative_base.cpp
|
||||
|
30
src/catch2/reporters/catch_reporter_common_base.cpp
Normal file
30
src/catch2/reporters/catch_reporter_common_base.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
|
||||
// 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
|
||||
|
||||
#include <catch2/reporters/catch_reporter_common_base.hpp>
|
||||
|
||||
#include <catch2/reporters/catch_reporter_helpers.hpp>
|
||||
|
||||
namespace Catch {
|
||||
|
||||
void ReporterBase::listReporters(std::vector<ReporterDescription> const& descriptions) {
|
||||
defaultListReporters(m_stream, descriptions, m_config->verbosity());
|
||||
}
|
||||
|
||||
void ReporterBase::listTests(std::vector<TestCaseHandle> const& tests) {
|
||||
defaultListTests(m_stream,
|
||||
tests,
|
||||
m_config->hasTestFilters(),
|
||||
m_config->verbosity());
|
||||
}
|
||||
|
||||
void ReporterBase::listTags(std::vector<TagInfo> const& tags) {
|
||||
defaultListTags( m_stream, tags, m_config->hasTestFilters() );
|
||||
}
|
||||
|
||||
} // namespace Catch
|
61
src/catch2/reporters/catch_reporter_common_base.hpp
Normal file
61
src/catch2/reporters/catch_reporter_common_base.hpp
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
// 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
|
||||
#ifndef CATCH_REPORTER_COMMON_BASE_HPP_INCLUDED
|
||||
#define CATCH_REPORTER_COMMON_BASE_HPP_INCLUDED
|
||||
|
||||
#include <catch2/interfaces/catch_interfaces_reporter.hpp>
|
||||
|
||||
namespace Catch {
|
||||
/**
|
||||
* This is the base class for all reporters.
|
||||
*
|
||||
* If are writing a reporter, you must derive from this type, or one
|
||||
* of the helper reporter bases that are derived from this type.
|
||||
*
|
||||
* ReporterBase centralizes handling of various common tasks in reporters,
|
||||
* like storing the right stream for the reporters to write to, and
|
||||
* providing the default implementation of the different listing events.
|
||||
*/
|
||||
class ReporterBase : public IEventListener {
|
||||
protected:
|
||||
//! Stream to write the output to
|
||||
std::ostream& m_stream;
|
||||
|
||||
public:
|
||||
ReporterBase( ReporterConfig const& config ):
|
||||
IEventListener( config.fullConfig() ),
|
||||
m_stream( config.stream() ) {}
|
||||
|
||||
|
||||
/**
|
||||
* Provides a simple default listing of reporters.
|
||||
*
|
||||
* Should look roughly like the reporter listing in v2 and earlier
|
||||
* versions of Catch2.
|
||||
*/
|
||||
void listReporters(
|
||||
std::vector<ReporterDescription> const& descriptions ) override;
|
||||
/**
|
||||
* Provides a simple default listing of tests.
|
||||
*
|
||||
* Should look roughly like the test listing in v2 and earlier versions
|
||||
* of Catch2. Especially supports low-verbosity listing that mimics the
|
||||
* old `--list-test-names-only` output.
|
||||
*/
|
||||
void listTests( std::vector<TestCaseHandle> const& tests ) override;
|
||||
/**
|
||||
* Provides a simple default listing of tags.
|
||||
*
|
||||
* Should look roughly like the tag listing in v2 and earlier versions
|
||||
* of Catch2.
|
||||
*/
|
||||
void listTags( std::vector<TagInfo> const& tags ) override;
|
||||
};
|
||||
} // namespace Catch
|
||||
|
||||
#endif // CATCH_REPORTER_COMMON_BASE_HPP_INCLUDED
|
@ -6,7 +6,6 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
#include <catch2/reporters/catch_reporter_cumulative_base.hpp>
|
||||
#include <catch2/reporters/catch_reporter_helpers.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
@ -145,21 +144,6 @@ namespace Catch {
|
||||
testRunEndedCumulative();
|
||||
}
|
||||
|
||||
void CumulativeReporterBase::listReporters(std::vector<ReporterDescription> const& descriptions) {
|
||||
defaultListReporters(m_stream, descriptions, m_config->verbosity());
|
||||
}
|
||||
|
||||
void CumulativeReporterBase::listTests(std::vector<TestCaseHandle> const& tests) {
|
||||
defaultListTests(m_stream,
|
||||
tests,
|
||||
m_config->hasTestFilters(),
|
||||
m_config->verbosity());
|
||||
}
|
||||
|
||||
void CumulativeReporterBase::listTags(std::vector<TagInfo> const& tags) {
|
||||
defaultListTags( m_stream, tags, m_config->hasTestFilters() );
|
||||
}
|
||||
|
||||
bool CumulativeReporterBase::SectionNode::hasAnyAssertions() const {
|
||||
return std::any_of(
|
||||
assertionsAndBenchmarks.begin(),
|
||||
|
@ -8,7 +8,7 @@
|
||||
#ifndef CATCH_REPORTER_CUMULATIVE_BASE_HPP_INCLUDED
|
||||
#define CATCH_REPORTER_CUMULATIVE_BASE_HPP_INCLUDED
|
||||
|
||||
#include <catch2/interfaces/catch_interfaces_reporter.hpp>
|
||||
#include <catch2/reporters/catch_reporter_common_base.hpp>
|
||||
#include <catch2/internal/catch_unique_ptr.hpp>
|
||||
#include <catch2/internal/catch_optional.hpp>
|
||||
|
||||
@ -59,7 +59,7 @@ namespace Catch {
|
||||
* performance. **Accessing the assertion expansions if it wasn't stored is
|
||||
* UB.**
|
||||
*/
|
||||
class CumulativeReporterBase : public IEventListener {
|
||||
class CumulativeReporterBase : public ReporterBase {
|
||||
public:
|
||||
template<typename T, typename ChildNodeT>
|
||||
struct Node {
|
||||
@ -90,8 +90,7 @@ namespace Catch {
|
||||
using TestRunNode = Node<TestRunStats, TestCaseNode>;
|
||||
|
||||
CumulativeReporterBase( ReporterConfig const& _config ):
|
||||
IEventListener( _config.fullConfig() ),
|
||||
m_stream( _config.stream() ) {}
|
||||
ReporterBase( _config ) {}
|
||||
~CumulativeReporterBase() override;
|
||||
|
||||
void benchmarkPreparing( StringRef ) override {}
|
||||
@ -121,19 +120,12 @@ namespace Catch {
|
||||
|
||||
void skipTest(TestCaseInfo const&) override {}
|
||||
|
||||
void listReporters( std::vector<ReporterDescription> const& descriptions ) override;
|
||||
void listTests( std::vector<TestCaseHandle> const& tests ) override;
|
||||
void listTags( std::vector<TagInfo> const& tags ) override;
|
||||
|
||||
protected:
|
||||
//! Should the cumulative base store the assertion expansion for succesful assertions?
|
||||
bool m_shouldStoreSuccesfulAssertions = true;
|
||||
//! Should the cumulative base store the assertion expansion for failed assertions?
|
||||
bool m_shouldStoreFailedAssertions = true;
|
||||
|
||||
//! Stream to write the output to
|
||||
std::ostream& m_stream;
|
||||
|
||||
// We need lazy construction here. We should probably refactor it
|
||||
// later, after the events are redone.
|
||||
//! The root node of the test run tree.
|
||||
|
@ -6,7 +6,6 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
#include <catch2/reporters/catch_reporter_streaming_base.hpp>
|
||||
#include <catch2/reporters/catch_reporter_helpers.hpp>
|
||||
|
||||
namespace Catch {
|
||||
|
||||
@ -21,19 +20,4 @@ namespace Catch {
|
||||
currentTestCaseInfo = nullptr;
|
||||
}
|
||||
|
||||
void StreamingReporterBase::listReporters(std::vector<ReporterDescription> const& descriptions) {
|
||||
defaultListReporters( m_stream, descriptions, m_config->verbosity() );
|
||||
}
|
||||
|
||||
void StreamingReporterBase::listTests(std::vector<TestCaseHandle> const& tests) {
|
||||
defaultListTests(m_stream,
|
||||
tests,
|
||||
m_config->hasTestFilters(),
|
||||
m_config->verbosity());
|
||||
}
|
||||
|
||||
void StreamingReporterBase::listTags(std::vector<TagInfo> const& tags) {
|
||||
defaultListTags( m_stream, tags, m_config->hasTestFilters() );
|
||||
}
|
||||
|
||||
} // end namespace Catch
|
||||
|
@ -8,7 +8,7 @@
|
||||
#ifndef CATCH_REPORTER_STREAMING_BASE_HPP_INCLUDED
|
||||
#define CATCH_REPORTER_STREAMING_BASE_HPP_INCLUDED
|
||||
|
||||
#include <catch2/interfaces/catch_interfaces_reporter.hpp>
|
||||
#include <catch2/reporters/catch_reporter_common_base.hpp>
|
||||
|
||||
#include <iosfwd>
|
||||
#include <string>
|
||||
@ -16,11 +16,10 @@
|
||||
|
||||
namespace Catch {
|
||||
|
||||
class StreamingReporterBase : public IEventListener {
|
||||
class StreamingReporterBase : public ReporterBase {
|
||||
public:
|
||||
StreamingReporterBase( ReporterConfig const& _config ):
|
||||
IEventListener( _config.fullConfig() ),
|
||||
m_stream( _config.stream() ) {}
|
||||
ReporterBase( _config ) {}
|
||||
|
||||
|
||||
~StreamingReporterBase() override;
|
||||
@ -61,14 +60,7 @@ namespace Catch {
|
||||
// It can optionally be overridden in the derived class.
|
||||
}
|
||||
|
||||
void listReporters( std::vector<ReporterDescription> const& descriptions ) override;
|
||||
void listTests( std::vector<TestCaseHandle> const& tests ) override;
|
||||
void listTags( std::vector<TagInfo> const& tags ) override;
|
||||
|
||||
protected:
|
||||
//! Stream that the reporter output should be written to
|
||||
std::ostream& m_stream;
|
||||
|
||||
TestRunInfo currentTestRunInfo{ "test run has not started yet"_sr };
|
||||
TestCaseInfo const* currentTestCaseInfo = nullptr;
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#define CATCH_REPORTERS_ALL_HPP_INCLUDED
|
||||
|
||||
#include <catch2/reporters/catch_reporter_automake.hpp>
|
||||
#include <catch2/reporters/catch_reporter_common_base.hpp>
|
||||
#include <catch2/reporters/catch_reporter_compact.hpp>
|
||||
#include <catch2/reporters/catch_reporter_console.hpp>
|
||||
#include <catch2/reporters/catch_reporter_cumulative_base.hpp>
|
||||
|
Loading…
Reference in New Issue
Block a user