diff --git a/src/catch2/catch_session.cpp b/src/catch2/catch_session.cpp index a9519e7519..5b1a50a929 100644 --- a/src/catch2/catch_session.cpp +++ b/src/catch2/catch_session.cpp @@ -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(new ListeningReporter); + auto ret = Detail::unique_ptr(new ListeningReporter(config)); auto& multi = static_cast(*ret); auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners(); for (auto const& listener : listeners) { diff --git a/src/catch2/interfaces/catch_interfaces_reporter.hpp b/src/catch2/interfaces/catch_interfaces_reporter.hpp index 791cc99294..9dbd18473f 100644 --- a/src/catch2/interfaces/catch_interfaces_reporter.hpp +++ b/src/catch2/interfaces/catch_interfaces_reporter.hpp @@ -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: diff --git a/src/catch2/reporters/catch_reporter_cumulative_base.hpp b/src/catch2/reporters/catch_reporter_cumulative_base.hpp index 0b643ff15e..0729567c47 100644 --- a/src/catch2/reporters/catch_reporter_cumulative_base.hpp +++ b/src/catch2/reporters/catch_reporter_cumulative_base.hpp @@ -46,7 +46,8 @@ namespace Catch { using TestRunNode = Node; CumulativeReporterBase( ReporterConfig const& _config ): - m_config( _config.fullConfig() ), stream( _config.stream() ) {} + IStreamingReporter( _config.fullConfig() ), + stream( _config.stream() ) {} ~CumulativeReporterBase() override; void testRunStarting( TestRunInfo const& ) override {} @@ -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. diff --git a/src/catch2/reporters/catch_reporter_event_listener.hpp b/src/catch2/reporters/catch_reporter_event_listener.hpp index 816e42f63b..df089c08de 100644 --- a/src/catch2/reporters/catch_reporter_event_listener.hpp +++ b/src/catch2/reporters/catch_reporter_event_listener.hpp @@ -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; diff --git a/src/catch2/reporters/catch_reporter_listening.cpp b/src/catch2/reporters/catch_reporter_listening.cpp index f197842454..60059c8457 100644 --- a/src/catch2/reporters/catch_reporter_listening.cpp +++ b/src/catch2/reporters/catch_reporter_listening.cpp @@ -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 ) ); } diff --git a/src/catch2/reporters/catch_reporter_listening.hpp b/src/catch2/reporters/catch_reporter_listening.hpp index 8ac5283976..c6485300b6 100644 --- a/src/catch2/reporters/catch_reporter_listening.hpp +++ b/src/catch2/reporters/catch_reporter_listening.hpp @@ -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 ); diff --git a/src/catch2/reporters/catch_reporter_streaming_base.hpp b/src/catch2/reporters/catch_reporter_streaming_base.hpp index 5826f63b84..ebf0638501 100644 --- a/src/catch2/reporters/catch_reporter_streaming_base.hpp +++ b/src/catch2/reporters/catch_reporter_streaming_base.hpp @@ -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; @@ -71,7 +71,6 @@ namespace Catch { // It can optionally be overridden in the derived class. } - IConfig const* m_config; std::ostream& stream; LazyStat currentTestRunInfo;