Blame src/DllPlugInTester/CommandLineParser.cpp

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