1
0
mirror of https://github.com/catchorg/Catch2.git synced 2025-04-05 01:54:46 +02:00

Split tests for TestSpec into its own file

They also got slapped with the `[approvals]` tag in the process,
because we have too many approval tests and want less of them,
and these particular tests don't bring much value.

Related to 
This commit is contained in:
Martin Hořeňovský 2022-10-26 21:03:49 +02:00
parent 17fac854ae
commit c6dfeb5e7d
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A
21 changed files with 422 additions and 6079 deletions

@ -91,6 +91,7 @@ set(TEST_SOURCES
${SELF_TEST_DIR}/IntrospectiveTests/Reporters.tests.cpp
${SELF_TEST_DIR}/IntrospectiveTests/Tag.tests.cpp
${SELF_TEST_DIR}/IntrospectiveTests/TestCaseInfoHasher.tests.cpp
${SELF_TEST_DIR}/IntrospectiveTests/TestSpec.tests.cpp
${SELF_TEST_DIR}/IntrospectiveTests/TestSpecParser.tests.cpp
${SELF_TEST_DIR}/IntrospectiveTests/TextFlow.tests.cpp
${SELF_TEST_DIR}/IntrospectiveTests/Sharding.tests.cpp

@ -188,7 +188,6 @@ Nor would this
:test-result: PASS Our PCG implementation provides expected results for known seeds
:test-result: FAIL Output from all sections is reported
:test-result: PASS Overloaded comma or address-of operators are not used
:test-result: PASS Parse test names and tags
:test-result: PASS Parse uints
:test-result: PASS Parsed tags are matched case insensitive
:test-result: PASS Parsing sharding-related cli flags

@ -186,7 +186,6 @@
:test-result: PASS Our PCG implementation provides expected results for known seeds
:test-result: FAIL Output from all sections is reported
:test-result: PASS Overloaded comma or address-of operators are not used
:test-result: PASS Parse test names and tags
:test-result: PASS Parse uints
:test-result: PASS Parsed tags are matched case insensitive
:test-result: PASS Parsing sharding-related cli flags

@ -22,13 +22,13 @@ This would not be caught previously
Nor would this
Tricky.tests.cpp:<line number>: failed: explicitly with 1 message: '1514'
Compilation.tests.cpp:<line number>: passed: std::is_same<TypeList<int>, TypeList<int>>::value for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("spec . char")) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("spec , char")) for: true
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase(R"(spec \, char)"))) for: !false
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec {a} char)")) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec [a] char)")) for: true
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("differs but has similar tag", "[a]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec \ char)")) for: true
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("spec . char")) for: true
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("spec , char")) for: true
TestSpec.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase(R"(spec \, char)"))) for: !false
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec {a} char)")) for: true
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec [a] char)")) for: true
TestSpec.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("differs but has similar tag", "[a]"))) for: !false
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec \ char)")) for: true
Generators.tests.cpp:<line number>: passed: counter < 7 for: 3 < 7
Generators.tests.cpp:<line number>: passed: counter < 7 for: 6 < 7
Generators.tests.cpp:<line number>: passed: i != j for: 1 != 3
@ -1119,157 +1119,6 @@ Matchers.tests.cpp:<line number>: passed: ( EvilMatcher(), EvilMatcher() ), Evil
Matchers.tests.cpp:<line number>: passed: &EvilMatcher(), EvilAddressOfOperatorUsed
Matchers.tests.cpp:<line number>: passed: EvilMatcher() || ( EvilMatcher() && !EvilMatcher() )
Matchers.tests.cpp:<line number>: passed: ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher()
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: parseTestSpec( "*a" ).matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: parseTestSpec( "a*" ).matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: parseTestSpec( "*a*" ).matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark" ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( "aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( "aardvark" ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark" ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( "aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( "aardvark" ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) for: true
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("only hidden", "[.]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) for: true
Parse.tests.cpp:<line number>: passed: parseUInt( "0" ) == Optional<unsigned int>{ 0 } for: {?} == {?}
Parse.tests.cpp:<line number>: passed: parseUInt( "100" ) == Optional<unsigned int>{ 100 } for: {?} == {?}
Parse.tests.cpp:<line number>: passed: parseUInt( "4294967295" ) == Optional<unsigned int>{ 4294967295 } for: {?} == {?}
@ -2610,7 +2459,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
Misc.tests.cpp:<line number>: passed:
Misc.tests.cpp:<line number>: passed:
test cases: 395 | 305 passed | 83 failed | 7 failed as expected
assertions: 2310 | 2140 passed | 143 failed | 27 failed as expected
test cases: 394 | 304 passed | 83 failed | 7 failed as expected
assertions: 2159 | 1989 passed | 143 failed | 27 failed as expected

@ -20,13 +20,13 @@ This info message starts with a linebreak' with 1 message: '
This warning message starts with a linebreak'
Tricky.tests.cpp:<line number>: failed: explicitly with 1 message: '1514'
Compilation.tests.cpp:<line number>: passed: std::is_same<TypeList<int>, TypeList<int>>::value for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("spec . char")) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("spec , char")) for: true
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase(R"(spec \, char)"))) for: !false
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec {a} char)")) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec [a] char)")) for: true
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("differs but has similar tag", "[a]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec \ char)")) for: true
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("spec . char")) for: true
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("spec , char")) for: true
TestSpec.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase(R"(spec \, char)"))) for: !false
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec {a} char)")) for: true
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec [a] char)")) for: true
TestSpec.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("differs but has similar tag", "[a]"))) for: !false
TestSpec.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase(R"(spec \ char)")) for: true
Generators.tests.cpp:<line number>: passed: counter < 7 for: 3 < 7
Generators.tests.cpp:<line number>: passed: counter < 7 for: 6 < 7
Generators.tests.cpp:<line number>: passed: i != j for: 1 != 3
@ -1117,157 +1117,6 @@ Matchers.tests.cpp:<line number>: passed: ( EvilMatcher(), EvilMatcher() ), Evil
Matchers.tests.cpp:<line number>: passed: &EvilMatcher(), EvilAddressOfOperatorUsed
Matchers.tests.cpp:<line number>: passed: EvilMatcher() || ( EvilMatcher() && !EvilMatcher() )
Matchers.tests.cpp:<line number>: passed: ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher()
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: parseTestSpec( "*a" ).matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: parseTestSpec( "a*" ).matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: parseTestSpec( "*a*" ).matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.hasFilters() == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcA ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcB ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcC ) == false for: false == false
CmdLine.tests.cpp:<line number>: passed: spec.matches( *tcD ) == true for: true == true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark" ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( "aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( "aardvark" ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark" ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( "aardvark " ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches( *fakeTestCase( "aardvark" ) ) for: true
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) for: true
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: !(spec.matches(*fakeTestCase("only hidden", "[.]"))) for: !false
CmdLine.tests.cpp:<line number>: passed: spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) for: true
Parse.tests.cpp:<line number>: passed: parseUInt( "0" ) == Optional<unsigned int>{ 0 } for: {?} == {?}
Parse.tests.cpp:<line number>: passed: parseUInt( "100" ) == Optional<unsigned int>{ 100 } for: {?} == {?}
Parse.tests.cpp:<line number>: passed: parseUInt( "4294967295" ) == Optional<unsigned int>{ 4294967295 } for: {?} == {?}
@ -2602,7 +2451,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
Misc.tests.cpp:<line number>: passed:
Misc.tests.cpp:<line number>: passed:
test cases: 395 | 305 passed | 83 failed | 7 failed as expected
assertions: 2310 | 2140 passed | 143 failed | 27 failed as expected
test cases: 394 | 304 passed | 83 failed | 7 failed as expected
assertions: 2159 | 1989 passed | 143 failed | 27 failed as expected

@ -1394,6 +1394,6 @@ due to unexpected exception with message:
Why would you throw a std::string?
===============================================================================
test cases: 395 | 319 passed | 69 failed | 7 failed as expected
assertions: 2295 | 2140 passed | 128 failed | 27 failed as expected
test cases: 394 | 318 passed | 69 failed | 7 failed as expected
assertions: 2144 | 1989 passed | 128 failed | 27 failed as expected

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -166,20 +166,20 @@ with expansion:
-------------------------------------------------------------------------------
#1905 -- test spec parser properly clears internal state between compound tests
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
TestSpec.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
TestSpec.tests.cpp:<line number>: PASSED:
REQUIRE( spec.matches(*fakeTestCase("spec . char")) )
with expansion:
true
CmdLine.tests.cpp:<line number>: PASSED:
TestSpec.tests.cpp:<line number>: PASSED:
REQUIRE( spec.matches(*fakeTestCase("spec , char")) )
with expansion:
true
CmdLine.tests.cpp:<line number>: PASSED:
TestSpec.tests.cpp:<line number>: PASSED:
REQUIRE_FALSE( spec.matches(*fakeTestCase(R"(spec \, char)")) )
with expansion:
!false
@ -188,20 +188,20 @@ with expansion:
#1912 -- test spec parser handles escaping
Various parentheses
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
TestSpec.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
TestSpec.tests.cpp:<line number>: PASSED:
REQUIRE( spec.matches(*fakeTestCase(R"(spec {a} char)")) )
with expansion:
true
CmdLine.tests.cpp:<line number>: PASSED:
TestSpec.tests.cpp:<line number>: PASSED:
REQUIRE( spec.matches(*fakeTestCase(R"(spec [a] char)")) )
with expansion:
true
CmdLine.tests.cpp:<line number>: PASSED:
TestSpec.tests.cpp:<line number>: PASSED:
REQUIRE_FALSE( spec.matches(*fakeTestCase("differs but has similar tag", "[a]")) )
with expansion:
!false
@ -210,10 +210,10 @@ with expansion:
#1912 -- test spec parser handles escaping
backslash in test name
-------------------------------------------------------------------------------
CmdLine.tests.cpp:<line number>
TestSpec.tests.cpp:<line number>
...............................................................................
CmdLine.tests.cpp:<line number>: PASSED:
TestSpec.tests.cpp:<line number>: PASSED:
REQUIRE( spec.matches(*fakeTestCase(R"(spec \ char)")) )
with expansion:
true

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuitesloose text artifact
>
<testsuite name="<exe-name>" errors="17" failures="126" tests="2310" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testsuite name="<exe-name>" errors="17" failures="126" tests="2159" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<properties>
<property name="random-seed" value="1"/>
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals] *"/>
@ -1048,41 +1048,6 @@ Message.tests.cpp:<line number>
</failure>
</testcase>
<testcase classname="<exe-name>.global" name="Overloaded comma or address-of operators are not used" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Empty test spec should have no filters" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from empty string should have no filters" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from just a comma should have no filters" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from name should have one filter" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from quoted name should have one filter" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from name should have one filter" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcard at the start" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcard at the end" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcard at both ends" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Redundant wildcard at the start" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Redundant wildcard at the end" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Redundant wildcard at both ends" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcard at both ends, redundant at start" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Just wildcard" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Single tag" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Single tag, two matches" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Two tags" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Two tags, spare separated" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcarded name and tag" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Single tag exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/One tag exclusion and one tag inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/One tag exclusion and one wldcarded name inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/One tag exclusion, using exclude:, and one wldcarded name inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/name exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/wildcarded name exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/wildcarded name exclusion with tag inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/wildcarded name exclusion, using exclude:, with tag inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/two wildcarded names" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/empty tag" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/empty quoted name" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/quoted string followed by tag exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Leading and trailing spaces in test spec" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Leading and trailing spaces in test name" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Shortened hide tags are split apart when parsing" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Shortened hide tags also properly handle exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse uints/proper inputs" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse uints/Bad inputs" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parsed tags are matched case insensitive" time="{duration}" status="run"/>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="<exe-name>" errors="17" failures="126" tests="2310" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testsuite name="<exe-name>" errors="17" failures="126" tests="2159" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<properties>
<property name="random-seed" value="1"/>
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals] *"/>
@ -1047,41 +1047,6 @@ Message.tests.cpp:<line number>
</failure>
</testcase>
<testcase classname="<exe-name>.global" name="Overloaded comma or address-of operators are not used" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Empty test spec should have no filters" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from empty string should have no filters" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from just a comma should have no filters" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from name should have one filter" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from quoted name should have one filter" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Test spec from name should have one filter" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcard at the start" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcard at the end" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcard at both ends" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Redundant wildcard at the start" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Redundant wildcard at the end" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Redundant wildcard at both ends" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcard at both ends, redundant at start" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Just wildcard" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Single tag" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Single tag, two matches" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Two tags" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Two tags, spare separated" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Wildcarded name and tag" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Single tag exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/One tag exclusion and one tag inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/One tag exclusion and one wldcarded name inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/One tag exclusion, using exclude:, and one wldcarded name inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/name exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/wildcarded name exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/wildcarded name exclusion with tag inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/wildcarded name exclusion, using exclude:, with tag inclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/two wildcarded names" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/empty tag" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/empty quoted name" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/quoted string followed by tag exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Leading and trailing spaces in test spec" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Leading and trailing spaces in test name" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Shortened hide tags are split apart when parsing" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse test names and tags/Shortened hide tags also properly handle exclusion" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse uints/proper inputs" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parse uints/Bad inputs" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Parsed tags are matched case insensitive" time="{duration}" status="run"/>

@ -9,44 +9,6 @@
<testCase name="is_unary_function" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp">
<testCase name="#1905 -- test spec parser properly clears internal state between compound tests" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/Various parentheses" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/backslash in test name" duration="{duration}"/>
<testCase name="Parse test names and tags/Empty test spec should have no filters" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from empty string should have no filters" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from just a comma should have no filters" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from name should have one filter" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from quoted name should have one filter" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from name should have one filter" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcard at the start" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcard at the end" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcard at both ends" duration="{duration}"/>
<testCase name="Parse test names and tags/Redundant wildcard at the start" duration="{duration}"/>
<testCase name="Parse test names and tags/Redundant wildcard at the end" duration="{duration}"/>
<testCase name="Parse test names and tags/Redundant wildcard at both ends" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcard at both ends, redundant at start" duration="{duration}"/>
<testCase name="Parse test names and tags/Just wildcard" duration="{duration}"/>
<testCase name="Parse test names and tags/Single tag" duration="{duration}"/>
<testCase name="Parse test names and tags/Single tag, two matches" duration="{duration}"/>
<testCase name="Parse test names and tags/Two tags" duration="{duration}"/>
<testCase name="Parse test names and tags/Two tags, spare separated" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcarded name and tag" duration="{duration}"/>
<testCase name="Parse test names and tags/Single tag exclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/One tag exclusion and one tag inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/One tag exclusion and one wldcarded name inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/One tag exclusion, using exclude:, and one wldcarded name inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/name exclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/wildcarded name exclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/wildcarded name exclusion with tag inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/wildcarded name exclusion, using exclude:, with tag inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/two wildcarded names" duration="{duration}"/>
<testCase name="Parse test names and tags/empty tag" duration="{duration}"/>
<testCase name="Parse test names and tags/empty quoted name" duration="{duration}"/>
<testCase name="Parse test names and tags/quoted string followed by tag exclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/Leading and trailing spaces in test spec" duration="{duration}"/>
<testCase name="Parse test names and tags/Leading and trailing spaces in test name" duration="{duration}"/>
<testCase name="Parse test names and tags/Shortened hide tags are split apart when parsing" duration="{duration}"/>
<testCase name="Parse test names and tags/Shortened hide tags also properly handle exclusion" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/shard-count" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Negative shard count reports error" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Zero shard count reports error" duration="{duration}"/>
@ -287,6 +249,11 @@
<testCase name="Hashing different test cases produces different result/Different tags" duration="{duration}"/>
<testCase name="Hashing test case produces same hash across multiple calls" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/TestSpec.tests.cpp">
<testCase name="#1905 -- test spec parser properly clears internal state between compound tests" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/Various parentheses" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/backslash in test name" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/TestSpecParser.tests.cpp">
<testCase name="Parsed tags are matched case insensitive" duration="{duration}"/>
<testCase name="Parsing tags with non-alphabetical characters is pass-through" duration="{duration}"/>

@ -8,44 +8,6 @@
<testCase name="is_unary_function" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp">
<testCase name="#1905 -- test spec parser properly clears internal state between compound tests" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/Various parentheses" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/backslash in test name" duration="{duration}"/>
<testCase name="Parse test names and tags/Empty test spec should have no filters" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from empty string should have no filters" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from just a comma should have no filters" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from name should have one filter" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from quoted name should have one filter" duration="{duration}"/>
<testCase name="Parse test names and tags/Test spec from name should have one filter" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcard at the start" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcard at the end" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcard at both ends" duration="{duration}"/>
<testCase name="Parse test names and tags/Redundant wildcard at the start" duration="{duration}"/>
<testCase name="Parse test names and tags/Redundant wildcard at the end" duration="{duration}"/>
<testCase name="Parse test names and tags/Redundant wildcard at both ends" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcard at both ends, redundant at start" duration="{duration}"/>
<testCase name="Parse test names and tags/Just wildcard" duration="{duration}"/>
<testCase name="Parse test names and tags/Single tag" duration="{duration}"/>
<testCase name="Parse test names and tags/Single tag, two matches" duration="{duration}"/>
<testCase name="Parse test names and tags/Two tags" duration="{duration}"/>
<testCase name="Parse test names and tags/Two tags, spare separated" duration="{duration}"/>
<testCase name="Parse test names and tags/Wildcarded name and tag" duration="{duration}"/>
<testCase name="Parse test names and tags/Single tag exclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/One tag exclusion and one tag inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/One tag exclusion and one wldcarded name inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/One tag exclusion, using exclude:, and one wldcarded name inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/name exclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/wildcarded name exclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/wildcarded name exclusion with tag inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/wildcarded name exclusion, using exclude:, with tag inclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/two wildcarded names" duration="{duration}"/>
<testCase name="Parse test names and tags/empty tag" duration="{duration}"/>
<testCase name="Parse test names and tags/empty quoted name" duration="{duration}"/>
<testCase name="Parse test names and tags/quoted string followed by tag exclusion" duration="{duration}"/>
<testCase name="Parse test names and tags/Leading and trailing spaces in test spec" duration="{duration}"/>
<testCase name="Parse test names and tags/Leading and trailing spaces in test name" duration="{duration}"/>
<testCase name="Parse test names and tags/Shortened hide tags are split apart when parsing" duration="{duration}"/>
<testCase name="Parse test names and tags/Shortened hide tags also properly handle exclusion" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/shard-count" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Negative shard count reports error" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Zero shard count reports error" duration="{duration}"/>
@ -286,6 +248,11 @@
<testCase name="Hashing different test cases produces different result/Different tags" duration="{duration}"/>
<testCase name="Hashing test case produces same hash across multiple calls" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/TestSpec.tests.cpp">
<testCase name="#1905 -- test spec parser properly clears internal state between compound tests" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/Various parentheses" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/backslash in test name" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/TestSpecParser.tests.cpp">
<testCase name="Parsed tags are matched case insensitive" duration="{duration}"/>
<testCase name="Parsing tags with non-alphabetical characters is pass-through" duration="{duration}"/>

@ -2082,308 +2082,6 @@ ok {test-number} - &EvilMatcher(), EvilAddressOfOperatorUsed
ok {test-number} - EvilMatcher() || ( EvilMatcher() && !EvilMatcher() )
# Overloaded comma or address-of operators are not used
ok {test-number} - ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher()
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - parseTestSpec( "*a" ).matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - parseTestSpec( "a*" ).matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - parseTestSpec( "*a*" ).matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( "aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( "aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( "aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( "aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) for: true
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only hidden", "[.]"))) for: !false
# Parse test names and tags
ok {test-number} - spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) for: true
# Parse uints
ok {test-number} - parseUInt( "0" ) == Optional<unsigned int>{ 0 } for: {?} == {?}
# Parse uints
@ -4624,5 +4322,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
ok {test-number} -
# xmlentitycheck
ok {test-number} -
1..2310
1..2159

@ -2080,308 +2080,6 @@ ok {test-number} - &EvilMatcher(), EvilAddressOfOperatorUsed
ok {test-number} - EvilMatcher() || ( EvilMatcher() && !EvilMatcher() )
# Overloaded comma or address-of operators are not used
ok {test-number} - ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher()
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - parseTestSpec( "*a" ).matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - parseTestSpec( "a*" ).matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - parseTestSpec( "*a*" ).matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.hasFilters() == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *tcA ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcB ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcC ) == false for: false == false
# Parse test names and tags
ok {test-number} - spec.matches( *tcD ) == true for: true == true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( "aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( "aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( "aardvark " ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches( *fakeTestCase( "aardvark" ) ) for: true
# Parse test names and tags
ok {test-number} - spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) for: true
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false
# Parse test names and tags
ok {test-number} - !(spec.matches(*fakeTestCase("only hidden", "[.]"))) for: !false
# Parse test names and tags
ok {test-number} - spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) for: true
# Parse uints
ok {test-number} - parseUInt( "0" ) == Optional<unsigned int>{ 0 } for: {?} == {?}
# Parse uints
@ -4616,5 +4314,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
ok {test-number} -
# xmlentitycheck
ok {test-number} -
1..2310
1..2159

@ -481,8 +481,6 @@ Message.tests.cpp:<line number>|nexplicit failure with message:|n "Message from
##teamcity[testFinished name='Output from all sections is reported' duration="{duration}"]
##teamcity[testStarted name='Overloaded comma or address-of operators are not used']
##teamcity[testFinished name='Overloaded comma or address-of operators are not used' duration="{duration}"]
##teamcity[testStarted name='Parse test names and tags']
##teamcity[testFinished name='Parse test names and tags' duration="{duration}"]
##teamcity[testStarted name='Parse uints']
##teamcity[testFinished name='Parse uints' duration="{duration}"]
##teamcity[testStarted name='Parsed tags are matched case insensitive']

@ -481,8 +481,6 @@ Message.tests.cpp:<line number>|nexplicit failure with message:|n "Message from
##teamcity[testFinished name='Output from all sections is reported' duration="{duration}"]
##teamcity[testStarted name='Overloaded comma or address-of operators are not used']
##teamcity[testFinished name='Overloaded comma or address-of operators are not used' duration="{duration}"]
##teamcity[testStarted name='Parse test names and tags']
##teamcity[testFinished name='Parse test names and tags' duration="{duration}"]
##teamcity[testStarted name='Parse uints']
##teamcity[testFinished name='Parse uints' duration="{duration}"]
##teamcity[testStarted name='Parsed tags are matched case insensitive']

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -22,311 +22,6 @@ namespace {
auto fakeTestCase(const char* name, const char* desc = "") { return Catch::makeTestCaseInfo("", { name, desc }, CATCH_INTERNAL_LINEINFO); }
}
TEST_CASE( "Parse test names and tags", "[command-line][test-spec]" ) {
using Catch::parseTestSpec;
using Catch::TestSpec;
auto tcA = fakeTestCase( "a" );
auto tcB = fakeTestCase( "b", "[one][x]" );
auto tcC = fakeTestCase( "longer name with spaces", "[two][three][.][x]" );
auto tcD = fakeTestCase( "zlonger name with spacesz" );
SECTION( "Empty test spec should have no filters" ) {
TestSpec spec;
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Test spec from empty string should have no filters" ) {
TestSpec spec = parseTestSpec( "" );
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Test spec from just a comma should have no filters" ) {
TestSpec spec = parseTestSpec( "," );
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Test spec from name should have one filter" ) {
TestSpec spec = parseTestSpec( "b" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
}
SECTION( "Test spec from quoted name should have one filter" ) {
TestSpec spec = parseTestSpec( "\"b\"" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
}
SECTION( "Test spec from name should have one filter" ) {
TestSpec spec = parseTestSpec( "b" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == false );
}
SECTION( "Wildcard at the start" ) {
TestSpec spec = parseTestSpec( "*spaces" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
CHECK( parseTestSpec( "*a" ).matches( *tcA ) == true );
}
SECTION( "Wildcard at the end" ) {
TestSpec spec = parseTestSpec( "long*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
CHECK( parseTestSpec( "a*" ).matches( *tcA ) == true );
}
SECTION( "Wildcard at both ends" ) {
TestSpec spec = parseTestSpec( "*name*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == true );
CHECK( parseTestSpec( "*a*" ).matches( *tcA ) == true );
}
SECTION( "Redundant wildcard at the start" ) {
TestSpec spec = parseTestSpec( "*a" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Redundant wildcard at the end" ) {
TestSpec spec = parseTestSpec( "a*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Redundant wildcard at both ends" ) {
TestSpec spec = parseTestSpec( "*a*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Wildcard at both ends, redundant at start" ) {
TestSpec spec = parseTestSpec( "*longer*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "Just wildcard" ) {
TestSpec spec = parseTestSpec( "*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "Single tag" ) {
TestSpec spec = parseTestSpec( "[one]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == false );
}
SECTION( "Single tag, two matches" ) {
TestSpec spec = parseTestSpec( "[x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == true );
}
SECTION( "Two tags" ) {
TestSpec spec = parseTestSpec( "[two][x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
}
SECTION( "Two tags, spare separated" ) {
TestSpec spec = parseTestSpec( "[two] [x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
}
SECTION( "Wildcarded name and tag" ) {
TestSpec spec = parseTestSpec( "*name*[x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "Single tag exclusion" ) {
TestSpec spec = parseTestSpec( "~[one]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
}
SECTION( "One tag exclusion and one tag inclusion" ) {
TestSpec spec = parseTestSpec( "~[two][x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == false );
}
SECTION( "One tag exclusion and one wldcarded name inclusion" ) {
TestSpec spec = parseTestSpec( "~[two]*name*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "One tag exclusion, using exclude:, and one wldcarded name inclusion" ) {
TestSpec spec = parseTestSpec( "exclude:[two]*name*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "name exclusion" ) {
TestSpec spec = parseTestSpec( "~b" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "wildcarded name exclusion" ) {
TestSpec spec = parseTestSpec( "~*name*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "wildcarded name exclusion with tag inclusion" ) {
TestSpec spec = parseTestSpec( "~*name*,[three]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "wildcarded name exclusion, using exclude:, with tag inclusion" ) {
TestSpec spec = parseTestSpec( "exclude:*name*,[three]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "two wildcarded names" ) {
TestSpec spec = parseTestSpec( "\"longer*\"\"*spaces\"" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "empty tag" ) {
TestSpec spec = parseTestSpec( "[]" );
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "empty quoted name" ) {
TestSpec spec = parseTestSpec( "\"\"" );
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "quoted string followed by tag exclusion" ) {
TestSpec spec = parseTestSpec( "\"*name*\"~[.]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "Leading and trailing spaces in test spec" ) {
TestSpec spec = parseTestSpec( "\" aardvark \"" );
CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( " aardvark" ) ) );
CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( "aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( "aardvark" ) ) );
}
SECTION( "Leading and trailing spaces in test name" ) {
TestSpec spec = parseTestSpec( "aardvark" );
CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( " aardvark" ) ) );
CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( "aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( "aardvark" ) ) );
}
SECTION("Shortened hide tags are split apart when parsing") {
TestSpec spec = parseTestSpec("[.foo]");
CHECK(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")));
CHECK_FALSE(spec.matches(*fakeTestCase("only foo", "[foo]")));
}
SECTION("Shortened hide tags also properly handle exclusion") {
TestSpec spec = parseTestSpec("~[.foo]");
CHECK_FALSE(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")));
CHECK_FALSE(spec.matches(*fakeTestCase("only foo", "[foo]")));
CHECK_FALSE(spec.matches(*fakeTestCase("only hidden", "[.]")));
CHECK(spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")));
}
}
TEST_CASE("#1905 -- test spec parser properly clears internal state between compound tests", "[command-line][test-spec]") {
using Catch::parseTestSpec;
using Catch::TestSpec;
// We ask for one of 2 different tests and the latter one of them has a , in name that needs escaping
TestSpec spec = parseTestSpec(R"("spec . char","spec \, char")");
REQUIRE(spec.matches(*fakeTestCase("spec . char")));
REQUIRE(spec.matches(*fakeTestCase("spec , char")));
REQUIRE_FALSE(spec.matches(*fakeTestCase(R"(spec \, char)")));
}
TEST_CASE("#1912 -- test spec parser handles escaping", "[command-line][test-spec]") {
using Catch::parseTestSpec;
using Catch::TestSpec;
SECTION("Various parentheses") {
TestSpec spec = parseTestSpec(R"(spec {a} char,spec \[a] char)");
REQUIRE(spec.matches(*fakeTestCase(R"(spec {a} char)")));
REQUIRE(spec.matches(*fakeTestCase(R"(spec [a] char)")));
REQUIRE_FALSE(spec.matches(*fakeTestCase("differs but has similar tag", "[a]")));
}
SECTION("backslash in test name") {
TestSpec spec = parseTestSpec(R"(spec \\ char)");
REQUIRE(spec.matches(*fakeTestCase(R"(spec \ char)")));
}
}
TEST_CASE( "Process can be configured on command line", "[config][command-line]" ) {
using namespace Catch::Matchers;

@ -0,0 +1,327 @@
// Copyright Catch2 Authors
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// https://www.boost.org/LICENSE_1_0.txt)
// SPDX-License-Identifier: BSL-1.0
#include <catch2/catch_config.hpp>
#include <catch2/catch_approx.hpp>
#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers_string.hpp>
#include <catch2/internal/catch_test_spec_parser.hpp>
#include <catch2/catch_user_config.hpp>
#include <catch2/catch_test_case_info.hpp>
#include <catch2/internal/catch_commandline.hpp>
#include <catch2/generators/catch_generators.hpp>
#include <catch2/internal/catch_compiler_capabilities.hpp>
namespace {
auto fakeTestCase(const char* name, const char* desc = "") { return Catch::makeTestCaseInfo("", { name, desc }, CATCH_INTERNAL_LINEINFO); }
}
TEST_CASE( "Parse test names and tags", "[command-line][test-spec][approvals]" ) {
using Catch::parseTestSpec;
using Catch::TestSpec;
auto tcA = fakeTestCase( "a" );
auto tcB = fakeTestCase( "b", "[one][x]" );
auto tcC = fakeTestCase( "longer name with spaces", "[two][three][.][x]" );
auto tcD = fakeTestCase( "zlonger name with spacesz" );
SECTION( "Empty test spec should have no filters" ) {
TestSpec spec;
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Test spec from empty string should have no filters" ) {
TestSpec spec = parseTestSpec( "" );
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Test spec from just a comma should have no filters" ) {
TestSpec spec = parseTestSpec( "," );
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Test spec from name should have one filter" ) {
TestSpec spec = parseTestSpec( "b" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
}
SECTION( "Test spec from quoted name should have one filter" ) {
TestSpec spec = parseTestSpec( "\"b\"" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
}
SECTION( "Test spec from name should have one filter" ) {
TestSpec spec = parseTestSpec( "b" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == false );
}
SECTION( "Wildcard at the start" ) {
TestSpec spec = parseTestSpec( "*spaces" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
CHECK( parseTestSpec( "*a" ).matches( *tcA ) == true );
}
SECTION( "Wildcard at the end" ) {
TestSpec spec = parseTestSpec( "long*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
CHECK( parseTestSpec( "a*" ).matches( *tcA ) == true );
}
SECTION( "Wildcard at both ends" ) {
TestSpec spec = parseTestSpec( "*name*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == true );
CHECK( parseTestSpec( "*a*" ).matches( *tcA ) == true );
}
SECTION( "Redundant wildcard at the start" ) {
TestSpec spec = parseTestSpec( "*a" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Redundant wildcard at the end" ) {
TestSpec spec = parseTestSpec( "a*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Redundant wildcard at both ends" ) {
TestSpec spec = parseTestSpec( "*a*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
}
SECTION( "Wildcard at both ends, redundant at start" ) {
TestSpec spec = parseTestSpec( "*longer*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "Just wildcard" ) {
TestSpec spec = parseTestSpec( "*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "Single tag" ) {
TestSpec spec = parseTestSpec( "[one]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == false );
}
SECTION( "Single tag, two matches" ) {
TestSpec spec = parseTestSpec( "[x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == true );
}
SECTION( "Two tags" ) {
TestSpec spec = parseTestSpec( "[two][x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
}
SECTION( "Two tags, spare separated" ) {
TestSpec spec = parseTestSpec( "[two] [x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
}
SECTION( "Wildcarded name and tag" ) {
TestSpec spec = parseTestSpec( "*name*[x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "Single tag exclusion" ) {
TestSpec spec = parseTestSpec( "~[one]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
}
SECTION( "One tag exclusion and one tag inclusion" ) {
TestSpec spec = parseTestSpec( "~[two][x]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == false );
}
SECTION( "One tag exclusion and one wldcarded name inclusion" ) {
TestSpec spec = parseTestSpec( "~[two]*name*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "One tag exclusion, using exclude:, and one wldcarded name inclusion" ) {
TestSpec spec = parseTestSpec( "exclude:[two]*name*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "name exclusion" ) {
TestSpec spec = parseTestSpec( "~b" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "wildcarded name exclusion" ) {
TestSpec spec = parseTestSpec( "~*name*" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "wildcarded name exclusion with tag inclusion" ) {
TestSpec spec = parseTestSpec( "~*name*,[three]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "wildcarded name exclusion, using exclude:, with tag inclusion" ) {
TestSpec spec = parseTestSpec( "exclude:*name*,[three]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == true );
CHECK( spec.matches( *tcB ) == true );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "two wildcarded names" ) {
TestSpec spec = parseTestSpec( "\"longer*\"\"*spaces\"" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == true );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "empty tag" ) {
TestSpec spec = parseTestSpec( "[]" );
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "empty quoted name" ) {
TestSpec spec = parseTestSpec( "\"\"" );
CHECK( spec.hasFilters() == false );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == false );
}
SECTION( "quoted string followed by tag exclusion" ) {
TestSpec spec = parseTestSpec( "\"*name*\"~[.]" );
CHECK( spec.hasFilters() == true );
CHECK( spec.matches( *tcA ) == false );
CHECK( spec.matches( *tcB ) == false );
CHECK( spec.matches( *tcC ) == false );
CHECK( spec.matches( *tcD ) == true );
}
SECTION( "Leading and trailing spaces in test spec" ) {
TestSpec spec = parseTestSpec( "\" aardvark \"" );
CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( " aardvark" ) ) );
CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( "aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( "aardvark" ) ) );
}
SECTION( "Leading and trailing spaces in test name" ) {
TestSpec spec = parseTestSpec( "aardvark" );
CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( " aardvark" ) ) );
CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( "aardvark " ) ) );
CHECK( spec.matches( *fakeTestCase( "aardvark" ) ) );
}
SECTION("Shortened hide tags are split apart when parsing") {
TestSpec spec = parseTestSpec("[.foo]");
CHECK(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")));
CHECK_FALSE(spec.matches(*fakeTestCase("only foo", "[foo]")));
}
SECTION("Shortened hide tags also properly handle exclusion") {
TestSpec spec = parseTestSpec("~[.foo]");
CHECK_FALSE(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")));
CHECK_FALSE(spec.matches(*fakeTestCase("only foo", "[foo]")));
CHECK_FALSE(spec.matches(*fakeTestCase("only hidden", "[.]")));
CHECK(spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")));
}
}
TEST_CASE("#1905 -- test spec parser properly clears internal state between compound tests", "[command-line][test-spec]") {
using Catch::parseTestSpec;
using Catch::TestSpec;
// We ask for one of 2 different tests and the latter one of them has a , in name that needs escaping
TestSpec spec = parseTestSpec(R"("spec . char","spec \, char")");
REQUIRE(spec.matches(*fakeTestCase("spec . char")));
REQUIRE(spec.matches(*fakeTestCase("spec , char")));
REQUIRE_FALSE(spec.matches(*fakeTestCase(R"(spec \, char)")));
}
TEST_CASE("#1912 -- test spec parser handles escaping", "[command-line][test-spec]") {
using Catch::parseTestSpec;
using Catch::TestSpec;
SECTION("Various parentheses") {
TestSpec spec = parseTestSpec(R"(spec {a} char,spec \[a] char)");
REQUIRE(spec.matches(*fakeTestCase(R"(spec {a} char)")));
REQUIRE(spec.matches(*fakeTestCase(R"(spec [a] char)")));
REQUIRE_FALSE(spec.matches(*fakeTestCase("differs but has similar tag", "[a]")));
}
SECTION("backslash in test name") {
TestSpec spec = parseTestSpec(R"(spec \\ char)");
REQUIRE(spec.matches(*fakeTestCase(R"(spec \ char)")));
}
}