mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 12:17:11 +01:00 
			
		
		
		
	Use unique_ptr for passing around exception translators
This commit is contained in:
		| @@ -56,8 +56,8 @@ namespace Catch { | |||||||
|             void registerTest( Detail::unique_ptr<TestCaseInfo>&& testInfo, Detail::unique_ptr<ITestInvoker>&& invoker ) override { |             void registerTest( Detail::unique_ptr<TestCaseInfo>&& testInfo, Detail::unique_ptr<ITestInvoker>&& invoker ) override { | ||||||
|                 m_testCaseRegistry.registerTest( std::move(testInfo), std::move(invoker) ); |                 m_testCaseRegistry.registerTest( std::move(testInfo), std::move(invoker) ); | ||||||
|             } |             } | ||||||
|             void registerTranslator( const IExceptionTranslator* translator ) override { |             void registerTranslator( Detail::unique_ptr<IExceptionTranslator>&& translator ) override { | ||||||
|                 m_exceptionTranslatorRegistry.registerTranslator( translator ); |                 m_exceptionTranslatorRegistry.registerTranslator( std::move(translator) ); | ||||||
|             } |             } | ||||||
|             void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override { |             void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override { | ||||||
|                 m_tagAliasRegistry.add( alias, tag, lineInfo ); |                 m_tagAliasRegistry.add( alias, tag, lineInfo ); | ||||||
|   | |||||||
| @@ -48,8 +48,11 @@ namespace Catch { | |||||||
|     public: |     public: | ||||||
|         template<typename T> |         template<typename T> | ||||||
|         ExceptionTranslatorRegistrar( std::string(*translateFunction)( T const& ) ) { |         ExceptionTranslatorRegistrar( std::string(*translateFunction)( T const& ) ) { | ||||||
|             getMutableRegistryHub().registerTranslator |             getMutableRegistryHub().registerTranslator( | ||||||
|                 ( new ExceptionTranslator<T>( translateFunction ) ); |                 Detail::unique_ptr<IExceptionTranslator>( | ||||||
|  |                     new ExceptionTranslator<T>( translateFunction ) | ||||||
|  |                 ) | ||||||
|  |             ); | ||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ namespace Catch { | |||||||
|         virtual void registerReporter( std::string const& name, IReporterFactoryPtr factory ) = 0; |         virtual void registerReporter( std::string const& name, IReporterFactoryPtr factory ) = 0; | ||||||
|         virtual void registerListener( IReporterFactoryPtr factory ) = 0; |         virtual void registerListener( IReporterFactoryPtr factory ) = 0; | ||||||
|         virtual void registerTest(Detail::unique_ptr<TestCaseInfo>&& testInfo, Detail::unique_ptr<ITestInvoker>&& invoker) = 0; |         virtual void registerTest(Detail::unique_ptr<TestCaseInfo>&& testInfo, Detail::unique_ptr<ITestInvoker>&& invoker) = 0; | ||||||
|         virtual void registerTranslator( const IExceptionTranslator* translator ) = 0; |         virtual void registerTranslator( Detail::unique_ptr<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; | ||||||
|         virtual void registerStartupException() noexcept = 0; |         virtual void registerStartupException() noexcept = 0; | ||||||
|         virtual IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() = 0; |         virtual IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() = 0; | ||||||
|   | |||||||
| @@ -15,8 +15,8 @@ namespace Catch { | |||||||
|     ExceptionTranslatorRegistry::~ExceptionTranslatorRegistry() { |     ExceptionTranslatorRegistry::~ExceptionTranslatorRegistry() { | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     void ExceptionTranslatorRegistry::registerTranslator( const IExceptionTranslator* translator ) { |     void ExceptionTranslatorRegistry::registerTranslator( Detail::unique_ptr<IExceptionTranslator>&& translator ) { | ||||||
|         m_translators.push_back( Detail::unique_ptr<const IExceptionTranslator>( translator ) ); |         m_translators.push_back( std::move( translator ) ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) | #if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) | ||||||
|   | |||||||
| @@ -9,6 +9,8 @@ | |||||||
| #define CATCH_EXCEPTION_TRANSLATOR_REGISTRY_HPP_INCLUDED | #define CATCH_EXCEPTION_TRANSLATOR_REGISTRY_HPP_INCLUDED | ||||||
|  |  | ||||||
| #include <catch2/interfaces/catch_interfaces_exception.hpp> | #include <catch2/interfaces/catch_interfaces_exception.hpp> | ||||||
|  | #include <catch2/internal/catch_unique_ptr.hpp> | ||||||
|  |  | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <string> | #include <string> | ||||||
|  |  | ||||||
| @@ -17,7 +19,7 @@ namespace Catch { | |||||||
|     class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { |     class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { | ||||||
|     public: |     public: | ||||||
|         ~ExceptionTranslatorRegistry() override; |         ~ExceptionTranslatorRegistry() override; | ||||||
|         void registerTranslator( const IExceptionTranslator* translator ); |         void registerTranslator( Detail::unique_ptr<IExceptionTranslator>&& translator ); | ||||||
|         std::string translateActiveException() const override; |         std::string translateActiveException() const override; | ||||||
|         std::string tryTranslators() const; |         std::string tryTranslators() const; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský