Blame src/DllPlugInTester/CommandLineParser.cpp

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