Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/tests/ExtraTests
diff options
context:
space:
mode:
authorLeitwolf112026-10-23 23:25:41 +0300
committerLeitwolf112026-10-23 23:25:41 +0300
commit93d4e7dbebab867e0a7f59fc25308460a7a76280 (patch)
tree54c568a3063d49e21f039b6d38f40f51be7991f0 /tests/ExtraTests
parent83c6fc3ac13abe83fa39f7b5f8559ccaf4412233 (diff)
downloadcatch3-93d4e7dbebab867e0a7f59fc25308460a7a76280.tar.gz
Replace Catch2's runner with the Catch3 runner
Catch3 keeps Catch2's API for writing tests (test cases, sections, assertions, matchers, generators, listeners, benchmarks) and replaces its session, command line and reporters with a runner of its own. The runner starts the test binary again as worker processes that take the next test when they are free. A crash, an exit or a hang ends one test, not the run. On top of that it adds: - retries that tell deterministic, flaky and order-dependent failures apart, and a bisection that names the test leaving state behind; - a history of verdicts and durations, kept under a file lock, that drives automatic quarantine, adaptive time limits, predictive ordering, incremental runs, failure replay and analytics; - selection by change, past failure or prediction, dependency closure, and sharding by a stable hash or by recorded durations; - tags for serial and isolated tests, shared resources, dependencies, time limits and retries; - a failure category, a signature, an analysis and a replay command for every failure; - console, JUnit XML (with flakyFailure and rerunFailure), JSON and Chrome trace reports, and a versioned discovery listing (--list=json); - a temporary directory per test (TMPDIR, TMP, TEMP and TestTemporaryDirectory()); - Bazel's test environment: XML output file, test filter, sharding, seed, premature exit file and undeclared outputs. The command line is parsed by a hand-written, typed parser. Catch::Session remains as a thin facade over the runner for custom main functions. The result model in Progmasoft/Catch3/Results.hpp was rewritten around tests and attempts, and the JUnit writer now writes it. The property engine's example database is updated under a file lock with an atomic rename, so parallel workers can write it at the same time. Removed: Clara, the command-line and reporter-spec parsers, every reporter and CATCH_REGISTER_REPORTER, listing, text flow, console colour and width, the JSON and XML writers, sharding in the test registry, approval tests and their baselines, Conan packaging, and the unused third_party/clara.hpp. Listeners keep working; reporters' list and skip events are gone. The Catch2 library is now compiled as C++20; code that includes only Catch2's headers still needs C++14. Duplicate test cases are still refused at start-up. Version 0.3.0. ExtraTests now turn exceptions off for clang-cl with MSVC-style options, which -fno-exceptions did not do.
Diffstat (limited to 'tests/ExtraTests')
-rw-r--r--tests/ExtraTests/CMakeLists.txt415
-rw-r--r--tests/ExtraTests/X21-PartialTestCaseEvents.cpp40
-rw-r--r--tests/ExtraTests/X22-BenchmarksInCumulativeReporter.cpp79
-rw-r--r--tests/ExtraTests/X23-CasingInReporterNames.cpp41
-rw-r--r--tests/ExtraTests/X26-ReporterPreferencesForPassingAssertionsIsRespected.cpp52
-rw-r--r--tests/ExtraTests/X27-CapturedStdoutInTestCaseEvents.cpp38
-rw-r--r--tests/ExtraTests/X28-ListenersGetEventsBeforeReporters.cpp70
-rw-r--r--tests/ExtraTests/X29-CustomArgumentsForReporters.cpp60
-rw-r--r--tests/ExtraTests/X35-DuplicatedReporterNames.cpp31
-rw-r--r--tests/ExtraTests/X38-ThrowingReporter.cpp79
10 files changed, 167 insertions, 738 deletions
diff --git a/tests/ExtraTests/CMakeLists.txt b/tests/ExtraTests/CMakeLists.txt
index 98f050d6..8e8102ee 100644
--- a/tests/ExtraTests/CMakeLists.txt
+++ b/tests/ExtraTests/CMakeLists.txt
@@ -14,74 +14,22 @@ set_tests_properties(TestShardingIntegration
add_test(
NAME TestSharding::OverlyLargeShardIndex
- COMMAND $<TARGET_FILE:SelfTest> --shard-index 5 --shard-count 5
+ COMMAND $<TARGET_FILE:SelfTest> --shard=5/5
)
set_tests_properties(TestSharding::OverlyLargeShardIndex
PROPERTIES
- PASS_REGULAR_EXPRESSION "The shard count \\(5\\) must be greater than the shard index \\(5\\)"
+ PASS_REGULAR_EXPRESSION "--shard takes INDEX/COUNT with INDEX below COUNT"
)
-set(CATCH_SHARDING_WARNING_REGEX "Warning: using sharding .* with random order")
-
-add_test(
- NAME TestSharding::WarningOnRandomOrderWithoutFixedSeed
- COMMAND $<TARGET_FILE:SelfTest> --shard-index 0 --shard-count 2 --list-tests
-)
-set_tests_properties(TestSharding::WarningOnRandomOrderWithoutFixedSeed
- PROPERTIES
- PASS_REGULAR_EXPRESSION "${CATCH_SHARDING_WARNING_REGEX}"
-)
-
-add_test(
- NAME TestSharding::NoWarningOnRandomOrderWithFixedSeed
- COMMAND $<TARGET_FILE:SelfTest> --shard-index 0 --shard-count 2 --rng-seed 12345 --list-tests
-)
-set_tests_properties(TestSharding::NoWarningOnRandomOrderWithFixedSeed
- PROPERTIES
- FAIL_REGULAR_EXPRESSION "${CATCH_SHARDING_WARNING_REGEX}"
-)
-
-foreach(shardOrder decl lex)
- add_test(
- NAME TestSharding::NoWarningOn${shardOrder}OrderWithoutFixedSeed
- COMMAND $<TARGET_FILE:SelfTest> --shard-index 0 --shard-count 2 --order ${shardOrder} --list-tests
- )
- set_tests_properties(TestSharding::NoWarningOn${shardOrder}OrderWithoutFixedSeed
- PROPERTIES
- FAIL_REGULAR_EXPRESSION "${CATCH_SHARDING_WARNING_REGEX}"
- )
-endforeach()
-
-# The MinDuration reporting tests do not need separate compilation, but
-# they have non-trivial execution time, so they are categorized as
-# extra tests, so that they are run less.
-add_test(NAME MinDuration::SimpleThreshold COMMAND $<TARGET_FILE:SelfTest> --min-duration 0.950 [min_duration_test])
-set_tests_properties(MinDuration::SimpleThreshold
+# The slowest tests are listed with their durations. The tests sleep, so
+# they run less often, as extra tests.
+add_test(NAME Durations::Slowest COMMAND $<TARGET_FILE:SelfTest> --no-history --slowest=1 [min_duration_test])
+set_tests_properties(Durations::Slowest
PROPERTIES
- PASS_REGULAR_EXPRESSION "s: sleep_for_1000ms"
- FAIL_REGULAR_EXPRESSION "sleep_for_100ms"
- RUN_SERIAL ON # The test is timing sensitive, so we want to run it
- # serially to avoid false positives on oversubscribed machines
+ PASS_REGULAR_EXPRESSION "slowest tests:[\r\n]+ +[0-9.]+ s sleep_for_1000ms"
+ FAIL_REGULAR_EXPRESSION " sleep_for_100ms"
)
-# -d yes overrides the threshold, so we should see the faster test even
-# with a ridiculous high min duration threshold
-add_test(NAME MinDuration::DurationOverrideYes COMMAND $<TARGET_FILE:SelfTest> --min-duration 1.0 -d yes [min_duration_test])
-set_tests_properties(MinDuration::DurationOverrideYes
- PROPERTIES
- PASS_REGULAR_EXPRESSION "s: sleep_for_100ms"
-)
-
-# -d no overrides the threshold, so we should never see any tests even
-# with ridiculously low min duration threshold
-add_test(NAME MinDuration::DurationOverrideNo COMMAND $<TARGET_FILE:SelfTest> --min-duration 0.0001 -d no [min_duration_test])
-set_tests_properties(MinDuration::DurationOverrideNo
- PROPERTIES
- FAIL_REGULAR_EXPRESSION "sleep_for_250ms"
-)
-
-# ------------ end of duration reporting tests
-
# define folders used:
set(TESTS_DIR ${CATCH_DIR}/tests/ExtraTests)
@@ -91,7 +39,7 @@ target_compile_definitions(PrefixedMacros PRIVATE CATCH_CONFIG_PREFIX_ALL CATCH_
# macros, regression test for #3087.
target_link_libraries(PrefixedMacros Catch2_buildall_interface)
-add_test(NAME CATCH_CONFIG_PREFIX_ALL COMMAND PrefixedMacros -s)
+add_test(NAME CATCH_CONFIG_PREFIX_ALL COMMAND PrefixedMacros --no-history --success)
set_tests_properties(CATCH_CONFIG_PREFIX_ALL
PROPERTIES
PASS_REGULAR_EXPRESSION "CATCH_"
@@ -107,40 +55,44 @@ target_compile_definitions(DisabledMacros PRIVATE CATCH_CONFIG_DISABLE)
# it against the main library
target_link_libraries(DisabledMacros Catch2WithMain)
-add_test(NAME CATCH_CONFIG_DISABLE-1 COMMAND DisabledMacros -s)
+add_test(NAME CATCH_CONFIG_DISABLE-1 COMMAND DisabledMacros --no-history --success)
set_tests_properties(CATCH_CONFIG_DISABLE-1
PROPERTIES
- PASS_REGULAR_EXPRESSION "No tests ran"
+ PASS_REGULAR_EXPRESSION "none ran"
FAIL_REGULAR_EXPRESSION "This should not happen"
)
-add_test(NAME CATCH_CONFIG_DISABLE-2 COMMAND DisabledMacros --list-tests)
+add_test(NAME CATCH_CONFIG_DISABLE-2 COMMAND DisabledMacros --list)
set_tests_properties(CATCH_CONFIG_DISABLE-2
PROPERTIES
- PASS_REGULAR_EXPRESSION "0 test cases"
+ PASS_REGULAR_EXPRESSION "0 matching test\\(s\\)"
)
add_executable(DisabledExceptions-DefaultHandler ${TESTS_DIR}/X03-DisabledExceptions-DefaultHandler.cpp)
add_executable(DisabledExceptions-CustomHandler ${TESTS_DIR}/X04-DisabledExceptions-CustomHandler.cpp)
+# clang-cl reports the Clang compiler ID but takes MSVC's options, so the
+# front end decides which spelling turns exceptions off.
+if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" OR MSVC)
+ set(CATCH_NO_EXCEPTIONS_OPTIONS /EHs-c- /D_HAS_EXCEPTIONS=0)
+else()
+ set(CATCH_NO_EXCEPTIONS_OPTIONS -fno-exceptions)
+endif()
foreach(target DisabledExceptions-DefaultHandler DisabledExceptions-CustomHandler)
- target_compile_options(${target}
- PUBLIC
- $<$<CXX_COMPILER_ID:MSVC>:/EHs-c-;/D_HAS_EXCEPTIONS=0>
- $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:QCC>,$<CXX_COMPILER_ID:AppleClang>>:-fno-exceptions>
- )
+ target_compile_options(${target} PUBLIC ${CATCH_NO_EXCEPTIONS_OPTIONS})
target_link_libraries(${target} Catch2_buildall_interface)
endforeach()
target_compile_definitions(DisabledExceptions-CustomHandler PUBLIC CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER)
-add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-1 COMMAND DisabledExceptions-DefaultHandler "Tests that run")
+add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-1 COMMAND DisabledExceptions-DefaultHandler --no-history --retries=off "Tests that run")
set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-1
PROPERTIES
- PASS_REGULAR_EXPRESSION "assertions: 4 \| 2 passed \| 2 failed"
+ PASS_REGULAR_EXPRESSION "4 assertion\\(s\\)"
FAIL_REGULAR_EXPRESSION "abort;terminate;fatal"
)
-# We must now test this works without the build flag.
+# Bazel passes its wishes in the environment: a JUnit file, a filter, a
+# shard, a seed.
add_executable(BazelReporterNoCatchConfig ${TESTS_DIR}/X30-BazelReporter.cpp)
target_link_libraries(BazelReporterNoCatchConfig Catch2WithMain)
add_test(NAME NO_CATCH_CONFIG_BAZEL_REPORTER-1
@@ -160,7 +112,7 @@ add_test(NAME BazelEnv::TESTBRIDGE_TEST_ONLY
set_tests_properties(BazelEnv::TESTBRIDGE_TEST_ONLY
PROPERTIES
ENVIRONMENT "BAZEL_TEST=1;TESTBRIDGE_TEST_ONLY=Passing test case"
- PASS_REGULAR_EXPRESSION "All tests passed \\(1 assertion in 1 test case\\)"
+ PASS_REGULAR_EXPRESSION "1 test\\(s\\): 1 passed"
)
add_test(NAME BazelEnv::Sharding
@@ -178,21 +130,21 @@ set_tests_properties(BazelEnv::Sharding
# which makes this test unsuitable for CI and headless runs, as it opens
# up an interactive dialog.
if(NOT WIN32)
- add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-2 COMMAND DisabledExceptions-DefaultHandler "Tests that abort")
+ add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-2 COMMAND DisabledExceptions-DefaultHandler --no-history --retries=off "Tests that abort")
set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-2
PROPERTIES
PASS_REGULAR_EXPRESSION "Catch will terminate"
)
endif()
-add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-3 COMMAND DisabledExceptions-CustomHandler "Tests that run")
+add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-3 COMMAND DisabledExceptions-CustomHandler --no-history --retries=off "Tests that run")
set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-3
PROPERTIES
- PASS_REGULAR_EXPRESSION "assertions: 4 \| 2 passed \| 2 failed"
+ PASS_REGULAR_EXPRESSION "4 assertion\\(s\\)"
FAIL_REGULAR_EXPRESSION "====== CUSTOM HANDLER ======"
)
-add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-4 COMMAND DisabledExceptions-CustomHandler "Tests that abort")
+add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-4 COMMAND DisabledExceptions-CustomHandler --no-history --retries=off "Tests that abort")
set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-4
PROPERTIES
PASS_REGULAR_EXPRESSION "====== CUSTOM HANDLER ======"
@@ -202,10 +154,10 @@ add_executable(DeferredStaticChecks ${TESTS_DIR}/X05-DeferredStaticChecks.cpp)
target_link_libraries(DeferredStaticChecks PRIVATE Catch2WithMain)
target_compile_definitions(DeferredStaticChecks PRIVATE "CATCH_CONFIG_RUNTIME_STATIC_REQUIRE")
-add_test(NAME DeferredStaticChecks COMMAND DeferredStaticChecks -r compact)
+add_test(NAME DeferredStaticChecks COMMAND DeferredStaticChecks --no-history --retries=off)
set_tests_properties(DeferredStaticChecks
PROPERTIES
- PASS_REGULAR_EXPRESSION "test cases: 1 \\| 1 failed\nassertions: 3 \\| 3 failed;test cases: 1 \\| 1 failed\nassertions: 4 \\| 4 failed"
+ PASS_REGULAR_EXPRESSION "1 test\\(s\\): 1 failed[\r\n]+[34] assertion\\(s\\)"
)
add_executable(MixingClearedAndUnclearedMessages ${TESTS_DIR}/X06-MixingClearedAndUnclearedMessages.cpp)
@@ -214,26 +166,27 @@ target_link_libraries(MixingClearedAndUnclearedMessages PRIVATE Catch2WithMain)
add_test(NAME MixingClearedAndUnclearedMessages
COMMAND
MixingClearedAndUnclearedMessages
- -r compact)
+ --no-history --success)
set_tests_properties(MixingClearedAndUnclearedMessages
PROPERTIES
- PASS_REGULAR_EXPRESSION ": false with 1 message: 'b'"
+ PASS_REGULAR_EXPRESSION "FAILED: REQUIRE\\( false \\)[\r\n]+ +with context: b[\r\n]"
+ FAIL_REGULAR_EXPRESSION "FAILED: REQUIRE\\( false \\)[\r\n]+ +with context: a"
)
add_executable(FallbackStringifier ${TESTS_DIR}/X10-FallbackStringifier.cpp)
target_compile_definitions(FallbackStringifier PRIVATE CATCH_CONFIG_FALLBACK_STRINGIFIER=fallbackStringifier)
target_link_libraries(FallbackStringifier Catch2WithMain)
-add_test(NAME FallbackStringifier COMMAND FallbackStringifier -r compact -s)
+add_test(NAME FallbackStringifier COMMAND FallbackStringifier --no-history --success)
set_tests_properties(FallbackStringifier
PROPERTIES
- PASS_REGULAR_EXPRESSION "foo{} for: { !!! }"
+ PASS_REGULAR_EXPRESSION "foo{} \\) for: { !!! }"
)
add_executable(DisableStringification ${TESTS_DIR}/X11-DisableStringification.cpp)
target_compile_definitions(DisableStringification PRIVATE CATCH_CONFIG_DISABLE_STRINGIFICATION)
target_link_libraries(DisableStringification Catch2WithMain)
-add_test(NAME CATCH_CONFIG_DISABLE_STRINGIFICATION COMMAND DisableStringification -r compact -s)
+add_test(NAME CATCH_CONFIG_DISABLE_STRINGIFICATION COMMAND DisableStringification --no-history --success)
set_tests_properties(CATCH_CONFIG_DISABLE_STRINGIFICATION
PROPERTIES
PASS_REGULAR_EXPRESSION "Disabled by CATCH_CONFIG_DISABLE_STRINGIFICATION"
@@ -245,7 +198,7 @@ if(MSVC)
# This test fails if it does not compile and succeeds otherwise
add_executable(WindowsHeader ${TESTS_DIR}/X90-WindowsHeaderInclusion.cpp)
target_link_libraries(WindowsHeader Catch2WithMain)
- add_test(NAME WindowsHeader COMMAND WindowsHeader -r compact)
+ add_test(NAME WindowsHeader COMMAND WindowsHeader --no-history)
list(APPEND CATCH_TEST_TARGETS ${EXTRA_TEST_BINARIES} WindowsHeader)
endif()
@@ -260,144 +213,61 @@ set_tests_properties(PartialTestCaseEvents
LABELS "uses-python"
)
-add_executable(BenchmarksInCumulativeReporter ${TESTS_DIR}/X22-BenchmarksInCumulativeReporter.cpp)
-target_link_libraries(BenchmarksInCumulativeReporter PRIVATE Catch2::Catch2WithMain)
-add_test(
- NAME BenchmarksInCumulativeReporter
- COMMAND BenchmarksInCumulativeReporter --reporter testReporter
-)
-set_tests_properties(BenchmarksInCumulativeReporter
- PROPERTIES
- PASS_REGULAR_EXPRESSION "1\n2\n3\n4\n5\n"
- COST 30
-)
-
-add_executable(CasingInReporterNames ${TESTS_DIR}/X23-CasingInReporterNames.cpp)
-target_link_libraries(CasingInReporterNames PRIVATE Catch2::Catch2WithMain)
-add_test(
- NAME Reporters::registration-is-case-preserving
- COMMAND CasingInReporterNames --list-reporters
-)
-set_tests_properties(Reporters::registration-is-case-preserving
- PROPERTIES
- PASS_REGULAR_EXPRESSION "testReporterCASED"
-)
-add_test(
- NAME Reporters::selection-is-case-insensitive
- COMMAND CasingInReporterNames -r testReportercased
-)
-set_tests_properties(Reporters::selection-is-case-insensitive
- PROPERTIES
- PASS_REGULAR_EXPRESSION "TestReporter constructed"
-)
-
add_executable(CapturedStdoutInTestCaseEvents ${TESTS_DIR}/X27-CapturedStdoutInTestCaseEvents.cpp)
target_link_libraries(CapturedStdoutInTestCaseEvents PRIVATE Catch2::Catch2WithMain)
add_test(
- NAME Reporters::CapturedStdOutInEvents
- COMMAND CapturedStdoutInTestCaseEvents
- --reporter test-reporter
+ NAME Listeners::CapturedStdOutInEvents
+ COMMAND CapturedStdoutInTestCaseEvents --no-history
)
-set_tests_properties(Reporters::CapturedStdOutInEvents
+set_tests_properties(Listeners::CapturedStdOutInEvents
PROPERTIES
- PASS_REGULAR_EXPRESSION "X27 - TestReporter constructed"
- FAIL_REGULAR_EXPRESSION "X27 ERROR"
+ PASS_REGULAR_EXPRESSION "X27 - listener saw 0 error\\(s\\)"
)
-if(WIN32)
- set(_NullFile "NUL")
-else()
- set(_NullFile "/dev/null")
-endif()
-
add_executable(ListenerStdoutCaptureInMultireporter ${TESTS_DIR}/X24-ListenerStdoutCaptureInMultireporter.cpp)
target_link_libraries(ListenerStdoutCaptureInMultireporter PRIVATE Catch2::Catch2WithMain)
-# This test checks that there is nothing written out from the process,
-# but if CMake is running the tests under Valgrind or similar tool, then
-# that will write its own output to stdout and the test would fail.
-if(NOT MEMORYCHECK_COMMAND)
- add_test(
- NAME MultiReporter::NoncapturingListenerDoesntCauseStdoutPassThrough
- COMMAND ListenerStdoutCaptureInMultireporter
- --reporter xml::out=${_NullFile}
- --reporter junit::out=${_NullFile}
- )
-
- set_tests_properties(MultiReporter::NoncapturingListenerDoesntCauseStdoutPassThrough
- PROPERTIES
- PASS_REGULAR_EXPRESSION "X24 - NonCapturingListener initialized"
- FAIL_REGULAR_EXPRESSION "X24 - FooBarBaz"
- )
-endif()
-
-add_executable(ListenerCanAskForCapturedStdout ${TESTS_DIR}/X25-ListenerCanAskForCapturedStdout.cpp)
-target_link_libraries(ListenerCanAskForCapturedStdout PRIVATE Catch2::Catch2WithMain)
+# The runner keeps what a passing test prints, whatever a listener prefers;
+# what the listener prints outside a test reaches the output.
add_test(
- NAME MultiReporter::CapturingListenerCausesStdoutCapture
- COMMAND ListenerCanAskForCapturedStdout
- --reporter compact::out=${_NullFile}
- --reporter console::out=${_NullFile}
+ NAME Listeners::NoncapturingListenerDoesntCauseStdoutPassThrough
+ COMMAND ListenerStdoutCaptureInMultireporter --no-history
)
-set_tests_properties(MultiReporter::CapturingListenerCausesStdoutCapture
+set_tests_properties(Listeners::NoncapturingListenerDoesntCauseStdoutPassThrough
PROPERTIES
- PASS_REGULAR_EXPRESSION "CapturingListener initialized"
- FAIL_REGULAR_EXPRESSION "X25 - ERROR"
+ PASS_REGULAR_EXPRESSION "X24 - NonCapturingListener initialized"
+ FAIL_REGULAR_EXPRESSION "X24 - FooBarBaz"
)
-add_executable(ReporterPreferencesForPassingAssertionsIsRespected ${TESTS_DIR}/X26-ReporterPreferencesForPassingAssertionsIsRespected.cpp)
-target_link_libraries(ReporterPreferencesForPassingAssertionsIsRespected PRIVATE Catch2::Catch2WithMain)
-add_test(
- NAME Reporters::PreferencesForPassingAssertionsIsRespected
- COMMAND ReporterPreferencesForPassingAssertionsIsRespected
- --reporter test-reporter
-)
-set_tests_properties(Reporters::PreferencesForPassingAssertionsIsRespected
- PROPERTIES
- PASS_REGULAR_EXPRESSION "X26 - TestReporter constructed"
- FAIL_REGULAR_EXPRESSION "X26 - assertionEnded"
-)
+add_executable(ListenerCanAskForCapturedStdout ${TESTS_DIR}/X25-ListenerCanAskForCapturedStdout.cpp)
+target_link_libraries(ListenerCanAskForCapturedStdout PRIVATE Catch2::Catch2WithMain)
add_test(
- NAME MultiReporter::PreferencesForPassingAssertionsIsRespected
- COMMAND ReporterPreferencesForPassingAssertionsIsRespected
- --reporter test-reporter
- --reporter console::out=${_NullFile}
+ NAME Listeners::CapturingListenerCausesStdoutCapture
+ COMMAND ListenerCanAskForCapturedStdout --no-history
)
-set_tests_properties(MultiReporter::PreferencesForPassingAssertionsIsRespected
+set_tests_properties(Listeners::CapturingListenerCausesStdoutCapture
PROPERTIES
- PASS_REGULAR_EXPRESSION "X26 - TestReporter constructed"
- FAIL_REGULAR_EXPRESSION "X26 - assertionEnded"
+ PASS_REGULAR_EXPRESSION "CapturingListener initialized"
+ FAIL_REGULAR_EXPRESSION "X25 - ERROR"
)
add_executable(ListenersGetEventsBeforeReporters ${TESTS_DIR}/X28-ListenersGetEventsBeforeReporters.cpp)
target_link_libraries(ListenersGetEventsBeforeReporters PRIVATE Catch2::Catch2WithMain)
add_test(
- NAME ListenersGetEventsBeforeReporters
- COMMAND ListenersGetEventsBeforeReporters --reporter test-reporter
+ NAME ListenersGetRunEvents
+ COMMAND ListenersGetEventsBeforeReporters --no-history
)
-set_tests_properties(ListenersGetEventsBeforeReporters
+set_tests_properties(ListenersGetRunEvents
PROPERTIES
- PASS_REGULAR_EXPRESSION "X28 - TestReporter constructed"
+ PASS_REGULAR_EXPRESSION "X28 - listener received every event"
FAIL_REGULAR_EXPRESSION "X28 - ERROR"
)
-add_executable(CustomArgumentsForReporters ${TESTS_DIR}/X29-CustomArgumentsForReporters.cpp)
-target_link_libraries(CustomArgumentsForReporters PRIVATE Catch2::Catch2WithMain)
-add_test(
- NAME CustomArgumentsForReporters
- COMMAND CustomArgumentsForReporters
- --reporter "test-reporter::Xa b=c 1::Xz:e = 1234"
-)
-set_tests_properties(CustomArgumentsForReporters
- PROPERTIES
- PASS_REGULAR_EXPRESSION "Xa b=c 1::Xz:e = 1234"
-)
-
add_executable(DuplicatedTestCases-SameNameAndTags ${TESTS_DIR}/X31-DuplicatedTestCases.cpp)
target_link_libraries(DuplicatedTestCases-SameNameAndTags PRIVATE Catch2::Catch2WithMain)
add_test(
NAME DuplicatedTestCases::SameNameAndTags
- COMMAND $<TARGET_FILE:DuplicatedTestCases-SameNameAndTags>
+ COMMAND $<TARGET_FILE:DuplicatedTestCases-SameNameAndTags> --no-history
)
set_tests_properties(DuplicatedTestCases::SameNameAndTags
PROPERTIES
@@ -408,7 +278,7 @@ add_executable(DuplicatedTestCases-SameNameDifferentTags ${TESTS_DIR}/X32-Duplic
target_link_libraries(DuplicatedTestCases-SameNameDifferentTags PRIVATE Catch2::Catch2WithMain)
add_test(
NAME DuplicatedTestCases::SameNameDifferentTags
- COMMAND $<TARGET_FILE:DuplicatedTestCases-SameNameDifferentTags>
+ COMMAND $<TARGET_FILE:DuplicatedTestCases-SameNameDifferentTags> --no-history
)
set_tests_properties(DuplicatedTestCases::SameNameDifferentTags
PROPERTIES
@@ -419,7 +289,7 @@ add_executable(DuplicatedTestCases-DuplicatedTestCaseMethods ${TESTS_DIR}/X33-Du
target_link_libraries(DuplicatedTestCases-DuplicatedTestCaseMethods PRIVATE Catch2::Catch2WithMain)
add_test(
NAME DuplicatedTestCases::DuplicatedTestCaseMethods
- COMMAND $<TARGET_FILE:DuplicatedTestCases-DuplicatedTestCaseMethods>
+ COMMAND $<TARGET_FILE:DuplicatedTestCases-DuplicatedTestCaseMethods> --no-history
)
set_tests_properties(DuplicatedTestCases::DuplicatedTestCaseMethods
PROPERTIES
@@ -430,33 +300,22 @@ add_executable(DuplicatedTestCases-DifferentFixtures ${TESTS_DIR}/X34-Duplicated
target_link_libraries(DuplicatedTestCases-DifferentFixtures PRIVATE Catch2::Catch2WithMain)
add_test(
NAME DuplicatedTestCases::DuplicatedTestCaseMethodsDifferentFixtures
- COMMAND $<TARGET_FILE:DuplicatedTestCases-DifferentFixtures>
+ COMMAND $<TARGET_FILE:DuplicatedTestCases-DifferentFixtures> --no-history
)
set_tests_properties(DuplicatedTestCases::DuplicatedTestCaseMethodsDifferentFixtures
PROPERTIES
FAIL_REGULAR_EXPRESSION "error: .* already defined\\."
)
-add_executable(DuplicatedReporters ${TESTS_DIR}/X35-DuplicatedReporterNames.cpp)
-target_link_libraries(DuplicatedReporters PRIVATE Catch2::Catch2WithMain)
-add_test(
- NAME Reporters::RegistrationErrorsAreCaught
- COMMAND $<TARGET_FILE:DuplicatedReporters>
-)
-set_tests_properties(Reporters::RegistrationErrorsAreCaught
- PROPERTIES
- PASS_REGULAR_EXPRESSION "Errors occurred during startup!"
-)
-
add_executable(ReportingCrashWithJunitReporter ${TESTS_DIR}/X36-ReportingCrashWithJunitReporter.cpp)
target_link_libraries(ReportingCrashWithJunitReporter PRIVATE Catch2::Catch2WithMain)
add_test(
- NAME Reporters::CrashInJunitReporter
- COMMAND ${CMAKE_COMMAND} -E env $<TARGET_FILE:ReportingCrashWithJunitReporter> --reporter JUnit
+ NAME Runner::CrashIsReported
+ COMMAND $<TARGET_FILE:ReportingCrashWithJunitReporter> --no-history --retries=off
)
-set_tests_properties(Reporters::CrashInJunitReporter
+set_tests_properties(Runner::CrashIsReported
PROPERTIES
- PASS_REGULAR_EXPRESSION "</testsuites>"
+ PASS_REGULAR_EXPRESSION "CRASH raises signal"
LABELS "uses-signals"
)
@@ -465,7 +324,7 @@ add_executable(ReportingInvalidTestCaseTags ${TESTS_DIR}/X37-ReportingInvalidTes
target_link_libraries(ReportingInvalidTestCaseTags PRIVATE Catch2::Catch2WithMain)
add_test(
NAME Validation::TestCaseTags
- COMMAND $<TARGET_FILE:ReportingInvalidTestCaseTags>
+ COMMAND $<TARGET_FILE:ReportingInvalidTestCaseTags> --no-history
)
# Passing multiple PASS_REGULAR_EXPRESSION does not work, so we join multiple ones with '.*'
set(regexp
@@ -482,79 +341,27 @@ set_tests_properties(Validation::TestCaseTags
)
-add_executable(ThrowingReporter ${TESTS_DIR}/X38-ThrowingReporter.cpp)
-target_link_libraries(ThrowingReporter PRIVATE Catch2::Catch2WithMain)
-add_test(
- NAME Reporters::ThrowInConstructor
- COMMAND
- $<TARGET_FILE:ThrowingReporter>
- --reporter ThrowingReporter::Xthrow-in-constructor=true
-)
-set_tests_properties(Reporters::ThrowInConstructor
- PROPERTIES
- PASS_REGULAR_EXPRESSION "Error when creating reporter: Exception in constructor"
-)
-
-foreach(reporterName "Automake"
- "compact"
- "console"
- "JUnit"
- "SonarQube"
- "TAP"
- "TeamCity"
- "XML"
- "JSON")
- add_test(NAME "Reporters::RejectUnknownArgs::${reporterName}"
- COMMAND
- $<TARGET_FILE:SelfTest>
- --reporter ${reporterName}::Xfoo=bar
- "[comparisons]" # Limit selection to avoid running full test binary if the error check doesn't trigger
- )
- set_tests_properties("Reporters::RejectUnknownArgs::${reporterName}"
- PROPERTIES
- PASS_REGULAR_EXPRESSION "Error when creating reporter: Unknown reporter argument: Xfoo"
- )
-endforeach()
-
-
add_executable(QuickExitInTest ${TESTS_DIR}/X40-QuickExit.cpp)
target_link_libraries(QuickExitInTest PRIVATE Catch2::Catch2WithMain)
+# A test that ends its process early cannot pass: the exit of its worker is
+# reported as a crash of the test.
add_test(
- NAME BazelEnv::TEST_PREMATURE_EXIT_FILE
- COMMAND
- Python3::Interpreter
- "${CATCH_DIR}/tests/TestScripts/testBazelExitGuardFile.py"
- $<TARGET_FILE:QuickExitInTest>
- "${CMAKE_CURRENT_BINARY_DIR}"
- "bazel"
+ NAME Runner::ExitInTestIsACrash
+ COMMAND $<TARGET_FILE:QuickExitInTest> --no-history --retries=off
)
-set_tests_properties(BazelEnv::TEST_PREMATURE_EXIT_FILE
+set_tests_properties(Runner::ExitInTestIsACrash
PROPERTIES
- LABELS "uses-python"
+ PASS_REGULAR_EXPRESSION "crashed with exit code 0"
)
add_test(
- NAME PrematureExitGuardFileCanBeUsedFromCLI::CheckAfterCrash
- COMMAND
- Python3::Interpreter
- "${CATCH_DIR}/tests/TestScripts/testBazelExitGuardFile.py"
- $<TARGET_FILE:QuickExitInTest>
- "${CMAKE_CURRENT_BINARY_DIR}"
- "cli"
-)
-set_tests_properties(PrematureExitGuardFileCanBeUsedFromCLI::CheckAfterCrash
- PROPERTIES
- LABELS "uses-python"
-)
-add_test(
- NAME PrematureExitGuardFileCanBeUsedFromCLI::CheckWithoutCrash
+ NAME BazelEnv::TEST_PREMATURE_EXIT_FILE
COMMAND
Python3::Interpreter
"${CATCH_DIR}/tests/TestScripts/testBazelExitGuardFile.py"
$<TARGET_FILE:QuickExitInTest>
"${CMAKE_CURRENT_BINARY_DIR}"
- "no-crash"
)
-set_tests_properties(PrematureExitGuardFileCanBeUsedFromCLI::CheckWithoutCrash
+set_tests_properties(BazelEnv::TEST_PREMATURE_EXIT_FILE
PROPERTIES
LABELS "uses-python"
)
@@ -568,7 +375,7 @@ target_link_libraries(AssertionStartingEventGoesBeforeAssertionIsEvaluated
)
add_test(
NAME ReporterEvents::AssertionStartingHappensBeforeAssertionIsEvaluated
- COMMAND $<TARGET_FILE:AssertionStartingEventGoesBeforeAssertionIsEvaluated>
+ COMMAND $<TARGET_FILE:AssertionStartingEventGoesBeforeAssertionIsEvaluated> --no-history
)
#add_executable(DebugBreakMacros ${TESTS_DIR}/X12-CustomDebugBreakMacro.cpp)
@@ -584,7 +391,7 @@ target_link_libraries(NoTests PRIVATE Catch2::Catch2WithMain)
add_test(
NAME TestSpecs::EmptySpecWithNoTestsFails
- COMMAND $<TARGET_FILE:NoTests>
+ COMMAND $<TARGET_FILE:NoTests> --no-history
)
set_tests_properties(TestSpecs::EmptySpecWithNoTestsFails
PROPERTIES
@@ -593,12 +400,7 @@ set_tests_properties(TestSpecs::EmptySpecWithNoTestsFails
add_test(
NAME TestSpecs::OverrideFailureWithEmptySpec
- COMMAND $<TARGET_FILE:NoTests> --allow-running-no-tests
-)
-
-add_test(
- NAME List::Listeners::WorksWithoutRegisteredListeners
- COMMAND $<TARGET_FILE:NoTests> --list-listeners
+ COMMAND $<TARGET_FILE:NoTests> --no-history --allow-no-tests
)
add_executable(AllSkipped ${TESTS_DIR}/X93-AllSkipped.cpp)
@@ -606,7 +408,7 @@ target_link_libraries(AllSkipped PRIVATE Catch2::Catch2WithMain)
add_test(
NAME TestSpecs::SkippingAllTestsFails
- COMMAND $<TARGET_FILE:AllSkipped>
+ COMMAND $<TARGET_FILE:AllSkipped> --no-history
)
set_tests_properties(TestSpecs::SkippingAllTestsFails
PROPERTIES
@@ -619,11 +421,11 @@ target_compile_definitions(FastCompileMacros PRIVATE CATCH_CONFIG_FAST_COMPILE)
add_test(
NAME CompileConfiguration::FastCompile
- COMMAND $<TARGET_FILE:FastCompileMacros>
+ COMMAND $<TARGET_FILE:FastCompileMacros> --no-history --retries=off
)
set_tests_properties(CompileConfiguration::FastCompile
PROPERTIES
- PASS_REGULAR_EXPRESSION "test cases: 6 \\| 1 passed \\| 1 failed \\| 4 failed as expected\nassertions: 13 \\| 6 passed \\| 2 failed \\| 5 failed as expected"
+ PASS_REGULAR_EXPRESSION "6 test\\(s\\): 1 passed, 1 failed, 4 failed as expected[\r\n]+13 assertion\\(s\\)"
)
# This sets up a one-off executable that compiles against the amalgamated
@@ -635,12 +437,13 @@ add_executable(AmalgamatedTestCompilation
${CATCH_DIR}/extras/catch_amalgamated.cpp
)
target_include_directories(AmalgamatedTestCompilation PRIVATE ${CATCH_DIR}/extras)
-target_compile_features(AmalgamatedTestCompilation PRIVATE cxx_std_14)
+# The amalgamated files hold the runner, which needs C++20.
+target_compile_features(AmalgamatedTestCompilation PRIVATE cxx_std_20)
-add_test(NAME AmalgamatedFileTest COMMAND AmalgamatedTestCompilation)
+add_test(NAME AmalgamatedFileTest COMMAND AmalgamatedTestCompilation --no-history)
set_tests_properties(AmalgamatedFileTest
PROPERTIES
- PASS_REGULAR_EXPRESSION "All tests passed \\(14 assertions in 3 test cases\\)"
+ PASS_REGULAR_EXPRESSION "3 test\\(s\\): 3 passed[\r\n]+14 assertion\\(s\\)"
)
add_executable(ThreadSafetyTests
@@ -650,19 +453,19 @@ target_link_libraries(ThreadSafetyTests Catch2_buildall_interface)
target_compile_definitions(ThreadSafetyTests PUBLIC CATCH_CONFIG_THREAD_SAFE_ASSERTIONS)
add_test(NAME ThreadSafetyTests::ScopedMessagesAndAssertions
- COMMAND ThreadSafetyTests -r compact "Failed REQUIRE in the main thread is fine"
+ COMMAND ThreadSafetyTests --no-history "Failed REQUIRE in the main thread is fine"
)
set_tests_properties(ThreadSafetyTests::ScopedMessagesAndAssertions
PROPERTIES
- PASS_REGULAR_EXPRESSION "assertions: 801 \\| 400 passed \\| 401 failed as expected"
+ PASS_REGULAR_EXPRESSION "1 failed as expected[\r\n]+801 assertion\\(s\\)"
RUN_SERIAL ON
)
add_test(NAME ThreadSafetyTests::UnscopedMessagesAndAssertions
- COMMAND ThreadSafetyTests -r compact "Using unscoped messages in sibling threads"
+ COMMAND ThreadSafetyTests --no-history "Using unscoped messages in sibling threads"
)
set_tests_properties(ThreadSafetyTests::UnscopedMessagesAndAssertions
PROPERTIES
- PASS_REGULAR_EXPRESSION "assertions: 401 \\| 401 failed as expected"
+ PASS_REGULAR_EXPRESSION "1 failed as expected[\r\n]+401 assertion\\(s\\)"
RUN_SERIAL ON
)
@@ -671,52 +474,54 @@ target_link_libraries(InfiniteGenerators PRIVATE Catch2::Catch2WithMain)
add_test(
NAME Warnings::InfiniteGenerators::NoFilterWarns
- COMMAND $<TARGET_FILE:InfiniteGenerators> --warn InfiniteGenerators
+ COMMAND $<TARGET_FILE:InfiniteGenerators> --no-history --retries=off --warn=infinite-generators
)
set_tests_properties(Warnings::InfiniteGenerators::NoFilterWarns
PROPERTIES
# One test case fails with infinite generator, but the other one runs
- PASS_REGULAR_EXPRESSION "test cases: 2 \\| 1 passed \\| 1 failed"
- TIMEOUT 5
+ PASS_REGULAR_EXPRESSION "2 test\\(s\\): 1 passed, 1 failed"
+ TIMEOUT 10
)
add_test(
NAME Warnings::InfiniteGenerators::MatchAllFilterWarns
COMMAND $<TARGET_FILE:InfiniteGenerators>
- --warn InfiniteGenerators
- --path-filter g:*
+ --no-history --retries=off
+ --warn=infinite-generators
+ --path-filter=g:*
)
set_tests_properties(Warnings::InfiniteGenerators::MatchAllFilterWarns
PROPERTIES
# One test case fails with infinite generator, but the other one runs
- PASS_REGULAR_EXPRESSION "test cases: 2 \\| 1 passed \\| 1 failed"
- TIMEOUT 5
+ PASS_REGULAR_EXPRESSION "2 test\\(s\\): 1 passed, 1 failed"
+ TIMEOUT 10
)
add_test(
NAME Warnings::InfiniteGenerators::MatchOneFilterDoesntWarn
COMMAND $<TARGET_FILE:InfiniteGenerators>
- --warn InfiniteGenerators
- --path-filter g:1
+ --no-history --retries=off
+ --warn=infinite-generators
+ --path-filter=g:1
)
set_tests_properties(Warnings::InfiniteGenerators::MatchOneFilterDoesntWarn
PROPERTIES
- # One test case fails with infinite generator, but the other one runs
- PASS_REGULAR_EXPRESSION "All tests passed \\(1 assertion in 2 test cases\\)"
- TIMEOUT 5
+ PASS_REGULAR_EXPRESSION "2 test\\(s\\): 2 passed"
+ TIMEOUT 10
)
add_test(
NAME Warnings::InfiniteGenerators::SectionFilterWarns
COMMAND $<TARGET_FILE:InfiniteGenerators>
- --warn InfiniteGenerators
- --section FooBarBaz
+ --no-history --retries=off
+ --warn=infinite-generators
+ --section=FooBarBaz
)
set_tests_properties(Warnings::InfiniteGenerators::SectionFilterWarns
PROPERTIES
# One test case fails with infinite generator, but the other one runs
- PASS_REGULAR_EXPRESSION "test cases: 2 \\| 1 passed \\| 1 failed"
- TIMEOUT 5
+ PASS_REGULAR_EXPRESSION "2 test\\(s\\): 1 passed, 1 failed"
+ TIMEOUT 10
)
diff --git a/tests/ExtraTests/X21-PartialTestCaseEvents.cpp b/tests/ExtraTests/X21-PartialTestCaseEvents.cpp
index aa5204c9..c55f6c2b 100644