Commit 6a6f1d1e authored by Kevin Puetz's avatar Kevin Puetz Committed by Brad King
Browse files

CTest: exit nonzero after message(SEND_ERROR|FATAL_ERROR)

Fixes: #21004
parent 6cbaa8eb
...@@ -819,14 +819,16 @@ void cmCTestTestHandler::CheckLabelFilter(cmCTestTestProperties& it) ...@@ -819,14 +819,16 @@ void cmCTestTestHandler::CheckLabelFilter(cmCTestTestProperties& it)
this->CheckLabelFilterExclude(it); this->CheckLabelFilterExclude(it);
} }
void cmCTestTestHandler::ComputeTestList() bool cmCTestTestHandler::ComputeTestList()
{ {
this->TestList.clear(); // clear list of test this->TestList.clear(); // clear list of test
this->GetListOfTests(); if (!this->GetListOfTests()) {
return false;
}
if (this->RerunFailed) { if (this->RerunFailed) {
this->ComputeTestListForRerunFailed(); this->ComputeTestListForRerunFailed();
return; return true;
} }
cmCTestTestHandler::ListOfTests::size_type tmsize = this->TestList.size(); cmCTestTestHandler::ListOfTests::size_type tmsize = this->TestList.size();
...@@ -882,6 +884,7 @@ void cmCTestTestHandler::ComputeTestList() ...@@ -882,6 +884,7 @@ void cmCTestTestHandler::ComputeTestList()
this->TestList = finalList; this->TestList = finalList;
this->UpdateMaxTestNameWidth(); this->UpdateMaxTestNameWidth();
return true;
} }
void cmCTestTestHandler::ComputeTestListForRerunFailed() void cmCTestTestHandler::ComputeTestListForRerunFailed()
...@@ -1260,7 +1263,10 @@ bool cmCTestTestHandler::GetValue(const char* tag, std::string& value, ...@@ -1260,7 +1263,10 @@ bool cmCTestTestHandler::GetValue(const char* tag, std::string& value,
bool cmCTestTestHandler::ProcessDirectory(std::vector<std::string>& passed, bool cmCTestTestHandler::ProcessDirectory(std::vector<std::string>& passed,
std::vector<std::string>& failed) std::vector<std::string>& failed)
{ {
this->ComputeTestList(); if (!this->ComputeTestList()) {
return false;
}
this->StartTest = this->CTest->CurrentTime(); this->StartTest = this->CTest->CurrentTime();
this->StartTestTime = std::chrono::system_clock::now(); this->StartTestTime = std::chrono::system_clock::now();
auto elapsed_time_start = std::chrono::steady_clock::now(); auto elapsed_time_start = std::chrono::steady_clock::now();
...@@ -1695,7 +1701,7 @@ bool cmCTestTestHandler::ParseResourceGroupsProperty( ...@@ -1695,7 +1701,7 @@ bool cmCTestTestHandler::ParseResourceGroupsProperty(
return lexer.ParseString(val); return lexer.ParseString(val);
} }
void cmCTestTestHandler::GetListOfTests() bool cmCTestTestHandler::GetListOfTests()
{ {
if (!this->IncludeLabelRegExp.empty()) { if (!this->IncludeLabelRegExp.empty()) {
this->IncludeLabelRegularExpression.compile( this->IncludeLabelRegularExpression.compile(
...@@ -1748,14 +1754,15 @@ void cmCTestTestHandler::GetListOfTests() ...@@ -1748,14 +1754,15 @@ void cmCTestTestHandler::GetListOfTests()
// does the DartTestfile.txt exist ? // does the DartTestfile.txt exist ?
testFilename = "DartTestfile.txt"; testFilename = "DartTestfile.txt";
} else { } else {
return; return true;
} }
if (!mf.ReadListFile(testFilename)) { if (!mf.ReadListFile(testFilename)) {
return; return false;
} }
if (cmSystemTools::GetErrorOccuredFlag()) { if (cmSystemTools::GetErrorOccuredFlag()) {
return; // SEND_ERROR or FATAL_ERROR in CTestTestfile or TEST_INCLUDE_FILES
return false;
} }
const char* specFile = mf.GetDefinition("CTEST_RESOURCE_SPEC_FILE"); const char* specFile = mf.GetDefinition("CTEST_RESOURCE_SPEC_FILE");
if (this->ResourceSpecFile.empty() && specFile) { if (this->ResourceSpecFile.empty() && specFile) {
...@@ -1764,6 +1771,7 @@ void cmCTestTestHandler::GetListOfTests() ...@@ -1764,6 +1771,7 @@ void cmCTestTestHandler::GetListOfTests()
cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT, cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
"Done constructing a list of tests" << std::endl, "Done constructing a list of tests" << std::endl,
this->Quiet); this->Quiet);
return true;
} }
void cmCTestTestHandler::UseIncludeRegExp() void cmCTestTestHandler::UseIncludeRegExp()
......
...@@ -286,10 +286,10 @@ private: ...@@ -286,10 +286,10 @@ private:
/** /**
* Get the list of tests in directory and subdirectories. * Get the list of tests in directory and subdirectories.
*/ */
void GetListOfTests(); bool GetListOfTests();
// compute the lists of tests that will actually run // compute the lists of tests that will actually run
// based on union regex and -I stuff // based on union regex and -I stuff
void ComputeTestList(); bool ComputeTestList();
// compute the lists of tests that will actually run // compute the lists of tests that will actually run
// based on LastTestFailed.log // based on LastTestFailed.log
......
...@@ -704,8 +704,7 @@ bool cmCTest::UpdateCTestConfiguration() ...@@ -704,8 +704,7 @@ bool cmCTest::UpdateCTestConfiguration()
if (!cmSystemTools::FileExists(fileName)) { if (!cmSystemTools::FileExists(fileName)) {
// No need to exit if we are not producing XML // No need to exit if we are not producing XML
if (this->Impl->ProduceXML) { if (this->Impl->ProduceXML) {
cmCTestLog(this, ERROR_MESSAGE, cmCTestLog(this, WARNING, "Cannot find file: " << fileName << std::endl);
"Cannot find file: " << fileName << std::endl);
return false; return false;
} }
} else { } else {
......
...@@ -18,3 +18,12 @@ function(run_CMakeCTestArguments) ...@@ -18,3 +18,12 @@ function(run_CMakeCTestArguments)
run_cmake_command(CMakeCTestArguments-test ${CMAKE_COMMAND} --build . --config Debug --target "${test}") run_cmake_command(CMakeCTestArguments-test ${CMAKE_COMMAND} --build . --config Debug --target "${test}")
endfunction() endfunction()
run_CMakeCTestArguments() run_CMakeCTestArguments()
function(run_TestfileErrors)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TestfileErrors-build)
run_cmake(TestfileErrors)
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(TestfileErrors-build ${CMAKE_COMMAND} --build . --config Debug)
run_cmake_command(TestfileErrors-test ${CMAKE_CTEST_COMMAND} -C Debug)
endfunction()
run_TestfileErrors()
message(SEND_ERROR "SEND_ERROR")
message(FATAL_ERROR "FATAL_ERROR")
# This shouldn't get printed because the script aborts on FATAL_ERROR
message(SEND_ERROR "reaching the unreachable")
CMake Error at [^
]*/Tests/RunCMake/CTest/TestfileErrors-Script.cmake:1 \(message\):
SEND_ERROR
Call Stack \(most recent call first\):
CTestTestfile.cmake:[0-9]+ \(include\)
+
CMake Error at [^
]*/Tests/RunCMake/CTest/TestfileErrors-Script.cmake:2 \(message\):
FATAL_ERROR
Call Stack \(most recent call first\):
CTestTestfile.cmake:[0-9]+ \(include\)
include(CTest)
add_test(NAME "unreachable" COMMAND ${CMAKE_COMMAND} -E true)
set_property(DIRECTORY PROPERTY TEST_INCLUDE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/TestfileErrors-Script.cmake)
^CMake Error at CTestTestfile.cmake:[0-9]+ \(subdirs\): ^CMake Error at CTestTestfile.cmake:[0-9]+ \(subdirs\):
subdirs called with incorrect number of arguments subdirs called with incorrect number of arguments
+ +
No tests were found!!!$ Errors while running CTest$
^Cannot find file: .*/Tests/RunCMake/CTestCommandLine/TestOutputSize/DartConfiguration.tcl
Errors while running CTest Errors while running CTest
...@@ -2,4 +2,4 @@ CMake Error at CTestTestfile.cmake:[0-9]+: ...@@ -2,4 +2,4 @@ CMake Error at CTestTestfile.cmake:[0-9]+:
Parse error\. Function missing ending "\)"\. End of file reached\. Parse error\. Function missing ending "\)"\. End of file reached\.
No tests were found!!! Errors while running CTest
...@@ -2,4 +2,4 @@ CMake Error at CTestTestfile.cmake:[0-9]+: ...@@ -2,4 +2,4 @@ CMake Error at CTestTestfile.cmake:[0-9]+:
Parse error\. Function missing ending "\)"\. End of file reached\. Parse error\. Function missing ending "\)"\. End of file reached\.
No tests were found!!! Errors while running CTest
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment