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

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMartin Hořeňovský2026-08-20 14:45:30 +0200
committerMartin Hořeňovský2026-08-20 16:24:18 +0200
commit8582805f548e3e091d8d35188f4c3a690f989b0f (patch)
treea378b537da2dbcfce03e406a02193e3107426cf3
parent0aeb818520028ca05cc2539ed242402ef7a7ae41 (diff)
downloadcatch3-8582805f548e3e091d8d35188f4c3a690f989b0f.tar.gz
Support TEST_{PREFIX,SUFFIX} with leading/trailing whitespace
Closes #2149
-rw-r--r--extras/Catch.cmake8
-rw-r--r--extras/CatchAddTests.cmake6
-rw-r--r--tests/TestScripts/DiscoverTests/CMakeLists.txt2
-rw-r--r--tests/TestScripts/DiscoverTests/VerifyRegistration.py9
4 files changed, 17 insertions, 8 deletions
diff --git a/extras/Catch.cmake b/extras/Catch.cmake
index c143d330..14ddf228 100644
--- a/extras/Catch.cmake
+++ b/extras/Catch.cmake
@@ -231,8 +231,8 @@ function(catch_discover_tests TARGET)
-D "TEST_SPEC=${_TEST_SPEC}"
-D "TEST_EXTRA_ARGS=${_EXTRA_ARGS}"
-D "TEST_PROPERTIES=${_PROPERTIES}"
- -D "TEST_PREFIX=${_TEST_PREFIX}"
- -D "TEST_SUFFIX=${_TEST_SUFFIX}"
+ -D "TEST_PREFIX='${_TEST_PREFIX}'"
+ -D "TEST_SUFFIX='${_TEST_SUFFIX}'"
-D "TEST_LIST=${_TEST_LIST}"
-D "TEST_REPORTER=${_REPORTER}"
-D "TEST_OUTPUT_DIR=${_OUTPUT_DIR}"
@@ -277,8 +277,8 @@ function(catch_discover_tests TARGET)
" TEST_SPEC" " [==[" "${_TEST_SPEC}" "]==]" "\n"
" TEST_EXTRA_ARGS" " [==[" "${_EXTRA_ARGS}" "]==]" "\n"
" TEST_PROPERTIES" " [==[" "${_PROPERTIES}" "]==]" "\n"
- " TEST_PREFIX" " [==[" "${_TEST_PREFIX}" "]==]" "\n"
- " TEST_SUFFIX" " [==[" "${_TEST_SUFFIX}" "]==]" "\n"
+ " TEST_PREFIX" " [==['" "${_TEST_PREFIX}" "']==]" "\n"
+ " TEST_SUFFIX" " [==['" "${_TEST_SUFFIX}" "']==]" "\n"
" TEST_LIST" " [==[" "${_TEST_LIST}" "]==]" "\n"
" TEST_REPORTER" " [==[" "${_REPORTER}" "]==]" "\n"
" TEST_OUTPUT_DIR" " [==[" "${_OUTPUT_DIR}" "]==]" "\n"
diff --git a/extras/CatchAddTests.cmake b/extras/CatchAddTests.cmake
index 38a57d36..f4840196 100644
--- a/extras/CatchAddTests.cmake
+++ b/extras/CatchAddTests.cmake
@@ -235,8 +235,10 @@ function(catch_discover_tests_impl)
set(_WriteToFileThreshold 50000)
set(add_tags "${_ADD_TAGS_AS_LABELS}")
- set(prefix "${_TEST_PREFIX}")
- set(suffix "${_TEST_SUFFIX}")
+ # TEST_{PREFIX,SUFFIX} is enclosed in single quotes to keep ensure
+ # leading/trailing whitespace isn't trimmed by CMake's argument passing.
+ string(REGEX REPLACE "^'(.*)'$" "\\1" prefix "${_TEST_PREFIX}")
+ string(REGEX REPLACE "^'(.*)'$" "\\1" suffix "${_TEST_SUFFIX}")
set(spec ${_TEST_SPEC})
set(extra_args ${_TEST_EXTRA_ARGS})
set(properties ${_TEST_PROPERTIES})
diff --git a/tests/TestScripts/DiscoverTests/CMakeLists.txt b/tests/TestScripts/DiscoverTests/CMakeLists.txt
index 1bcefbb1..8ae0decb 100644
--- a/tests/TestScripts/DiscoverTests/CMakeLists.txt
+++ b/tests/TestScripts/DiscoverTests/CMakeLists.txt
@@ -15,6 +15,8 @@ if(CMAKE_VERSION GREATER_EQUAL 3.27)
endif()
catch_discover_tests(
tests
+ TEST_PREFIX " prefix "
+ TEST_SUFFIX " suffix "
ADD_TAGS_AS_LABELS
DISCOVERY_MODE PRE_TEST
${extra_args}
diff --git a/tests/TestScripts/DiscoverTests/VerifyRegistration.py b/tests/TestScripts/DiscoverTests/VerifyRegistration.py
index 3b7474a0..d33006dd 100644
--- a/tests/TestScripts/DiscoverTests/VerifyRegistration.py
+++ b/tests/TestScripts/DiscoverTests/VerifyRegistration.py
@@ -21,6 +21,11 @@ TestInfo = namedtuple('TestInfo', ['name', 'tags'])
cmake_version_regex = re.compile(r'cmake version (\d+)\.(\d+)\.(\d+)')
+# Note that these both intentionally include preceding/trailing space,
+# which should not get stripped.
+CTEST_NAME_PREFIX = ' prefix '
+CTEST_NAME_SUFFIX = ' suffix '
+
def get_cmake_version():
result = subprocess.run(['cmake', '--version'],
capture_output = True,
@@ -221,7 +226,7 @@ def extract_tests_list_from_ctest_script(build_path: str) -> List[str]:
print(f'stdout: {err.stdout}')
exit(4)
- lines = result.stdout.strip().split('\n')
+ lines = [x for x in result.stdout.split('\n') if x.strip()]
test_num_line = lines[0]
test_lines = lines[1:]
@@ -281,7 +286,7 @@ if __name__ == '__main__':
print(f"{len(catch_test_names)} tests matched in CTest listing")
test_list_names = sorted(extract_tests_list_from_ctest_script(build_path))
- expected_names = sorted(info.name for info in raw_catch_test_names)
+ expected_names = sorted(CTEST_NAME_PREFIX + info.name + CTEST_NAME_SUFFIX for info in raw_catch_test_names)
if test_list_names != expected_names:
print("TEST_LIST variable (tests_TESTS) does not match Catch2 test listing!")
for name in test_list_names: