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

📄 factorytest.cpp

📁 机器人足球比赛仿真程序 服务器端车工内需
💻 CPP
字号:
// -*-c++-*-/***************************************************************************                  factorytest.cpp  - A rcss::Factory testing program                             -------------------    begin                : 28-AUG-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 TestFactory : public CPPUNIT_NS::TestFixture{    CPPUNIT_TEST_SUITE(TestFactory);    CPPUNIT_TEST(emptyFactory);    CPPUNIT_TEST(Registration);    CPPUNIT_TEST(PersitantRegistration);    CPPUNIT_TEST(DoubleRegistration);    CPPUNIT_TEST(DoubleDeRegistration);    CPPUNIT_TEST(DeRegistration);    CPPUNIT_TEST(ReRegistration);    CPPUNIT_TEST(GetCreator);    CPPUNIT_TEST(GetCreatorFail);    CPPUNIT_TEST(Create);    CPPUNIT_TEST(Overwite);    CPPUNIT_TEST(UnOverwite);    CPPUNIT_TEST_SUITE_END();protected:    //--------------------------------------------------------------------------    /// XXX: Document what the test is for here.    //--------------------------------------------------------------------------    void emptyFactory();    void Registration();    void PersitantRegistration();    void DoubleRegistration();    void DoubleDeRegistration();    void DeRegistration();    void ReRegistration();    void GetCreator();    void GetCreatorFail();    void Create();    void Overwite();    void UnOverwite();public:    TestFactory()	{}	    ~TestFactory()	{}};CPPUNIT_TEST_SUITE_REGISTRATION( TestFactory );#include "../factory.hpp"#include <boost/shared_ptr.hpp>using namespace rcss;class Base{public:    typedef boost::shared_ptr< Base > Ptr;    typedef Ptr(*Creator)();    typedef rcss::lib::Factory< Creator > Factory;    virtual ~Base() {}    virtual int method() const = 0;    static    Factory&    factory()    { return s_fact; }private:    static Factory s_fact;}; Base::Factory Base::s_fact;voidTestFactory::emptyFactory() {  CPPUNIT_ASSERT_EQUAL( size_t( 0u ), Base::factory().size() );}class Derived    : public Base{public:    virtual int method() const { return 23; }    static    Ptr     create()    {        return Ptr( new Derived );     }};class Derived2    : public Base{public:    virtual int method() const { return 230; }    static    Ptr     create()    {        return Ptr( new Derived2 );     }};voidTestFactory::Registration(){    Base::factory().reg( &Derived::create, "derived" );    CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size() );    CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size( "derived" ) );}voidTestFactory::PersitantRegistration(){  CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size() );  CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size( "derived" ) );}voidTestFactory::DoubleRegistration(){    Base::factory().reg( &Derived::create, "derived" );    CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size() );    CPPUNIT_ASSERT_EQUAL( size_t( 2u ), Base::factory().size( "derived" ) );}voidTestFactory::DoubleDeRegistration(){    Base::factory().dereg( "derived" );    CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size() );    CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size( "derived" ) );}voidTestFactory::DeRegistration(){    Base::factory().dereg( "derived" );    CPPUNIT_ASSERT_EQUAL( size_t( 0u ), Base::factory().size() );    CPPUNIT_ASSERT_EQUAL( size_t( 0u ), Base::factory().size( "derived" ) );}voidTestFactory::ReRegistration(){    Base::factory().reg( &Derived::create, "derived" );    CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size() );    CPPUNIT_ASSERT_EQUAL( size_t( 1u ), Base::factory().size( "derived" ) );}voidTestFactory::GetCreator(){    Base::Creator c;    CPPUNIT_ASSERT( Base::factory().getCreator( c, "derived" ) );    CPPUNIT_ASSERT( &Derived::create == c );}voidTestFactory::GetCreatorFail(){    Base::Creator c;    CPPUNIT_ASSERT( !Base::factory().getCreator( c, "foobar" ) );}voidTestFactory::Create(){    Base::Creator c;    CPPUNIT_ASSERT( Base::factory().getCreator( c, "derived" ) );    CPPUNIT_ASSERT_EQUAL( 23, c()->method() );}voidTestFactory::Overwite(){    Base::factory().reg( &Derived2::create, "derived" );    Base::Creator c;    CPPUNIT_ASSERT( Base::factory().getCreator( c, "derived" ) );    CPPUNIT_ASSERT_EQUAL( 230, c()->method() );}voidTestFactory::UnOverwite(){    Base::factory().dereg( "derived" );    Base::Creator c;    CPPUNIT_ASSERT( Base::factory().getCreator( c, "derived" ) );    CPPUNIT_ASSERT_EQUAL( 23, c()->method() );}

⌨️ 快捷键说明

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