From 701029726f17759a84b963e2f318742a1761670a Mon Sep 17 00:00:00 2001 From: Alex Neundorf Date: Sun, 3 Dec 2023 17:59:10 +0100 Subject: ctest_test: add options INCLUDE_FROM_FILE and EXCLUDE_FROM_FILE These options can be used to specify files which can be used to restrict the set of tests that will be executed. Fixes: #25455 --- Help/command/ctest_test.rst | 12 ++++++++++++ Help/release/dev/ctest-tests-from-file.rst | 4 ++++ Source/CTest/cmCTestTestCommand.cxx | 10 ++++++++++ Source/CTest/cmCTestTestCommand.h | 2 ++ Tests/RunCMake/ctest_test/RunCMakeTest.cmake | 16 ++++++++++++++++ .../TestsFromFile-EXCLUDE_FROM_FILE-stdout.txt | 7 +++++++ .../TestsFromFile-INCLUDE_FROM_FILE-stdout.txt | 5 +++++ Tests/RunCMake/ctest_test/TestsFromFile-TestList.txt | 2 ++ 8 files changed, 58 insertions(+) create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-EXCLUDE_FROM_FILE-stdout.txt create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-INCLUDE_FROM_FILE-stdout.txt create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-TestList.txt diff --git a/Help/command/ctest_test.rst b/Help/command/ctest_test.rst index cf20ade..4d56577 100644 --- a/Help/command/ctest_test.rst +++ b/Help/command/ctest_test.rst @@ -13,6 +13,8 @@ Perform the :ref:`CTest Test Step` as a :ref:`Dashboard Client`. [INCLUDE ] [EXCLUDE_LABEL ] [INCLUDE_LABEL ] + [EXCLUDE_FROM_FILE ] + [INCLUDE_FROM_FILE ] [EXCLUDE_FIXTURE ] [EXCLUDE_FIXTURE_SETUP ] [EXCLUDE_FIXTURE_CLEANUP ] @@ -72,6 +74,16 @@ The options are: Specify a regular expression matching test labels to include. Tests not matching this expression are excluded. +``EXCLUDE_FROM_FILE `` + .. versionadded:: 3.29 + + Do NOT run tests listed with their exact name in the given file. + +``INCLUDE_FROM_FILE `` + .. versionadded:: 3.29 + + Only run the tests listed with their exact name in the given file. + ``EXCLUDE_FIXTURE `` .. versionadded:: 3.7 diff --git a/Help/release/dev/ctest-tests-from-file.rst b/Help/release/dev/ctest-tests-from-file.rst index 470095f..aa49368 100644 --- a/Help/release/dev/ctest-tests-from-file.rst +++ b/Help/release/dev/ctest-tests-from-file.rst @@ -4,3 +4,7 @@ ctest-tests-from-file * :manual:`ctest(1)` gained the :option:`--tests-from-file ` and :option:`--exclude-from-file ` options to run or exclude tests named in a file. + +* The :command:`ctest_test` command gained options + ``INCLUDE_FROM_FILE`` and ``EXCLUDE_FROM_FILE`` to run or exclude + tests named in a file. diff --git a/Source/CTest/cmCTestTestCommand.cxx b/Source/CTest/cmCTestTestCommand.cxx index c717868..ed16354 100644 --- a/Source/CTest/cmCTestTestCommand.cxx +++ b/Source/CTest/cmCTestTestCommand.cxx @@ -26,6 +26,8 @@ void cmCTestTestCommand::BindArguments() this->Bind("INCLUDE"_s, this->Include); this->Bind("EXCLUDE_LABEL"_s, this->ExcludeLabel); this->Bind("INCLUDE_LABEL"_s, this->IncludeLabel); + this->Bind("EXCLUDE_FROM_FILE"_s, this->ExcludeTestsFromFile); + this->Bind("INCLUDE_FROM_FILE"_s, this->IncludeTestsFromFile); this->Bind("EXCLUDE_FIXTURE"_s, this->ExcludeFixture); this->Bind("EXCLUDE_FIXTURE_SETUP"_s, this->ExcludeFixtureSetup); this->Bind("EXCLUDE_FIXTURE_CLEANUP"_s, this->ExcludeFixtureCleanup); @@ -80,6 +82,14 @@ cmCTestGenericHandler* cmCTestTestCommand::InitializeHandler() if (!this->IncludeLabel.empty()) { handler->AddMultiOption("LabelRegularExpression", this->IncludeLabel); } + + if (!this->ExcludeTestsFromFile.empty()) { + handler->SetOption("ExcludeTestListFile", this->ExcludeTestsFromFile); + } + if (!this->IncludeTestsFromFile.empty()) { + handler->SetOption("TestListFile", this->IncludeTestsFromFile); + } + if (!this->ExcludeFixture.empty()) { handler->SetOption("ExcludeFixtureRegularExpression", this->ExcludeFixture); diff --git a/Source/CTest/cmCTestTestCommand.h b/Source/CTest/cmCTestTestCommand.h index 24e74e2..ce054ed 100644 --- a/Source/CTest/cmCTestTestCommand.h +++ b/Source/CTest/cmCTestTestCommand.h @@ -51,6 +51,8 @@ protected: std::string Include; std::string ExcludeLabel; std::string IncludeLabel; + std::string IncludeTestsFromFile; + std::string ExcludeTestsFromFile; std::string ExcludeFixture; std::string ExcludeFixtureSetup; std::string ExcludeFixtureCleanup; diff --git a/Tests/RunCMake/ctest_test/RunCMakeTest.cmake b/Tests/RunCMake/ctest_test/RunCMakeTest.cmake index b1ec9ad..4413a4d 100644 --- a/Tests/RunCMake/ctest_test/RunCMakeTest.cmake +++ b/Tests/RunCMake/ctest_test/RunCMakeTest.cmake @@ -163,6 +163,22 @@ add_test(NAME NotRunTest COMMAND ${CMAKE_COMMAND} -E true) endfunction() run_stop_on_failure() + +# test include/exclude tests from file +function(run_tests_from_file mode) + set(CASE_CTEST_TEST_ARGS ${mode} ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList.txt) + set(CASE_CMAKELISTS_SUFFIX_CODE [[ +add_test(NAME Test1 COMMAND ${CMAKE_COMMAND} -E true) +add_test(NAME Test2 COMMAND ${CMAKE_COMMAND} -E true) +add_test(NAME Test11 COMMAND ${CMAKE_COMMAND} -E true) + ]]) + + run_ctest(TestsFromFile-${mode}) +endfunction() +run_tests_from_file(INCLUDE_FROM_FILE) +run_tests_from_file(EXCLUDE_FROM_FILE) + + # Make sure environment gets logged function(run_environment) set(ENV{BAD_ENVIRONMENT_VARIABLE} "Bad environment variable") diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-EXCLUDE_FROM_FILE-stdout.txt b/Tests/RunCMake/ctest_test/TestsFromFile-EXCLUDE_FROM_FILE-stdout.txt new file mode 100644 index 0000000..29c2b7f --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-EXCLUDE_FROM_FILE-stdout.txt @@ -0,0 +1,7 @@ + +Start 3: Test2 +2/3 Test #3: Test2 ............................ Passed +[0-9.]+ sec + +Start 4: Test11 +3/3 Test #4: Test11 ........................... Passed +[0-9.]+ sec ++ +100% tests passed, 0 tests failed out of 3 ++ diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-INCLUDE_FROM_FILE-stdout.txt b/Tests/RunCMake/ctest_test/TestsFromFile-INCLUDE_FROM_FILE-stdout.txt new file mode 100644 index 0000000..e3ca719 --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-INCLUDE_FROM_FILE-stdout.txt @@ -0,0 +1,5 @@ + +Start 2: Test1 +1/1 Test #2: Test1 ............................ Passed +[0-9.]+ sec ++ +100% tests passed, 0 tests failed out of 1 ++ diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-TestList.txt b/Tests/RunCMake/ctest_test/TestsFromFile-TestList.txt new file mode 100644 index 0000000..91f6504 --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-TestList.txt @@ -0,0 +1,2 @@ +Test1 +# Test11 -- cgit v0.12