// Copyright Catch2 Authors // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE.txt or copy at // https://www.boost.org/LICENSE_1_0.txt) // SPDX-License-Identifier: BSL-1.0 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Catch { struct RegistryHub::RegistryHubImpl { TestCaseRegistry testCaseRegistry; ReporterRegistry reporterRegistry; ExceptionTranslatorRegistry exceptionTranslatorRegistry; TagAliasRegistry tagAliasRegistry; StartupExceptionRegistry exceptionRegistry; EnumValuesRegistry enumValuesRegistry; }; RegistryHub::RegistryHub(): m_impl( Detail::make_unique() ) {} RegistryHub::~RegistryHub() = default; ReporterRegistry const& RegistryHub::getReporterRegistry() const { return m_impl->reporterRegistry; } TestCaseRegistry const& RegistryHub::getTestCaseRegistry() const { return m_impl->testCaseRegistry; } ExceptionTranslatorRegistry const& RegistryHub::getExceptionTranslatorRegistry() const { return m_impl->exceptionTranslatorRegistry; } TagAliasRegistry const& RegistryHub::getTagAliasRegistry() const { return m_impl->tagAliasRegistry; } StartupExceptionRegistry const& RegistryHub::getStartupExceptionRegistry() const { return m_impl->exceptionRegistry; } void RegistryHub::registerReporter( std::string const& name, IReporterFactoryPtr factory ) { m_impl->reporterRegistry.registerReporter( name, CATCH_MOVE( factory ) ); } void RegistryHub::registerListener( Detail::unique_ptr factory ) { m_impl->reporterRegistry.registerListener( CATCH_MOVE( factory ) ); } void RegistryHub::registerTest( Detail::unique_ptr&& testInfo, Detail::unique_ptr&& invoker ) { m_impl->testCaseRegistry.registerTest( CATCH_MOVE( testInfo ), CATCH_MOVE( invoker ) ); } void RegistryHub::registerTranslator( Detail::unique_ptr&& translator ) { m_impl->exceptionTranslatorRegistry.registerTranslator( CATCH_MOVE( translator ) ); } void RegistryHub::registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) { m_impl->tagAliasRegistry.add( alias, tag, lineInfo ); } void RegistryHub::registerStartupException() noexcept { #if !defined( CATCH_CONFIG_DISABLE_EXCEPTIONS ) m_impl->exceptionRegistry.add( std::current_exception() ); #else CATCH_INTERNAL_ERROR( "Attempted to register active exception under " "CATCH_CONFIG_DISABLE_EXCEPTIONS!" ); #endif } EnumValuesRegistry& RegistryHub::getMutableEnumValuesRegistry() { return m_impl->enumValuesRegistry; } using RegistryHubSingleton = Singleton; RegistryHub const& getRegistryHub() { return RegistryHubSingleton::get(); } RegistryHub& getMutableRegistryHub() { return RegistryHubSingleton::getMutable(); } void cleanUp() { cleanupSingletons(); cleanUpContext(); } std::string translateActiveException() { return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); } } // end namespace Catch