From 3a0d164bb2fa03966cdd7a17c0ce63b4d54f05b7 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Fri, 21 Sep 2012 17:37:08 +0200 Subject: [PATCH] allow to mark a test as "Not Run" with a specific return code (#8466) --- Help/manual/cmake-properties.7.rst | 1 + Help/prop_test/SKIP_RETURN_CODE.rst | 9 ++++++++ Source/CTest/cmCTestRunTest.cxx | 8 ++++++- Source/CTest/cmCTestTestHandler.cxx | 9 ++++++++ Source/CTest/cmCTestTestHandler.h | 2 ++ Tests/CMakeLists.txt | 12 ++++++++++ Tests/CTestTestSkipReturnCode/CMakeLists.txt | 8 +++++++ .../CTestTestSkipReturnCode/CTestConfig.cmake | 7 ++++++ Tests/CTestTestSkipReturnCode/test.cmake.in | 22 +++++++++++++++++++ 9 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 Help/prop_test/SKIP_RETURN_CODE.rst create mode 100644 Tests/CTestTestSkipReturnCode/CMakeLists.txt create mode 100644 Tests/CTestTestSkipReturnCode/CTestConfig.cmake create mode 100644 Tests/CTestTestSkipReturnCode/test.cmake.in diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index d569e311a..c0ec0fe3c 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/Help/manual/cmake-properties.7.rst @@ -247,6 +247,7 @@ Properties on Tests /prop_test/REQUIRED_FILES /prop_test/RESOURCE_LOCK /prop_test/RUN_SERIAL + /prop_test/SKIP_RETURN_CODE /prop_test/TIMEOUT /prop_test/WILL_FAIL /prop_test/WORKING_DIRECTORY diff --git a/Help/prop_test/SKIP_RETURN_CODE.rst b/Help/prop_test/SKIP_RETURN_CODE.rst new file mode 100644 index 000000000..c61273c56 --- /dev/null +++ b/Help/prop_test/SKIP_RETURN_CODE.rst @@ -0,0 +1,9 @@ +SKIP_RETURN_CODE +---------------- + +Return code to mark a test as skipped. + +Sometimes only a test itself can determine if all requirements for the +test are met. If such a situation should not be considered a hard failure +a return code of the process can be specified that will mark the test as +"Not Run" if it is encountered. diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx index 0e2fa41b9..cdf90b9af 100644 --- a/Source/CTest/cmCTestRunTest.cxx +++ b/Source/CTest/cmCTestRunTest.cxx @@ -206,7 +206,13 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) bool success = !forceFail && (retVal == 0 || this->TestProperties->RequiredRegularExpressions.size()); - if((success && !this->TestProperties->WillFail) + if(this->TestProperties->SkipReturnCode >= 0 + && this->TestProperties->SkipReturnCode == retVal) + { + this->TestResult.Status = cmCTestTestHandler::NOT_RUN; + cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Skipped "); + } + else if((success && !this->TestProperties->WillFail) || (!success && this->TestProperties->WillFail)) { this->TestResult.Status = cmCTestTestHandler::COMPLETED; diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index 26f801489..3a04b332d 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -2229,6 +2229,14 @@ bool cmCTestTestHandler::SetTestsProperties( rtit->Processors = 1; } } + if ( key == "SKIP_RETURN_CODE" ) + { + rtit->SkipReturnCode = atoi(val.c_str()); + if(rtit->SkipReturnCode < 0 || rtit->SkipReturnCode > 255) + { + rtit->SkipReturnCode = -1; + } + } if ( key == "DEPENDS" ) { std::vector lval; @@ -2364,6 +2372,7 @@ bool cmCTestTestHandler::AddTest(const std::vector& args) test.ExplicitTimeout = false; test.Cost = 0; test.Processors = 1; + test.SkipReturnCode = -1; test.PreviousRuns = 0; if (this->UseIncludeRegExpFlag && !this->IncludeTestsRegularExpression.find(testname.c_str())) diff --git a/Source/CTest/cmCTestTestHandler.h b/Source/CTest/cmCTestTestHandler.h index 6dda30028..63f9c9368 100644 --- a/Source/CTest/cmCTestTestHandler.h +++ b/Source/CTest/cmCTestTestHandler.h @@ -109,6 +109,8 @@ public: int Index; //Requested number of process slots int Processors; + // return code of test which will mark test as "not run" + int SkipReturnCode; std::vector Environment; std::vector Labels; std::set LockedResources; diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 7969078de..a79111af5 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -2230,6 +2230,18 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --output-log "${CMake_BINARY_DIR}/Tests/CTestTestParallel/testOutput.log" ) + configure_file( + "${CMake_SOURCE_DIR}/Tests/CTestTestSkipReturnCode/test.cmake.in" + "${CMake_BINARY_DIR}/Tests/CTestTestSkipReturnCode/test.cmake" + @ONLY ESCAPE_QUOTES) + add_test(CTestTestSkipReturnCode ${CMAKE_CTEST_COMMAND} + -S "${CMake_BINARY_DIR}/Tests/CTestTestSkipReturnCode/test.cmake" -V + --output-log "${CMake_BINARY_DIR}/Tests/CTestTestSkipReturnCode/testOutput.log" + -C \${CTEST_CONFIGURATION_TYPE} + ) + set_tests_properties(CTestTestSkipReturnCode PROPERTIES + PASS_REGULAR_EXPRESSION "CMakeV1 \\.* +Passed.*CMakeV2 \\.+\\*+Skipped") + ADD_TEST_MACRO(CTestTestSerialInDepends ${CMAKE_CTEST_COMMAND} -j 4 --output-on-failure -C "\${CTestTest_CONFIG}") diff --git a/Tests/CTestTestSkipReturnCode/CMakeLists.txt b/Tests/CTestTestSkipReturnCode/CMakeLists.txt new file mode 100644 index 000000000..26c4178fd --- /dev/null +++ b/Tests/CTestTestSkipReturnCode/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 2.8.12) +project(CTestTestSkipReturnCode) +include(CTest) + +add_test (NAME CMakeV1 COMMAND ${CMAKE_COMMAND} "--version") +add_test (NAME CMakeV2 COMMAND ${CMAKE_COMMAND} "--version") + +set_tests_properties(CMakeV2 PROPERTIES SKIP_RETURN_CODE 0) diff --git a/Tests/CTestTestSkipReturnCode/CTestConfig.cmake b/Tests/CTestTestSkipReturnCode/CTestConfig.cmake new file mode 100644 index 000000000..ad8e00e84 --- /dev/null +++ b/Tests/CTestTestSkipReturnCode/CTestConfig.cmake @@ -0,0 +1,7 @@ +set (CTEST_PROJECT_NAME "CTestTestSkipReturnCode") +set (CTEST_NIGHTLY_START_TIME "21:00:00 EDT") +set (CTEST_DART_SERVER_VERSION "2") +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=PublicDashboard") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/Tests/CTestTestSkipReturnCode/test.cmake.in b/Tests/CTestTestSkipReturnCode/test.cmake.in new file mode 100644 index 000000000..ebee01b1e --- /dev/null +++ b/Tests/CTestTestSkipReturnCode/test.cmake.in @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 2.4) + +# Settings: +set(CTEST_DASHBOARD_ROOT "@CMake_BINARY_DIR@/Tests/CTestTest") +set(CTEST_SITE "@SITE@") +set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-SkipReturnCode") + +set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestSkipReturnCode") +set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestSkipReturnCode") +set(CTEST_CVS_COMMAND "@CVSCOMMAND@") +set(CTEST_CMAKE_GENERATOR "@CMAKE_TEST_GENERATOR@") +set(CTEST_CMAKE_GENERATOR_TOOLSET "@CMAKE_TEST_GENERATOR_TOOLSET@") +set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_CONFIG_TYPE}") +set(CTEST_COVERAGE_COMMAND "@COVERAGE_COMMAND@") +set(CTEST_NOTES_FILES "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}") + +#CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +CTEST_START(Experimental) +CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res) +CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)