Explorar el Código

GoogleTest: Add testcase for skipped tests

This simply runs a mocked test case which uses the prefix for signaling
a skipped test.  CTest's output is checked for a skipped test result.
Alexander Stein hace 5 años
padre
commit
89a843d6ea

+ 10 - 0
Tests/RunCMake/GoogleTest/GoogleTest-skip-timeout-stdout.txt

@@ -0,0 +1,10 @@
+Test project .*
+    Start 20: skip_test.test1
+1/1 Test #20: skip_test.test1 \.+\*\*\*Skipped +[0-9.]+ sec
+
+100% tests passed, 0 tests failed out of 1
+
+Total Test time \(real\) = +[0-9.]+ sec
+
+The following tests did not run:
+.*20 - skip_test\.test1 \(Skipped\)

+ 6 - 0
Tests/RunCMake/GoogleTest/GoogleTest.cmake

@@ -49,3 +49,9 @@ gtest_discover_tests(
   DISCOVERY_TIMEOUT 20
   PROPERTIES TIMEOUT 2
 )
+
+add_executable(skip_test skip_test.cpp)
+
+gtest_discover_tests(
+  skip_test
+)

+ 14 - 0
Tests/RunCMake/GoogleTest/RunCMakeTest.cmake

@@ -60,6 +60,20 @@ function(run_GoogleTest DISCOVERY_MODE)
     -R property_timeout\\.case_with_discovery
     --no-label-summary
   )
+
+  run_cmake_command(GoogleTest-build
+    ${CMAKE_COMMAND}
+    --build .
+    --config Debug
+    --target skip_test
+  )
+
+  run_cmake_command(GoogleTest-skip-test
+    ${CMAKE_CTEST_COMMAND}
+    -C Debug
+    -R skip_test
+    --no-label-summary
+  )
 endfunction()
 
 function(run_GoogleTestXML DISCOVERY_MODE)

+ 18 - 0
Tests/RunCMake/GoogleTest/skip_test.cpp

@@ -0,0 +1,18 @@
+#include <iostream>
+#include <string>
+
+int main(int argc, char** argv)
+{
+  // Note: GoogleTest.cmake doesn't actually depend on Google Test as such;
+  // it only requires that we produces output in the expected format when
+  // invoked with --gtest_list_tests. Thus, we fake that here. This allows us
+  // to test the module without actually needing Google Test.
+  if (argc > 1 && std::string(argv[1]) == "--gtest_list_tests") {
+    std::cout << "skip_test." << std::endl;
+    std::cout << "  test1" << std::endl;
+    return 0;
+  }
+
+  std::cout << "[  SKIPPED ] skip_test.test1" << std::endl;
+  return 0;
+}