From 1161c5817059464ab511632c0ce5d14593ced1a3 Mon Sep 17 00:00:00 2001 From: Jose Date: Fri, 2 May 2014 19:56:38 +0200 Subject: ICE-4851 - Use wstrings for input and output data that contain non-ASCII characters? --- cpp/test/Ice/stringConverter/Client.cpp | 105 ++++++++------------------------ 1 file changed, 25 insertions(+), 80 deletions(-) (limited to 'cpp/test/Ice/stringConverter/Client.cpp') diff --git a/cpp/test/Ice/stringConverter/Client.cpp b/cpp/test/Ice/stringConverter/Client.cpp index f653055adac..eb59598691d 100644 --- a/cpp/test/Ice/stringConverter/Client.cpp +++ b/cpp/test/Ice/stringConverter/Client.cpp @@ -11,13 +11,6 @@ #include #include -#if defined(ICONV_ON_WINDOWS) -// -// On Windows, Ice/IcongStringConverter.h is not included by Ice/Ice.h -// -#include -#endif - #include #include @@ -30,31 +23,6 @@ public: virtual int run(int, char*[]); }; -// -// Server side is pure unicode -// -class MyObjectI : public Test::MyObject -{ -public: - - virtual wstring widen(const string& msg, const Ice::Current&) - { - const Ice::Byte* cmsg = reinterpret_cast(msg.c_str()); - - if(!IceUtil::isLegalUTF8Sequence(cmsg, cmsg + msg.size())) - { - throw Test::BadEncodingException(); - } - - return IceUtil::stringToWstring(msg); - } - - virtual string narrow(const wstring& wmsg, const Ice::Current&) - { - return IceUtil::wstringToString(wmsg); - } -}; - static bool useLocale = false; static bool useIconv = true; @@ -67,87 +35,68 @@ main(int argc, char* argv[]) // // Switch to French locale // (we just used the codeset for as default internal code for - // initData.stringConverter below) + // stringConverter below) // useLocale = (setlocale(LC_ALL, "fr_FR.ISO8859-15") != 0 || setlocale(LC_ALL, "fr_FR.iso885915@euro") != 0); #endif - - Ice::InitializationData initData; -#if defined(_WIN32) && !defined(ICONV_ON_WINDOWS) +#if defined(_WIN32) // // 28605 == ISO 8859-15 codepage // - initData.stringConverter = new Ice::WindowsStringConverter(28605); + IceUtil::setProcessStringConverter(new IceUtil::WindowsStringConverter(28605)); useIconv = false; #elif defined(__hpux) if(useLocale) { - initData.stringConverter = new Ice::IconvStringConverter; + IceUtil::setProcessStringConverter(new IceUtil::IconvStringConverter); } else { - initData.stringConverter = new Ice::IconvStringConverter("iso815"); + IceUtil::setProcessStringConverter(new IceUtil::IconvStringConverter("iso815")); } - initData.wstringConverter = new Ice::IconvStringConverter("ucs4"); + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter("ucs4")); #else if(useLocale) { -#ifndef _WIN32 - initData.stringConverter = new Ice::IconvStringConverter; -#endif + IceUtil::setProcessStringConverter(new IceUtil::IconvStringConverter()); } else { - initData.stringConverter = new Ice::IconvStringConverter("ISO8859-15"); + IceUtil::setProcessStringConverter(new IceUtil::IconvStringConverter("ISO8859-15")); } if(sizeof(wchar_t) == 4) { -#ifdef ICE_BIG_ENDIAN - initData.wstringConverter = new Ice::IconvStringConverter("UTF-32BE"); -#else - initData.wstringConverter = new Ice::IconvStringConverter("UTF-32LE"); -#endif +# ifdef ICE_BIG_ENDIAN + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter("UTF-32BE")); +# else + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter("UTF-32LE")); +# endif } else { -#ifdef ICE_BIG_ENDIAN - initData.wstringConverter = new Ice::IconvStringConverter("UTF-16BE"); -#else - initData.wstringConverter = new Ice::IconvStringConverter("UTF-16LE"); -#endif +# ifdef ICE_BIG_ENDIAN + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter("UTF-16BE")); +# else + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter("UTF-16LE")); +# endif } #endif - return app.main(argc, argv, initData); + return app.main(argc, argv); } int Client::run(int, char*[]) { - // - // Create server communicator and OA - // - Ice::InitializationData initData; - initData.properties = communicator()->getProperties()->clone(); - Ice::CommunicatorPtr serverCommunicator = Ice::initialize(initData); - Ice::ObjectAdapterPtr oa = serverCommunicator->createObjectAdapterWithEndpoints("MyOA", "tcp -h localhost"); - - Ice::ObjectPtr servant = new MyObjectI; - Test::MyObjectPrx serverPrx = Test::MyObjectPrx::uncheckedCast(oa->addWithUUID(servant)); - oa->activate(); - - // - // Get a prx in the client's communicator - // - Test::MyObjectPrx clientPrx = - Test::MyObjectPrx::uncheckedCast(communicator()->stringToProxy(serverPrx->ice_toString())); + Test::MyObjectPrx proxy = + Test::MyObjectPrx::uncheckedCast(communicator()->stringToProxy("test:default -h localhost -p 12010")); - char oe = char(0xBD); // A single character in ISO Latin 9 + char oe = char(0xBD); // A single character in ISO Latin 9 string msg = string("tu me fends le c") + oe + "ur!"; cout << "testing string converter"; if(useLocale) @@ -159,14 +108,10 @@ Client::run(int, char*[]) cout << " (using iconv)"; } cout << "... " << flush; - wstring wmsg = clientPrx->widen(msg); - test(clientPrx->narrow(wmsg) == msg); + wstring wmsg = proxy->widen(msg); + test(proxy->narrow(wmsg) == msg); test(wmsg.size() == msg.size()); cout << "ok" << endl; - - // - // destroy server communicator - // - serverCommunicator->destroy(); + proxy->shutdown(); return EXIT_SUCCESS; } -- cgit v1.2.3