Add --list-listeners option

This commit is contained in:
Martin Hořeňovský
2022-05-10 20:00:36 +02:00
parent ae475a3c19
commit 5a49285e9c
33 changed files with 220 additions and 18 deletions

View File

@@ -207,6 +207,18 @@ set_tests_properties(List::Reporters::XmlOutput PROPERTIES
FAIL_REGULAR_EXPRESSION "Available reporters:"
)
add_test(NAME List::Listeners::Output
COMMAND
$<TARGET_FILE:SelfTest> --list-listeners
)
set_tests_properties(List::Listeners::Output
PROPERTIES
PASS_REGULAR_EXPRESSION "Registered listeners:"
)
add_test(NAME List::Listeners::ExitCode
COMMAND
$<TARGET_FILE:SelfTest> --list-listeners
)
add_test(NAME NoAssertions COMMAND $<TARGET_FILE:SelfTest> -w NoAssertions "An empty test with no assertions")

View File

@@ -1898,6 +1898,10 @@ Reporters.tests.cpp:<line number>: passed: listingString, ContainsSubstring( "fa
1 test case
" ( contains: "fake test name" and contains: "fakeTestTag" )
Reporters.tests.cpp:<line number>: passed: listingString, ContainsSubstring( "fakeListener"s ) && ContainsSubstring( "fake description"s ) for: "Registered listeners:
fakeListener: fake description
" ( contains: "fakeListener" and contains: "fake description" )
Misc.tests.cpp:<line number>: passed: with 1 message: 'oops!'
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'For some reason someone is throwing a string literal!'
PartTracker.tests.cpp:<line number>: passed: testCase.isOpen() for: true

View File

@@ -1891,6 +1891,10 @@ Reporters.tests.cpp:<line number>: passed: listingString, ContainsSubstring( "fa
1 test case
" ( contains: "fake test name" and contains: "fakeTestTag" )
Reporters.tests.cpp:<line number>: passed: listingString, ContainsSubstring( "fakeListener"s ) && ContainsSubstring( "fake description"s ) for: "Registered listeners:
fakeListener: fake description
" ( contains: "fakeListener" and contains: "fake description" )
Misc.tests.cpp:<line number>: passed: with 1 message: 'oops!'
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'For some reason someone is throwing a string literal!'
PartTracker.tests.cpp:<line number>: passed: testCase.isOpen() for: true

View File

@@ -1395,5 +1395,5 @@ due to unexpected exception with message:
===============================================================================
test cases: 391 | 315 passed | 69 failed | 7 failed as expected
assertions: 2226 | 2071 passed | 128 failed | 27 failed as expected
assertions: 2227 | 2072 passed | 128 failed | 27 failed as expected

View File

@@ -13444,6 +13444,21 @@ with expansion:
" ( contains: "fake test name" and contains: "fakeTestTag" )
-------------------------------------------------------------------------------
The default listing implementation write to provided stream
Listing listeners
-------------------------------------------------------------------------------
Reporters.tests.cpp:<line number>
...............................................................................
Reporters.tests.cpp:<line number>: PASSED:
REQUIRE_THAT( listingString, ContainsSubstring( "fakeListener"s ) && ContainsSubstring( "fake description"s ) )
with expansion:
"Registered listeners:
fakeListener: fake description
" ( contains: "fakeListener" and contains: "fake description" )
-------------------------------------------------------------------------------
This test 'should' fail but doesn't
-------------------------------------------------------------------------------
@@ -17935,5 +17950,5 @@ Misc.tests.cpp:<line number>: PASSED:
===============================================================================
test cases: 391 | 301 passed | 83 failed | 7 failed as expected
assertions: 2241 | 2071 passed | 143 failed | 27 failed as expected
assertions: 2242 | 2072 passed | 143 failed | 27 failed as expected

View File

@@ -13437,6 +13437,21 @@ with expansion:
" ( contains: "fake test name" and contains: "fakeTestTag" )
-------------------------------------------------------------------------------
The default listing implementation write to provided stream
Listing listeners
-------------------------------------------------------------------------------
Reporters.tests.cpp:<line number>
...............................................................................
Reporters.tests.cpp:<line number>: PASSED:
REQUIRE_THAT( listingString, ContainsSubstring( "fakeListener"s ) && ContainsSubstring( "fake description"s ) )
with expansion:
"Registered listeners:
fakeListener: fake description
" ( contains: "fakeListener" and contains: "fake description" )
-------------------------------------------------------------------------------
This test 'should' fail but doesn't
-------------------------------------------------------------------------------
@@ -17927,5 +17942,5 @@ Misc.tests.cpp:<line number>: PASSED:
===============================================================================
test cases: 391 | 301 passed | 83 failed | 7 failed as expected
assertions: 2241 | 2071 passed | 143 failed | 27 failed as expected
assertions: 2242 | 2072 passed | 143 failed | 27 failed as expected

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuitesloose text artifact
>
<testsuite name="<exe-name>" errors="17" failures="126" tests="2241" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testsuite name="<exe-name>" errors="17" failures="126" tests="2242" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<properties>
<property name="random-seed" value="1"/>
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals] *"/>
@@ -1379,6 +1379,7 @@ Misc.tests.cpp:<line number>
<testcase classname="<exe-name>.global" name="The default listing implementation write to provided stream/Listing tags" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="The default listing implementation write to provided stream/Listing reporters" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="The default listing implementation write to provided stream/Listing tests" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="The default listing implementation write to provided stream/Listing listeners" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="This test 'should' fail but doesn't" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Thrown string literals are translated" time="{duration}" status="run">
<error type="TEST_CASE">

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="<exe-name>" errors="17" failures="126" tests="2241" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testsuite name="<exe-name>" errors="17" failures="126" tests="2242" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<properties>
<property name="random-seed" value="1"/>
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals] *"/>
@@ -1378,6 +1378,7 @@ Misc.tests.cpp:<line number>
<testcase classname="<exe-name>.global" name="The default listing implementation write to provided stream/Listing tags" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="The default listing implementation write to provided stream/Listing reporters" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="The default listing implementation write to provided stream/Listing tests" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="The default listing implementation write to provided stream/Listing listeners" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="This test 'should' fail but doesn't" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Thrown string literals are translated" time="{duration}" status="run">
<error type="TEST_CASE">

View File

@@ -220,6 +220,7 @@
<testCase name="The default listing implementation write to provided stream/Listing tags" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing reporters" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing tests" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing listeners" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Stream.tests.cpp">
<testCase name="Cout stream properly declares it writes to stdout" duration="{duration}"/>

View File

@@ -219,6 +219,7 @@
<testCase name="The default listing implementation write to provided stream/Listing tags" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing reporters" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing tests" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing listeners" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Stream.tests.cpp">
<testCase name="Cout stream properly declares it writes to stdout" duration="{duration}"/>

View File

@@ -3338,6 +3338,8 @@ ok {test-number} - listingString, ContainsSubstring("[fakeTag]"s) for: "All avai
ok {test-number} - listingString, ContainsSubstring( "fake reporter"s ) && ContainsSubstring( "fake description"s ) for: "Available reporters: fake reporter: fake description " ( contains: "fake reporter" and contains: "fake description" )
# The default listing implementation write to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" )
# The default listing implementation write to provided stream
ok {test-number} - listingString, ContainsSubstring( "fakeListener"s ) && ContainsSubstring( "fake description"s ) for: "Registered listeners: fakeListener: fake description " ( contains: "fakeListener" and contains: "fake description" )
# This test 'should' fail but doesn't
ok {test-number} - with 1 message: 'oops!'
# Thrown string literals are translated
@@ -4485,5 +4487,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
ok {test-number} -
# xmlentitycheck
ok {test-number} -
1..2241
1..2242

View File

@@ -3331,6 +3331,8 @@ ok {test-number} - listingString, ContainsSubstring("[fakeTag]"s) for: "All avai
ok {test-number} - listingString, ContainsSubstring( "fake reporter"s ) && ContainsSubstring( "fake description"s ) for: "Available reporters: fake reporter: fake description " ( contains: "fake reporter" and contains: "fake description" )
# The default listing implementation write to provided stream
ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" )
# The default listing implementation write to provided stream
ok {test-number} - listingString, ContainsSubstring( "fakeListener"s ) && ContainsSubstring( "fake description"s ) for: "Registered listeners: fakeListener: fake description " ( contains: "fakeListener" and contains: "fake description" )
# This test 'should' fail but doesn't
ok {test-number} - with 1 message: 'oops!'
# Thrown string literals are translated
@@ -4477,5 +4479,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
ok {test-number} -
# xmlentitycheck
ok {test-number} -
1..2241
1..2242

View File

@@ -15754,6 +15754,20 @@ Message from section two
</Expression>
<OverallResults successes="1" failures="0" expectedFailures="0"/>
</Section>
<Section name="Listing listeners" filename="tests/<exe-name>/IntrospectiveTests/Reporters.tests.cpp" >
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/IntrospectiveTests/Reporters.tests.cpp" >
<Original>
listingString, ContainsSubstring( "fakeListener"s ) &amp;&amp; ContainsSubstring( "fake description"s )
</Original>
<Expanded>
"Registered listeners:
fakeListener: fake description
" ( contains: "fakeListener" and contains: "fake description" )
</Expanded>
</Expression>
<OverallResults successes="1" failures="0" expectedFailures="0"/>
</Section>
<OverallResult success="true"/>
</TestCase>
<TestCase name="This test 'should' fail but doesn't" tags="[!shouldfail][.][failing]" filename="tests/<exe-name>/UsageTests/Misc.tests.cpp" >
@@ -21061,6 +21075,6 @@ loose text artifact
</Section>
<OverallResult success="true"/>
</TestCase>
<OverallResults successes="2071" failures="143" expectedFailures="27"/>
<OverallResults successes="2072" failures="143" expectedFailures="27"/>
<OverallResultsCases successes="301" failures="83" expectedFailures="7"/>
</Catch2TestRun>

View File

@@ -15754,6 +15754,20 @@ Message from section two
</Expression>
<OverallResults successes="1" failures="0" expectedFailures="0"/>
</Section>
<Section name="Listing listeners" filename="tests/<exe-name>/IntrospectiveTests/Reporters.tests.cpp" >
<Expression success="true" type="REQUIRE_THAT" filename="tests/<exe-name>/IntrospectiveTests/Reporters.tests.cpp" >
<Original>
listingString, ContainsSubstring( "fakeListener"s ) &amp;&amp; ContainsSubstring( "fake description"s )
</Original>
<Expanded>
"Registered listeners:
fakeListener: fake description
" ( contains: "fakeListener" and contains: "fake description" )
</Expanded>
</Expression>
<OverallResults successes="1" failures="0" expectedFailures="0"/>
</Section>
<OverallResult success="true"/>
</TestCase>
<TestCase name="This test 'should' fail but doesn't" tags="[!shouldfail][.][failing]" filename="tests/<exe-name>/UsageTests/Misc.tests.cpp" >
@@ -21060,6 +21074,6 @@ There is no extra whitespace here
</Section>
<OverallResult success="true"/>
</TestCase>
<OverallResults successes="2071" failures="143" expectedFailures="27"/>
<OverallResults successes="2072" failures="143" expectedFailures="27"/>
<OverallResultsCases successes="301" failures="83" expectedFailures="7"/>
</Catch2TestRun>

View File

@@ -84,6 +84,16 @@ TEST_CASE( "The default listing implementation write to provided stream",
ContainsSubstring( "fake test name"s ) &&
ContainsSubstring( "fakeTestTag"s ) );
}
SECTION( "Listing listeners" ) {
std::vector<Catch::ListenerDescription> listeners(
{ { "fakeListener"_catch_sr, "fake description" } } );
Catch::defaultListListeners( sstream.stream(), listeners );
auto listingString = sstream.str();
REQUIRE_THAT( listingString,
ContainsSubstring( "fakeListener"s ) &&
ContainsSubstring( "fake description"s ) );
}
}
TEST_CASE( "Reporter's write listings to provided stream", "[reporters]" ) {

View File

@@ -48,6 +48,10 @@ class ValidatingTestListener : public Catch::EventListenerBase {
};
public:
static std::string getDescription() {
return "Validates ordering of Catch2's listener events";
}
ValidatingTestListener(Catch::IConfig const* config) :
EventListenerBase(config) {
m_preferences.shouldReportAllAssertions = true;