⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsertest.cpp

📁 robocup rcssbase-11.1.0(1).zip
💻 CPP
字号:
// -*-c++-*-/***************************************************************************                  parsertest.cpp  - A rcss::conf::Parser testing program                             -------------------    begin                : 10-June-2003    copyright            : (C) 2003 by The RoboCup Soccer Server                            Maintenance Group.    email                : sserver-admin@lists.sourceforge.net ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU GPL as published by the Free Software   * *   Foundation; either version 2 of the License, or (at your option) any  * *   later version.                                                        * *                                                                         * ***************************************************************************/#include <cppunit/extensions/HelperMacros.h>class TestParser : public CPPUNIT_NS::TestFixture{    CPPUNIT_TEST_SUITE(TestParser);	CPPUNIT_TEST(NullArgs); 	CPPUNIT_TEST(NullUnnamedStrm); 	CPPUNIT_TEST(NullNamedStrm); 	CPPUNIT_TEST(ValidArg); 	CPPUNIT_TEST(ValidSubArg); 	CPPUNIT_TEST(ValidArg2); 	CPPUNIT_TEST(ValidArg3); 	CPPUNIT_TEST(ValidArgMinus); 	CPPUNIT_TEST(ValidArgMinusMinus); 	CPPUNIT_TEST(InvalidArg); 	CPPUNIT_TEST(WrongNamespaceArg); 	CPPUNIT_TEST(ValidWSArg); 	CPPUNIT_TEST(ValidStrm); 	CPPUNIT_TEST(InvalidStrm); 	CPPUNIT_TEST(WrongnamespaceStrm); 	CPPUNIT_TEST(ValidWSStrm); 	CPPUNIT_TEST(ValidCommentStrm); 	CPPUNIT_TEST(ConfFile);	CPPUNIT_TEST(Help); 	CPPUNIT_TEST(TestHelp); 	CPPUNIT_TEST(TestSubHelp); 	CPPUNIT_TEST(TestSetPath); 	CPPUNIT_TEST(TestAddPath); 	CPPUNIT_TEST(TestInclude);	CPPUNIT_TEST(TestLoad);    CPPUNIT_TEST_SUITE_END();protected:    //--------------------------------------------------------------------------    /// XXX: Document what the test is for here.    //--------------------------------------------------------------------------	void NullArgs(); 	void NullUnnamedStrm(); 	void NullNamedStrm(); 	void ValidArg(); 	void ValidSubArg(); 	void ValidArg2(); 	void ValidArg3(); 	void ValidArgMinus(); 	void ValidArgMinusMinus(); 	void InvalidArg(); 	void WrongNamespaceArg(); 	void ValidWSArg(); 	void ValidStrm(); 	void InvalidStrm(); 	void WrongnamespaceStrm(); 	void ValidWSStrm(); 	void ValidCommentStrm(); 	void ConfFile();	void Help(); 	void TestHelp(); 	void TestSubHelp(); 	void TestSetPath(); 	void TestAddPath(); 	void TestInclude();	void TestLoad();	public:    TestParser()	{}	    ~TestParser()	{}};CPPUNIT_TEST_SUITE_REGISTRATION( TestParser );#include <fstream>#include <stdlib.h>#include <stdio.h>#ifdef HAVE_CONFIG_H#include "config.h"#endif#ifdef HAVE_SSTREAM#include <sstream>#else#include <strstream>#endif#include <iostream>#include "parser.hpp"#include "builder.hpp"#include "../lib/loader.hpp"#include <boost/filesystem/operations.hpp>#include "streamstatushandler.hpp"//std::ofstream dev_null( "/dev/null" );std::ostream& dev_null = std::cout;using namespace rcss::conf;int GLOBAL = 5;voidsetFunc( int v ){    GLOBAL = v;}intgetFunc(){    return GLOBAL;}class test3{public:    void    operator()( int v )    { test = v; }    int    operator()() const    { return test; }    int test;};class MyBuilder    : public Builder{public:    MyBuilder()      : Builder( "parsertest", "test" ),		m_test( 5 )    {	addHandler( m_handler );        addMemVar();    }    ~MyBuilder()    {	removeHandler( m_handler );    }    void    addMemVar()    {         Builder::addParam( "test", 			   makeSetter( m_test ),			   makeGetter( m_test ),			   "test desc" );         Builder::addParam( "test_2", makeSetter( m_test ), makeGetter( m_test ), "test_2 desc" );         Builder::addParam( "3%te-st_2", makeSetter( m_test ), makeGetter( m_test ), "3%te-st_2 desc" );     }        template< typename V >    void    set( const std::string& param, V value )    {        Builder::set< V >( param, value );    }    int    getTest() const    {        return m_test;    }    void    setTest( int value )    {        m_test = value;    }    template< typename V >    bool    get( const std::string& param, V& value )    {        return Builder::get( param, value );    }        int m_test;	StreamStatusHandler m_handler;};class MySubBuilder    : public Builder{public:    MySubBuilder( Builder* parent )      : Builder( parent, "test::subtest" ),		m_test( 6 )    {		addHandler( m_handler );        addMemVar();    }	~MySubBuilder()	{		removeHandler( m_handler );	}    void    addMemVar()    {         Builder::addParam( "test", 						   makeSetter( m_test ),						   makeGetter( m_test ),						   "test desc" );         Builder::addParam( "test_2", makeSetter( m_test ), makeGetter( m_test ), "test_2 desc" );         Builder::addParam( "3%te-st_2", makeSetter( m_test ), makeGetter( m_test ), "3%te-st_2 desc" );     }    template< typename V >    void    set( const std::string& param, V value )    {        Builder::set< V >( param, value );    }    int    getTest() const    {        return m_test;    }    void    setTest( int value )    {        m_test = value;    }    template< typename V >    bool    get( const std::string& param, V& value )    {        return Builder::get( param, value );    }        int m_test;	StreamStatusHandler m_handler;};void TestParser::NullArgs() {       MyBuilder tester;    rcss::conf::Parser parser( tester );    try    {        CPPUNIT_ASSERT( parser.parse( 0, NULL ) );    }    catch(...)    {        CPPUNIT_ASSERT( false );    }}void TestParser::NullUnnamedStrm() {   #ifdef HAVE_SSTREAM    std::istringstream strm( "" );#else    std::istrstream strm( "" );#endif    MyBuilder tester;    rcss::conf::Parser parser( tester );    try    {        CPPUNIT_ASSERT( parser.parse( strm ) );    }    catch(...)    {        CPPUNIT_ASSERT( false );    }}void TestParser::NullNamedStrm() {   #ifdef HAVE_SSTREAM    std::istringstream strm( "" );#else    std::istrstream strm( "" );#endif    MyBuilder tester;    rcss::conf::Parser parser( tester );    try    {        CPPUNIT_ASSERT( parser.parse( strm, "test" ) );    }    catch(...)    {        CPPUNIT_ASSERT( false );    }}void TestParser::ValidArg() {       const char* argv[] = { "parsertest", "test::test=2" };    MyBuilder tester;    rcss::conf::Parser parser( tester );	int argc = 2;    CPPUNIT_ASSERT( parser.parse( argc, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::ValidSubArg() {       const char* argv[] = { "parsertest", "test::subtest::test=2" };    MyBuilder tester;	MySubBuilder subtester( &tester );    rcss::conf::Parser parser( tester );	int argc = 2;    CPPUNIT_ASSERT( parser.parse( argc, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( subtester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::ValidArg2() {       const char* argv[] = { "parsertest", "test::test_2=2" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test_2", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::ValidArg3() {       const char* argv[] = { "parsertest", "test::3%te-st_2=2" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "3%te-st_2", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::ValidArgMinus() {       const char* argv[] = { "parsertest", "-test::test=2" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::ValidArgMinusMinus() {       const char* argv[] = { "parsertest", "--test::test=2" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::InvalidArg() {       const char* argv[] = { "parsertest", "test::foo=2" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( !parser.parse( 2, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 5, tmp );}void TestParser::WrongNamespaceArg() {       const char* argv[] = { "parsertest", "foo::bar=2" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 5, tmp );}void TestParser::ValidWSArg() {       const char* argv[] = { "parsertest", "test::test", "  =", "  \n2\t  " };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 4, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::ValidStrm() {   #ifdef HAVE_SSTREAM    std::istringstream strm( "test::test=2" );#else    std::istrstream strm( "test::test=2" );#endif    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( strm, "test" ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::InvalidStrm() {   #ifdef HAVE_SSTREAM    std::istringstream strm( "test::foo=2" );#else    std::istrstream strm( "test::foo=2" );#endif    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( !parser.parse( strm ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 5, tmp );}void TestParser::WrongnamespaceStrm() {   #ifdef HAVE_SSTREAM    std::istringstream strm( "foo::bar=2" );#else    std::istrstream strm( "foo::bar=2" );#endif    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( strm, "test" ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 5, tmp );}void TestParser::ValidWSStrm() {   #ifdef HAVE_SSTREAM    std::istringstream strm( "test::test   = \n2\t" );#else    std::istrstream strm( "test::test   = \n2\t" );#endif    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( strm, "test" ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::ValidCommentStrm() {   #ifdef HAVE_SSTREAM    std::istringstream#else    std::istrstream#endif        strm( "/* thi#s //is a/* *comment */ test::test   = // this is// #an*ot/he/*r comm*/*ent\n # */an/*d ano//th#er\n2\t" );    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( strm, "test" ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );}void TestParser::ConfFile(){    boost::filesystem::path filename = "rcssbase/conf/tmp.conf";    MyBuilder tester;    rcss::conf::Parser parser( tester );    parser.parseCreateConf( filename, "test" );    tester.setTest( 2 );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );    CPPUNIT_ASSERT( parser.parse( filename ) );    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 5, tmp );}void TestParser::Help() {       const char* argv[] = { "parsertest", "--help" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    CPPUNIT_ASSERT( tester.genericHelpRequested() );    tester.displayHelp();}void TestParser::TestHelp() {       const char* argv[] = { "parsertest", "--test::help" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    CPPUNIT_ASSERT( tester.detailedHelpRequested() );    tester.displayHelp();}void TestParser::TestSubHelp() {       const char* argv[] = { "parsertest", "--test::subtest::help" };    MyBuilder tester;    MySubBuilder subtester( &tester );    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    CPPUNIT_ASSERT( subtester.detailedHelpRequested() );    tester.displayHelp();}void TestParser::TestSetPath(){    const char* argv[] = { "parsertest", "--setpath=rcssbase/lib/loadertest" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    CPPUNIT_ASSERT_EQUAL( size_t( 1u ),						  rcss::lib::Loader::getPath().size() );    CPPUNIT_ASSERT_EQUAL( std::string( "rcssbase/lib/loadertest" ),						  rcss::lib::Loader::getPath().front().string() );} void TestParser::TestAddPath(){    const char* argv[] = { "parsertest", "--addpath=rcssbase/conf" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    CPPUNIT_ASSERT_EQUAL( size_t( 2u ),						  rcss::lib::Loader::getPath().size() );    CPPUNIT_ASSERT_EQUAL( std::string( "rcssbase/lib/loadertest" ),						  rcss::lib::Loader::getPath()[ 0 ].string() );    CPPUNIT_ASSERT_EQUAL( std::string( "rcssbase/conf" ),						  rcss::lib::Loader::getPath()[ 1 ].string() );}void TestParser::TestInclude(){    const char* argv[] = { "parsertest", "--include=rcssbase/conf/test.conf" };    MyBuilder tester;    MySubBuilder subtester( &tester );    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 2, (const char* const *)argv ) );    int tmp = 0;    CPPUNIT_ASSERT( tester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 2, tmp );    CPPUNIT_ASSERT( subtester.get( "test", tmp ) );    CPPUNIT_ASSERT_EQUAL( 3, tmp );}void TestParser::TestLoad(){    const char* argv[] = { "parsertest", 			   "--setpath=rcssbase/lib/loadertest",			   "--load=libderived1",			   "--help" };    MyBuilder tester;    rcss::conf::Parser parser( tester );    CPPUNIT_ASSERT( parser.parse( 4, (const char* const *)argv ) );    tester.displayHelp();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -