Browse Source

Merge topic 'ctest-tests-from-file' into release-3.29

ca0a9def2e ctest: Exit with failure when tests-from-file input is missing
60433fc6e8 Tests: Generalize ctest tests-from-file test cases

Acked-by: Kitware Robot <[email protected]>
Merge-request: !9317
Brad King 1 year ago
parent
commit
d68cf1553d

+ 12 - 8
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<std::string> cmCTestTestHandler::ReadTestListFile(
-  const std::string& testListFileName) const
+bool cmCTestTestHandler::ReadTestListFile(
+  std::string const& testListFileName, std::set<std::string>& testNames) const
 {
-  std::set<std::string> testNames;
-
+  testNames.clear();
   cmsys::ifstream ifs(testListFileName.c_str());
   if (ifs) {
     std::string line;
@@ -2043,9 +2046,10 @@ std::set<std::string> 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,

+ 2 - 2
Source/CTest/cmCTestTestHandler.h

@@ -341,8 +341,8 @@ private:
   std::string GetTestStatus(cmCTestTestResult const&);
   void ExpandTestsToRunInformation(size_t numPossibleTests);
   void ExpandTestsToRunInformationForRerunFailed();
-  std::set<std::string> ReadTestListFile(
-    const std::string& testListFileName) const;
+  bool ReadTestListFile(std::string const& testListFileName,
+                        std::set<std::string>& testNames) const;
 
   std::vector<std::string> CustomPreTest;
   std::vector<std::string> CustomPostTest;

+ 6 - 4
Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake

@@ -208,7 +208,7 @@ endfunction()
 run_SkipRegexFoundTest()
 
 
-function(run_TestsFromFileTest arg)
+function(run_TestsFromFileTest case)
   set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TestsFromFile)
   set(RunCMake_TEST_NO_CLEAN 1)
   file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
@@ -219,10 +219,12 @@ add_test(Test1 \"${CMAKE_COMMAND}\" -E echo \"test1\")
 add_test(Test2 \"${CMAKE_COMMAND}\" -E echo \"test2\")
 add_test(Test11 \"${CMAKE_COMMAND}\" -E echo \"test11\")
 ")
-  run_cmake_command(TestsFromFile-${arg} ${CMAKE_CTEST_COMMAND} --${arg} ${RunCMake_SOURCE_DIR}/TestsFromFile-TestList.txt )
+  run_cmake_command(TestsFromFile-${case} ${CMAKE_CTEST_COMMAND} ${ARGN})
 endfunction()
-run_TestsFromFileTest(tests-from-file)
-run_TestsFromFileTest(exclude-from-file)
+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)

+ 1 - 0
Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-result.txt

@@ -0,0 +1 @@
+[^0]

+ 2 - 0
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\.

+ 2 - 0
Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-missing-stdout.txt

@@ -0,0 +1,2 @@
+Test project [^
+]*/Tests/RunCMake/CTestCommandLine/TestsFromFile$

+ 0 - 0
Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-from-file-stdout.txt → Tests/RunCMake/CTestCommandLine/TestsFromFile-exclude-stdout.txt


+ 1 - 0
Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-result.txt

@@ -0,0 +1 @@
+[^0]

+ 2 - 0
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\.

+ 2 - 0
Tests/RunCMake/CTestCommandLine/TestsFromFile-include-missing-stdout.txt

@@ -0,0 +1,2 @@
+Test project [^
+]*/Tests/RunCMake/CTestCommandLine/TestsFromFile$

+ 0 - 0
Tests/RunCMake/CTestCommandLine/TestsFromFile-tests-from-file-stdout.txt → Tests/RunCMake/CTestCommandLine/TestsFromFile-include-stdout.txt


+ 7 - 5
Tests/RunCMake/ctest_test/RunCMakeTest.cmake

@@ -165,18 +165,20 @@ 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)
+function(run_tests_from_file case)
+  set(CASE_CTEST_TEST_ARGS ${ARGN})
   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})
+  run_ctest(TestsFromFile-${case})
 endfunction()
-run_tests_from_file(INCLUDE_FROM_FILE)
-run_tests_from_file(EXCLUDE_FROM_FILE)
+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

+ 1 - 0
Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-result.txt

@@ -0,0 +1 @@
+(-1|255)

+ 2 - 0
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\.

+ 2 - 0
Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-stdout.txt

@@ -0,0 +1,2 @@
+Test project [^
+]*/Tests/RunCMake/ctest_test/TestsFromFile-exclude-missing-build$

+ 0 - 0
Tests/RunCMake/ctest_test/TestsFromFile-EXCLUDE_FROM_FILE-stdout.txt → Tests/RunCMake/ctest_test/TestsFromFile-exclude-stdout.txt


+ 1 - 0
Tests/RunCMake/ctest_test/TestsFromFile-include-missing-result.txt

@@ -0,0 +1 @@
+(-1|255)

+ 2 - 0
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\.

+ 2 - 0
Tests/RunCMake/ctest_test/TestsFromFile-include-missing-stdout.txt

@@ -0,0 +1,2 @@
+Test project [^
+]*/Tests/RunCMake/ctest_test/TestsFromFile-include-missing-build$

+ 0 - 0
Tests/RunCMake/ctest_test/TestsFromFile-INCLUDE_FROM_FILE-stdout.txt → Tests/RunCMake/ctest_test/TestsFromFile-include-stdout.txt