mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-03 21:49:32 +01:00 
			
		
		
		
	Migrated IReporterFactory to std::shared_ptr
This commit is contained in:
		@@ -22,6 +22,8 @@ namespace Catch {
 | 
				
			|||||||
    struct IReporterFactory;
 | 
					    struct IReporterFactory;
 | 
				
			||||||
    struct ITagAliasRegistry;
 | 
					    struct ITagAliasRegistry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct IRegistryHub {
 | 
					    struct IRegistryHub {
 | 
				
			||||||
        virtual ~IRegistryHub();
 | 
					        virtual ~IRegistryHub();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,8 +36,8 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    struct IMutableRegistryHub {
 | 
					    struct IMutableRegistryHub {
 | 
				
			||||||
        virtual ~IMutableRegistryHub();
 | 
					        virtual ~IMutableRegistryHub();
 | 
				
			||||||
        virtual void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) = 0;
 | 
					        virtual void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) = 0;
 | 
				
			||||||
        virtual void registerListener( Ptr<IReporterFactory> const& factory ) = 0;
 | 
					        virtual void registerListener( IReporterFactoryPtr const& factory ) = 0;
 | 
				
			||||||
        virtual void registerTest( TestCase const& testInfo ) = 0;
 | 
					        virtual void registerTest( TestCase const& testInfo ) = 0;
 | 
				
			||||||
        virtual void registerTranslator( const IExceptionTranslator* translator ) = 0;
 | 
					        virtual void registerTranslator( const IExceptionTranslator* translator ) = 0;
 | 
				
			||||||
        virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0;
 | 
					        virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -236,15 +236,16 @@ namespace Catch
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct IReporterFactory : IShared {
 | 
					    struct IReporterFactory {
 | 
				
			||||||
        virtual ~IReporterFactory();
 | 
					        virtual ~IReporterFactory();
 | 
				
			||||||
        virtual IStreamingReporter* create( ReporterConfig const& config ) const = 0;
 | 
					        virtual IStreamingReporter* create( ReporterConfig const& config ) const = 0;
 | 
				
			||||||
        virtual std::string getDescription() const = 0;
 | 
					        virtual std::string getDescription() const = 0;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					    using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct IReporterRegistry {
 | 
					    struct IReporterRegistry {
 | 
				
			||||||
        typedef std::map<std::string, Ptr<IReporterFactory> > FactoryMap;
 | 
					        using FactoryMap = std::map<std::string, IReporterFactoryPtr>;
 | 
				
			||||||
        typedef std::vector<Ptr<IReporterFactory> > Listeners;
 | 
					        using Listeners = std::vector<IReporterFactoryPtr>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual ~IReporterRegistry();
 | 
					        virtual ~IReporterRegistry();
 | 
				
			||||||
        virtual IStreamingReporter* create( std::string const& name, IConfigPtr const& config ) const = 0;
 | 
					        virtual IStreamingReporter* create( std::string const& name, IConfigPtr const& config ) const = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,10 +42,10 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public: // IMutableRegistryHub
 | 
					        public: // IMutableRegistryHub
 | 
				
			||||||
            virtual void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) override {
 | 
					            virtual void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) override {
 | 
				
			||||||
                m_reporterRegistry.registerReporter( name, factory );
 | 
					                m_reporterRegistry.registerReporter( name, factory );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            virtual void registerListener( Ptr<IReporterFactory> const& factory ) override {
 | 
					            virtual void registerListener( IReporterFactoryPtr const& factory ) override {
 | 
				
			||||||
                m_reporterRegistry.registerListener( factory );
 | 
					                m_reporterRegistry.registerListener( factory );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            virtual void registerTest( TestCase const& testInfo ) override {
 | 
					            virtual void registerTest( TestCase const& testInfo ) override {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ namespace Catch {
 | 
				
			|||||||
    template<typename T>
 | 
					    template<typename T>
 | 
				
			||||||
    class ReporterRegistrar {
 | 
					    class ReporterRegistrar {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        class ReporterFactory : public SharedImpl<IReporterFactory> {
 | 
					        class ReporterFactory : public IReporterFactory {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual IStreamingReporter* create( ReporterConfig const& config ) const {
 | 
					            virtual IStreamingReporter* create( ReporterConfig const& config ) const {
 | 
				
			||||||
                return new T( config );
 | 
					                return new T( config );
 | 
				
			||||||
@@ -29,14 +29,14 @@ namespace Catch {
 | 
				
			|||||||
    public:
 | 
					    public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ReporterRegistrar( std::string const& name ) {
 | 
					        ReporterRegistrar( std::string const& name ) {
 | 
				
			||||||
            getMutableRegistryHub().registerReporter( name, new ReporterFactory() );
 | 
					            getMutableRegistryHub().registerReporter( name, std::make_shared<ReporterFactory>() );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    template<typename T>
 | 
					    template<typename T>
 | 
				
			||||||
    class ListenerRegistrar {
 | 
					    class ListenerRegistrar {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        class ListenerFactory : public SharedImpl<IReporterFactory> {
 | 
					        class ListenerFactory : public IReporterFactory {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual IStreamingReporter* create( ReporterConfig const& config ) const {
 | 
					            virtual IStreamingReporter* create( ReporterConfig const& config ) const {
 | 
				
			||||||
                return new T( config );
 | 
					                return new T( config );
 | 
				
			||||||
@@ -49,7 +49,7 @@ namespace Catch {
 | 
				
			|||||||
    public:
 | 
					    public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ListenerRegistrar() {
 | 
					        ListenerRegistrar() {
 | 
				
			||||||
            getMutableRegistryHub().registerListener( new ListenerFactory() );
 | 
					            getMutableRegistryHub().registerListener( std::make_shared<ListenerFactory>() );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,10 +27,10 @@ namespace Catch {
 | 
				
			|||||||
            return it->second->create( ReporterConfig( config ) );
 | 
					            return it->second->create( ReporterConfig( config ) );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) {
 | 
					        void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) {
 | 
				
			||||||
            m_factories.insert( std::make_pair( name, factory ) );
 | 
					            m_factories.insert( std::make_pair( name, factory ) );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        void registerListener( Ptr<IReporterFactory> const& factory ) {
 | 
					        void registerListener( IReporterFactoryPtr const& factory ) {
 | 
				
			||||||
            m_listeners.push_back( factory );
 | 
					            m_listeners.push_back( factory );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user