mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-03 21:49:32 +01:00 
			
		
		
		
	Hold reporter's IConfig instance in the interface
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
This commit is contained in:
		@@ -48,7 +48,7 @@ namespace Catch {
 | 
				
			|||||||
            // doesn't compile without a std::move call. However, this causes
 | 
					            // doesn't compile without a std::move call. However, this causes
 | 
				
			||||||
            // a warning on newer platforms. Thus, we have to work around
 | 
					            // a warning on newer platforms. Thus, we have to work around
 | 
				
			||||||
            // it a bit and downcast the pointer manually.
 | 
					            // 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& multi = static_cast<ListeningReporter&>(*ret);
 | 
				
			||||||
            auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners();
 | 
					            auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners();
 | 
				
			||||||
            for (auto const& listener : listeners) {
 | 
					            for (auto const& listener : listeners) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -176,7 +176,12 @@ namespace Catch {
 | 
				
			|||||||
    protected:
 | 
					    protected:
 | 
				
			||||||
        //! Derived classes can set up their preferences here
 | 
					        //! Derived classes can set up their preferences here
 | 
				
			||||||
        ReporterPreferences m_preferences;
 | 
					        ReporterPreferences m_preferences;
 | 
				
			||||||
 | 
					        //! The test run's config as filled in from CLI and defaults
 | 
				
			||||||
 | 
					        IConfig const* m_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
 | 
					        IStreamingReporter( IConfig const* config ): m_config( config ) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual ~IStreamingReporter() = default;
 | 
					        virtual ~IStreamingReporter() = default;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Implementing class must also provide the following static methods:
 | 
					        // Implementing class must also provide the following static methods:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,8 @@ namespace Catch {
 | 
				
			|||||||
        using TestRunNode = Node<TestRunStats, TestGroupNode>;
 | 
					        using TestRunNode = Node<TestRunStats, TestGroupNode>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        CumulativeReporterBase( ReporterConfig const& _config ):
 | 
					        CumulativeReporterBase( ReporterConfig const& _config ):
 | 
				
			||||||
            m_config( _config.fullConfig() ), stream( _config.stream() ) {}
 | 
					            IStreamingReporter( _config.fullConfig() ),
 | 
				
			||||||
 | 
					            stream( _config.stream() ) {}
 | 
				
			||||||
        ~CumulativeReporterBase() override;
 | 
					        ~CumulativeReporterBase() override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void testRunStarting( TestRunInfo const& ) override {}
 | 
					        void testRunStarting( TestRunInfo const& ) override {}
 | 
				
			||||||
@@ -68,7 +69,6 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        void skipTest(TestCaseInfo const&) override {}
 | 
					        void skipTest(TestCaseInfo const&) override {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IConfig const* m_config;
 | 
					 | 
				
			||||||
        std::ostream& stream;
 | 
					        std::ostream& stream;
 | 
				
			||||||
        // Note: We rely on pointer identity being stable, which is why
 | 
					        // Note: We rely on pointer identity being stable, which is why
 | 
				
			||||||
        //       which is why we store around pointers rather than values.
 | 
					        //       which is why we store around pointers rather than values.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,11 +20,9 @@ namespace Catch {
 | 
				
			|||||||
     * member functions it actually cares about.
 | 
					     * member functions it actually cares about.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    class EventListenerBase : public IStreamingReporter {
 | 
					    class EventListenerBase : public IStreamingReporter {
 | 
				
			||||||
        IConfig const* m_config;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
        EventListenerBase( ReporterConfig const& config ):
 | 
					        EventListenerBase( ReporterConfig const& config ):
 | 
				
			||||||
            m_config( config.fullConfig() ) {}
 | 
					            IStreamingReporter( config.fullConfig() ) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void assertionStarting( AssertionInfo const& assertionInfo ) override;
 | 
					        void assertionStarting( AssertionInfo const& assertionInfo ) override;
 | 
				
			||||||
        bool assertionEnded( AssertionStats const& assertionStats ) override;
 | 
					        bool assertionEnded( AssertionStats const& assertionStats ) override;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,11 +11,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Catch {
 | 
					namespace Catch {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ListeningReporter::ListeningReporter() {
 | 
					 | 
				
			||||||
        // We will assume that listeners will always want all assertions
 | 
					 | 
				
			||||||
        m_preferences.shouldReportAllAssertions = true;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void ListeningReporter::addListener( IStreamingReporterPtr&& listener ) {
 | 
					    void ListeningReporter::addListener( IStreamingReporterPtr&& listener ) {
 | 
				
			||||||
        m_listeners.push_back( std::move( listener ) );
 | 
					        m_listeners.push_back( std::move( listener ) );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,12 @@ namespace Catch {
 | 
				
			|||||||
        IStreamingReporterPtr m_reporter = nullptr;
 | 
					        IStreamingReporterPtr m_reporter = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public:
 | 
					    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 addListener( IStreamingReporterPtr&& listener );
 | 
				
			||||||
        void addReporter( IStreamingReporterPtr&& reporter );
 | 
					        void addReporter( IStreamingReporterPtr&& reporter );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,8 +36,8 @@ namespace Catch {
 | 
				
			|||||||
    struct StreamingReporterBase : IStreamingReporter {
 | 
					    struct StreamingReporterBase : IStreamingReporter {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        StreamingReporterBase( ReporterConfig const& _config ):
 | 
					        StreamingReporterBase( ReporterConfig const& _config ):
 | 
				
			||||||
            m_config( _config.fullConfig() ), stream( _config.stream() ) {
 | 
					            IStreamingReporter( _config.fullConfig() ),
 | 
				
			||||||
        }
 | 
					            stream( _config.stream() ) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ~StreamingReporterBase() override;
 | 
					        ~StreamingReporterBase() override;
 | 
				
			||||||
@@ -71,7 +71,6 @@ namespace Catch {
 | 
				
			|||||||
            // It can optionally be overridden in the derived class.
 | 
					            // It can optionally be overridden in the derived class.
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IConfig const* m_config;
 | 
					 | 
				
			||||||
        std::ostream& stream;
 | 
					        std::ostream& stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        LazyStat<TestRunInfo> currentTestRunInfo;
 | 
					        LazyStat<TestRunInfo> currentTestRunInfo;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user