mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-03 21:49:32 +01:00 
			
		
		
		
	Migrated Config and IConfig to shared_ptr (from Ptr)
This commit is contained in:
		@@ -21,8 +21,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Catch {
 | 
					namespace Catch {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ptr<IStreamingReporter> createReporter( std::string const& reporterName, Ptr<Config> const& config ) {
 | 
					    Ptr<IStreamingReporter> createReporter( std::string const& reporterName, IConfigPtr const& config ) {
 | 
				
			||||||
        Ptr<IStreamingReporter> reporter = getRegistryHub().getReporterRegistry().create( reporterName, config.get() );
 | 
					        Ptr<IStreamingReporter> reporter = getRegistryHub().getReporterRegistry().create( reporterName, config );
 | 
				
			||||||
        if( !reporter ) {
 | 
					        if( !reporter ) {
 | 
				
			||||||
            std::ostringstream oss;
 | 
					            std::ostringstream oss;
 | 
				
			||||||
            oss << "No reporter registered with name: '" << reporterName << "'";
 | 
					            oss << "No reporter registered with name: '" << reporterName << "'";
 | 
				
			||||||
@@ -31,7 +31,7 @@ namespace Catch {
 | 
				
			|||||||
        return reporter;
 | 
					        return reporter;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ptr<IStreamingReporter> makeReporter( Ptr<Config> const& config ) {
 | 
					    Ptr<IStreamingReporter> makeReporter( std::shared_ptr<Config> const& config ) {
 | 
				
			||||||
        std::vector<std::string> reporters = config->getReporterNames();
 | 
					        std::vector<std::string> reporters = config->getReporterNames();
 | 
				
			||||||
        if( reporters.empty() )
 | 
					        if( reporters.empty() )
 | 
				
			||||||
            reporters.push_back( "console" );
 | 
					            reporters.push_back( "console" );
 | 
				
			||||||
@@ -41,7 +41,7 @@ namespace Catch {
 | 
				
			|||||||
            reporter = addReporter( reporter, createReporter( name, config ) );
 | 
					            reporter = addReporter( reporter, createReporter( name, config ) );
 | 
				
			||||||
        return reporter;
 | 
					        return reporter;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    Ptr<IStreamingReporter> addListeners( Ptr<IConfig const> const& config, Ptr<IStreamingReporter> reporters ) {
 | 
					    Ptr<IStreamingReporter> addListeners( IConfigPtr const& config, Ptr<IStreamingReporter> reporters ) {
 | 
				
			||||||
        IReporterRegistry::Listeners listeners = getRegistryHub().getReporterRegistry().getListeners();
 | 
					        IReporterRegistry::Listeners listeners = getRegistryHub().getReporterRegistry().getListeners();
 | 
				
			||||||
        for( auto const& listener : listeners )
 | 
					        for( auto const& listener : listeners )
 | 
				
			||||||
            reporters = addReporter(reporters, listener->create( ReporterConfig( config ) ) );
 | 
					            reporters = addReporter(reporters, listener->create( ReporterConfig( config ) ) );
 | 
				
			||||||
@@ -49,9 +49,9 @@ namespace Catch {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Totals runTests( Ptr<Config> const& config ) {
 | 
					    Totals runTests( std::shared_ptr<Config> const& config ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IConfig const> iconfig = config.get();
 | 
					        IConfigPtr iconfig = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IStreamingReporter> reporter = makeReporter( config );
 | 
					        Ptr<IStreamingReporter> reporter = makeReporter( config );
 | 
				
			||||||
        reporter = addListeners( iconfig, reporter );
 | 
					        reporter = addListeners( iconfig, reporter );
 | 
				
			||||||
@@ -195,14 +195,14 @@ namespace Catch {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        Config& config() {
 | 
					        Config& config() {
 | 
				
			||||||
            if( !m_config )
 | 
					            if( !m_config )
 | 
				
			||||||
                m_config = new Config( m_configData );
 | 
					                m_config = std::make_shared<Config>( m_configData );
 | 
				
			||||||
            return *m_config;
 | 
					            return *m_config;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
        Clara::CommandLine<ConfigData> m_cli;
 | 
					        Clara::CommandLine<ConfigData> m_cli;
 | 
				
			||||||
        std::vector<Clara::Parser::Token> m_unusedTokens;
 | 
					        std::vector<Clara::Parser::Token> m_unusedTokens;
 | 
				
			||||||
        ConfigData m_configData;
 | 
					        ConfigData m_configData;
 | 
				
			||||||
        Ptr<Config> m_config;
 | 
					        std::shared_ptr<Config> m_config;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool Session::alreadyInstantiated = false;
 | 
					    bool Session::alreadyInstantiated = false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,10 +56,7 @@ namespace Catch {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Config : public SharedImpl<IConfig> {
 | 
					    class Config : public IConfig {
 | 
				
			||||||
    private:
 | 
					 | 
				
			||||||
        Config( Config const& other );
 | 
					 | 
				
			||||||
        Config& operator = ( Config const& other );
 | 
					 | 
				
			||||||
        virtual void dummy();
 | 
					        virtual void dummy();
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,7 +89,7 @@ namespace {
 | 
				
			|||||||
    IColourImpl* platformColourInstance() {
 | 
					    IColourImpl* platformColourInstance() {
 | 
				
			||||||
        static Win32ColourImpl s_instance;
 | 
					        static Win32ColourImpl s_instance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IConfig const> config = getCurrentContext().getConfig();
 | 
					        IConfigPtr config = getCurrentContext().getConfig();
 | 
				
			||||||
        UseColour::YesOrNo colourMode = config
 | 
					        UseColour::YesOrNo colourMode = config
 | 
				
			||||||
            ? config->useColour()
 | 
					            ? config->useColour()
 | 
				
			||||||
            : UseColour::Auto;
 | 
					            : UseColour::Auto;
 | 
				
			||||||
@@ -150,7 +150,7 @@ namespace {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    IColourImpl* platformColourInstance() {
 | 
					    IColourImpl* platformColourInstance() {
 | 
				
			||||||
        ErrnoGuard guard;
 | 
					        ErrnoGuard guard;
 | 
				
			||||||
        Ptr<IConfig const> config = getCurrentContext().getConfig();
 | 
					        IConfigPtr config = getCurrentContext().getConfig();
 | 
				
			||||||
        UseColour::YesOrNo colourMode = config
 | 
					        UseColour::YesOrNo colourMode = config
 | 
				
			||||||
            ? config->useColour()
 | 
					            ? config->useColour()
 | 
				
			||||||
            : UseColour::Auto;
 | 
					            : UseColour::Auto;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,6 +21,8 @@ namespace Catch {
 | 
				
			|||||||
    struct IGeneratorsForTest;
 | 
					    struct IGeneratorsForTest;
 | 
				
			||||||
    struct IConfig;
 | 
					    struct IConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    using IConfigPtr = std::shared_ptr<IConfig const>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct IContext
 | 
					    struct IContext
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        virtual ~IContext();
 | 
					        virtual ~IContext();
 | 
				
			||||||
@@ -29,7 +31,7 @@ namespace Catch {
 | 
				
			|||||||
        virtual IRunner* getRunner() = 0;
 | 
					        virtual IRunner* getRunner() = 0;
 | 
				
			||||||
        virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) = 0;
 | 
					        virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) = 0;
 | 
				
			||||||
        virtual bool advanceGeneratorsForCurrentTest() = 0;
 | 
					        virtual bool advanceGeneratorsForCurrentTest() = 0;
 | 
				
			||||||
        virtual Ptr<IConfig const> getConfig() const = 0;
 | 
					        virtual IConfigPtr getConfig() const = 0;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct IMutableContext : IContext
 | 
					    struct IMutableContext : IContext
 | 
				
			||||||
@@ -37,7 +39,7 @@ namespace Catch {
 | 
				
			|||||||
        virtual ~IMutableContext();
 | 
					        virtual ~IMutableContext();
 | 
				
			||||||
        virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
 | 
					        virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
 | 
				
			||||||
        virtual void setRunner( IRunner* runner ) = 0;
 | 
					        virtual void setRunner( IRunner* runner ) = 0;
 | 
				
			||||||
        virtual void setConfig( Ptr<IConfig const> const& config ) = 0;
 | 
					        virtual void setConfig( IConfigPtr const& config ) = 0;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IContext& getCurrentContext();
 | 
					    IContext& getCurrentContext();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,7 +40,7 @@ namespace Catch {
 | 
				
			|||||||
            return generators && generators->moveNext();
 | 
					            return generators && generators->moveNext();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual Ptr<IConfig const> getConfig() const {
 | 
					        virtual IConfigPtr getConfig() const {
 | 
				
			||||||
            return m_config;
 | 
					            return m_config;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,7 +51,7 @@ namespace Catch {
 | 
				
			|||||||
        virtual void setRunner( IRunner* runner ) {
 | 
					        virtual void setRunner( IRunner* runner ) {
 | 
				
			||||||
            m_runner = runner;
 | 
					            m_runner = runner;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        virtual void setConfig( Ptr<IConfig const> const& config ) {
 | 
					        virtual void setConfig( IConfigPtr const& config ) {
 | 
				
			||||||
            m_config = config;
 | 
					            m_config = config;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,7 +79,7 @@ namespace Catch {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
        Ptr<IConfig const> m_config;
 | 
					        IConfigPtr m_config;
 | 
				
			||||||
        IRunner* m_runner = nullptr;
 | 
					        IRunner* m_runner = nullptr;
 | 
				
			||||||
        IResultCapture* m_resultCapture = nullptr;
 | 
					        IResultCapture* m_resultCapture = nullptr;
 | 
				
			||||||
        std::map<std::string, IGeneratorsForTest*> m_generatorsByTestName;
 | 
					        std::map<std::string, IGeneratorsForTest*> m_generatorsByTestName;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    class TestSpec;
 | 
					    class TestSpec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct IConfig : IShared {
 | 
					    struct IConfig : NonCopyable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual ~IConfig();
 | 
					        virtual ~IConfig();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -63,8 +63,9 @@ namespace Catch {
 | 
				
			|||||||
        virtual unsigned int rngSeed() const = 0;
 | 
					        virtual unsigned int rngSeed() const = 0;
 | 
				
			||||||
        virtual UseColour::YesOrNo useColour() const = 0;
 | 
					        virtual UseColour::YesOrNo useColour() const = 0;
 | 
				
			||||||
        virtual std::vector<std::string> const& getSectionsToRun() const = 0;
 | 
					        virtual std::vector<std::string> const& getSectionsToRun() const = 0;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    using IConfigPtr = std::shared_ptr<IConfig const>;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,18 +25,18 @@
 | 
				
			|||||||
namespace Catch
 | 
					namespace Catch
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    struct ReporterConfig {
 | 
					    struct ReporterConfig {
 | 
				
			||||||
        explicit ReporterConfig( Ptr<IConfig const> const& _fullConfig )
 | 
					        explicit ReporterConfig( IConfigPtr const& _fullConfig )
 | 
				
			||||||
        :   m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {}
 | 
					        :   m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ReporterConfig( Ptr<IConfig const> const& _fullConfig, std::ostream& _stream )
 | 
					        ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream )
 | 
				
			||||||
        :   m_stream( &_stream ), m_fullConfig( _fullConfig ) {}
 | 
					        :   m_stream( &_stream ), m_fullConfig( _fullConfig ) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        std::ostream& stream() const    { return *m_stream; }
 | 
					        std::ostream& stream() const    { return *m_stream; }
 | 
				
			||||||
        Ptr<IConfig const> fullConfig() const { return m_fullConfig; }
 | 
					        IConfigPtr fullConfig() const { return m_fullConfig; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
        std::ostream* m_stream;
 | 
					        std::ostream* m_stream;
 | 
				
			||||||
        Ptr<IConfig const> m_fullConfig;
 | 
					        IConfigPtr m_fullConfig;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct ReporterPreferences {
 | 
					    struct ReporterPreferences {
 | 
				
			||||||
@@ -247,7 +247,7 @@ namespace Catch
 | 
				
			|||||||
        typedef std::vector<Ptr<IReporterFactory> > Listeners;
 | 
					        typedef std::vector<Ptr<IReporterFactory> > Listeners;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual ~IReporterRegistry();
 | 
					        virtual ~IReporterRegistry();
 | 
				
			||||||
        virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig const> const& config ) const = 0;
 | 
					        virtual IStreamingReporter* create( std::string const& name, IConfigPtr const& config ) const = 0;
 | 
				
			||||||
        virtual FactoryMap const& getFactories() const = 0;
 | 
					        virtual FactoryMap const& getFactories() const = 0;
 | 
				
			||||||
        virtual Listeners const& getListeners() const = 0;
 | 
					        virtual Listeners const& getListeners() const = 0;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        virtual ~ReporterRegistry() override {}
 | 
					        virtual ~ReporterRegistry() override {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig const> const& config ) const override {
 | 
					        virtual IStreamingReporter* create( std::string const& name, IConfigPtr const& config ) const override {
 | 
				
			||||||
            FactoryMap::const_iterator it =  m_factories.find( name );
 | 
					            FactoryMap::const_iterator it =  m_factories.find( name );
 | 
				
			||||||
            if( it == m_factories.end() )
 | 
					            if( it == m_factories.end() )
 | 
				
			||||||
                return nullptr;
 | 
					                return nullptr;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,7 +59,7 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        explicit RunContext( Ptr<IConfig const> const& _config, Ptr<IStreamingReporter> const& reporter )
 | 
					        explicit RunContext( IConfigPtr const& _config, Ptr<IStreamingReporter> const& reporter )
 | 
				
			||||||
        :   m_runInfo( _config->name() ),
 | 
					        :   m_runInfo( _config->name() ),
 | 
				
			||||||
            m_context( getCurrentMutableContext() ),
 | 
					            m_context( getCurrentMutableContext() ),
 | 
				
			||||||
            m_config( _config ),
 | 
					            m_config( _config ),
 | 
				
			||||||
@@ -128,7 +128,7 @@ namespace Catch {
 | 
				
			|||||||
            return deltaTotals;
 | 
					            return deltaTotals;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IConfig const> config() const {
 | 
					        IConfigPtr config() const {
 | 
				
			||||||
            return m_config;
 | 
					            return m_config;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -353,7 +353,7 @@ namespace Catch {
 | 
				
			|||||||
        ITracker* m_currentSectionTracker;
 | 
					        ITracker* m_currentSectionTracker;
 | 
				
			||||||
        AssertionResult m_lastResult;
 | 
					        AssertionResult m_lastResult;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IConfig const> m_config;
 | 
					        IConfigPtr m_config;
 | 
				
			||||||
        Totals m_totals;
 | 
					        Totals m_totals;
 | 
				
			||||||
        Ptr<IStreamingReporter> m_reporter;
 | 
					        Ptr<IStreamingReporter> m_reporter;
 | 
				
			||||||
        std::vector<MessageInfo> m_messages;
 | 
					        std::vector<MessageInfo> m_messages;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,7 +92,7 @@ namespace Catch {
 | 
				
			|||||||
            // It can optionally be overridden in the derived class.
 | 
					            // It can optionally be overridden in the derived class.
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IConfig const> m_config;
 | 
					        IConfigPtr m_config;
 | 
				
			||||||
        std::ostream& stream;
 | 
					        std::ostream& stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        LazyStat<TestRunInfo> currentTestRunInfo;
 | 
					        LazyStat<TestRunInfo> currentTestRunInfo;
 | 
				
			||||||
@@ -244,7 +244,7 @@ namespace Catch {
 | 
				
			|||||||
                result.expandDecomposedExpression();
 | 
					                result.expandDecomposedExpression();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IConfig const> m_config;
 | 
					        IConfigPtr m_config;
 | 
				
			||||||
        std::ostream& stream;
 | 
					        std::ostream& stream;
 | 
				
			||||||
        std::vector<AssertionStats> m_assertions;
 | 
					        std::vector<AssertionStats> m_assertions;
 | 
				
			||||||
        std::vector<std::vector<Ptr<SectionNode> > > m_sections;
 | 
					        std::vector<std::vector<Ptr<SectionNode> > > m_sections;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user