From 4ec8d53e913bef170e005675274b3df87ef0587f Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Wed, 15 Mar 2017 09:45:37 +0000 Subject: [PATCH] =?UTF-8?q?Tag=20Alias=20registry=20is=20part=20of=20regis?= =?UTF-8?q?try=20hub=20instead=20of=20it=E2=80=99s=20own=20singleton=20-?= =?UTF-8?q?=20should=20now=20be=20cleaned=20up=20properly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/internal/catch_interfaces_registry_hub.h | 4 ++++ include/internal/catch_registry_hub.hpp | 9 +++++++++ include/internal/catch_tag_alias_registry.h | 3 +-- include/internal/catch_tag_alias_registry.hpp | 16 +++++++--------- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/include/internal/catch_interfaces_registry_hub.h b/include/internal/catch_interfaces_registry_hub.h index ec06ca29..5e0a7f01 100644 --- a/include/internal/catch_interfaces_registry_hub.h +++ b/include/internal/catch_interfaces_registry_hub.h @@ -20,12 +20,15 @@ namespace Catch { struct IExceptionTranslator; struct IReporterRegistry; struct IReporterFactory; + struct ITagAliasRegistry; struct IRegistryHub { virtual ~IRegistryHub(); virtual IReporterRegistry const& getReporterRegistry() const = 0; virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0; + virtual ITagAliasRegistry const& getTagAliasRegistry() const = 0; + virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() = 0; }; @@ -35,6 +38,7 @@ namespace Catch { virtual void registerListener( Ptr const& factory ) = 0; virtual void registerTest( TestCase const& testInfo ) = 0; virtual void registerTranslator( const IExceptionTranslator* translator ) = 0; + virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0; }; IRegistryHub& getRegistryHub(); diff --git a/include/internal/catch_registry_hub.hpp b/include/internal/catch_registry_hub.hpp index 35293bf5..2523cd9d 100644 --- a/include/internal/catch_registry_hub.hpp +++ b/include/internal/catch_registry_hub.hpp @@ -13,6 +13,7 @@ #include "catch_test_case_registry_impl.hpp" #include "catch_reporter_registry.hpp" #include "catch_exception_translator_registry.hpp" +#include "catch_tag_alias_registry.h" namespace Catch { @@ -35,6 +36,10 @@ namespace Catch { virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() CATCH_OVERRIDE { return m_exceptionTranslatorRegistry; } + virtual ITagAliasRegistry const& getTagAliasRegistry() const CATCH_OVERRIDE { + return m_tagAliasRegistry; + } + public: // IMutableRegistryHub virtual void registerReporter( std::string const& name, Ptr const& factory ) CATCH_OVERRIDE { @@ -49,11 +54,15 @@ namespace Catch { virtual void registerTranslator( const IExceptionTranslator* translator ) CATCH_OVERRIDE { m_exceptionTranslatorRegistry.registerTranslator( translator ); } + virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) CATCH_OVERRIDE { + m_tagAliasRegistry.add( alias, tag, lineInfo ); + } private: TestRegistry m_testCaseRegistry; ReporterRegistry m_reporterRegistry; ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; + TagAliasRegistry m_tagAliasRegistry; }; // Single, global, instance diff --git a/include/internal/catch_tag_alias_registry.h b/include/internal/catch_tag_alias_registry.h index 98c796e1..aea41275 100644 --- a/include/internal/catch_tag_alias_registry.h +++ b/include/internal/catch_tag_alias_registry.h @@ -19,8 +19,7 @@ namespace Catch { virtual ~TagAliasRegistry(); virtual Option find( std::string const& alias ) const; virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const; - void add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); - static TagAliasRegistry& get(); + void add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ); private: std::map m_registry; diff --git a/include/internal/catch_tag_alias_registry.hpp b/include/internal/catch_tag_alias_registry.hpp index cc04ea1e..ea092cdf 100644 --- a/include/internal/catch_tag_alias_registry.hpp +++ b/include/internal/catch_tag_alias_registry.hpp @@ -10,6 +10,8 @@ #include "catch_tag_alias_registry.h" #include "catch_console_colour.hpp" +#include "catch_interfaces_registry_hub.h" +#include "catch_stream.h" namespace Catch { @@ -38,7 +40,7 @@ namespace Catch { return expandedTestSpec; } - void TagAliasRegistry::add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { + void TagAliasRegistry::add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) { if( !startsWith( alias, "[@" ) || !endsWith( alias, ']' ) ) { std::ostringstream oss; @@ -54,19 +56,15 @@ namespace Catch { } } - TagAliasRegistry& TagAliasRegistry::get() { - static TagAliasRegistry instance; - return instance; - - } - ITagAliasRegistry::~ITagAliasRegistry() {} - ITagAliasRegistry const& ITagAliasRegistry::get() { return TagAliasRegistry::get(); } + ITagAliasRegistry const& ITagAliasRegistry::get() { + return getRegistryHub().getTagAliasRegistry(); + } RegistrarForTagAliases::RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { try { - TagAliasRegistry::get().add( alias, tag, lineInfo ); + getMutableRegistryHub().registerTagAlias( alias, tag, lineInfo ); } catch( std::exception& ex ) { Colour colourGuard( Colour::Red );