From 887532f0f097fc90f481174ba7cfa08bde9d9195 Mon Sep 17 00:00:00 2001 From: Nils Gladitz Date: Fri, 6 Jun 2014 10:28:18 +0200 Subject: [PATCH] CTest: Fix combined inclusive/exclusive label regular expressions --- Source/CTest/cmCTestTestHandler.cxx | 4 +- Tests/CMakeLists.txt | 11 ++++++ .../CTestTestfile.cmake.in | 8 ++++ Tests/CTestTestLabelRegExp/test.cmake.in | 37 +++++++++++++++++++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 Tests/CTestTestLabelRegExp/CTestTestfile.cmake.in create mode 100644 Tests/CTestTestLabelRegExp/test.cmake.in diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index 1d1dde4ad..f21d1661d 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -509,7 +509,7 @@ int cmCTestTestHandler::ProcessHandler() if ( val ) { this->UseExcludeLabelRegExpFlag = true; - this->ExcludeLabelRegularExpression = val; + this->ExcludeLabelRegExp = val; } val = this->GetOption("IncludeRegularExpression"); if ( val ) @@ -1558,7 +1558,7 @@ void cmCTestTestHandler::GetListOfTests() this->IncludeLabelRegularExpression. compile(this->IncludeLabelRegExp.c_str()); } - if ( !this->IncludeLabelRegExp.empty() ) + if ( !this->ExcludeLabelRegExp.empty() ) { this->ExcludeLabelRegularExpression. compile(this->ExcludeLabelRegExp.c_str()); diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 05442a1c8..cf24798cf 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -2342,6 +2342,17 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release set_tests_properties(CTestTestPrintLabels PROPERTIES PASS_REGULAR_EXPRESSION "All Labels:.* Label1.* Label2") + configure_file( + "${CMake_SOURCE_DIR}/Tests/CTestTestLabelRegExp/test.cmake.in" + "${CMake_BINARY_DIR}/Tests/CTestTestLabelRegExp/test.cmake" + @ONLY ESCAPE_QUOTES) + add_test(NAME CTestTestLabelRegExp + COMMAND ${CMAKE_CMAKE_COMMAND} + -DSOURCE_DIR=${CMAKE_SOURCE_DIR}/Tests/CTestTestLabelRegExp + -P ${CMAKE_BINARY_DIR}/Tests/CTestTestLabelRegExp/test.cmake + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Tests/CTestTestLabelRegExp + ) + configure_file( "${CMake_SOURCE_DIR}/Tests/CTestTestResourceLock/test.cmake.in" "${CMake_BINARY_DIR}/Tests/CTestTestResourceLock/test.cmake" diff --git a/Tests/CTestTestLabelRegExp/CTestTestfile.cmake.in b/Tests/CTestTestLabelRegExp/CTestTestfile.cmake.in new file mode 100644 index 000000000..657f38286 --- /dev/null +++ b/Tests/CTestTestLabelRegExp/CTestTestfile.cmake.in @@ -0,0 +1,8 @@ +add_test(test1 ${CMAKE_COMMAND} -E echo test1) +set_tests_properties(test1 PROPERTIES LABELS "foo") + +add_test(test2 ${CMAKE_COMMAND} -E echo test2) +set_tests_properties(test2 PROPERTIES LABELS "bar") + +add_test(test3 ${CMAKE_COMMAND} -E echo test3) +set_tests_properties(test3 PROPERTIES LABELS "foo;bar") diff --git a/Tests/CTestTestLabelRegExp/test.cmake.in b/Tests/CTestTestLabelRegExp/test.cmake.in new file mode 100644 index 000000000..5c0c9d7ff --- /dev/null +++ b/Tests/CTestTestLabelRegExp/test.cmake.in @@ -0,0 +1,37 @@ +configure_file(${SOURCE_DIR}/CTestTestfile.cmake.in CTestTestfile.cmake) + +function(get_test_list TEST_LIST) + set(QUERY_COMMAND ${CMAKE_CTEST_COMMAND} -N ${ARGN}) + + execute_process(COMMAND ${QUERY_COMMAND} + RESULT_VARIABLE RESULT + OUTPUT_VARIABLE OUTPUT + ERROR_VARIABLE ERROR) + + if(NOT ${RESULT} STREQUAL "0") + message(FATAL_ERROR "command [${QUERY_COMMAND}] failed: RESULT[${RESULT}] OUTPUT[${OUTPUT}] ERROR[${ERROR}]") + endif() + + set(${TEST_LIST} "${OUTPUT}" PARENT_SCOPE) +endfunction() + +function(expect_test_list EXPECTED_OUTPUT) + get_test_list(TEST_LIST ${ARGN}) + + if(NOT "${TEST_LIST}" MATCHES "${EXPECTED_OUTPUT}") + message(FATAL_ERROR "actual output [${TEST_LIST}] does not match expected output [${EXPECTED_OUTPUT}] for given arguments [${ARGN}]") + endif() +endfunction() + +expect_test_list("test1.*test3.*Total Tests: 2" --label-regex foo) +expect_test_list("test2.*test3.*Total Tests: 2" --label-regex bar) +expect_test_list("test1.*test2.*test3.*Total Tests: 3" --label-regex foo|bar) +expect_test_list("Total Tests: 0" --label-regex baz) + +expect_test_list("test2.*Total Tests: 1" --label-exclude foo) +expect_test_list("test1.*Total Tests: 1" --label-exclude bar) +expect_test_list("Total Tests: 0" --label-exclude foo|bar) +expect_test_list("test1.*test2.*test3.*Total Tests: 3" --label-exclude baz) + +expect_test_list("test1.*Total Tests: 1" --label-regex foo --label-exclude bar) +expect_test_list("test2.*Total Tests: 1" --label-regex bar --label-exclude foo)