mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 00:11:07 -06:00
Merge branch 'backport-ctest-repeat-notrun' into ctest-repeat-notrun
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
1
Tests/RunCMake/ctest_test/TestRepeatNotRun-result.txt
Normal file
1
Tests/RunCMake/ctest_test/TestRepeatNotRun-result.txt
Normal file
@@ -0,0 +1 @@
|
||||
(-1|255)
|
||||
1
Tests/RunCMake/ctest_test/TestRepeatNotRun-stderr.txt
Normal file
1
Tests/RunCMake/ctest_test/TestRepeatNotRun-stderr.txt
Normal file
@@ -0,0 +1 @@
|
||||
.*Unable to find executable.*
|
||||
5
Tests/RunCMake/ctest_test/TestRepeatNotRun-stdout.txt
Normal file
5
Tests/RunCMake/ctest_test/TestRepeatNotRun-stdout.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
.*
|
||||
50% tests passed, 1 tests failed out of 2
|
||||
.*
|
||||
The following tests FAILED:
|
||||
.*testNotRun.*Not Run.*
|
||||
10
Tests/RunCMake/ctest_test/TestRepeatNotRun.cmake
Normal file
10
Tests/RunCMake/ctest_test/TestRepeatNotRun.cmake
Normal 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()
|
||||
Reference in New Issue
Block a user