/* * Boost.Extension / construction test case * * (C) Copyright Jeremy Pack 2007 * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See http://www.boost.org/ for latest version. */ #include #include #define BOOST_TEST_MAIN #include #include #include using namespace boost::extensions; class Automobile { public: virtual ~Automobile() {} Automobile(int speed) : speed_(speed) {} virtual int getSpeed() {return speed_;} protected: int speed_; }; class Van : virtual public Automobile { public: virtual ~Van() {} Van(int speed) : Automobile(speed) {} virtual int getSpeed() {return speed_ / 2;} }; class PickupTruck : virtual public Automobile { public: virtual ~PickupTruck() {} PickupTruck(int speed) : Automobile(speed) {} virtual int getSpeed() {return speed_ / 3;} }; class Racecar : virtual public Automobile { public: virtual ~Racecar() {} Racecar(int speed) : Automobile(speed) {} virtual int getSpeed() {return 3 * speed_;} }; class RacingVan : public Racecar, public Van { public: virtual ~RacingVan() {} RacingVan(int speed) : Automobile(speed), Racecar(speed), Van(speed) {} virtual int getSpeed() {return 2 * speed_;} }; BOOST_AUTO_TEST_CASE(factory_argless) { factory f; f.set(); BOOST_CHECK(f.is_valid()); std::auto_ptr pickup(f.create(90)); BOOST_CHECK_EQUAL(pickup->getSpeed(), 30); } BOOST_AUTO_TEST_CASE(map_argless) { std::map > m; m["A van"].set(); m["A basic automobile"].set(); m["A pickup truck"].set(); std::auto_ptr van(m["A van"].create(30)); BOOST_CHECK_EQUAL(van->getSpeed(), 15); BOOST_CHECK_EQUAL (m["An unloaded car!"].create(30), (Automobile*)0); } /* namespace boost { namespace extensions { template <> Automobile * create_function::create() { return new Racecar(50); } }} // namespace boost::extensions BOOST_AUTO_TEST_CASE(factory_template) { factory f; f.set(); BOOST_CHECK(f.is_valid()); std::auto_ptr racecar(f.create(60)); BOOST_CHECK_EQUAL(racecar->getSpeed(), 180); }*/ BOOST_AUTO_TEST_CASE(factory_map_single_param) { factory_map m; m.get()["A pickup truck"].set(); m.get()["A racing van!"].set(); std::auto_ptr pickup (m.get()["A pickup truck"].create(60)); BOOST_CHECK_EQUAL(pickup->getSpeed(), 20); std::auto_ptr racingVan (m.get()["A racing van!"].create(60)); BOOST_CHECK_EQUAL(racingVan->getSpeed(), 120); std::auto_ptr car_ptr (m.get()["A nonexistent car!"].create(30)); BOOST_CHECK_EQUAL(car_ptr.get(), (Automobile*)0); }