Skip to content

Commit

Permalink
Hold reporter's IConfig instance in the interface
Browse files Browse the repository at this point in the history
Previously, every base derived from the IStreamingReporter had
its own `IConfig const* m_config` member, so this just centralizes
the handling thereof.

Part of #2061
  • Loading branch information
horenmar committed Jan 16, 2021
1 parent ba81505 commit 74f2f4b
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/catch2/catch_session.cpp
Expand Up @@ -48,7 +48,7 @@ namespace Catch {
// doesn't compile without a std::move call. However, this causes
// a warning on newer platforms. Thus, we have to work around
// it a bit and downcast the pointer manually.
auto ret = Detail::unique_ptr<IStreamingReporter>(new ListeningReporter);
auto ret = Detail::unique_ptr<IStreamingReporter>(new ListeningReporter(config));
auto& multi = static_cast<ListeningReporter&>(*ret);
auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners();
for (auto const& listener : listeners) {
Expand Down
5 changes: 5 additions & 0 deletions src/catch2/interfaces/catch_interfaces_reporter.hpp
Expand Up @@ -176,7 +176,12 @@ namespace Catch {
protected:
//! Derived classes can set up their preferences here
ReporterPreferences m_preferences;
//! The test run's config as filled in from CLI and defaults
IConfig const* m_config;

public:
IStreamingReporter( IConfig const* config ): m_config( config ) {}

virtual ~IStreamingReporter() = default;

// Implementing class must also provide the following static methods:
Expand Down
4 changes: 2 additions & 2 deletions src/catch2/reporters/catch_reporter_cumulative_base.hpp
Expand Up @@ -46,7 +46,8 @@ namespace Catch {
using TestRunNode = Node<TestRunStats, TestGroupNode>;

CumulativeReporterBase( ReporterConfig const& _config ):
m_config( _config.fullConfig() ), stream( _config.stream() ) {}
IStreamingReporter( _config.fullConfig() ),
stream( _config.stream() ) {}
~CumulativeReporterBase() override;

void testRunStarting( TestRunInfo const& ) override {}
Expand All @@ -68,7 +69,6 @@ namespace Catch {

void skipTest(TestCaseInfo const&) override {}

IConfig const* m_config;
std::ostream& stream;
// Note: We rely on pointer identity being stable, which is why
// which is why we store around pointers rather than values.
Expand Down
4 changes: 1 addition & 3 deletions src/catch2/reporters/catch_reporter_event_listener.hpp
Expand Up @@ -20,11 +20,9 @@ namespace Catch {
* member functions it actually cares about.
*/
class EventListenerBase : public IStreamingReporter {
IConfig const* m_config;

public:
EventListenerBase( ReporterConfig const& config ):
m_config( config.fullConfig() ) {}
IStreamingReporter( config.fullConfig() ) {}

void assertionStarting( AssertionInfo const& assertionInfo ) override;
bool assertionEnded( AssertionStats const& assertionStats ) override;
Expand Down
5 changes: 0 additions & 5 deletions src/catch2/reporters/catch_reporter_listening.cpp
Expand Up @@ -11,11 +11,6 @@

namespace Catch {

ListeningReporter::ListeningReporter() {
// We will assume that listeners will always want all assertions
m_preferences.shouldReportAllAssertions = true;
}

void ListeningReporter::addListener( IStreamingReporterPtr&& listener ) {
m_listeners.push_back( std::move( listener ) );
}
Expand Down
7 changes: 6 additions & 1 deletion src/catch2/reporters/catch_reporter_listening.hpp
Expand Up @@ -18,7 +18,12 @@ namespace Catch {
IStreamingReporterPtr m_reporter = nullptr;

public:
ListeningReporter();
ListeningReporter( IConfig const* config ):
IStreamingReporter( config ) {
// We will assume that listeners will always want all assertions
m_preferences.shouldReportAllAssertions = true;
}


void addListener( IStreamingReporterPtr&& listener );
void addReporter( IStreamingReporterPtr&& reporter );
Expand Down
5 changes: 2 additions & 3 deletions src/catch2/reporters/catch_reporter_streaming_base.hpp
Expand Up @@ -36,8 +36,8 @@ namespace Catch {
struct StreamingReporterBase : IStreamingReporter {

StreamingReporterBase( ReporterConfig const& _config ):
m_config( _config.fullConfig() ), stream( _config.stream() ) {
}
IStreamingReporter( _config.fullConfig() ),
stream( _config.stream() ) {}


~StreamingReporterBase() override;
Expand Down Expand Up @@ -71,7 +71,6 @@ namespace Catch {
// It can optionally be overridden in the derived class.
}

IConfig const* m_config;
std::ostream& stream;

LazyStat<TestRunInfo> currentTestRunInfo;
Expand Down

0 comments on commit 74f2f4b

Please sign in to comment.