diff options
author | Jose <jose@zeroc.com> | 2014-05-02 19:56:38 +0200 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2014-05-02 19:56:38 +0200 |
commit | 1161c5817059464ab511632c0ce5d14593ced1a3 (patch) | |
tree | 51bbcdf2a4ea43c430312157350bb4271bc3f40d /cpp/test/Ice/stringConverter/Client.cpp | |
parent | Update .gitignore files (diff) | |
download | ice-1161c5817059464ab511632c0ce5d14593ced1a3.tar.bz2 ice-1161c5817059464ab511632c0ce5d14593ced1a3.tar.xz ice-1161c5817059464ab511632c0ce5d14593ced1a3.zip |
ICE-4851 - Use wstrings for input and output data that contain non-ASCII characters?
Diffstat (limited to 'cpp/test/Ice/stringConverter/Client.cpp')
-rw-r--r-- | cpp/test/Ice/stringConverter/Client.cpp | 105 |
1 files changed, 25 insertions, 80 deletions
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 <TestCommon.h> #include <Test.h> -#if defined(ICONV_ON_WINDOWS) -// -// On Windows, Ice/IcongStringConverter.h is not included by Ice/Ice.h -// -#include <Ice/IconvStringConverter.h> -#endif - #include <iostream> #include <locale.h> @@ -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<const Ice::Byte*>(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<char>; + IceUtil::setProcessStringConverter(new IceUtil::IconvStringConverter<char>); } else { - initData.stringConverter = new Ice::IconvStringConverter<char>("iso815"); + IceUtil::setProcessStringConverter(new IceUtil::IconvStringConverter<char>("iso815")); } - initData.wstringConverter = new Ice::IconvStringConverter<wchar_t>("ucs4"); + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter<wchar_t>("ucs4")); #else if(useLocale) { -#ifndef _WIN32 - initData.stringConverter = new Ice::IconvStringConverter<char>; -#endif + IceUtil::setProcessStringConverter(new IceUtil::IconvStringConverter<char>()); } else { - initData.stringConverter = new Ice::IconvStringConverter<char>("ISO8859-15"); + IceUtil::setProcessStringConverter(new IceUtil::IconvStringConverter<char>("ISO8859-15")); } if(sizeof(wchar_t) == 4) { -#ifdef ICE_BIG_ENDIAN - initData.wstringConverter = new Ice::IconvStringConverter<wchar_t>("UTF-32BE"); -#else - initData.wstringConverter = new Ice::IconvStringConverter<wchar_t>("UTF-32LE"); -#endif +# ifdef ICE_BIG_ENDIAN + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter<wchar_t>("UTF-32BE")); +# else + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter<wchar_t>("UTF-32LE")); +# endif } else { -#ifdef ICE_BIG_ENDIAN - initData.wstringConverter = new Ice::IconvStringConverter<wchar_t>("UTF-16BE"); -#else - initData.wstringConverter = new Ice::IconvStringConverter<wchar_t>("UTF-16LE"); -#endif +# ifdef ICE_BIG_ENDIAN + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter<wchar_t>("UTF-16BE")); +# else + IceUtil::setProcessWstringConverter(new IceUtil::IconvStringConverter<wchar_t>("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; } |