diff --git a/Modules/GoogleTest.cmake b/Modules/GoogleTest.cmake index eb1e269c16..ee0ac7bddb 100644 --- a/Modules/GoogleTest.cmake +++ b/Modules/GoogleTest.cmake @@ -586,6 +586,14 @@ function(gtest_discover_tests target) endif() set(arg_DISCOVERY_MODE ${CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE}) endif() + if(arg_PROPERTIES) + list(LENGTH arg_PROPERTIES _len_PROPERTIES) + math(EXPR _odd_PROPERTIES "${_len_PROPERTIES} % 2") + if(_odd_PROPERTIES) + list(POP_BACK arg_PROPERTIES _back_PROPERTY) + message(AUTHOR_WARNING "PROPERTIES should be key-value pairs. Ignoring unpaired key '${_back_PROPERTY}'.") + endif() + endif() get_property(test_launcher TARGET ${target} diff --git a/Source/CTest/cmCTestDiscoverTests.cxx b/Source/CTest/cmCTestDiscoverTests.cxx index d872540373..cb1709d326 100644 --- a/Source/CTest/cmCTestDiscoverTests.cxx +++ b/Source/CTest/cmCTestDiscoverTests.cxx @@ -91,6 +91,16 @@ bool cmCTestDiscoverTests(cmTestDiscoveryArgs const& args, std::vector& testList, cmExecutionStatus& status) { + if (args.DiscoveryProperties.size() % 2 != 0) { + status.SetError(" DISCOVERY_PROPERTIES must be key-value pairs."); + return false; + } + + if (args.TestProperties.size() % 2 != 0) { + status.SetError(" TEST_PROPERTIES must be key-value pairs."); + return false; + } + cmsys::RegularExpression re; if (!re.compile(AddAnchors(args.DiscoveryMatch))) { std::string e = "DISCOVERY_MATCH failed to compile regex \"" + diff --git a/Source/cmDiscoverTestsCommand.cxx b/Source/cmDiscoverTestsCommand.cxx index 278a032f49..dc2e75dcdc 100644 --- a/Source/cmDiscoverTestsCommand.cxx +++ b/Source/cmDiscoverTestsCommand.cxx @@ -110,6 +110,16 @@ bool cmDiscoverTestsCommand(std::vector const& args, return false; } + if (arguments.DiscoveryProperties.size() % 2 != 0) { + status.SetError(" DISCOVERY_PROPERTIES must be key-value pairs."); + return false; + } + + if (arguments.TestProperties.size() % 2 != 0) { + status.SetError(" TEST_PROPERTIES must be key-value pairs."); + return false; + } + cmMakefile& mf = status.GetMakefile(); mf.AddTestGenerator(cm::make_unique(std::move(arguments), mf.GetBacktrace())); diff --git a/Tests/RunCMake/discover_tests/RunCMakeTest.cmake b/Tests/RunCMake/discover_tests/RunCMakeTest.cmake index 68c80be103..4042d0acc1 100644 --- a/Tests/RunCMake/discover_tests/RunCMakeTest.cmake +++ b/Tests/RunCMake/discover_tests/RunCMakeTest.cmake @@ -23,6 +23,11 @@ block() ${CMAKE_CTEST_COMMAND} -C Debug -N -R "ExpandLists.") endblock() +block() + run_cmake(bad-discovery-properties-cmake) + run_cmake(bad-test-properties-cmake) +endblock() + function(run_case CASE) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${CASE}-build) run_cmake(${CASE}) @@ -31,6 +36,9 @@ function(run_case CASE) run_cmake_command(${CASE}-test ${CMAKE_CTEST_COMMAND} -C Debug) endfunction() +run_case(bad-discovery-properties-ctest) +run_case(bad-test-properties-ctest) + run_case(bad-command) run_case(bad-regex) run_case(discovery-failure) diff --git a/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake-result.txt b/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake-stderr.txt b/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake-stderr.txt new file mode 100644 index 0000000000..4a0ae0ce0b --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake-stderr.txt @@ -0,0 +1,2 @@ +CMake Error at .* \(discover_tests\): + discover_tests DISCOVERY_PROPERTIES must be key-value pairs. diff --git a/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake.cmake b/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake.cmake new file mode 100644 index 0000000000..dc74e53185 --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-discovery-properties-cmake.cmake @@ -0,0 +1,4 @@ +enable_language(C) +enable_testing() + +include("${CMAKE_SOURCE_DIR}/shared/bad-discovery-properties.cmake") diff --git a/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest-test-result.txt b/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest-test-result.txt new file mode 100644 index 0000000000..45a4fb75db --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest-test-result.txt @@ -0,0 +1 @@ +8 diff --git a/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest-test-stderr.txt b/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest-test-stderr.txt new file mode 100644 index 0000000000..4a0ae0ce0b --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest-test-stderr.txt @@ -0,0 +1,2 @@ +CMake Error at .* \(discover_tests\): + discover_tests DISCOVERY_PROPERTIES must be key-value pairs. diff --git a/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest.cmake b/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest.cmake new file mode 100644 index 0000000000..7526e09d18 --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-discovery-properties-ctest.cmake @@ -0,0 +1,5 @@ +enable_language(C) +enable_testing() + +set_property(DIRECTORY APPEND PROPERTY TEST_INCLUDE_FILES + "${CMAKE_SOURCE_DIR}/shared/bad-discovery-properties.cmake") diff --git a/Tests/RunCMake/discover_tests/bad-test-properties-cmake-result.txt b/Tests/RunCMake/discover_tests/bad-test-properties-cmake-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-test-properties-cmake-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/discover_tests/bad-test-properties-cmake-stderr.txt b/Tests/RunCMake/discover_tests/bad-test-properties-cmake-stderr.txt new file mode 100644 index 0000000000..2ee9482313 --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-test-properties-cmake-stderr.txt @@ -0,0 +1,2 @@ +CMake Error at .* \(discover_tests\): + discover_tests TEST_PROPERTIES must be key-value pairs. diff --git a/Tests/RunCMake/discover_tests/bad-test-properties-cmake.cmake b/Tests/RunCMake/discover_tests/bad-test-properties-cmake.cmake new file mode 100644 index 0000000000..555d3ccfe9 --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-test-properties-cmake.cmake @@ -0,0 +1,4 @@ +enable_language(C) +enable_testing() + +include("${CMAKE_SOURCE_DIR}/shared/bad-test-properties.cmake") diff --git a/Tests/RunCMake/discover_tests/bad-test-properties-ctest-test-result.txt b/Tests/RunCMake/discover_tests/bad-test-properties-ctest-test-result.txt new file mode 100644 index 0000000000..45a4fb75db --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-test-properties-ctest-test-result.txt @@ -0,0 +1 @@ +8 diff --git a/Tests/RunCMake/discover_tests/bad-test-properties-ctest-test-stderr.txt b/Tests/RunCMake/discover_tests/bad-test-properties-ctest-test-stderr.txt new file mode 100644 index 0000000000..2ee9482313 --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-test-properties-ctest-test-stderr.txt @@ -0,0 +1,2 @@ +CMake Error at .* \(discover_tests\): + discover_tests TEST_PROPERTIES must be key-value pairs. diff --git a/Tests/RunCMake/discover_tests/bad-test-properties-ctest.cmake b/Tests/RunCMake/discover_tests/bad-test-properties-ctest.cmake new file mode 100644 index 0000000000..fb535af876 --- /dev/null +++ b/Tests/RunCMake/discover_tests/bad-test-properties-ctest.cmake @@ -0,0 +1,5 @@ +enable_language(C) +enable_testing() + +set_property(DIRECTORY APPEND PROPERTY TEST_INCLUDE_FILES + "${CMAKE_SOURCE_DIR}/shared/bad-test-properties.cmake") diff --git a/Tests/RunCMake/discover_tests/shared/bad-discovery-properties.cmake b/Tests/RunCMake/discover_tests/shared/bad-discovery-properties.cmake new file mode 100644 index 0000000000..875efb6fbb --- /dev/null +++ b/Tests/RunCMake/discover_tests/shared/bad-discovery-properties.cmake @@ -0,0 +1,8 @@ +discover_tests(COMMAND fake_discovery + DISCOVERY_ARGS --list + DISCOVERY_MATCH "^([^,]+),([^,]+)$" + DISCOVERY_PROPERTIES + LABELS UNIT AUTO + TEST_NAME "DT.\\1" + TEST_ARGS --run "\\1" +) diff --git a/Tests/RunCMake/discover_tests/shared/bad-test-properties.cmake b/Tests/RunCMake/discover_tests/shared/bad-test-properties.cmake new file mode 100644 index 0000000000..23bbc2a042 --- /dev/null +++ b/Tests/RunCMake/discover_tests/shared/bad-test-properties.cmake @@ -0,0 +1,8 @@ +discover_tests(COMMAND fake_discovery + DISCOVERY_ARGS --list + DISCOVERY_MATCH "^([^,]+),([^,]+)$" + TEST_NAME "DT.\\1" + TEST_ARGS --run "\\1" + TEST_PROPERTIES + LABELS UNIT AUTO +)