|
Packit |
8c9aa0 |
#include "CommandLineParser.h"
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
CommandLineParser::CommandLineParser( int argc,
|
|
Packit |
8c9aa0 |
const char *argv[] )
|
|
Packit |
8c9aa0 |
: m_useCompiler( false )
|
|
Packit |
8c9aa0 |
, m_useXml( false )
|
|
Packit |
8c9aa0 |
, m_briefProgress( false )
|
|
Packit |
8c9aa0 |
, m_noProgress( false )
|
|
Packit |
8c9aa0 |
, m_useText( false )
|
|
Packit |
8c9aa0 |
, m_useCout( false )
|
|
Packit |
8c9aa0 |
, m_waitBeforeExit( false )
|
|
Packit |
8c9aa0 |
, m_currentArgument( 0 )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
for ( int index =1; index < argc; ++index )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
std::string argument( argv[index ] );
|
|
Packit |
8c9aa0 |
m_arguments.push_back( argument );
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
CommandLineParser::~CommandLineParser()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void
|
|
Packit |
8c9aa0 |
CommandLineParser::parse()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
while ( hasNextArgument() )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
getNextOption();
|
|
Packit |
8c9aa0 |
if ( isOption( "c", "compiler" ) )
|
|
Packit |
8c9aa0 |
m_useCompiler = true;
|
|
Packit |
8c9aa0 |
else if ( isOption( "x", "xml" ) )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
m_useXml = true;
|
|
Packit |
8c9aa0 |
m_xmlFileName = getNextOptionalParameter();
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
else if ( isOption( "s", "xsl" ) )
|
|
Packit |
8c9aa0 |
m_xsl = getNextParameter();
|
|
Packit |
8c9aa0 |
else if ( isOption( "e", "encoding" ) )
|
|
Packit |
8c9aa0 |
m_encoding = getNextParameter();
|
|
Packit |
8c9aa0 |
else if ( isOption( "b", "brief-progress" ) )
|
|
Packit |
8c9aa0 |
m_briefProgress = true;
|
|
Packit |
8c9aa0 |
else if ( isOption( "n", "no-progress" ) )
|
|
Packit |
8c9aa0 |
m_noProgress = true;
|
|
Packit |
8c9aa0 |
else if ( isOption( "t", "text" ) )
|
|
Packit |
8c9aa0 |
m_useText = true;
|
|
Packit |
8c9aa0 |
else if ( isOption( "o", "cout" ) )
|
|
Packit |
8c9aa0 |
m_useCout = true;
|
|
Packit |
8c9aa0 |
else if ( isOption( "w", "wait" ) )
|
|
Packit |
8c9aa0 |
m_waitBeforeExit = true;
|
|
Packit |
8c9aa0 |
else if ( !m_option.empty() )
|
|
Packit |
8c9aa0 |
fail( "Unknown option" );
|
|
Packit |
8c9aa0 |
else if ( hasNextArgument() )
|
|
Packit |
8c9aa0 |
readNonOptionCommands();
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void
|
|
Packit |
8c9aa0 |
CommandLineParser::readNonOptionCommands()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
if ( argumentStartsWith( ":" ) )
|
|
Packit |
8c9aa0 |
m_testPath = getNextArgument().substr( 1 );
|
|
Packit |
8c9aa0 |
else
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
CommandLinePlugInInfo plugIn;
|
|
Packit |
8c9aa0 |
int indexParameter = getCurrentArgument().find( '=' );
|
|
Packit |
8c9aa0 |
if ( indexParameter < 0 )
|
|
Packit |
8c9aa0 |
plugIn.m_fileName = getCurrentArgument();
|
|
Packit |
8c9aa0 |
else
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
plugIn.m_fileName = getCurrentArgument().substr( 0, indexParameter );
|
|
Packit |
8c9aa0 |
std::string parameters = getCurrentArgument().substr( indexParameter +1 );
|
|
Packit |
8c9aa0 |
plugIn.m_parameters = CPPUNIT_NS::PlugInParameters( parameters );
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
m_plugIns.push_back( plugIn );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
getNextArgument();
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::hasNextArgument() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_currentArgument < m_arguments.size();
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string
|
|
Packit |
8c9aa0 |
CommandLineParser::getNextArgument()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
if ( hasNextArgument() )
|
|
Packit |
8c9aa0 |
return m_arguments[ m_currentArgument++ ];
|
|
Packit |
8c9aa0 |
return "";
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string
|
|
Packit |
8c9aa0 |
CommandLineParser::getCurrentArgument() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
if ( m_currentArgument < m_arguments.size() )
|
|
Packit |
8c9aa0 |
return m_arguments[ m_currentArgument ];
|
|
Packit |
8c9aa0 |
return "";
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::argumentStartsWith( const std::string &expected ) const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return getCurrentArgument().substr( 0, expected.length() ) == expected;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void
|
|
Packit |
8c9aa0 |
CommandLineParser::getNextOption()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
if ( argumentStartsWith( "-" ) || argumentStartsWith( "--" ) )
|
|
Packit |
8c9aa0 |
m_option = getNextArgument();
|
|
Packit |
8c9aa0 |
else
|
|
Packit |
8c9aa0 |
m_option = "";
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::isOption( const std::string &shortName,
|
|
Packit |
8c9aa0 |
const std::string &longName )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return (m_option == "-" + shortName) ||
|
|
Packit |
8c9aa0 |
(m_option == "--" + longName);
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string
|
|
Packit |
8c9aa0 |
CommandLineParser::getNextParameter()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
if ( !hasNextArgument() )
|
|
Packit |
8c9aa0 |
fail( "missing parameter" );
|
|
Packit |
8c9aa0 |
return getNextArgument();
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string
|
|
Packit |
8c9aa0 |
CommandLineParser::getNextOptionalParameter()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
if ( argumentStartsWith( "-" ) || argumentStartsWith( ":" ) )
|
|
Packit |
8c9aa0 |
return "";
|
|
Packit |
8c9aa0 |
return getNextArgument();
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void
|
|
Packit |
8c9aa0 |
CommandLineParser::fail( std::string message )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
throw CommandLineParserException( "while parsing option " + m_option+
|
|
Packit |
8c9aa0 |
",\n" + message );
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::useCompilerOutputter() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_useCompiler;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::useXmlOutputter() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_useXml;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string
|
|
Packit |
8c9aa0 |
CommandLineParser::getXmlFileName() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_xmlFileName;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string
|
|
Packit |
8c9aa0 |
CommandLineParser::getXmlStyleSheet() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_xsl;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string
|
|
Packit |
8c9aa0 |
CommandLineParser::getEncoding() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_encoding;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::useBriefTestProgress() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_briefProgress;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::noTestProgress() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_noProgress;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::useTextOutputter() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_useText;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::useCoutStream() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_useCout;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool
|
|
Packit |
8c9aa0 |
CommandLineParser::waitBeforeExit() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_waitBeforeExit;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
int
|
|
Packit |
8c9aa0 |
CommandLineParser::getPlugInCount() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_plugIns.size();
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
CommandLinePlugInInfo
|
|
Packit |
8c9aa0 |
CommandLineParser::getPlugInAt( int index ) const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_plugIns[ index ];
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string
|
|
Packit |
8c9aa0 |
CommandLineParser::getTestPath() const
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
return m_testPath;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|