summaryrefslogtreecommitdiffstats
path: root/Tests/RunCMake/GoogleTest/fake_gtest.cpp
diff options
context:
space:
mode:
authorStefan Floeren <stefan.floeren@smartronic.de>2020-04-30 12:52:31 (GMT)
committerStefan Floeren <stefan.floeren@smartronic.de>2020-05-05 07:23:17 (GMT)
commit839a1010a3e2123e197e2c9e0ed8e5ad58988622 (patch)
treeff370c048cbf6e71fd75db1e215984f9b1c7b499 /Tests/RunCMake/GoogleTest/fake_gtest.cpp
parent671daf1998659c948fc0de9e6f16a367c47c7145 (diff)
downloadCMake-839a1010a3e2123e197e2c9e0ed8e5ad58988622.zip
CMake-839a1010a3e2123e197e2c9e0ed8e5ad58988622.tar.gz
CMake-839a1010a3e2123e197e2c9e0ed8e5ad58988622.tar.bz2
GoogleTestAddTests: Fix output processing
The function gtest_discover_tests calls the passed test executable with the parameter --gtest_list_tests and parses the output to find all tests. In case of value-parameterized tests ([1]), the test values are included in the output. While test names are alphanumeric, the values can contain arbitrary content. First, the output is separated into lines with `foreach`. Included semi-colons breaks this and need to get escaped. Afterwards, the testname is passed on to the `add_command` helper. This helper was converted into a macro in commit dac201442d (GoogleTest: Optimize gtest_discover_tests, 2020-02-18). As a macro, its arguments are re-evaluated. Therefore we need to escape `\`, `;` and to prevent unwanted variable expansion `$`. Fixes: #20661 [1] <https://github.com/google/googletest/blob/0eea2e9/googletest/docs/advanced.md#value-parameterized-tests>
Diffstat (limited to 'Tests/RunCMake/GoogleTest/fake_gtest.cpp')
-rw-r--r--Tests/RunCMake/GoogleTest/fake_gtest.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/Tests/RunCMake/GoogleTest/fake_gtest.cpp b/Tests/RunCMake/GoogleTest/fake_gtest.cpp
index f1bd7ef..a8127bf 100644
--- a/Tests/RunCMake/GoogleTest/fake_gtest.cpp
+++ b/Tests/RunCMake/GoogleTest/fake_gtest.cpp
@@ -21,6 +21,10 @@ int main(int argc, char** argv)
std::cout << "value/test." << std::endl;
std::cout << " case/0 # GetParam() = 1" << std::endl;
std::cout << " case/1 # GetParam() = \"foo\"" << std::endl;
+ std::cout << "param/special." << std::endl;
+ std::cout << " case/0 # GetParam() = \"semicolon;\"" << std::endl;
+ std::cout << " case/1 # GetParam() = \"backslash\\\"" << std::endl;
+ std::cout << " case/2 # GetParam() = \"${var}\"" << std::endl;
return 0;
}