Browse Source

GoogleTest: Preserve spaces in test parameters

Before the fix the gtest_discover_tests() function would strip the
user data in test parameters (everything to the right of GetParam())
of spaces. Now the parameters aren't altered in any way.

Fixes #23058
Evgeniy Shcherbina 3 years ago
parent
commit
fd6b8fa40e

+ 4 - 5
Modules/GoogleTestAddTests.cmake

@@ -142,15 +142,14 @@ function(gtest_discover_tests_impl)
         endif()
         string(REGEX REPLACE "^DISABLED_" "" pretty_suite "${pretty_suite}")
       else()
-        # Test name; strip spaces and comments to get just the name...
-        string(REGEX REPLACE " +" "" test "${line}")
+        string(STRIP "${line}" test)
         if(test MATCHES "#" AND NOT _NO_PRETTY_VALUES)
-          string(REGEX REPLACE "/[0-9]+#GetParam..=" "/" pretty_test "${test}")
+          string(REGEX REPLACE "/[0-9]+[ #]+GetParam\\(\\) = " "/" pretty_test "${test}")
         else()
-          string(REGEX REPLACE "#.*" "" pretty_test "${test}")
+          string(REGEX REPLACE " +#.*" "" pretty_test "${test}")
         endif()
         string(REGEX REPLACE "^DISABLED_" "" pretty_test "${pretty_test}")
-        string(REGEX REPLACE "#.*" "" test "${test}")
+        string(REGEX REPLACE " +#.*" "" test "${test}")
         if(NOT "${_TEST_XML_OUTPUT_DIR}" STREQUAL "")
           set(TEST_XML_OUTPUT_PARAM "--gtest_output=xml:${_TEST_XML_OUTPUT_DIR}/${prefix}${suite}.${test}${suffix}.xml")
         else()

+ 4 - 0
Tests/RunCMake/GoogleTest/GoogleTest-test1-stdout.txt

@@ -49,6 +49,8 @@ Test project .*
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:param/special\.case/"__osbtext"!1 \.+ +Passed +[0-9.]+ sec
  *Start +[0-9]+: TEST:param/special\.case/"__csb___text"!1
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:param/special\.case/"__csb___text"!1 \.+ +Passed +[0-9.]+ sec
+ *Start +[0-9]+: TEST:param/special\.case/"S o m  e   "!1
+ *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:param/special\.case/"S o m  e   "!1 \.+ +Passed +[0-9.]+ sec
  *Start +[0-9]+: TEST:ns\.param/special\.case/"semicolon;"!1
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:ns\.param/special\.case/"semicolon;"!1 \.+ +Passed +[0-9.]+ sec
  *Start +[0-9]+: TEST:ns\.param/special\.case/"backslash\\"!1
@@ -63,6 +65,8 @@ Test project .*
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:ns\.param/special\.case/"__osbtext"!1 \.+ +Passed +[0-9.]+ sec
  *Start +[0-9]+: TEST:ns\.param/special\.case/"__csb___text"!1
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:ns\.param/special\.case/"__csb___text"!1 \.+ +Passed +[0-9.]+ sec
+ *Start +[0-9]+: TEST:ns\.param/special\.case/"S o m  e   "!1
+ *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:ns\.param/special\.case/"S o m  e   "!1 \.+ +Passed +[0-9.]+ sec
 
 100% tests passed, 0 tests failed out of [0-9]+
 

+ 4 - 0
Tests/RunCMake/GoogleTest/GoogleTest-test2-stdout.txt

@@ -49,6 +49,8 @@ Test project .*
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:param/special\.case/"__osbtext"!2 \.+ +Passed +[0-9.]+ sec
  *Start +[0-9]+: TEST:param/special\.case/"__csb___text"!2
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:param/special\.case/"__csb___text"!2 \.+ +Passed +[0-9.]+ sec
+ *Start +[0-9]+: TEST:param/special\.case/"S o m  e   "!2
+ *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:param/special\.case/"S o m  e   "!2 \.+ +Passed +[0-9.]+ sec
  *Start +[0-9]+: TEST:ns\.param/special\.case/"semicolon;"!2
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:ns\.param/special\.case/"semicolon;"!2 \.+ +Passed +[0-9.]+ sec
  *Start +[0-9]+: TEST:ns\.param/special\.case/"backslash\\"!2
@@ -63,6 +65,8 @@ Test project .*
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:ns\.param/special\.case/"__osbtext"!2 \.+ +Passed +[0-9.]+ sec
  *Start +[0-9]+: TEST:ns\.param/special\.case/"__csb___text"!2
  *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:ns\.param/special\.case/"__csb___text"!2 \.+ +Passed +[0-9.]+ sec
+ *Start +[0-9]+: TEST:ns\.param/special\.case/"S o m  e   "!2
+ *[0-9]+/[0-9]+ +Test +#[0-9]+: TEST:ns\.param/special\.case/"S o m  e   "!2 \.+ +Passed +[0-9.]+ sec
 
 100% tests passed, 0 tests failed out of [0-9]+
 

+ 1 - 0
Tests/RunCMake/GoogleTest/fake_gtest.cpp

@@ -61,6 +61,7 @@ int main(int argc, char** argv)
         std::cout << "  case/4  # GetParam() = \"]]=]\"" << std::endl;
         std::cout << "  case/5  # GetParam() = \"__osbtext\"" << std::endl;
         std::cout << "  case/6  # GetParam() = \"__csb___text\"" << std::endl;
+        std::cout << "  case/7  # GetParam() = \"S o m  e   \"" << std::endl;
       }
     }
     return 0;