diff options
Diffstat (limited to 'cpp/test/Ice/objects/Client.cpp')
-rw-r--r-- | cpp/test/Ice/objects/Client.cpp | 123 |
1 files changed, 87 insertions, 36 deletions
diff --git a/cpp/test/Ice/objects/Client.cpp b/cpp/test/Ice/objects/Client.cpp index 3c8f3dbc0fd..bceb4001e3a 100644 --- a/cpp/test/Ice/objects/Client.cpp +++ b/cpp/test/Ice/objects/Client.cpp @@ -10,15 +10,43 @@ #include <Ice/Ice.h> #include <TestCommon.h> #include <TestI.h> -#include <Derived.h> + +// +// Required to trigger initialization of Derived object factory. +// +#include <Derived.h> + +// +// Required to trigger initialization of DerivedEx exception factory. +// #include <DerivedEx.h> DEFINE_TEST("client") +#ifdef _MSC_VER +// For 'Ice::Communicator::addObjectFactory()' deprecation +#pragma warning( disable : 4996 ) +#endif + +#if defined(__GNUC__) +// For 'Ice::Communicator::addObjectFactory()' deprecation +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + using namespace std; using namespace Test; -class MyObjectFactory : public Ice::ObjectFactory +#ifdef ICE_CPP11_MAPPING +template<typename T> +function<shared_ptr<T>(string)> makeFactory() +{ + return [](string) + { + return make_shared<T>(); + }; +} +#else +class MyValueFactory : public Ice::ValueFactory { public: @@ -61,27 +89,62 @@ public: return 0; } +}; +#endif +class MyObjectFactory : public Ice::ObjectFactory +{ +public: + MyObjectFactory() : _destroyed(false) + { + } + + ~MyObjectFactory() + { + assert(_destroyed); + } + + virtual Ice::ValuePtr create(const string& type) + { + return ICE_NULLPTR; + } + virtual void destroy() { - // Nothing to do + _destroyed = true; } + +private: + bool _destroyed; }; int run(int, char**, const Ice::CommunicatorPtr& communicator) { - Ice::ObjectFactoryPtr factory = new MyObjectFactory; - communicator->addObjectFactory(factory, "::Test::B"); - communicator->addObjectFactory(factory, "::Test::C"); - communicator->addObjectFactory(factory, "::Test::D"); - communicator->addObjectFactory(factory, "::Test::E"); - communicator->addObjectFactory(factory, "::Test::F"); - communicator->addObjectFactory(factory, "::Test::I"); - communicator->addObjectFactory(factory, "::Test::J"); - communicator->addObjectFactory(factory, "::Test::H"); - - InitialPrx allTests(const Ice::CommunicatorPtr&); - InitialPrx initial = allTests(communicator); +#ifdef ICE_CPP11_MAPPING + communicator->getValueFactoryManager()->add(makeFactory<BI>(), "::Test::B"); + communicator->getValueFactoryManager()->add(makeFactory<CI>(), "::Test::C"); + communicator->getValueFactoryManager()->add(makeFactory<DI>(), "::Test::D"); + communicator->getValueFactoryManager()->add(makeFactory<EI>(), "::Test::E"); + communicator->getValueFactoryManager()->add(makeFactory<FI>(), "::Test::F"); + communicator->getValueFactoryManager()->add(makeFactory<II>(), "::Test::I"); + communicator->getValueFactoryManager()->add(makeFactory<JI>(), "::Test::J"); + communicator->getValueFactoryManager()->add(makeFactory<HI>(), "::Test::H"); + communicator->addObjectFactory(make_shared<MyObjectFactory>(), "TestOF"); +#else + Ice::ValueFactoryPtr factory = new MyValueFactory; + communicator->getValueFactoryManager()->add(factory, "::Test::B"); + communicator->getValueFactoryManager()->add(factory, "::Test::C"); + communicator->getValueFactoryManager()->add(factory, "::Test::D"); + communicator->getValueFactoryManager()->add(factory, "::Test::E"); + communicator->getValueFactoryManager()->add(factory, "::Test::F"); + communicator->getValueFactoryManager()->add(factory, "::Test::I"); + communicator->getValueFactoryManager()->add(factory, "::Test::J"); + communicator->getValueFactoryManager()->add(factory, "::Test::H"); + communicator->addObjectFactory(new MyObjectFactory(), "TestOF"); +#endif + + InitialPrxPtr allTests(const Ice::CommunicatorPtr&); + InitialPrxPtr initial = allTests(communicator); initial->shutdown(); return EXIT_SUCCESS; } @@ -91,34 +154,22 @@ main(int argc, char* argv[]) { #ifdef ICE_STATIC_LIBS Ice::registerIceSSL(); +# if defined(__linux) + Ice::registerIceBT(); +# endif #endif - int status; - Ice::CommunicatorPtr communicator; - try { - communicator = Ice::initialize(argc, argv); - status = run(argc, argv, communicator); + Ice::CommunicatorHolder ich = Ice::initialize(argc, argv); + RemoteConfig rc("Ice/objects", argc, argv, ich.communicator()); + int status = run(argc, argv, ich.communicator()); + rc.finished(status); + return status; } catch(const Ice::Exception& ex) { cerr << ex << endl; - status = EXIT_FAILURE; - } - - if(communicator) - { - try - { - communicator->destroy(); - } - catch(const Ice::Exception& ex) - { - cerr << ex << endl; - status = EXIT_FAILURE; - } + return EXIT_FAILURE; } - - return status; } |