summaryrefslogtreecommitdiffstats
path: root/Source/CTest/cmCTestRunTest.cxx
diff options
context:
space:
mode:
authorZach Mullen <zach.mullen@kitware.com>2009-12-10 20:37:04 (GMT)
committerZach Mullen <zach.mullen@kitware.com>2009-12-10 20:37:04 (GMT)
commit4de7cc3621c723f76938063c10a4f8fc691ad58e (patch)
tree9ff9aa8fe77645b8d3c86f5cb8652adcdadde6b4 /Source/CTest/cmCTestRunTest.cxx
parent48b613392848610d243962086fb289a93cc41f0d (diff)
downloadCMake-4de7cc3621c723f76938063c10a4f8fc691ad58e.zip
CMake-4de7cc3621c723f76938063c10a4f8fc691ad58e.tar.gz
CMake-4de7cc3621c723f76938063c10a4f8fc691ad58e.tar.bz2
Unfortunately, I noticed the comment on bug 8668 too late. This changes my last implementation of the exe wrapper to something which makes much more sense: a REQUIRED_FILES property on tests.
Diffstat (limited to 'Source/CTest/cmCTestRunTest.cxx')
-rw-r--r--Source/CTest/cmCTestRunTest.cxx93
1 files changed, 35 insertions, 58 deletions
diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx
index 83119c7..3bb808a 100644
--- a/Source/CTest/cmCTestRunTest.cxx
+++ b/Source/CTest/cmCTestRunTest.cxx
@@ -26,8 +26,6 @@ cmCTestRunTest::cmCTestRunTest(cmCTestTestHandler* handler)
this->TestResult.Status = 0;
this->TestResult.TestCount = 0;
this->TestResult.Properties = 0;
- this->PrefixCommand = "";
- this->UsePrefixCommand = false;
}
cmCTestRunTest::~cmCTestRunTest()
@@ -305,27 +303,51 @@ bool cmCTestRunTest::StartTest(size_t total)
<< this->TestProperties->Name << std::endl);
this->ComputeArguments();
std::vector<std::string>& args = this->TestProperties->Args;
- std::vector<std::string>& pargs = this->TestProperties->PrefixArgs;
this->TestResult.Properties = this->TestProperties;
this->TestResult.ExecutionTime = 0;
this->TestResult.ReturnValue = -1;
this->TestResult.CompletionStatus = "Failed to start";
this->TestResult.Status = cmCTestTestHandler::BAD_COMMAND;
- this->TestResult.TestCount = this->TestProperties->Index;
+ this->TestResult.TestCount = this->TestProperties->Index;
this->TestResult.Name = this->TestProperties->Name;
this->TestResult.Path = this->TestProperties->Directory.c_str();
- // if we are using a prefix command, make sure THAT executable exists
- if (this->UsePrefixCommand && this->PrefixCommand == "")
+ // Check if all required files exist
+ for(std::vector<std::string>::iterator i =
+ this->TestProperties->RequiredFiles.begin();
+ i != this->TestProperties->RequiredFiles.end(); ++i)
{
- this->ExeNotFound(pargs[0]);
- return false;
- }
+ std::string file = *i;
+ if(!cmSystemTools::FileExists(file.c_str()))
+ {
+ //Required file was not found
+ this->TestProcess = new cmProcess;
+ *this->TestHandler->LogFile << "Unable to find required file: "
+ << file.c_str() << std::endl;
+ cmCTestLog(this->CTest, ERROR_MESSAGE, "Unable to find required file: "
+ << file.c_str() << std::endl);
+ this->TestResult.Output = "Unable to find required file: " + file;
+ this->TestResult.FullCommandLine = "";
+ this->TestResult.CompletionStatus = "Not Run";
+ this->TestResult.Status = cmCTestTestHandler::NOT_RUN;
+ return false;
+ }
+ }
// log and return if we did not find the executable
if (this->ActualCommand == "")
{
- this->ExeNotFound(args[1]);
+ // if the command was not found create a TestResult object
+ // that has that information
+ this->TestProcess = new cmProcess;
+ *this->TestHandler->LogFile << "Unable to find executable: "
+ << args[1].c_str() << std::endl;
+ cmCTestLog(this->CTest, ERROR_MESSAGE, "Unable to find executable: "
+ << args[1].c_str() << std::endl);
+ this->TestResult.Output = "Unable to find executable: " + args[1];
+ this->TestResult.FullCommandLine = "";
+ this->TestResult.CompletionStatus = "Not Run";
+ this->TestResult.Status = cmCTestTestHandler::NOT_RUN;
return false;
}
this->StartTime = this->CTest->CurrentTime();
@@ -334,36 +356,12 @@ bool cmCTestRunTest::StartTest(size_t total)
&this->TestProperties->Environment);
}
-void cmCTestRunTest::ExeNotFound(std::string exe)
-{
- this->TestProcess = new cmProcess;
- *this->TestHandler->LogFile << "Unable to find executable: "
- << exe.c_str() << std::endl;
- cmCTestLog(this->CTest, ERROR_MESSAGE, "Unable to find executable: "
- << exe.c_str() << std::endl);
- this->TestResult.Output = "Unable to find executable: " + exe;
- this->TestResult.FullCommandLine = "";
- this->TestResult.CompletionStatus = "Not Run";
- this->TestResult.Reason = "";
- this->TestResult.Status = cmCTestTestHandler::NOT_RUN;
-}
-
void cmCTestRunTest::ComputeArguments()
{
std::vector<std::string>::const_iterator j =
this->TestProperties->Args.begin();
++j; // skip test name
- this->TestCommand = "";
-
- //If we are using a prefix command, find the exe for it
- if(this->TestProperties->PrefixArgs.size())
- {
- this->UsePrefixCommand = true;
- this->PrefixCommand = this->TestHandler->FindTheExecutable(
- this->TestProperties->PrefixArgs[0].c_str());
- }
-
// find the test executable
if(this->TestHandler->MemCheck)
{
@@ -378,6 +376,8 @@ void cmCTestRunTest::ComputeArguments()
this->TestProperties->Args[1].c_str());
++j; //skip the executable (it will be actualCommand)
}
+ this->TestCommand
+ = cmSystemTools::ConvertToOutputPath(this->ActualCommand.c_str());
//Prepends memcheck args to our command string
this->TestHandler->GenerateTestCommand(this->Arguments);
@@ -387,27 +387,6 @@ void cmCTestRunTest::ComputeArguments()
this->TestCommand += " ";
this->TestCommand += cmSystemTools::EscapeSpaces(j->c_str());
}
- //Add user specified prefix args
- if(this->UsePrefixCommand)
- {
- this->TestCommand +=
- cmSystemTools::ConvertToOutputPath(this->PrefixCommand.c_str());
-
- std::vector<std::string>::iterator i =
- this->TestProperties->PrefixArgs.begin();
- ++i; //skip the exe name
- for(; i != this->TestProperties->PrefixArgs.end(); ++i)
- {
- this->TestCommand += " ";
- this->TestCommand += cmSystemTools::EscapeSpaces(i->c_str());
- this->Arguments.push_back(*i);
- }
- this->Arguments.push_back(this->ActualCommand);
- this->TestCommand += " ";
- }
- //Add regular test args
- this->TestCommand
- += cmSystemTools::ConvertToOutputPath(this->ActualCommand.c_str());
for(;j != this->TestProperties->Args.end(); ++j)
{
@@ -454,9 +433,7 @@ bool cmCTestRunTest::CreateProcess(double testTimeOut,
this->TestProcess->SetId(this->Index);
this->TestProcess->SetWorkingDirectory(
this->TestProperties->Directory.c_str());
- this->TestProcess->SetCommand(this->UsePrefixCommand ?
- this->PrefixCommand.c_str() :
- this->ActualCommand.c_str());
+ this->TestProcess->SetCommand(this->ActualCommand.c_str());
this->TestProcess->SetCommandArguments(this->Arguments);
std::vector<std::string> origEnv;