Merge branch 'backport-ctest-repeat-notrun' into ctest-repeat-notrun

This commit is contained in:
Brad King
2020-05-27 06:45:39 -04:00
6 changed files with 54 additions and 6 deletions

View File

@@ -344,6 +344,11 @@ bool cmCTestRunTest::NeedsToRepeat()
if (this->NumberOfRunsLeft == 0) {
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
// we find a failed (or passed) test, then return true so the test can be
// restarted

View File

@@ -81,20 +81,46 @@ run_TestOutputSize()
run_ctest_test(TestRepeatBad1 REPEAT UNKNOWN:3)
run_ctest_test(TestRepeatBad2 REPEAT UNTIL_FAIL:-1)
function(run_TestRepeat case)
set(CASE_CTEST_TEST_ARGS EXCLUDE RunCMakeVersion ${ARGN})
string(CONCAT CASE_CMAKELISTS_SUFFIX_CODE [[
function(run_TestRepeat case return_value )
set(CASE_CTEST_TEST_ARGS RETURN_VALUE result EXCLUDE RunCMakeVersion ${ARGN})
string(CONCAT suffix_code [[
add_test(NAME testRepeat
COMMAND ${CMAKE_COMMAND} -D COUNT_FILE=${CMAKE_CURRENT_BINARY_DIR}/count.cmake
-P "]] "${RunCMake_SOURCE_DIR}/TestRepeat${case}" [[.cmake")
set_property(TEST testRepeat PROPERTY TIMEOUT 5)
]])
string(APPEND CASE_CMAKELISTS_SUFFIX_CODE "${suffix_code}")
run_ctest(TestRepeat${case})
#write to end of the test file logic to Verify we get the expected
#return code
string(REPLACE "RETURN_VALUE:" "" return_value "${return_value}" )
file(APPEND "${RunCMake_BINARY_DIR}/TestRepeat${case}/test.cmake"
"
set(expected_result ${return_value})
message(STATUS \${result})
if(NOT result EQUAL expected_result)
message(FATAL_ERROR \"expected a return value of: \${expected_result},
instead got: \${result}\")
endif()
"
)
endfunction()
run_TestRepeat(UntilFail REPEAT UNTIL_FAIL:3)
run_TestRepeat(UntilPass REPEAT UNTIL_PASS:3)
run_TestRepeat(AfterTimeout REPEAT AFTER_TIMEOUT:3)
run_TestRepeat(UntilFail RETURN_VALUE:1 REPEAT UNTIL_FAIL:3)
run_TestRepeat(UntilPass RETURN_VALUE:0 REPEAT UNTIL_PASS: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)
# test --stop-on-failure
function(run_stop_on_failure)

View File

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

View File

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

View File

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

View File

@@ -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()