Преглед на файлове

CTest: Make sure NOT_RUN tests show up in the failed test log

Issue: #20543
Robert Maynard преди 5 години
родител
ревизия
bbb62dcc72

+ 5 - 0
Source/CTest/cmCTestRunTest.cxx

@@ -340,6 +340,11 @@ bool cmCTestRunTest::NeedsToRepeat()
   if (this->NumberOfRunsLeft == 0) {
   if (this->NumberOfRunsLeft == 0) {
     return false;
     return false;
   }
   }
+  // If a test is marked as NOT_RUN it will not be repeated
+  // no matter the repeat settings, so just record it as-is.
+  if (this->TestResult.Status == cmCTestTestHandler::NOT_RUN) {
+    return false;
+  }
   // if number of runs left is not 0, and we are running until
   // if number of runs left is not 0, and we are running until
   // we find a failed (or passed) test, then return true so the test can be
   // we find a failed (or passed) test, then return true so the test can be
   // restarted
   // restarted

+ 11 - 1
Tests/RunCMake/ctest_test/RunCMakeTest.cmake

@@ -83,12 +83,13 @@ run_ctest_test(TestRepeatBad2 REPEAT UNTIL_FAIL:-1)
 
 
 function(run_TestRepeat case return_value )
 function(run_TestRepeat case return_value )
   set(CASE_CTEST_TEST_ARGS RETURN_VALUE result EXCLUDE RunCMakeVersion ${ARGN})
   set(CASE_CTEST_TEST_ARGS RETURN_VALUE result EXCLUDE RunCMakeVersion ${ARGN})
-  string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[
+  string(CONCAT suffix_code [[
 add_test(NAME testRepeat
 add_test(NAME testRepeat
   COMMAND ${CMAKE_COMMAND} -D COUNT_FILE=${CMAKE_CURRENT_BINARY_DIR}/count.cmake
   COMMAND ${CMAKE_COMMAND} -D COUNT_FILE=${CMAKE_CURRENT_BINARY_DIR}/count.cmake
                            -P "]] "${RunCMake_SOURCE_DIR}/TestRepeat${case}" [[.cmake")
                            -P "]] "${RunCMake_SOURCE_DIR}/TestRepeat${case}" [[.cmake")
 set_property(TEST testRepeat PROPERTY TIMEOUT 5)
 set_property(TEST testRepeat PROPERTY TIMEOUT 5)
   ]])
   ]])
+  string(APPEND CASE_CMAKELISTS_SUFFIX_CODE "${suffix_code}")
 
 
   run_ctest(TestRepeat${case})
   run_ctest(TestRepeat${case})
 
 
@@ -111,3 +112,12 @@ endfunction()
 run_TestRepeat(UntilFail RETURN_VALUE:1 REPEAT UNTIL_FAIL:3)
 run_TestRepeat(UntilFail RETURN_VALUE:1 REPEAT UNTIL_FAIL:3)
 run_TestRepeat(UntilPass RETURN_VALUE:0 REPEAT UNTIL_PASS:3)
 run_TestRepeat(UntilPass RETURN_VALUE:0 REPEAT UNTIL_PASS:3)
 run_TestRepeat(AfterTimeout RETURN_VALUE:0 REPEAT AFTER_TIMEOUT:3)
 run_TestRepeat(AfterTimeout RETURN_VALUE:0 REPEAT AFTER_TIMEOUT:3)
+
+# test repeat and not run tests interact correctly
+set(CASE_CMAKELISTS_SUFFIX_CODE [[
+add_test(NAME testNotRun
+  COMMAND ${CMAKE_COMMAND}/doesnt_exist)
+  set_property(TEST testNotRun PROPERTY TIMEOUT 5)
+  ]])
+run_TestRepeat(NotRun RETURN_VALUE:1 REPEAT UNTIL_PASS:3)
+unset(CASE_CMAKELISTS_SUFFIX_CODE)

+ 1 - 0
Tests/RunCMake/ctest_test/TestRepeatNotRun-result.txt

@@ -0,0 +1 @@
+(-1|255)

+ 1 - 0
Tests/RunCMake/ctest_test/TestRepeatNotRun-stderr.txt

@@ -0,0 +1 @@
+.*Unable to find executable.*

+ 5 - 0
Tests/RunCMake/ctest_test/TestRepeatNotRun-stdout.txt

@@ -0,0 +1,5 @@
+.*
+50% tests passed, 1 tests failed out of 2
+.*
+The following tests FAILED:
+.*testNotRun.*Not Run.*

+ 10 - 0
Tests/RunCMake/ctest_test/TestRepeatNotRun.cmake

@@ -0,0 +1,10 @@
+include("${COUNT_FILE}" OPTIONAL)
+if(NOT COUNT)
+  set(COUNT 0)
+endif()
+math(EXPR COUNT "${COUNT} + 1")
+file(WRITE "${COUNT_FILE}" "set(COUNT ${COUNT})\n")
+if(NOT COUNT EQUAL 2)
+  message("this test times out except on the 2nd run")
+  execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 10)
+endif()