From e0476cf2197e3427053b1694a98ac22d3de06f5b Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Tue, 7 Sep 2021 12:04:05 -0500 Subject: [PATCH] Hack around CMake < 3.9 reporting skipped tests as failed --- cmake/Tests.cmake | 12 ++++++++++-- tests/test_driver.sh | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/cmake/Tests.cmake b/cmake/Tests.cmake index 98fb7511e..f3e7fb2e4 100644 --- a/cmake/Tests.cmake +++ b/cmake/Tests.cmake @@ -121,6 +121,14 @@ add_custom_target(tests_buildroot_target ${TEST_ROOT_DIR} DEPENDS fish fish_test_helper) +# CMake less than 3.9.0 "fully supports" setting an exit code to denote a skipped test, but then +# it just goes ahead and reports it as failed. Really? +if(${CMAKE_VERSION} VERSION_LESS "3.9.0") + set(CMAKE_SKIPPED_HACK "env" "CMAKE_SKIPPED_HACK=1") +else() + set(CMAKE_SKIPPED_HACK) +endif() + foreach(LTEST ${LOW_LEVEL_TESTS}) add_test( NAME ${LTEST} @@ -137,7 +145,7 @@ foreach(CHECK ${FISH_CHECKS}) get_filename_component(CHECK_NAME ${CHECK} NAME) get_filename_component(CHECK ${CHECK} NAME_WE) add_test(NAME ${CHECK_NAME} - COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/tests/test_driver.sh + COMMAND ${CMAKE_SKIPPED_HACK} sh ${CMAKE_CURRENT_BINARY_DIR}/tests/test_driver.sh ${CMAKE_CURRENT_BINARY_DIR}/tests/test.fish ${CHECK} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tests ) @@ -149,7 +157,7 @@ FILE(GLOB PEXPECTS CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/tests/pexpects/*.py) foreach(PEXPECT ${PEXPECTS}) get_filename_component(PEXPECT ${PEXPECT} NAME) add_test(NAME ${PEXPECT} - COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/tests/test_driver.sh + COMMAND ${CMAKE_SKIPPED_HACK} sh ${CMAKE_CURRENT_BINARY_DIR}/tests/test_driver.sh ${CMAKE_CURRENT_BINARY_DIR}/tests/interactive.fish ${PEXPECT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tests ) diff --git a/tests/test_driver.sh b/tests/test_driver.sh index 310831cc7..9061d5e44 100644 --- a/tests/test_driver.sh +++ b/tests/test_driver.sh @@ -75,5 +75,14 @@ fish_init_cmd="${fish_init_cmd} && source ${TESTS_ROOT}/test_util.fish"; "$fish_script" "$script_args") test_status="$?" +# CMake less than 3.9.0 "fully supports" setting an exit code to denote a skipped test, but then +# it just goes ahead and reports them as failed anyway. Really? +if test -n $CMAKE_SKIPPED_HACK; then + if test $test_status -eq 125; then + echo "Overriding SKIPPED return code from test" 1>&2 + test_status=0 + fi +fi + rm -rf "$homedir" exit "$test_status"