| /* |
| * Created by Phil on 27/6/2014. |
| * Copyright 2014 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_tag_alias_registry.h" |
| #include "catch_console_colour.h" |
| #include "catch_enforce.h" |
| #include "catch_interfaces_registry_hub.h" |
| #include "catch_string_manip.h" |
| |
| #include <sstream> |
| |
| namespace Catch { |
| |
| TagAliasRegistry::~TagAliasRegistry() {} |
| |
| TagAlias const* TagAliasRegistry::find( std::string const& alias ) const { |
| auto it = m_registry.find( alias ); |
| if( it != m_registry.end() ) |
| return &(it->second); |
| else |
| return nullptr; |
| } |
| |
| std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const { |
| std::string expandedTestSpec = unexpandedTestSpec; |
| for( auto const& registryKvp : m_registry ) { |
| std::size_t pos = expandedTestSpec.find( registryKvp.first ); |
| if( pos != std::string::npos ) { |
| expandedTestSpec = expandedTestSpec.substr( 0, pos ) + |
| registryKvp.second.tag + |
| expandedTestSpec.substr( pos + registryKvp.first.size() ); |
| } |
| } |
| return expandedTestSpec; |
| } |
| |
| void TagAliasRegistry::add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) { |
| CATCH_ENFORCE( startsWith(alias, "[@") && endsWith(alias, ']'), |
| "error: tag alias, '" << alias << "' is not of the form [@alias name].\n" << lineInfo ); |
| |
| CATCH_ENFORCE( m_registry.insert(std::make_pair(alias, TagAlias(tag, lineInfo))).second, |
| "error: tag alias, '" << alias << "' already registered.\n" |
| << "\tFirst seen at: " << find(alias)->lineInfo << "\n" |
| << "\tRedefined at: " << lineInfo ); |
| } |
| |
| ITagAliasRegistry::~ITagAliasRegistry() {} |
| |
| ITagAliasRegistry const& ITagAliasRegistry::get() { |
| return getRegistryHub().getTagAliasRegistry(); |
| } |
| |
| } // end namespace Catch |