From ca0a9def2e95ed92ce866faa3c70015b9ab6123d Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 6 Mar 2024 13:22:01 -0500 Subject: ctest: Exit with failure when tests-from-file input is missing If the options added by * commit 022f20f663 (ctest: add command line option to run the tests listed in a given file, 2023-11-29, v3.29.0-rc1~66^2~2) * commit dbacc1d5a8 (ctest: add command line option to exclude tests listed in a given file, 2023-11-30, v3.29.0-rc1~66^2~1) * commit 701029726f (ctest_test: add options INCLUDE_FROM_FILE and EXCLUDE_FROM_FILE, 2023-12-03, v3.29.0-rc1~66^2) are given a missing file, fail instead of ignoring it. Fixes: #25740 --- Source/CTest/cmCTestTestHandler.cxx | 20 ++++++++++++-------- Source/CTest/cmCTestTestHandler.h | 4 ++-- Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake | 2 ++ .../TestsFromFile-exclude-missing-result.txt | 1 + .../TestsFromFile-exclude-missing-stderr.txt | 2 ++ .../TestsFromFile-exclude-missing-stdout.txt | 2 ++ .../TestsFromFile-include-missing-result.txt | 1 + .../TestsFromFile-include-missing-stderr.txt | 2 ++ .../TestsFromFile-include-missing-stdout.txt | 2 ++ Tests/RunCMake/ctest_test/RunCMakeTest.cmake | 2 ++ .../TestsFromFile-exclude-missing-result.txt | 1 + .../TestsFromFile-exclude-missing-stderr.txt | 2 ++ .../TestsFromFile-exclude-missing-stdout.txt | 2 ++ .../TestsFromFile-include-missing-result.txt | 1 + .../TestsFromFile-include-missing-stderr.txt | 2 ++ .../TestsFromFile-include-missing-stdout.txt | 2 ++ 16 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-result.txt create mode 100644 Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stderr.txt create mode 100644 Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stdout.txt create mode 100644 Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-result.txt create mode 100644 Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stderr.txt create mode 100644 Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stdout.txt create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-result.txt create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stderr.txt create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stdout.txt create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-include-missing-result.txt create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stderr.txt create mode 100644 Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stdout.txt diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index dc16f66..ebb5073 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -1845,11 +1845,15 @@ bool cmCTestTestHandler::GetListOfTests() } if (!this->TestListFile.empty()) { - this->TestsToRunByName = this->ReadTestListFile(this->TestListFile); + if (!this->ReadTestListFile(this->TestListFile, this->TestsToRunByName)) { + return false; + } } if (!this->ExcludeTestListFile.empty()) { - this->TestsToExcludeByName = - this->ReadTestListFile(this->ExcludeTestListFile); + if (!this->ReadTestListFile(this->ExcludeTestListFile, + this->TestsToExcludeByName)) { + return false; + } } cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT, @@ -2020,11 +2024,10 @@ void cmCTestTestHandler::ExpandTestsToRunInformationForRerunFailed() } } -std::set cmCTestTestHandler::ReadTestListFile( - const std::string& testListFileName) const +bool cmCTestTestHandler::ReadTestListFile( + std::string const& testListFileName, std::set& testNames) const { - std::set testNames; - + testNames.clear(); cmsys::ifstream ifs(testListFileName.c_str()); if (ifs) { std::string line; @@ -2043,9 +2046,10 @@ std::set cmCTestTestHandler::ReadTestListFile( "Problem reading test list file: " << testListFileName << " while generating list of tests to run." << std::endl); + return false; } - return testNames; + return true; } void cmCTestTestHandler::RecordCustomTestMeasurements(cmXMLWriter& xml, diff --git a/Source/CTest/cmCTestTestHandler.h b/Source/CTest/cmCTestTestHandler.h index 84e6098..e9c964b 100644 --- a/Source/CTest/cmCTestTestHandler.h +++ b/Source/CTest/cmCTestTestHandler.h @@ -341,8 +341,8 @@ private: std::string GetTestStatus(cmCTestTestResult const&); void ExpandTestsToRunInformation(size_t numPossibleTests); void ExpandTestsToRunInformationForRerunFailed(); - std::set ReadTestListFile( - const std::string& testListFileName) const; + bool ReadTestListFile(std::string const& testListFileName, + std::set& testNames) const; std::vector CustomPreTest; std::vector CustomPostTest; diff --git a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake index e4a92ad..715a5fa 100644 --- a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake @@ -223,6 +223,8 @@ add_test(Test11 \"${CMAKE_COMMAND}\" -E echo \"test11\") endfunction() run_TestsFromFileTest(include --tests-from-file ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList.txt) run_TestsFromFileTest(exclude --exclude-from-file ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList.txt) +run_TestsFromFileTest(include-missing --tests-from-file ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList-missing.txt) +run_TestsFromFileTest(exclude-missing --exclude-from-file ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList-missing.txt) function(run_SerialFailed) diff --git a/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-result.txt b/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-result.txt new file mode 100644 index 0000000..d197c91 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-result.txt @@ -0,0 +1 @@ +[^0] diff --git a/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stderr.txt b/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stderr.txt new file mode 100644 index 0000000..1d22abc --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stderr.txt @@ -0,0 +1,2 @@ +Problem reading test list file: [^ +]*/Tests/RunCMake/CTestCommandLine/TestsFromFile-TestList-missing\.txt while generating list of tests to run\. diff --git a/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stdout.txt b/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stdout.txt new file mode 100644 index 0000000..1e4e805 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stdout.txt @@ -0,0 +1,2 @@ +Test project [^ +]*/Tests/RunCMake/CTestCommandLine/TestsFromFile$ diff --git a/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-result.txt b/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-result.txt new file mode 100644 index 0000000..d197c91 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-result.txt @@ -0,0 +1 @@ +[^0] diff --git a/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stderr.txt b/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stderr.txt new file mode 100644 index 0000000..1d22abc --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stderr.txt @@ -0,0 +1,2 @@ +Problem reading test list file: [^ +]*/Tests/RunCMake/CTestCommandLine/TestsFromFile-TestList-missing\.txt while generating list of tests to run\. diff --git a/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stdout.txt b/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stdout.txt new file mode 100644 index 0000000..1e4e805 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stdout.txt @@ -0,0 +1,2 @@ +Test project [^ +]*/Tests/RunCMake/CTestCommandLine/TestsFromFile$ diff --git a/Tests/RunCMake/ctest_test/RunCMakeTest.cmake b/Tests/RunCMake/ctest_test/RunCMakeTest.cmake index d4250c4..e2c41a0 100644 --- a/Tests/RunCMake/ctest_test/RunCMakeTest.cmake +++ b/Tests/RunCMake/ctest_test/RunCMakeTest.cmake @@ -177,6 +177,8 @@ add_test(NAME Test11 COMMAND ${CMAKE_COMMAND} -E true) endfunction() run_tests_from_file(include INCLUDE_FROM_FILE ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList.txt) run_tests_from_file(exclude EXCLUDE_FROM_FILE ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList.txt) +run_tests_from_file(include-missing INCLUDE_FROM_FILE ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList-missing.txt) +run_tests_from_file(exclude-missing EXCLUDE_FROM_FILE ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList-missing.txt) # Make sure environment gets logged diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-result.txt b/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-result.txt new file mode 100644 index 0000000..b57e2de --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-result.txt @@ -0,0 +1 @@ +(-1|255) diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stderr.txt b/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stderr.txt new file mode 100644 index 0000000..a5b3e46 --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stderr.txt @@ -0,0 +1,2 @@ +Problem reading test list file: [^ +]*/Tests/RunCMake/ctest_test/TestsFromFile-TestList-missing\.txt while generating list of tests to run\. diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stdout.txt b/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stdout.txt new file mode 100644 index 0000000..ac5a727 --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stdout.txt @@ -0,0 +1,2 @@ +Test project [^ +]*/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-build$ diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-result.txt b/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-result.txt new file mode 100644 index 0000000..b57e2de --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-result.txt @@ -0,0 +1 @@ +(-1|255) diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stderr.txt b/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stderr.txt new file mode 100644 index 0000000..a5b3e46 --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stderr.txt @@ -0,0 +1,2 @@ +Problem reading test list file: [^ +]*/Tests/RunCMake/ctest_test/TestsFromFile-TestList-missing\.txt while generating list of tests to run\. diff --git a/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stdout.txt b/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stdout.txt new file mode 100644 index 0000000..4a9447c --- /dev/null +++ b/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stdout.txt @@ -0,0 +1,2 @@ +Test project [^ +]*/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-build$ -- cgit v0.12