ENH: Refactor storage of test command lines
We used to separate the command executable from its argument vector. It is simpler to just store the whole command line in one vector.
This commit is contained in:
parent
66d69f864a
commit
606e6ff9cd
@ -34,14 +34,12 @@ bool cmAddTestCommand
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// store the arguments for the final pass
|
// Collect the command with arguments.
|
||||||
// also expand any CMake variables
|
std::vector<std::string> command;
|
||||||
|
for(std::vector<std::string>::const_iterator it = args.begin() + 1;
|
||||||
std::vector<cmStdString> arguments;
|
it != args.end(); ++it)
|
||||||
std::vector<std::string>::const_iterator it;
|
|
||||||
for ( it = args.begin() + 2; it != args.end(); ++ it )
|
|
||||||
{
|
{
|
||||||
arguments.push_back(*it);
|
command.push_back(*it);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the test but add a generator only the first time it is
|
// Create the test but add a generator only the first time it is
|
||||||
@ -52,8 +50,7 @@ bool cmAddTestCommand
|
|||||||
test = this->Makefile->CreateTest(args[0].c_str());
|
test = this->Makefile->CreateTest(args[0].c_str());
|
||||||
this->Makefile->AddTestGenerator(new cmTestGenerator(test));
|
this->Makefile->AddTestGenerator(new cmTestGenerator(test));
|
||||||
}
|
}
|
||||||
test->SetCommand(args[1].c_str());
|
test->SetCommand(command);
|
||||||
test->SetArguments(arguments);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -38,19 +38,9 @@ void cmTest::SetName(const char* name)
|
|||||||
this->Name = name;
|
this->Name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmTest::SetCommand(const char* command)
|
void cmTest::SetCommand(std::vector<std::string> const& command)
|
||||||
{
|
{
|
||||||
if ( !command )
|
|
||||||
{
|
|
||||||
command = "";
|
|
||||||
}
|
|
||||||
this->Command = command;
|
this->Command = command;
|
||||||
cmSystemTools::ConvertToUnixSlashes(this->Command);
|
|
||||||
}
|
|
||||||
|
|
||||||
void cmTest::SetArguments(const std::vector<cmStdString>& args)
|
|
||||||
{
|
|
||||||
this->Args = args;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *cmTest::GetProperty(const char* prop) const
|
const char *cmTest::GetProperty(const char* prop) const
|
||||||
|
@ -37,12 +37,11 @@ public:
|
|||||||
///! Set the test name
|
///! Set the test name
|
||||||
void SetName(const char* name);
|
void SetName(const char* name);
|
||||||
const char* GetName() const { return this->Name.c_str(); }
|
const char* GetName() const { return this->Name.c_str(); }
|
||||||
void SetCommand(const char* command);
|
|
||||||
const char* GetCommand() const { return this->Command.c_str(); }
|
void SetCommand(std::vector<std::string> const& command);
|
||||||
void SetArguments(const std::vector<cmStdString>& args);
|
std::vector<std::string> const& GetCommand() const
|
||||||
const std::vector<cmStdString>& GetArguments() const
|
|
||||||
{
|
{
|
||||||
return this->Args;
|
return this->Command;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,8 +66,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
cmPropertyMap Properties;
|
cmPropertyMap Properties;
|
||||||
cmStdString Name;
|
cmStdString Name;
|
||||||
cmStdString Command;
|
std::vector<std::string> Command;
|
||||||
std::vector<cmStdString> Args;
|
|
||||||
|
|
||||||
// The cmMakefile instance that owns this target. This should
|
// The cmMakefile instance that owns this target. This should
|
||||||
// always be set.
|
// always be set.
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
=========================================================================*/
|
=========================================================================*/
|
||||||
#include "cmTestGenerator.h"
|
#include "cmTestGenerator.h"
|
||||||
|
|
||||||
|
#include "cmSystemTools.h"
|
||||||
#include "cmTest.h"
|
#include "cmTest.h"
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
@ -96,14 +97,17 @@ void cmTestGenerator::GenerateScriptActions(std::ostream& fout,
|
|||||||
{
|
{
|
||||||
this->TestGenerated = true;
|
this->TestGenerated = true;
|
||||||
|
|
||||||
cmTest* test = this->Test;
|
// Get the test command line to be executed.
|
||||||
|
std::vector<std::string> const& command = this->Test->GetCommand();
|
||||||
|
|
||||||
|
std::string exe = command[0];
|
||||||
|
cmSystemTools::ConvertToUnixSlashes(exe);
|
||||||
fout << indent;
|
fout << indent;
|
||||||
fout << "ADD_TEST(";
|
fout << "ADD_TEST(";
|
||||||
fout << test->GetName() << " \"" << test->GetCommand() << "\"";
|
fout << this->Test->GetName() << " \"" << exe << "\"";
|
||||||
|
|
||||||
std::vector<cmStdString>::const_iterator argit;
|
for(std::vector<std::string>::const_iterator argit = command.begin()+1;
|
||||||
for (argit = test->GetArguments().begin();
|
argit != command.end(); ++argit)
|
||||||
argit != test->GetArguments().end(); ++argit)
|
|
||||||
{
|
{
|
||||||
// Just double-quote all arguments so they are re-parsed
|
// Just double-quote all arguments so they are re-parsed
|
||||||
// correctly by the test system.
|
// correctly by the test system.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user