1 /* 2 * Created by Phil on 5/8/2012. 3 * Copyright 2012 Two Blue Cubes Ltd. All rights reserved. 4 * 5 * Distributed under the Boost Software License, Version 1.0. (See accompanying 6 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 */ 8 9 #include "catch_interfaces_registry_hub.h" 10 11 #include "catch_context.h" 12 #include "catch_test_case_registry_impl.h" 13 #include "catch_reporter_registry.h" 14 #include "catch_exception_translator_registry.h" 15 #include "catch_tag_alias_registry.h" 16 #include "catch_startup_exception_registry.h" 17 #include "catch_singletons.hpp" 18 #include "catch_enum_values_registry.h" 19 20 namespace Catch { 21 22 namespace { 23 24 class RegistryHub : public IRegistryHub, public IMutableRegistryHub, 25 private NonCopyable { 26 27 public: // IRegistryHub 28 RegistryHub() = default; getReporterRegistry() const29 IReporterRegistry const& getReporterRegistry() const override { 30 return m_reporterRegistry; 31 } getTestCaseRegistry() const32 ITestCaseRegistry const& getTestCaseRegistry() const override { 33 return m_testCaseRegistry; 34 } getExceptionTranslatorRegistry() const35 IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const override { 36 return m_exceptionTranslatorRegistry; 37 } getTagAliasRegistry() const38 ITagAliasRegistry const& getTagAliasRegistry() const override { 39 return m_tagAliasRegistry; 40 } getStartupExceptionRegistry() const41 StartupExceptionRegistry const& getStartupExceptionRegistry() const override { 42 return m_exceptionRegistry; 43 } 44 45 public: // IMutableRegistryHub registerReporter(std::string const & name,IReporterFactoryPtr const & factory)46 void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) override { 47 m_reporterRegistry.registerReporter( name, factory ); 48 } registerListener(IReporterFactoryPtr const & factory)49 void registerListener( IReporterFactoryPtr const& factory ) override { 50 m_reporterRegistry.registerListener( factory ); 51 } registerTest(TestCase const & testInfo)52 void registerTest( TestCase const& testInfo ) override { 53 m_testCaseRegistry.registerTest( testInfo ); 54 } registerTranslator(const IExceptionTranslator * translator)55 void registerTranslator( const IExceptionTranslator* translator ) override { 56 m_exceptionTranslatorRegistry.registerTranslator( translator ); 57 } registerTagAlias(std::string const & alias,std::string const & tag,SourceLineInfo const & lineInfo)58 void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override { 59 m_tagAliasRegistry.add( alias, tag, lineInfo ); 60 } registerStartupException()61 void registerStartupException() noexcept override { 62 m_exceptionRegistry.add(std::current_exception()); 63 } getMutableEnumValuesRegistry()64 IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() override { 65 return m_enumValuesRegistry; 66 } 67 68 private: 69 TestRegistry m_testCaseRegistry; 70 ReporterRegistry m_reporterRegistry; 71 ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; 72 TagAliasRegistry m_tagAliasRegistry; 73 StartupExceptionRegistry m_exceptionRegistry; 74 Detail::EnumValuesRegistry m_enumValuesRegistry; 75 }; 76 } 77 78 using RegistryHubSingleton = Singleton<RegistryHub, IRegistryHub, IMutableRegistryHub>; 79 getRegistryHub()80 IRegistryHub const& getRegistryHub() { 81 return RegistryHubSingleton::get(); 82 } getMutableRegistryHub()83 IMutableRegistryHub& getMutableRegistryHub() { 84 return RegistryHubSingleton::getMutable(); 85 } cleanUp()86 void cleanUp() { 87 cleanupSingletons(); 88 cleanUpContext(); 89 } translateActiveException()90 std::string translateActiveException() { 91 return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); 92 } 93 94 95 } // end namespace Catch 96