| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | /* *  Created by Phil on 5/8/2012. *  Copyright 2012 Two Blue Cubes Ltd. All rights reserved. * *  Distributed under the Boost Software License, Version 1.0. (See accompanying *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */#include "catch_interfaces_registry_hub.h"#include "catch_context.h"#include "catch_test_case_registry_impl.h"#include "catch_reporter_registry.h"#include "catch_exception_translator_registry.h"#include "catch_tag_alias_registry.h"#include "catch_startup_exception_registry.h"#include "catch_singletons.hpp"#include "catch_enum_values_registry.h"namespace Catch {    namespace {        class RegistryHub : public IRegistryHub, public IMutableRegistryHub,                            private NonCopyable {        public: // IRegistryHub            RegistryHub() = default;            IReporterRegistry const& getReporterRegistry() const override {                return m_reporterRegistry;            }            ITestCaseRegistry const& getTestCaseRegistry() const override {                return m_testCaseRegistry;            }            IExceptionTranslatorRegistry const& getExceptionTranslatorRegistry() const override {                return m_exceptionTranslatorRegistry;            }            ITagAliasRegistry const& getTagAliasRegistry() const override {                return m_tagAliasRegistry;            }            StartupExceptionRegistry const& getStartupExceptionRegistry() const override {                return m_exceptionRegistry;            }        public: // IMutableRegistryHub            void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) override {                m_reporterRegistry.registerReporter( name, factory );            }            void registerListener( IReporterFactoryPtr const& factory ) override {                m_reporterRegistry.registerListener( factory );            }            void registerTest( TestCase const& testInfo ) override {                m_testCaseRegistry.registerTest( testInfo );            }            void registerTranslator( const IExceptionTranslator* translator ) override {                m_exceptionTranslatorRegistry.registerTranslator( translator );            }            void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override {                m_tagAliasRegistry.add( alias, tag, lineInfo );            }            void registerStartupException() noexcept override {#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS)                m_exceptionRegistry.add(std::current_exception());#else                CATCH_INTERNAL_ERROR("Attempted to register active exception under CATCH_CONFIG_DISABLE_EXCEPTIONS!");#endif            }            IMutableEnumValuesRegistry& getMutableEnumValuesRegistry() override {                return m_enumValuesRegistry;            }        private:            TestRegistry m_testCaseRegistry;            ReporterRegistry m_reporterRegistry;            ExceptionTranslatorRegistry m_exceptionTranslatorRegistry;            TagAliasRegistry m_tagAliasRegistry;            StartupExceptionRegistry m_exceptionRegistry;            Detail::EnumValuesRegistry m_enumValuesRegistry;        };    }    using RegistryHubSingleton = Singleton<RegistryHub, IRegistryHub, IMutableRegistryHub>;    IRegistryHub const& getRegistryHub() {        return RegistryHubSingleton::get();    }    IMutableRegistryHub& getMutableRegistryHub() {        return RegistryHubSingleton::getMutable();    }    void cleanUp() {        cleanupSingletons();        cleanUpContext();    }    std::string translateActiveException() {        return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException();    }} // end namespace Catch
 |