diff options
| author | Leitwolf11 | 2026-10-25 02:37:35 +0300 |
|---|---|---|
| committer | Leitwolf11 | 2026-10-25 02:37:35 +0300 |
| commit | 126dc333564cb72b5115d9a9242d66694694b6d0 (patch) | |
| tree | 0bce4462b2e190c39b3e1c5f697e3e4abd1a5e2a /tests/TestScripts | |
| parent | 13f81a480a93807c14dddb5abdb97355ced4d4c5 (diff) | |
| download | catch3-126dc333564cb72b5115d9a9242d66694694b6d0.tar.gz | |
Give Catch3 its own build names and headers
Catch2 compatibility means the API tests are written in: the macros, such
as TEST_CASE and REQUIRE, and the Catch:: namespace. It does not mean
Catch2's build names or header paths. find_package(Catch2) found Catch3,
and a project using both frameworks met two packages, two sets of targets,
two Catch.cmake modules and two catch2/ header trees with the same names.
Build names:
- CMake: project and package Catch3, targets Catch3::Catch3 and
Catch3::Catch3WithMain, libraries Catch3 and Catch3Main, options
CATCH3_*, lib/cmake/Catch3 with Catch3Config, and pkg-config catch3 and
catch3-with-main. The version is Catch3's, 0.3.0, compatible within a
minor version.
- The CMake scripts are Catch3.cmake (catch3_discover_tests),
Catch3AddTests.cmake and Catch3ShardTests.cmake
(catch3_add_sharded_tests); the helpers they define at ctest time have a
catch3_ prefix. ParseAndAddCatchTests.cmake, deprecated upstream, is gone.
- Bazel //:catch3 and //:catch3_main, Meson catch3 and catch3-with-main
(with override_dependency), Xmake catch3 and catch3_main, Premake Catch3
and Catch3WithMain. Visual Studio projects get GUIDs of their own.
- The Progmasoft::Catch3 target and package are gone: property testing
and snapshots are part of Catch3::Catch3. Their sources now build with
the library's warning flags, so property failures are built field by
field (no missing initializers) and the default property name is a
thread-local pointer to the name its scope owns (no global destructor).
Headers: the engine moved from src/catch2 to src/Progmasoft/Catch3 with
Progmasoft names, so <catch2/catch_test_macros.hpp> is
<Progmasoft/Catch3/TestMacros.hpp>, <catch2/matchers/catch_matchers_string.hpp>
is <Progmasoft/Catch3/Matchers/String.hpp>, and interface headers are named
after their interface, such as Interfaces/IConfig.hpp. Include guards
became #pragma once. The installed headers go to include/Progmasoft.
src/Progmasoft/Context.cpp is StrategyContext.cpp, so no two sources share
a file name.
tools/scripts/upstreamFiles.txt lists the files that come from Catch2.
The license check expects BSL-1.0 on them and Progmasoft's header on the
rest of src/Progmasoft; the convenience-header check, the amalgamation
script and the surrogate tests take the engine's headers from it. The
amalgamated files are regenerated. The header-guard workflow checks for
#pragma once instead of checkguard.
Documents, the README and the release notes describe the new names.
Diffstat (limited to 'tests/TestScripts')
6 files changed, 34 insertions, 34 deletions
diff --git a/tests/TestScripts/ConfigureTestsCommon.py b/tests/TestScripts/ConfigureTestsCommon.py index 0af4c1f6..cd8a2471 100644 --- a/tests/TestScripts/ConfigureTestsCommon.py +++ b/tests/TestScripts/ConfigureTestsCommon.py @@ -17,7 +17,7 @@ def configure_and_build(source_path: str, project_path: str, options: List[Tuple '-B{}'.format(project_path), '-S{}'.format(source_path), '-DCMAKE_BUILD_TYPE=Debug', - '-DCATCH_DEVELOPMENT_BUILD=ON'] + '-DCATCH3_DEVELOPMENT_BUILD=ON'] toolchain_file = os.environ.get('CMAKE_TOOLCHAIN_FILE') if toolchain_file: # CMake only reads this environment variable itself since 3.21. diff --git a/tests/TestScripts/DiscoverTests/CMakeLists.txt b/tests/TestScripts/DiscoverTests/CMakeLists.txt index 8ae0decb..e4058297 100644 --- a/tests/TestScripts/DiscoverTests/CMakeLists.txt +++ b/tests/TestScripts/DiscoverTests/CMakeLists.txt @@ -3,17 +3,17 @@ project(discover-tests-test LANGUAGES CXX) add_executable(tests register-tests.cpp) add_subdirectory(${CATCH2_PATH} catch2-build) -target_link_libraries(tests PRIVATE Catch2::Catch2WithMain) +target_link_libraries(tests PRIVATE Catch3::Catch3WithMain) enable_testing() -include(Catch) +include(Catch3) set(extra_args) if(CMAKE_VERSION GREATER_EQUAL 3.27) list(APPEND extra_args DL_PATHS "${CMAKE_CURRENT_LIST_DIR};${CMAKE_CURRENT_LIST_DIR}/.." ) endif() -catch_discover_tests( +catch3_discover_tests( tests TEST_PREFIX " prefix " TEST_SUFFIX " suffix " diff --git a/tests/TestScripts/DiscoverTests/TestDecomposeJsonArray.cmake b/tests/TestScripts/DiscoverTests/TestDecomposeJsonArray.cmake index c64b4f52..693979ad 100644 --- a/tests/TestScripts/DiscoverTests/TestDecomposeJsonArray.cmake +++ b/tests/TestScripts/DiscoverTests/TestDecomposeJsonArray.cmake @@ -1,37 +1,37 @@ # SPDX-License-Identifier: BSL-1.0 -# Unit tests for `split_json_array` helper in `extras/CatchAddTests.cmake`. +# Unit tests for `catch3_split_json_array` helper in `extras/Catch3AddTests.cmake`. # # Yes, we are at the stage where the script helpers need unit tests. # # Run as -# cmake -DCATCH_ADD_TESTS_SCRIPT=/path/to/extras/CatchAddTests.cmake \ +# cmake -DCATCH3_ADD_TESTS_SCRIPT=/path/to/extras/Catch3AddTests.cmake \ # -P TestDecomposeJsonArray.cmake cmake_minimum_required(VERSION 3.19) -if(NOT DEFINED CATCH_ADD_TESTS_SCRIPT) - message(FATAL_ERROR "Missing argument `CATCH_ADD_TESTS_SCRIPT`") +if(NOT DEFINED CATCH3_ADD_TESTS_SCRIPT) + message(FATAL_ERROR "Missing argument `CATCH3_ADD_TESTS_SCRIPT`") endif() -if(NOT EXISTS "${CATCH_ADD_TESTS_SCRIPT}") - message(FATAL_ERROR "Cannot find CatchAddTests.cmake at '${CATCH_ADD_TESTS_SCRIPT}'") +if(NOT EXISTS "${CATCH3_ADD_TESTS_SCRIPT}") + message(FATAL_ERROR "Cannot find Catch3AddTests.cmake at '${CATCH3_ADD_TESTS_SCRIPT}'") endif() # Pull in the helper functions. Without `TEST_EXECUTABLE` being defined, -# `catch_discover_tests_impl` is not called. -include("${CATCH_ADD_TESTS_SCRIPT}") +# `catch3_discover_tests_impl` is not called. +include("${CATCH3_ADD_TESTS_SCRIPT}") set(_failures 0) # Parses out test names from provided listings and returns them through `out_var`. # Semicolons in test names are escaped as `@SEMI@`. function(decomposed_names listing_var out_var) - split_json_array(${listing_var} elements) + catch3_split_json_array(${listing_var} elements) set(names "") foreach(element IN LISTS elements) - magic_unescape_chars(element) + catch3_magic_unescape_chars(element) string(JSON name ERROR_VARIABLE err GET "${element}" "name") if(NOT err STREQUAL "NOTFOUND") set(${out_var} "PARSE-ERROR" PARENT_SCOPE) @@ -62,9 +62,9 @@ endfunction() # Assert that the tags in one decomposed element are preserved exactly. # Semicolons in expected tags have to be escaped as `@SEMI@`. function(expect_tags description listing_var element_index expected_tags) - split_json_array(${listing_var} elements) + catch3_split_json_array(${listing_var} elements) list(GET elements ${element_index} element) - magic_unescape_chars(element) + catch3_magic_unescape_chars(element) string(JSON tags ERROR_VARIABLE err GET "${element}" "tags") if(NOT err STREQUAL "NOTFOUND") @@ -109,7 +109,7 @@ function(make_listing out_var) set(${out_var} "[\n${objects}]" PARENT_SCOPE) endfunction() -message(STATUS "Running split_json_array correctness tests") +message(STATUS "Running catch3_split_json_array correctness tests") # There are 2 main difficulties in the array decomposition that we need # to check for: @@ -191,4 +191,4 @@ if(_failures GREATER 0) message(FATAL_ERROR "${_failures} decomposition test(s) failed") endif() -message(STATUS "All split_json_array correctness tests passed") +message(STATUS "All catch3_split_json_array correctness tests passed") diff --git a/tests/TestScripts/DiscoverTests/TestPrepareCommandFragment.cmake b/tests/TestScripts/DiscoverTests/TestPrepareCommandFragment.cmake index cfcaf0d1..a36b0191 100644 --- a/tests/TestScripts/DiscoverTests/TestPrepareCommandFragment.cmake +++ b/tests/TestScripts/DiscoverTests/TestPrepareCommandFragment.cmake @@ -1,27 +1,27 @@ # SPDX-License-Identifier: BSL-1.0 -# Unit tests for `prepare_command_fragment` helper in `extras/CatchAddTests.cmake`. +# Unit tests for `catch3_prepare_command_fragment` helper in `extras/Catch3AddTests.cmake`. # # Yes, we are at the stage where the script helpers need unit tests. # # Run as -# cmake -DCATCH_ADD_TESTS_SCRIPT=/path/to/extras/CatchAddTests.cmake \ +# cmake -DCATCH3_ADD_TESTS_SCRIPT=/path/to/extras/Catch3AddTests.cmake \ # -P TestPrepareCommandFragment.cmake cmake_minimum_required(VERSION 3.19) -if(NOT DEFINED CATCH_ADD_TESTS_SCRIPT) - message(FATAL_ERROR "Missing argument `CATCH_ADD_TESTS_SCRIPT`") +if(NOT DEFINED CATCH3_ADD_TESTS_SCRIPT) + message(FATAL_ERROR "Missing argument `CATCH3_ADD_TESTS_SCRIPT`") endif() -if(NOT EXISTS "${CATCH_ADD_TESTS_SCRIPT}") - message(FATAL_ERROR "Cannot find CatchAddTests.cmake at '${CATCH_ADD_TESTS_SCRIPT}'") +if(NOT EXISTS "${CATCH3_ADD_TESTS_SCRIPT}") + message(FATAL_ERROR "Cannot find Catch3AddTests.cmake at '${CATCH3_ADD_TESTS_SCRIPT}'") endif() # Pull in the helper functions. Without `TEST_EXECUTABLE` being defined, -# `catch_discover_tests_impl` is not called. -include("${CATCH_ADD_TESTS_SCRIPT}") +# `catch3_discover_tests_impl` is not called. +include("${CATCH3_ADD_TESTS_SCRIPT}") set(_failures 0) @@ -37,25 +37,25 @@ function(expect_equal description actual expected) endif() endfunction() -prepare_command_fragment(test_fragment SimpleName /path/to/tests) +catch3_prepare_command_fragment(test_fragment SimpleName /path/to/tests) expect_equal("Simple arg, no quotes" "${test_fragment}" " SimpleName /path/to/tests") -prepare_command_fragment(test_fragment "Name with spaces") +catch3_prepare_command_fragment(test_fragment "Name with spaces") expect_equal("Spaces in arg, needs quotes" "${test_fragment}" " [==[Name with spaces]==]") -prepare_command_fragment(test_fragment Foo PROPERTIES LABELS "tagA\;tagB\;tagC") +catch3_prepare_command_fragment(test_fragment Foo PROPERTIES LABELS "tagA\;tagB\;tagC") expect_equal("semicolons in argument are kept and quoted" "${test_fragment}" " Foo PROPERTIES LABELS [==[tagA\;tagB\;tagC]==]") set(test_fragment "PRE-EXISTING") -prepare_command_fragment(test_fragment Foo PROPERTIES BAR baz) +catch3_prepare_command_fragment(test_fragment Foo PROPERTIES BAR baz) expect_equal("out var does no accumulate commands" "${test_fragment}" " Foo PROPERTIES BAR baz") if(_failures GREATER 0) - message(FATAL_ERROR "${_failures} prepare_command_fragment test(s) failed") + message(FATAL_ERROR "${_failures} catch3_prepare_command_fragment test(s) failed") else() - message(STATUS "All prepare_command_fragment tests passed") + message(STATUS "All catch3_prepare_command_fragment tests passed") endif() diff --git a/tests/TestScripts/DiscoverTests/register-tests.cpp b/tests/TestScripts/DiscoverTests/register-tests.cpp index e22b9752..8b5570d3 100644 --- a/tests/TestScripts/DiscoverTests/register-tests.cpp +++ b/tests/TestScripts/DiscoverTests/register-tests.cpp @@ -6,7 +6,7 @@ // SPDX-License-Identifier: BSL-1.0 -#include <catch2/catch_test_macros.hpp> +#include <Progmasoft/Catch3/TestMacros.hpp> #include <cstdio> #include <iostream> diff --git a/tests/TestScripts/testConfigureDisable.py b/tests/TestScripts/testConfigureDisable.py index ce9b2f9f..ae5ce37b 100644 --- a/tests/TestScripts/testConfigureDisable.py +++ b/tests/TestScripts/testConfigureDisable.py @@ -34,7 +34,7 @@ configure_and_build(catch2_source_path, # We need to turn off WERROR, because the compilers # can see that the various variables inside test cases # are set but unused. - ("CATCH_ENABLE_WERROR", "OFF")]) + ("CATCH3_ENABLE_WERROR", "OFF")]) stdout, _ = run_and_return_output(os.path.join(build_dir_path, 'tests'), 'SelfTest', |