summaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--Source/CTest/cmCTestRunTest.cxx93
-rw-r--r--Source/CTest/cmCTestTestHandler.cxx33
-rw-r--r--Source/CTest/cmCTestTestHandler.h5
-rw-r--r--Source/cmAddTestCommand.h6
-rw-r--r--Source/cmSetTestsPropertiesCommand.h4
5 files changed, 47 insertions, 94 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;
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx
index dadd39c..dd99268 100644
--- a/Source/CTest/cmCTestTestHandler.cxx
+++ b/Source/CTest/cmCTestTestHandler.cxx
@@ -269,30 +269,7 @@ bool cmCTestAddTestCommand
this->SetError("called with incorrect number of arguments");
return false;
}
-
- bool prefixCmdFound = false;
- std::vector<std::string> actualArgs, prefix;
-
- //separate the regular command and the prefix command (bug 8668)
- for(std::vector<std::string>::const_iterator i = args.begin();
- i != args.end(); ++i)
- {
- if(*i == "EXEC_PREFIX_CMD")
- {
- prefixCmdFound = true;
- continue;
- }
- if(prefixCmdFound)
- {
- prefix.push_back(*i);
- }
- else
- {
- actualArgs.push_back(*i);
- }
- }
-
- return this->TestHandler->AddTest(actualArgs, prefix);
+ return this->TestHandler->AddTest(args);
}
//----------------------------------------------------------------------
@@ -2036,6 +2013,10 @@ bool cmCTestTestHandler::SetTestsProperties(
{
rtit->Cost = static_cast<float>(atof(val.c_str()));
}
+ if ( key == "REQUIRED_FILE" )
+ {
+ rtit->RequiredFiles.push_back(val);
+ }
if ( key == "RUN_SERIAL" )
{
rtit->RunSerial = cmSystemTools::IsOn(val.c_str());
@@ -2127,8 +2108,7 @@ bool cmCTestTestHandler::SetTestsProperties(
}
//----------------------------------------------------------------------
-bool cmCTestTestHandler::AddTest(const std::vector<std::string>& args,
- const std::vector<std::string>& prefix)
+bool cmCTestTestHandler::AddTest(const std::vector<std::string>& args)
{
const std::string& testname = args[0];
cmCTestLog(this->CTest, DEBUG, "Add test: " << args[0] << std::endl);
@@ -2183,7 +2163,6 @@ bool cmCTestTestHandler::AddTest(const std::vector<std::string>& args,
cmCTestTestProperties test;
test.Name = testname;
test.Args = args;
- test.PrefixArgs = prefix;
test.Directory = cmSystemTools::GetCurrentWorkingDirectory();
cmCTestLog(this->CTest, DEBUG, "Set test directory: "
<< test.Directory << std::endl);
diff --git a/Source/CTest/cmCTestTestHandler.h b/Source/CTest/cmCTestTestHandler.h
index eedd811..1afa3d3 100644
--- a/Source/CTest/cmCTestTestHandler.h
+++ b/Source/CTest/cmCTestTestHandler.h
@@ -66,8 +66,7 @@ public:
/*
* Add the test to the list of tests to be executed
*/
- bool AddTest(const std::vector<std::string>& args,
- const std::vector<std::string>& prefix);
+ bool AddTest(const std::vector<std::string>& args);
/*
* Set tests properties
@@ -85,7 +84,7 @@ public:
cmStdString Name;
cmStdString Directory;
std::vector<std::string> Args;
- std::vector<std::string> PrefixArgs;
+ std::vector<std::string> RequiredFiles;
std::vector<std::string> Depends;
std::vector<std::pair<cmsys::RegularExpression,
std::string> > ErrorRegularExpressions;
diff --git a/Source/cmAddTestCommand.h b/Source/cmAddTestCommand.h
index a360ac0..79fb481 100644
--- a/Source/cmAddTestCommand.h
+++ b/Source/cmAddTestCommand.h
@@ -56,8 +56,7 @@ public:
virtual const char* GetFullDocumentation()
{
return
- " add_test(testname Exename arg1 arg2 ... \n"
- " [EXEC_PREFIX_CMD wrapperExe args...])\n"
+ " add_test(testname Exename arg1 arg2 ... )\n"
"If the ENABLE_TESTING command has been run, this command adds a "
"test target to the current directory. If ENABLE_TESTING has not "
"been run, this command does nothing. "
@@ -67,9 +66,6 @@ public:
"system (like tclsh). The test will be run with the current working "
"directory set to the CMakeList.txt files corresponding directory "
"in the binary tree.\n"
- "Use EXEC_PREFIX_CMD to wrap an executable built by this project "
- "in another executable such as mpiexec. This will only run the "
- "test if the wrapped executable was built."
"\n"
" add_test(NAME <name> [CONFIGURATIONS [Debug|Release|...]]\n"
" COMMAND <command> [arg1 [arg2 ...]])\n"
diff --git a/Source/cmSetTestsPropertiesCommand.h b/Source/cmSetTestsPropertiesCommand.h
index fb143b4..296236c 100644
--- a/Source/cmSetTestsPropertiesCommand.h
+++ b/Source/cmSetTestsPropertiesCommand.h
@@ -73,7 +73,9 @@ public:
"seconds specified.\n"
"RUN_SERIAL: If set to true, this test will not run in parallel with "
"any other tests. This should be used in conjunction with "
- "the ctest_test PARALLEL_LEVEL option.\n";
+ "the ctest_test PARALLEL_LEVEL option.\n"
+ "REQUIRED_FILE: Set this to a file that must exist in order for the "
+ "test to be run.\n";
}
cmTypeMacro(cmSetTestsPropertiesCommand, cmCommand);