1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
#include <Ice/Ice.h>
#include <TestHelper.h>
#include <TestI.h>
//
// Required to trigger initialization of Derived object factory.
//
#include <Derived.h>
//
// Required to trigger initialization of DerivedEx exception factory.
//
#include <DerivedEx.h>
// For 'Ice::Communicator::addObjectFactory()' deprecation
#if defined(_MSC_VER)
# pragma warning( disable : 4996 )
#elif defined(__GNUC__)
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
using namespace std;
using namespace Test;
#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:
virtual Ice::ObjectPtr create(const string& type)
{
if(type == "::Test::B")
{
return new BI;
}
else if(type == "::Test::C")
{
return new CI;
}
else if(type == "::Test::D")
{
return new DI;
}
else if(type == "::Test::E")
{
return new EI;
}
else if(type == "::Test::F")
{
return new FI;
}
else if(type == "::Test::I")
{
return new II;
}
else if(type == "::Test::J")
{
return new JI;
}
else if(type == "::Test::H")
{
return new HI;
}
assert(false); // Should never be reached
return 0;
}
};
#endif
class MyObjectFactory : public Ice::ObjectFactory
{
public:
MyObjectFactory() : _destroyed(false)
{
}
~MyObjectFactory()
{
assert(_destroyed);
}
virtual Ice::ValuePtr create(const string&)
{
return ICE_NULLPTR;
}
virtual void destroy()
{
_destroyed = true;
}
private:
bool _destroyed;
};
class Client : public Test::TestHelper
{
public:
void run(int, char**);
};
void
Client::run(int argc, char** argv)
{
Ice::PropertiesPtr properties = createTestProperties(argc, argv);
properties->setProperty("Ice.AcceptClassCycles", "1");
#ifndef ICE_CPP11_MAPPING
properties->setProperty("Ice.CollectObjects", "1");
#endif
Ice::CommunicatorHolder communicator = initialize(argc, argv, properties);
#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(Test::TestHelper*);
InitialPrxPtr initial = allTests(this);
initial->shutdown();
}
DEFINE_TEST(Client)
|