Skip to content

Commit

Permalink
Fix handling of semicolon and backslash characters in CMake test disc…
Browse files Browse the repository at this point in the history
…overy (#2676)

This PR fixes the handling of semicolon and backslash characters in test names in the CMake test discovery

Closes #2674
  • Loading branch information
robinchrist authored Jun 14, 2023
1 parent a0c6a28 commit 42ee66b
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
15 changes: 10 additions & 5 deletions extras/CatchAddTests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ function(catch_discover_tests_impl)
)
endif()

# Make sure to escape ; (semicolons) in test names first, because
# that'd break the foreach loop for "Parse output" later and create
# wrongly splitted and thus failing test cases (false positives)
string(REPLACE ";" "\;" output "${output}")
string(REPLACE "\n" ";" output "${output}")

# Prepare reporter
Expand Down Expand Up @@ -119,15 +123,16 @@ function(catch_discover_tests_impl)

# Parse output
foreach(line ${output})
set(test ${line})
set(test "${line}")
# Escape characters in test case names that would be parsed by Catch2
set(test_name ${test})
foreach(char , [ ])
string(REPLACE ${char} "\\${char}" test_name ${test_name})
# Note that the \ escaping must happen FIRST! Do not change the order.
set(test_name "${test}")
foreach(char \\ , [ ])
string(REPLACE ${char} "\\${char}" test_name "${test_name}")
endforeach(char)
# ...add output dir
if(output_dir)
string(REGEX REPLACE "[^A-Za-z0-9_]" "_" test_name_clean ${test_name})
string(REGEX REPLACE "[^A-Za-z0-9_]" "_" test_name_clean "${test_name}")
set(output_dir_arg "--out ${output_dir}/${output_prefix}${test_name_clean}${output_suffix}")
endif()

Expand Down
1 change: 1 addition & 0 deletions tests/TestScripts/DiscoverTests/register-tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@

#include <catch2/catch_test_macros.hpp>

TEST_CASE("@Script[C:\\EPM1A]=x;\"SCALA_ZERO:\"", "[script regressions]"){}
TEST_CASE("Some test") {}

0 comments on commit 42ee66b

Please sign in to comment.