diff --git a/src/catch2/catch_list.cpp b/src/catch2/catch_list.cpp index 91f58187..aac06572 100644 --- a/src/catch2/catch_list.cpp +++ b/src/catch2/catch_list.cpp @@ -29,13 +29,13 @@ namespace Catch { namespace { void listTests(IStreamingReporter& reporter, Config const& config) { - TestSpec testSpec = config.testSpec(); + auto const& testSpec = config.testSpec(); auto matchedTestCases = filterTests(getAllTestCasesSorted(config), testSpec, config); reporter.listTests(matchedTestCases, config); } void listTags(IStreamingReporter& reporter, Config const& config) { - TestSpec testSpec = config.testSpec(); + auto const& testSpec = config.testSpec(); std::vector matchedTestCases = filterTests(getAllTestCasesSorted(config), testSpec, config); std::map tagCounts; diff --git a/src/catch2/catch_test_spec.h b/src/catch2/catch_test_spec.h index e47e8ea3..d18ec521 100644 --- a/src/catch2/catch_test_spec.h +++ b/src/catch2/catch_test_spec.h @@ -25,6 +25,7 @@ namespace Catch { struct IConfig; class TestSpec { + class Pattern { public: explicit Pattern( std::string const& name ); @@ -34,7 +35,6 @@ namespace Catch { private: std::string const m_name; }; - using PatternPtr = std::shared_ptr; class NamePattern : public Pattern { public: @@ -53,8 +53,8 @@ namespace Catch { }; struct Filter { - std::vector m_required; - std::vector m_forbidden; + std::vector> m_required; + std::vector> m_forbidden; bool matches( TestCaseInfo const& testCase ) const; std::string name() const; diff --git a/src/catch2/catch_test_spec_parser.cpp b/src/catch2/catch_test_spec_parser.cpp index 0f37b35c..5c3df3b6 100644 --- a/src/catch2/catch_test_spec_parser.cpp +++ b/src/catch2/catch_test_spec_parser.cpp @@ -20,10 +20,10 @@ namespace Catch { m_substring.reserve(m_arg.size()); m_patternName.reserve(m_arg.size()); m_realPatternPos = 0; - + for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) //if visitChar fails - if( !visitChar( m_arg[m_pos] ) ){ + if( !visitChar( m_arg[m_pos] ) ){ m_testSpec.m_invalidArgs.push_back(arg); break; } @@ -32,7 +32,7 @@ namespace Catch { } TestSpec TestSpecParser::testSpec() { addFilter(); - return m_testSpec; + return std::move(m_testSpec); } bool TestSpecParser::visitChar( char c ) { if( (m_mode != EscapedName) && (c == '\\') ) { @@ -148,7 +148,7 @@ namespace Catch { void TestSpecParser::addFilter() { if( !m_currentFilter.m_required.empty() || !m_currentFilter.m_forbidden.empty() ) { - m_testSpec.m_filters.push_back( m_currentFilter ); + m_testSpec.m_filters.push_back( std::move(m_currentFilter) ); m_currentFilter = TestSpec::Filter(); } } @@ -156,12 +156,12 @@ namespace Catch { void TestSpecParser::saveLastMode() { lastMode = m_mode; } - + void TestSpecParser::revertBackToLastMode() { m_mode = lastMode; } - - bool TestSpecParser::separate() { + + bool TestSpecParser::separate() { if( (m_mode==QuotedName) || (m_mode==Tag) ){ //invalid argument, signal failure to previous scope. m_mode = None; @@ -174,7 +174,7 @@ namespace Catch { addFilter(); return true; //success } - + TestSpec parseTestSpec( std::string const& arg ) { return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec(); } diff --git a/src/catch2/catch_test_spec_parser.h b/src/catch2/catch_test_spec_parser.h index 42e030d5..5b20c508 100644 --- a/src/catch2/catch_test_spec_parser.h +++ b/src/catch2/catch_test_spec_parser.h @@ -65,11 +65,10 @@ namespace Catch { token = token.substr( 8 ); } if( !token.empty() ) { - TestSpec::PatternPtr pattern = std::make_shared( token, m_substring ); if (m_exclusion) { - m_currentFilter.m_forbidden.push_back(pattern); + m_currentFilter.m_forbidden.emplace_back(std::make_unique(token, m_substring)); } else { - m_currentFilter.m_required.push_back(pattern); + m_currentFilter.m_required.emplace_back(std::make_unique(token, m_substring)); } } m_substring.clear();