diff options
| author | Chris Thrasher | 2025-04-07 22:09:59 -0600 |
|---|---|---|
| committer | Chris Thrasher | 2025-04-26 10:38:36 -0600 |
| commit | 8cfca70ae879ba59699b224e8d371b8bb9fa12ff (patch) | |
| tree | e53b243d3d2b7acc41c27cbd21624e1e28b655cb /tests | |
| parent | 6aac11e17d4fe662e430a8bbfd4bf6886ca7f935 (diff) | |
| download | catch3-8cfca70ae879ba59699b224e8d371b8bb9fa12ff.tar.gz | |
Fix formatting of CMake files
2 spaces seems to be the more common indentation level so that's what
I unified around.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 326 | ||||
| -rw-r--r-- | tests/ExtraTests/CMakeLists.txt | 202 | ||||
| -rw-r--r-- | tests/TestScripts/DiscoverTests/CMakeLists.txt | 20 |
3 files changed, 236 insertions, 312 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 37a5977e..bdd66a47 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,6 @@ include(CatchMiscFunctions) -if (CATCH_BUILD_SURROGATES) +if(CATCH_BUILD_SURROGATES) message(STATUS "Configuring targets for surrogate TUs") # If the folder does not exist before we ask for output redirect to @@ -11,11 +11,9 @@ if (CATCH_BUILD_SURROGATES) # Returns the path to the generated file. function(createSurrogateFileTarget sourceHeader pathToFile) set(pathPrefix ${PROJECT_SOURCE_DIR}/src) - file(RELATIVE_PATH includePath ${pathPrefix} ${sourceHeader}) get_filename_component(basicFileName "${sourceHeader}" NAME_WE) - set(surrogateFilePath ${CMAKE_CURRENT_BINARY_DIR}/surrogates/surrogate_${basicFileName}.cpp) add_custom_command( @@ -41,10 +39,9 @@ if (CATCH_BUILD_SURROGATES) set(${OutArg} ${AllHeaders} PARENT_SCOPE) endfunction() - ExtractCatch2Headers(mainHeaders) - if (NOT mainHeaders) + if(NOT mainHeaders) message(FATAL_ERROR "No headers in the main target were detected. Something is broken.") endif() @@ -53,12 +50,10 @@ if (CATCH_BUILD_SURROGATES) list(APPEND surrogateFiles ${pathToGeneratedFile}) endforeach() - add_executable(Catch2SurrogateTarget ${surrogateFiles} ) target_link_libraries(Catch2SurrogateTarget PRIVATE Catch2WithMain) - endif() #### @@ -66,75 +61,72 @@ endif() # We need to disable <UseFullPaths> property, but CMake doesn't support it # until 3.13 (not yet released) #### -if (MSVC) -configure_file(${CATCH_DIR}/tools/misc/SelfTest.vcxproj.user - ${CMAKE_BINARY_DIR}/tests - COPYONLY) +if(MSVC) + configure_file(${CATCH_DIR}/tools/misc/SelfTest.vcxproj.user ${CMAKE_BINARY_DIR}/tests COPYONLY) endif() #Temporary workaround - # define the sources of the self test # Please keep these ordered alphabetically set(TEST_SOURCES - ${SELF_TEST_DIR}/TestRegistrations.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/Algorithms.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/AssertionHandler.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/Clara.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/CmdLine.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/CmdLineHelpers.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/ColourImpl.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/Details.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/FloatingPoint.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/GeneratorsImpl.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/Integer.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/InternalBenchmark.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/Json.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/Parse.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/PartTracker.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/RandomNumberGeneration.tests.cpp - ${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 - ${SELF_TEST_DIR}/IntrospectiveTests/Stream.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/String.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/StringManip.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/Xml.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/Traits.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/ToString.tests.cpp - ${SELF_TEST_DIR}/IntrospectiveTests/UniquePtr.tests.cpp - ${SELF_TEST_DIR}/helpers/parse_test_spec.cpp - ${SELF_TEST_DIR}/TimingTests/Sleep.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Approx.tests.cpp - ${SELF_TEST_DIR}/UsageTests/BDD.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Benchmark.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Class.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Compilation.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Condition.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Decomposition.tests.cpp - ${SELF_TEST_DIR}/UsageTests/EnumToString.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Exception.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Generators.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Message.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Misc.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Skip.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringByte.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringChrono.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringGeneral.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringOptional.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringPair.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringTuple.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringVariant.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringVector.tests.cpp - ${SELF_TEST_DIR}/UsageTests/ToStringWhich.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Tricky.tests.cpp - ${SELF_TEST_DIR}/UsageTests/VariadicMacros.tests.cpp - ${SELF_TEST_DIR}/UsageTests/MatchersRanges.tests.cpp - ${SELF_TEST_DIR}/UsageTests/Matchers.tests.cpp - ) + ${SELF_TEST_DIR}/TestRegistrations.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/Algorithms.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/AssertionHandler.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/Clara.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/CmdLine.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/CmdLineHelpers.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/ColourImpl.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/Details.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/FloatingPoint.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/GeneratorsImpl.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/Integer.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/InternalBenchmark.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/Json.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/Parse.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/PartTracker.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/RandomNumberGeneration.tests.cpp + ${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 + ${SELF_TEST_DIR}/IntrospectiveTests/Stream.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/String.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/StringManip.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/Xml.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/Traits.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/ToString.tests.cpp + ${SELF_TEST_DIR}/IntrospectiveTests/UniquePtr.tests.cpp + ${SELF_TEST_DIR}/helpers/parse_test_spec.cpp + ${SELF_TEST_DIR}/TimingTests/Sleep.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Approx.tests.cpp + ${SELF_TEST_DIR}/UsageTests/BDD.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Benchmark.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Class.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Compilation.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Condition.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Decomposition.tests.cpp + ${SELF_TEST_DIR}/UsageTests/EnumToString.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Exception.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Generators.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Message.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Misc.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Skip.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringByte.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringChrono.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringGeneral.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringOptional.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringPair.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringTuple.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringVariant.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringVector.tests.cpp + ${SELF_TEST_DIR}/UsageTests/ToStringWhich.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Tricky.tests.cpp + ${SELF_TEST_DIR}/UsageTests/VariadicMacros.tests.cpp + ${SELF_TEST_DIR}/UsageTests/MatchersRanges.tests.cpp + ${SELF_TEST_DIR}/UsageTests/Matchers.tests.cpp +) set(TEST_HEADERS ${SELF_TEST_DIR}/helpers/parse_test_spec.hpp @@ -142,46 +134,45 @@ set(TEST_HEADERS ${SELF_TEST_DIR}/helpers/type_with_lit_0_comparisons.hpp ) - # Specify the headers, too, so CLion recognises them as project files set(HEADERS - ${TOP_LEVEL_HEADERS} - ${EXTERNAL_HEADERS} - ${INTERNAL_HEADERS} - ${REPORTER_HEADERS} - ${BENCHMARK_HEADERS} - ${BENCHMARK_SOURCES} + ${TOP_LEVEL_HEADERS} + ${EXTERNAL_HEADERS} + ${INTERNAL_HEADERS} + ${REPORTER_HEADERS} + ${BENCHMARK_HEADERS} + ${BENCHMARK_SOURCES} ) # Provide some groupings for IDEs -#SOURCE_GROUP("benchmark" FILES ${BENCHMARK_HEADERS} ${BENCHMARK_SOURCES}) -#SOURCE_GROUP("Tests" FILES ${TEST_SOURCES}) +#source_group("benchmark" FILES ${BENCHMARK_HEADERS} ${BENCHMARK_SOURCES}) +#source_group("Tests" FILES ${TEST_SOURCES}) include(CTest) add_executable(SelfTest ${TEST_SOURCES} ${TEST_HEADERS}) target_include_directories(SelfTest PRIVATE ${SELF_TEST_DIR}) target_link_libraries(SelfTest PRIVATE Catch2WithMain) -if (BUILD_SHARED_LIBS AND WIN32) - add_custom_command(TARGET SelfTest PRE_LINK - COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Catch2> - $<TARGET_FILE:Catch2WithMain> $<TARGET_FILE_DIR:SelfTest> - ) +if(BUILD_SHARED_LIBS AND WIN32) + add_custom_command(TARGET SelfTest PRE_LINK + COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:Catch2> + $<TARGET_FILE:Catch2WithMain> $<TARGET_FILE_DIR:SelfTest> + ) endif() -if (CATCH_ENABLE_COVERAGE) - set(ENABLE_COVERAGE ON CACHE BOOL "Enable coverage build." FORCE) - find_package(codecov) - add_coverage(SelfTest) - list(APPEND LCOV_REMOVE_PATTERNS "'/usr/*'") - coverage_evaluate() +if(CATCH_ENABLE_COVERAGE) + set(ENABLE_COVERAGE ON CACHE BOOL "Enable coverage build." FORCE) + find_package(codecov) + add_coverage(SelfTest) + list(APPEND LCOV_REMOVE_PATTERNS "'/usr/*'") + coverage_evaluate() endif() # configure unit tests via CTest add_test(NAME RunTests COMMAND $<TARGET_FILE:SelfTest> --order rand --rng-seed time) set_tests_properties(RunTests PROPERTIES - FAIL_REGULAR_EXPRESSION "Filters:" - COST 15 + FAIL_REGULAR_EXPRESSION "Filters:" + COST 15 ) # Because CTest does not allow us to check both return code _and_ expected @@ -189,8 +180,8 @@ set_tests_properties(RunTests PROPERTIES # the output, the second time we check the exit code. add_test(NAME List::Tests::Output COMMAND $<TARGET_FILE:SelfTest> --list-tests --verbosity high) set_tests_properties(List::Tests::Output PROPERTIES - PASS_REGULAR_EXPRESSION "[0-9]+ test cases" - FAIL_REGULAR_EXPRESSION "Hidden Test" + PASS_REGULAR_EXPRESSION "[0-9]+ test cases" + FAIL_REGULAR_EXPRESSION "Hidden Test" ) # This should be equivalent to the old --list-test-names-only and be usable # with --input-file. @@ -198,35 +189,34 @@ add_test(NAME List::Tests::Quiet COMMAND $<TARGET_FILE:SelfTest> --list-tests -- # Sadly we cannot ask for start-of-line and end-of-line in a ctest regex, # so we fail if we see space/tab at the start... set_tests_properties(List::Tests::Quiet PROPERTIES - PASS_REGULAR_EXPRESSION "\"#1905 -- test spec parser properly clears internal state between compound tests\"[\r\n]" - FAIL_REGULAR_EXPRESSION "[ \t]\"#1905 -- test spec parser properly clears internal state between compound tests\"" + PASS_REGULAR_EXPRESSION "\"#1905 -- test spec parser properly clears internal state between compound tests\"[\r\n]" + FAIL_REGULAR_EXPRESSION "[ \t]\"#1905 -- test spec parser properly clears internal state between compound tests\"" ) add_test(NAME List::Tests::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-tests --verbosity high) add_test(NAME List::Tests::XmlOutput COMMAND $<TARGET_FILE:SelfTest> --list-tests --verbosity high -r xml) set_tests_properties(List::Tests::XmlOutput PROPERTIES - PASS_REGULAR_EXPRESSION "<Line>[0-9]+</Line>" - FAIL_REGULAR_EXPRESSION "[0-9]+ test cases" + PASS_REGULAR_EXPRESSION "<Line>[0-9]+</Line>" + FAIL_REGULAR_EXPRESSION "[0-9]+ test cases" ) add_test(NAME List::Tags::Output COMMAND $<TARGET_FILE:SelfTest> --list-tags) set_tests_properties(List::Tags::Output PROPERTIES - PASS_REGULAR_EXPRESSION "[0-9]+ tags" - FAIL_REGULAR_EXPRESSION "\\[\\.\\]") + PASS_REGULAR_EXPRESSION "[0-9]+ tags" + FAIL_REGULAR_EXPRESSION "\\[\\.\\]") add_test(NAME List::Tags::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-tags) add_test(NAME List::Tags::XmlOutput COMMAND $<TARGET_FILE:SelfTest> --list-tags -r xml) set_tests_properties(List::Tags::XmlOutput PROPERTIES - PASS_REGULAR_EXPRESSION "<Count>18</Count>" - FAIL_REGULAR_EXPRESSION "[0-9]+ tags" + PASS_REGULAR_EXPRESSION "<Count>18</Count>" + FAIL_REGULAR_EXPRESSION "[0-9]+ tags" ) - add_test(NAME List::Reporters::Output COMMAND $<TARGET_FILE:SelfTest> --list-reporters) set_tests_properties(List::Reporters::Output PROPERTIES PASS_REGULAR_EXPRESSION "Available reporters:") add_test(NAME List::Reporters::ExitCode COMMAND $<TARGET_FILE:SelfTest> --list-reporters) add_test(NAME List::Reporters::XmlOutput COMMAND $<TARGET_FILE:SelfTest> --list-reporters -r xml) set_tests_properties(List::Reporters::XmlOutput PROPERTIES - PASS_REGULAR_EXPRESSION "<Name>compact</Name>" - FAIL_REGULAR_EXPRESSION "Available reporters:" + PASS_REGULAR_EXPRESSION "<Name>compact</Name>" + FAIL_REGULAR_EXPRESSION "Available reporters:" ) add_test(NAME List::Listeners::Output @@ -263,8 +253,8 @@ add_test(NAME TestSpecs::CombiningMatchingAndNonMatchingIsOk-1 COMMAND $<TARGET_ add_test(NAME TestSpecs::CombiningMatchingAndNonMatchingIsOk-2 COMMAND $<TARGET_FILE:SelfTest> Tracker, "___nonexistent_test___") set_tests_properties(TestSpecs::CombiningMatchingAndNonMatchingIsOk-2 PROPERTIES - PASS_REGULAR_EXPRESSION "No test cases matched '\"___nonexistent_test___\"'" - FAIL_REGULAR_EXPRESSION "No tests ran" + PASS_REGULAR_EXPRESSION "No test cases matched '\"___nonexistent_test___\"'" + FAIL_REGULAR_EXPRESSION "No tests ran" ) add_test(NAME TestSpecs::NoMatchedTestsFail @@ -283,7 +273,7 @@ add_test(NAME TestSpecs::OverrideAllSkipFailure ) add_test(NAME TestSpecs::NonMatchingTestSpecIsRoundTrippable - COMMAND $<TARGET_FILE:SelfTest> Tracker, "this test does not exist" "[nor does this tag]" + COMMAND $<TARGET_FILE:SelfTest> Tracker, "this test does not exist" "[nor does this tag]" ) set_tests_properties(TestSpecs::NonMatchingTestSpecIsRoundTrippable PROPERTIES @@ -447,7 +437,6 @@ set_tests_properties("Benchmarking::SkipBenchmarkMacros" FAIL_REGULAR_EXPRESSION "benchmark name" ) - add_test(NAME "Benchmarking::FailureReporting::OptimizedOut" COMMAND $<TARGET_FILE:SelfTest> "Failing benchmarks" -c "empty" -r xml @@ -510,7 +499,7 @@ set_tests_properties("ErrorHandling::InvalidTestSpecExitsEarly" FAIL_REGULAR_EXPRESSION "No tests ran" ) -if (MSVC) +if(MSVC) set(_NullFile "NUL") else() set(_NullFile "/dev/null") @@ -519,7 +508,7 @@ endif() # 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) +if(NOT MEMORYCHECK_COMMAND) add_test(NAME "MultiReporter::CapturingReportersDontPropagateStdOut" COMMAND $<TARGET_FILE:SelfTest> "Sends stuff to stdout and stderr" @@ -608,76 +597,71 @@ set_tests_properties("Reporters::JUnit::NamespacesAreNormalized" PASS_REGULAR_EXPRESSION "testcase classname=\"SelfTest(\.exe)?\\.A\\.B\\.TestClass\"" ) -if (CATCH_ENABLE_CONFIGURE_TESTS) - foreach(testName "DefaultReporter" "Disable" "DisableStringification" - "ExperimentalRedirect") - - add_test(NAME "CMakeConfig::${testName}" - COMMAND - "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/TestScripts/testConfigure${testName}.py" "${CATCH_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" - ) - set_tests_properties("CMakeConfig::${testName}" - PROPERTIES - COST 240 - LABELS "uses-python" - ) - - endforeach() -endif() - -if (CATCH_ENABLE_CMAKE_HELPER_TESTS) - add_test(NAME "CMakeHelper::DiscoverTests" +if(CATCH_ENABLE_CONFIGURE_TESTS) + foreach(testName "DefaultReporter" "Disable" "DisableStringification" + "ExperimentalRedirect") + add_test(NAME "CMakeConfig::${testName}" COMMAND - "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/TestScripts/DiscoverTests/VerifyRegistration.py" "${CATCH_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" + "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/TestScripts/testConfigure${testName}.py" "${CATCH_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" ) - set_tests_properties("CMakeHelper::DiscoverTests" + set_tests_properties("CMakeConfig::${testName}" PROPERTIES COST 240 LABELS "uses-python" ) + endforeach() endif() -foreach (reporterName # "Automake" - the simple .trs format does not support any kind of comments/metadata - "compact" - "console" - "JUnit" - "SonarQube" - "TAP" - # "TeamCity" - does not seem to support test suite-level metadata/comments - "XML" - "JSON") - - add_test(NAME "Reporters:Filters:${reporterName}" - COMMAND - $<TARGET_FILE:SelfTest> [comparisons][string-case] "CaseInsensitiveLess is case insensitive" - --reporter ${reporterName} - ) - # Different regex for these two reporters, because the commas end up xml-escaped - if (reporterName MATCHES "JUnit|XML") - set(testCaseNameFormat ""CaseInsensitiveLess is case insensitive"") - elseif(reporterName MATCHES "JSON") - set(testCaseNameFormat "\\\\\"CaseInsensitiveLess is case insensitive\\\\\"") - else() - set(testCaseNameFormat "\"CaseInsensitiveLess is case insensitive\"") - endif() - set_tests_properties("Reporters:Filters:${reporterName}" - PROPERTIES - PASS_REGULAR_EXPRESSION "[fF]ilters.+\\[comparisons\\] \\[string-case\\] ${testCaseNameFormat}" - ) +if(CATCH_ENABLE_CMAKE_HELPER_TESTS) + add_test(NAME "CMakeHelper::DiscoverTests" + COMMAND + "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/TestScripts/DiscoverTests/VerifyRegistration.py" "${CATCH_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" + ) + set_tests_properties("CMakeHelper::DiscoverTests" + PROPERTIES + COST 240 + LABELS "uses-python" + ) +endif() - add_test(NAME "Reporters:RngSeed:${reporterName}" - COMMAND - $<TARGET_FILE:SelfTest> "Factorials are computed" - --reporter ${reporterName} - --rng-seed 18181818 - ) - set_tests_properties("Reporters:RngSeed:${reporterName}" - PROPERTIES - PASS_REGULAR_EXPRESSION "18181818" - ) +foreach(reporterName # "Automake" - the simple .trs format does not support any kind of comments/metadata + "compact" + "console" + "JUnit" + "SonarQube" + "TAP" + # "TeamCity" - does not seem to support test suite-level metadata/comments + "XML" + "JSON") + add_test(NAME "Reporters:Filters:${reporterName}" + COMMAND + $<TARGET_FILE:SelfTest> [comparisons][string-case] "CaseInsensitiveLess is case insensitive" + --reporter ${reporterName} + ) + # Different regex for these two reporters, because the commas end up xml-escaped + if(reporterName MATCHES "JUnit|XML") + set(testCaseNameFormat ""CaseInsensitiveLess is case insensitive"") + elseif(reporterName MATCHES "JSON") + set(testCaseNameFormat "\\\\\"CaseInsensitiveLess is case insensitive\\\\\"") + else() + set(testCaseNameFormat "\"CaseInsensitiveLess is case insensitive\"") + endif() + set_tests_properties("Reporters:Filters:${reporterName}" + PROPERTIES + PASS_REGULAR_EXPRESSION "[fF]ilters.+\\[comparisons\\] \\[string-case\\] ${testCaseNameFormat}" + ) + add_test(NAME "Reporters:RngSeed:${reporterName}" + COMMAND + $<TARGET_FILE:SelfTest> "Factorials are computed" + --reporter ${reporterName} + --rng-seed 18181818 + ) + set_tests_properties("Reporters:RngSeed:${reporterName}" + PROPERTIES + PASS_REGULAR_EXPRESSION "18181818" + ) endforeach() - list(APPEND CATCH_WARNING_TARGETS SelfTest) set(CATCH_WARNING_TARGETS ${CATCH_WARNING_TARGETS} PARENT_SCOPE) diff --git a/tests/ExtraTests/CMakeLists.txt b/tests/ExtraTests/CMakeLists.txt index 3c38d675..77e8f756 100644 --- a/tests/ExtraTests/CMakeLists.txt +++ b/tests/ExtraTests/CMakeLists.txt @@ -1,12 +1,7 @@ -# -# Build extra tests. -# +cmake_minimum_required(VERSION 3.16) +project(Catch2ExtraTests LANGUAGES CXX) -cmake_minimum_required( VERSION 3.16 ) - -project( Catch2ExtraTests LANGUAGES CXX ) - -message( STATUS "Extra tests included" ) +message(STATUS "Extra tests included") add_test( NAME TestShardingIntegration @@ -21,8 +16,7 @@ add_test( NAME TestSharding::OverlyLargeShardIndex COMMAND $<TARGET_FILE:SelfTest> --shard-index 5 --shard-count 5 ) -set_tests_properties( - TestSharding::OverlyLargeShardIndex +set_tests_properties(TestSharding::OverlyLargeShardIndex PROPERTIES PASS_REGULAR_EXPRESSION "The shard count \\(5\\) must be greater than the shard index \\(5\\)" ) @@ -31,8 +25,7 @@ set_tests_properties( # 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 +set_tests_properties(MinDuration::SimpleThreshold PROPERTIES PASS_REGULAR_EXPRESSION "s: sleep_for_1000ms" FAIL_REGULAR_EXPRESSION "sleep_for_100ms" @@ -43,8 +36,7 @@ set_tests_properties( # -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 +set_tests_properties(MinDuration::DurationOverrideYes PROPERTIES PASS_REGULAR_EXPRESSION "s: sleep_for_100ms" ) @@ -52,27 +44,24 @@ set_tests_properties( # -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 +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 ) +set(TESTS_DIR ${CATCH_DIR}/tests/ExtraTests) add_executable(PrefixedMacros ${TESTS_DIR}/X01-PrefixedMacros.cpp) -target_compile_definitions( PrefixedMacros PRIVATE CATCH_CONFIG_PREFIX_ALL CATCH_CONFIG_RUNTIME_STATIC_REQUIRE ) +target_compile_definitions(PrefixedMacros PRIVATE CATCH_CONFIG_PREFIX_ALL CATCH_CONFIG_RUNTIME_STATIC_REQUIRE) # Macro configuration does not touch the compiled parts, so we can link # it against the main library -target_link_libraries( PrefixedMacros Catch2WithMain ) +target_link_libraries(PrefixedMacros Catch2WithMain) add_test(NAME CATCH_CONFIG_PREFIX_ALL COMMAND PrefixedMacros -s) -set_tests_properties( - CATCH_CONFIG_PREFIX_ALL +set_tests_properties(CATCH_CONFIG_PREFIX_ALL PROPERTIES PASS_REGULAR_EXPRESSION "CATCH_" FAIL_REGULAR_EXPRESSION @@ -81,51 +70,47 @@ set_tests_properties( " REQUIRE; REQUIRE_FALSE; REQUIRE_THROWS; REQUIRE_THROWS_AS; REQUIRE_THROWS_WITH; REQUIRE_THROWS_MATCHES; REQUIRE_NOTHROW; CHECK; CHECK_FALSE; CHECKED_IF; CHECKED_ELSE; CHECK_NOFAIL; CHECK_THROWS; CHECK_THROWS_AS; CHECK_THROWS_WITH; CHECK_THROWS_MATCHES; CHECK_NOTHROW; REQUIRE_THAT; CHECK_THAT" ) - add_executable(DisabledMacros ${TESTS_DIR}/X02-DisabledMacros.cpp) -target_compile_definitions( DisabledMacros PRIVATE CATCH_CONFIG_DISABLE ) +target_compile_definitions(DisabledMacros PRIVATE CATCH_CONFIG_DISABLE) # Macro configuration does not touch the compiled parts, so we can link # it against the main library -target_link_libraries( DisabledMacros Catch2WithMain ) +target_link_libraries(DisabledMacros Catch2WithMain) add_test(NAME CATCH_CONFIG_DISABLE-1 COMMAND DisabledMacros -s) -set_tests_properties( - CATCH_CONFIG_DISABLE-1 +set_tests_properties(CATCH_CONFIG_DISABLE-1 PROPERTIES PASS_REGULAR_EXPRESSION "No tests ran" FAIL_REGULAR_EXPRESSION "This should not happen" ) add_test(NAME CATCH_CONFIG_DISABLE-2 COMMAND DisabledMacros --list-tests) -set_tests_properties( - CATCH_CONFIG_DISABLE-2 +set_tests_properties(CATCH_CONFIG_DISABLE-2 PROPERTIES PASS_REGULAR_EXPRESSION "0 test cases" ) -add_executable( DisabledExceptions-DefaultHandler ${TESTS_DIR}/X03-DisabledExceptions-DefaultHandler.cpp ) -add_executable( DisabledExceptions-CustomHandler ${TESTS_DIR}/X04-DisabledExceptions-CustomHandler.cpp ) +add_executable(DisabledExceptions-DefaultHandler ${TESTS_DIR}/X03-DisabledExceptions-DefaultHandler.cpp) +add_executable(DisabledExceptions-CustomHandler ${TESTS_DIR}/X04-DisabledExceptions-CustomHandler.cpp) foreach(target DisabledExceptions-DefaultHandler DisabledExceptions-CustomHandler) - target_compile_options( ${target} + 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:AppleClang>>:-fno-exceptions> ) target_link_libraries(${target} Catch2_buildall_interface) endforeach() -target_compile_definitions( DisabledExceptions-CustomHandler PUBLIC CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER ) +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") -set_tests_properties( - CATCH_CONFIG_DISABLE_EXCEPTIONS-1 +set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-1 PROPERTIES PASS_REGULAR_EXPRESSION "assertions: 4 \| 2 passed \| 2 failed" FAIL_REGULAR_EXPRESSION "abort;terminate;fatal" ) -add_executable( BazelReporter ${TESTS_DIR}/X30-BazelReporter.cpp ) -target_compile_definitions( BazelReporter PRIVATE CATCH_CONFIG_BAZEL_SUPPORT ) +add_executable(BazelReporter ${TESTS_DIR}/X30-BazelReporter.cpp) +target_compile_definitions(BazelReporter PRIVATE CATCH_CONFIG_BAZEL_SUPPORT) target_link_libraries(BazelReporter Catch2_buildall_interface) add_test(NAME CATCH_CONFIG_BAZEL_REPORTER-1 COMMAND @@ -137,7 +122,7 @@ set_tests_properties(CATCH_CONFIG_BAZEL_REPORTER-1 ) # We must now test this works without the build flag. -add_executable( BazelReporterNoCatchConfig ${TESTS_DIR}/X30-BazelReporter.cpp ) +add_executable(BazelReporterNoCatchConfig ${TESTS_DIR}/X30-BazelReporter.cpp) target_link_libraries(BazelReporterNoCatchConfig Catch2WithMain) add_test(NAME NO_CATCH_CONFIG_BAZEL_REPORTER-1 COMMAND @@ -159,7 +144,6 @@ set_tests_properties(BazelEnv::TESTBRIDGE_TEST_ONLY PASS_REGULAR_EXPRESSION "All tests passed \\(1 assertion in 1 test case\\)" ) - add_test(NAME BazelEnv::Sharding COMMAND "${PYTHON_EXECUTABLE}" "${CATCH_DIR}/tests/TestScripts/testBazelSharding.py" @@ -171,82 +155,69 @@ set_tests_properties(BazelEnv::Sharding LABELS "uses-python" ) - # The default handler on Windows leads to the just-in-time debugger firing, # which makes this test unsuitable for CI and headless runs, as it opens # up an interactive dialog. -if (NOT WIN32) +if(NOT WIN32) add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-2 COMMAND DisabledExceptions-DefaultHandler "Tests that abort") - set_tests_properties( - CATCH_CONFIG_DISABLE_EXCEPTIONS-2 + 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") -set_tests_properties( - CATCH_CONFIG_DISABLE_EXCEPTIONS-3 +set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-3 PROPERTIES PASS_REGULAR_EXPRESSION "assertions: 4 \| 2 passed \| 2 failed" FAIL_REGULAR_EXPRESSION "====== CUSTOM HANDLER ======" ) add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-4 COMMAND DisabledExceptions-CustomHandler "Tests that abort") -set_tests_properties( - CATCH_CONFIG_DISABLE_EXCEPTIONS-4 +set_tests_properties(CATCH_CONFIG_DISABLE_EXCEPTIONS-4 PROPERTIES PASS_REGULAR_EXPRESSION "====== CUSTOM HANDLER ======" ) - 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) -set_tests_properties( - DeferredStaticChecks +set_tests_properties(DeferredStaticChecks PROPERTIES PASS_REGULAR_EXPRESSION "test cases: 1 \\| 1 failed\nassertions: 3 \\| 3 failed" ) - add_executable(FallbackStringifier ${TESTS_DIR}/X10-FallbackStringifier.cpp) -target_compile_definitions( FallbackStringifier PRIVATE CATCH_CONFIG_FALLBACK_STRINGIFIER=fallbackStringifier ) -target_link_libraries( FallbackStringifier Catch2WithMain ) +target_compile_definitions(FallbackStringifier PRIVATE CATCH_CONFIG_FALLBACK_STRINGIFIER=fallbackStringifier) +target_link_libraries(FallbackStringifier Catch2WithMain) add_test(NAME FallbackStringifier COMMAND FallbackStringifier -r compact -s) -set_tests_properties( - FallbackStringifier +set_tests_properties(FallbackStringifier PROPERTIES PASS_REGULAR_EXPRESSION "foo{} for: { !!! }" ) - add_executable(DisableStringification ${TESTS_DIR}/X11-DisableStringification.cpp) -target_compile_definitions( DisableStringification PRIVATE CATCH_CONFIG_DISABLE_STRINGIFICATION ) +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) -set_tests_properties( - CATCH_CONFIG_DISABLE_STRINGIFICATION +set_tests_properties(CATCH_CONFIG_DISABLE_STRINGIFICATION PROPERTIES PASS_REGULAR_EXPRESSION "Disabled by CATCH_CONFIG_DISABLE_STRINGIFICATION" FAIL_REGULAR_EXPRESSION "Hidden{} == Hidden{}" ) - # This test touches windows.h, so it should only be compiled under msvc -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) - list(APPEND CATCH_WARNING_TARGETS ${EXTRA_TEST_BINARIES} WindowsHeader) +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) + list(APPEND CATCH_WARNING_TARGETS ${EXTRA_TEST_BINARIES} WindowsHeader) endif() - add_executable(PartialTestCaseEvents ${TESTS_DIR}/X21-PartialTestCaseEvents.cpp) target_link_libraries(PartialTestCaseEvents PRIVATE Catch2WithMain) add_test( @@ -264,22 +235,19 @@ add_test( NAME BenchmarksInCumulativeReporter COMMAND BenchmarksInCumulativeReporter --reporter testReporter ) -set_tests_properties( - BenchmarksInCumulativeReporter +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 +set_tests_properties(Reporters::registration-is-case-preserving PROPERTIES PASS_REGULAR_EXPRESSION "testReporterCASED" ) @@ -287,8 +255,7 @@ add_test( NAME Reporters::selection-is-case-insensitive COMMAND CasingInReporterNames -r testReportercased ) -set_tests_properties( - Reporters::selection-is-case-insensitive +set_tests_properties(Reporters::selection-is-case-insensitive PROPERTIES PASS_REGULAR_EXPRESSION "TestReporter constructed" ) @@ -300,15 +267,13 @@ add_test( COMMAND CapturedStdoutInTestCaseEvents --reporter test-reporter ) -set_tests_properties( - Reporters::CapturedStdOutInEvents +set_tests_properties(Reporters::CapturedStdOutInEvents PROPERTIES PASS_REGULAR_EXPRESSION "X27 - TestReporter constructed" FAIL_REGULAR_EXPRESSION "X27 ERROR" ) - -if (MSVC) +if(MSVC) set(_NullFile "NUL") else() set(_NullFile "/dev/null") @@ -320,7 +285,7 @@ target_link_libraries(ListenerStdoutCaptureInMultireporter PRIVATE Catch2::Catch # 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) +if(NOT MEMORYCHECK_COMMAND) add_test( NAME MultiReporter::NoncapturingListenerDoesntCauseStdoutPassThrough COMMAND ListenerStdoutCaptureInMultireporter @@ -328,15 +293,13 @@ if (NOT MEMORYCHECK_COMMAND) --reporter junit::out=${_NullFile} ) - set_tests_properties( - MultiReporter::NoncapturingListenerDoesntCauseStdoutPassThrough + 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) add_test( @@ -345,8 +308,7 @@ add_test( --reporter compact::out=${_NullFile} --reporter console::out=${_NullFile} ) -set_tests_properties( - MultiReporter::CapturingListenerCausesStdoutCapture +set_tests_properties(MultiReporter::CapturingListenerCausesStdoutCapture PROPERTIES PASS_REGULAR_EXPRESSION "CapturingListener initialized" FAIL_REGULAR_EXPRESSION "X25 - ERROR" @@ -359,8 +321,7 @@ add_test( |