1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ******************************************************************************* 359d709d503bab6e2b61931737e662dd293b40578ccornelius * Copyright (C) 2001-2013, International Business Machines Corporation and 427f654740f2a26ad62a5c155af9199af9e69b889claireho * others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ******************************************************************************* 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "utypeinfo.h" // for 'typeid' to work 927f654740f2a26ad62a5c155af9199af9e69b889claireho 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "icusvtst.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "servloc.h" 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <stdio.h> 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass MyListener : public EventListener { 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass WrongListener : public EventListener { 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass ICUNSubclass : public ICUNotifier { 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool acceptsListener(const EventListener& /*l*/) const { 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return TRUE; 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // return l instanceof MyListener; 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual void notifyListener(EventListener& /*l*/) const { 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// This factory does nothing 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass LKFSubclass0 : public LocaleKeyFactory { 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LKFSubclass0() 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : LocaleKeyFactory(VISIBLE, "LKFSubclass0") 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass LKFSubclass : public LocaleKeyFactory { 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Hashtable table; 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LKFSubclass(UBool visible) 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : LocaleKeyFactory(visible ? VISIBLE : INVISIBLE, "LKFSubclass") 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru table.put("en_US", this, status); 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru protected: 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual const Hashtable* getSupportedIDs(UErrorCode &/*status*/) const { 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return &table; 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass Integer : public UObject { 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const int32_t _val; 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer(int32_t val) : _val(val) { 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer(const Integer& rhs) : UObject(rhs), _val(rhs._val) { 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual ~Integer() { 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * UObject boilerplate. 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static UClassID getStaticClassID() { 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return (UClassID)&fgClassID; 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UClassID getDynamicClassID() const { 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return getStaticClassID(); 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UBool operator==(const UObject& other) const 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 8827f654740f2a26ad62a5c155af9199af9e69b889claireho return typeid(*this) == typeid(other) && 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru _val == ((Integer&)other)._val; 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UnicodeString& debug(UnicodeString& result) const { 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru debugClass(result); 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(" val: "); 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(_val); 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UnicodeString& debugClass(UnicodeString& result) const { 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result.append("Integer"); 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private: 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char fgClassID; 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char Integer::fgClassID = '\0'; 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// use locale keys 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass TestIntegerService : public ICUService { 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const { 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return LocaleKey::createWithCanonicalFallback(id, NULL, status); // no fallback locale 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& status) 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 11927f654740f2a26ad62a5c155af9199af9e69b889claireho Integer* i; 12027f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_SUCCESS(status) && obj && (i = dynamic_cast<Integer*>(obj)) != NULL) { 12127f654740f2a26ad62a5c155af9199af9e69b889claireho return new SimpleFactory(i, id, visible); 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UObject* cloneInstance(UObject* instance) const { 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return instance ? new Integer(*(Integer*)instance) : NULL; 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::ICUServiceTest() { 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::~ICUServiceTest() { 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::runIndexedTest(int32_t index, UBool exec, const char* &name, 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruchar* /*par*/) 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru switch (index) { 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(0,testAPI_One); 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(1,testAPI_Two); 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(2,testRBF); 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(3,testNotification); 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(4,testLocale); 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(5,testWrapFactory); 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(6,testCoverage); 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru default: name = ""; break; 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString append(UnicodeString& result, const UObject* obj) 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char buffer[128]; 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (obj == NULL) { 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append("NULL"); 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 16027f654740f2a26ad62a5c155af9199af9e69b889claireho const UnicodeString* s; 16127f654740f2a26ad62a5c155af9199af9e69b889claireho const Locale* loc; 16227f654740f2a26ad62a5c155af9199af9e69b889claireho const Integer* i; 16327f654740f2a26ad62a5c155af9199af9e69b889claireho if ((s = dynamic_cast<const UnicodeString*>(obj)) != NULL) { 16427f654740f2a26ad62a5c155af9199af9e69b889claireho result.append(*s); 16527f654740f2a26ad62a5c155af9199af9e69b889claireho } else if ((loc = dynamic_cast<const Locale*>(obj)) != NULL) { 16627f654740f2a26ad62a5c155af9199af9e69b889claireho result.append(loc->getName()); 16727f654740f2a26ad62a5c155af9199af9e69b889claireho } else if ((i = dynamic_cast<const Integer*>(obj)) != NULL) { 16827f654740f2a26ad62a5c155af9199af9e69b889claireho sprintf(buffer, "%d", (int)i->_val); 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(buffer); 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru sprintf(buffer, "%p", (const void*)obj); 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(buffer); 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString& 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::lrmsg(UnicodeString& result, const UnicodeString& message, const UObject* lhs, const UObject* rhs) const 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(message); 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(" lhs: "); 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru append(result, lhs); 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(", rhs: "); 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru append(result, rhs); 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::confirmBoolean(const UnicodeString& message, UBool val) 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (val) { 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(message); 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(message); 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if 0 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::confirmEqual(const UnicodeString& message, const UObject* lhs, const UObject* rhs) 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool equ = (lhs == NULL) 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ? (rhs == NULL) 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : (rhs != NULL && lhs->operator==(*rhs)); 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lrmsg(temp, message, lhs, rhs); 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (equ) { 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(temp); 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(temp); 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#else 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::confirmEqual(const UnicodeString& message, const Integer* lhs, const Integer* rhs) 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool equ = (lhs == NULL) 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ? (rhs == NULL) 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : (rhs != NULL && lhs->operator==(*rhs)); 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lrmsg(temp, message, lhs, rhs); 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (equ) { 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(temp); 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(temp); 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::confirmEqual(const UnicodeString& message, const UnicodeString* lhs, const UnicodeString* rhs) 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool equ = (lhs == NULL) 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ? (rhs == NULL) 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : (rhs != NULL && lhs->operator==(*rhs)); 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lrmsg(temp, message, lhs, rhs); 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (equ) { 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(temp); 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(temp); 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::confirmEqual(const UnicodeString& message, const Locale* lhs, const Locale* rhs) 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool equ = (lhs == NULL) 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ? (rhs == NULL) 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : (rhs != NULL && lhs->operator==(*rhs)); 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lrmsg(temp, message, lhs, rhs); 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (equ) { 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(temp); 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(temp); 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// use these for now 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::confirmStringsEqual(const UnicodeString& message, const UnicodeString& lhs, const UnicodeString& rhs) 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool equ = lhs == rhs; 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp = message; 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp.append(" lhs: "); 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp.append(lhs); 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp.append(" rhs: "); 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp.append(rhs); 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (equ) { 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(temp); 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 28485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataerrln(temp); 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::confirmIdentical(const UnicodeString& message, const UObject* lhs, const UObject *rhs) 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lrmsg(temp, message, lhs, rhs); 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (lhs == rhs) { 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(temp); 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(temp); 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::confirmIdentical(const UnicodeString& message, int32_t lhs, int32_t rhs) 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (lhs == rhs) { 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(message + " lhs: " + lhs + " rhs: " + rhs); 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(message + " lhs: " + lhs + " rhs: " + rhs); 308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::msgstr(const UnicodeString& message, UObject* obj, UBool err) 313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (obj) { 315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* str = (UnicodeString*)obj; 316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(message + *str); 317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete str; 318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if (err) { 319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error " + message + "string is NULL"); 320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::testAPI_One() 325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // create a service using locale keys, 327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestIntegerService service; 328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // register an object with one locale, 330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // search for an object with a more specific locale 331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should return the original object 332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* singleton0 = new Integer(0); 334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(singleton0, "en_US", status); 335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("en_US_FOO", status); 338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("1) en_US_FOO -> en_US", result, singleton0); 339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // register a new object with the more specific locale 343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // search for an object with that locale 344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should return the new object 345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* singleton1 = new Integer(1); 346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(singleton1, "en_US_FOO", status); 347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("en_US_FOO", status); 350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("2) en_US_FOO -> en_US_FOO", result, singleton1); 351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // search for an object that falls back to the first registered locale 355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("en_US_BAR", status); 358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("3) en_US_BAR -> en_US", result, singleton0); 359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // get a list of the factories, should be two 363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("4) factory size", service.countFactories(), 2); 365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // register a new object with yet another locale 368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* singleton2 = new Integer(2); 369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(singleton2, "en", status); 370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("5) factory size", service.countFactories(), 3); 372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // search for an object with the new locale 375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // stack of factories is now en, en_US_FOO, en_US 376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // search for en_US should still find en_US object 377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("en_US_BAR", status); 380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("6) en_US_BAR -> en_US", result, singleton0); 381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // register a new object with an old id, should hide earlier factory using this id, but leave it there 385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* singleton3 = new Integer(3); 386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru URegistryKey s3key = service.registerInstance(singleton3, "en_US", status); 387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("9) factory size", service.countFactories(), 4); 389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should get data from that new factory 392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("en_US_BAR", status); 395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("10) en_US_BAR -> (3)", result, singleton3); 396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // remove new factory 400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should have fewer factories again 401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // singleton3 dead! 402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.unregister(s3key, status); 405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("11) factory size", service.countFactories(), 3); 406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should get original data again after remove factory 409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("en_US_BAR", status); 412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("12) en_US_BAR -> (3)", result, singleton0); 413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // shouldn't find unregistered ids 417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("foo", status); 420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("13) foo -> null", result, NULL); 421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should find non-canonical strings 425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString resultID; 427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("EN_us_fOo", &resultID, status); 429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("14a) find-non-canonical", result, singleton1); 430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmStringsEqual("14b) find non-canonical", resultID, "en_US_FOO"); 431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should be able to register non-canonical strings and get them canonicalized 435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* singleton4 = new Integer(4); 436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(singleton4, "eN_ca_dUde", status); 437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString resultID; 439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("En_Ca_DuDe", &resultID, status); 441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("15a) find-non-canonical", result, singleton4); 442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmStringsEqual("15b) register non-canonical", resultID, "en_CA_DUDE"); 443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should be able to register invisible factories, these will not 447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // be visible by default, but if you know the secret password you 448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // can still access these services... 449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* singleton5 = new Integer(5); 450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(singleton5, "en_US_BAR", FALSE, status); 451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Integer* result = (Integer*)service.get("en_US_BAR", status); 454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("17) get invisible", result, singleton5); 455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should not be able to locate invisible services 459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 461103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UVector ids(uprv_deleteUObject, uhash_compareUnicodeString, status); 462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getVisibleIDs(ids, status); 463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString target = "en_US_BAR"; 464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmBoolean("18) find invisible", !ids.contains(&target)); 465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // clear factory and caches 468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.reset(); 469ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmBoolean("19) is default", service.isDefault()); 470ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 471ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 472ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ****************************************************************** 474ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 475ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass TestStringSimpleKeyService : public ICUService { 476ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 477ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 478ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& status) 479ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // We could put this type check into ICUService itself, but we'd still 481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // have to implement cloneInstance. Otherwise we could just tell the service 482ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // what the object type is when we create it, and the default implementation 483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // could handle everything for us. Phooey. 48427f654740f2a26ad62a5c155af9199af9e69b889claireho if (obj && dynamic_cast<UnicodeString*>(obj) != NULL) { 485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return ICUService::createSimpleFactory(obj, id, visible, status); 486ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 487ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 488ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 489ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 490ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UObject* cloneInstance(UObject* instance) const { 491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return instance ? new UnicodeString(*(UnicodeString*)instance) : NULL; 492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass TestStringService : public ICUService { 496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const { 498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return LocaleKey::createWithCanonicalFallback(id, NULL, status); // no fallback locale 499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 501ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& /* status */) 502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 50327f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString* s; 50427f654740f2a26ad62a5c155af9199af9e69b889claireho if (obj && (s = dynamic_cast<UnicodeString*>(obj)) != NULL) { 50527f654740f2a26ad62a5c155af9199af9e69b889claireho return new SimpleFactory(s, id, visible); 506ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 507ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 508ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 509ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 510ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UObject* cloneInstance(UObject* instance) const { 511ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return instance ? new UnicodeString(*(UnicodeString*)instance) : NULL; 512ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 513ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 514ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 515ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// this creates a string for any id, but doesn't report anything 516ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass AnonymousStringFactory : public ICUServiceFactory 517ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 518ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 519ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UObject* create(const ICUServiceKey& key, const ICUService* /* service */, UErrorCode& /* status */) const { 520ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return new UnicodeString(key.getID()); 521ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 522ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 523ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual void updateVisibleIDs(Hashtable& /*result*/, UErrorCode& /*status*/) const { 524ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // do nothing 525ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 526ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 527ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UnicodeString& getDisplayName(const UnicodeString& /*id*/, const Locale& /*locale*/, UnicodeString& result) const { 528ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // do nothing 529ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 530ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 531ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 532ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static UClassID getStaticClassID() { 533ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return (UClassID)&fgClassID; 534ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 535ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 536ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UClassID getDynamicClassID() const { 537ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return getStaticClassID(); 538ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 539ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 540ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private: 541ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char fgClassID; 542ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 543ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 544ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char AnonymousStringFactory::fgClassID = '\0'; 545ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 546ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass TestMultipleKeyStringFactory : public ICUServiceFactory { 547ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode _status; 548ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UVector _ids; 549ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString _factoryID; 550ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 551ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 552ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestMultipleKeyStringFactory(const UnicodeString ids[], int32_t count, const UnicodeString& factoryID) 553ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : _status(U_ZERO_ERROR) 554103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius , _ids(uprv_deleteUObject, uhash_compareUnicodeString, count, _status) 555ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru , _factoryID(factoryID + ": ") 556ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 557ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < count; ++i) { 558ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru _ids.addElement(new UnicodeString(ids[i]), _status); 559ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 560ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 561ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 562ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ~TestMultipleKeyStringFactory() { 563ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 564ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 565ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UObject* create(const ICUServiceKey& key, const ICUService* /* service */, UErrorCode& status) const { 566ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) { 567ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 568ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 569ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 570ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru key.currentID(temp); 571ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(_status)) { 572ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (_ids.contains(&temp)) { 573ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return new UnicodeString(_factoryID + temp); 574ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 575ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 576ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = _status; 577ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 578ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 579ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 580ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 581ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void updateVisibleIDs(Hashtable& result, UErrorCode& status) const { 582ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(_status)) { 583ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int32_t i = 0; i < _ids.size(); ++i) { 584ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.put(*(UnicodeString*)_ids[i], (void*)this, status); 585ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 586ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 587ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 588ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 589ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const { 590ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(_status) && _ids.contains((void*)&id)) { 591ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char buffer[128]; 592ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 593ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len = id.extract(buffer, sizeof(buffer), NULL, status); 594ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(status)) { 595ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (len == sizeof(buffer)) { 596ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru --len; 597ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 598ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru buffer[len] = 0; 599ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale loc = Locale::createFromName(buffer); 600ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru loc.getDisplayName(locale, result); 601ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 602ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 603ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 604ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.setToBogus(); // shouldn't happen 605ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 606ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 607ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 608ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static UClassID getStaticClassID() { 609ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return (UClassID)&fgClassID; 610ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 611ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 612ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UClassID getDynamicClassID() const { 613ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return getStaticClassID(); 614ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 615ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 616ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private: 617ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char fgClassID; 618ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 619ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 620ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char TestMultipleKeyStringFactory::fgClassID = '\0'; 621ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 622ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 623ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::testAPI_Two() 624ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 625ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 626ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestStringService service; 627ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerFactory(new AnonymousStringFactory(), status); 628ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 629ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // anonymous factory will still handle the id 630ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 631ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 632ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString en_US = "en_US"; 633ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get(en_US, status); 634ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("21) locale", result, &en_US); 635ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 636ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 637ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 638ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // still normalizes id 639ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 640ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 641ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString en_US_BAR = "en_US_BAR"; 642ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString resultID; 643ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get("EN_us_bar", &resultID, status); 644ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("22) locale", &resultID, &en_US_BAR); 645ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 646ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 647ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 648ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // we can override for particular ids 649ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* singleton0 = new UnicodeString("Zero"); 650ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(singleton0, "en_US_BAR", status); 651ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 652ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 653ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get("en_US_BAR", status); 654ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("23) override super", result, singleton0); 655ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 656ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 657ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 658ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // empty service should not recognize anything 659ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.reset(); 660ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 661ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 662ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get("en_US", status); 663ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("24) empty", result, NULL); 664ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 665ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 666ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // create a custom multiple key factory 667ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 668ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString xids[] = { 669ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "en_US_VALLEY_GIRL", 670ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "en_US_VALLEY_BOY", 671ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "en_US_SURFER_GAL", 672ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "en_US_SURFER_DUDE" 673ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 674ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t count = sizeof(xids)/sizeof(UnicodeString); 675ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 676ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUServiceFactory* f = new TestMultipleKeyStringFactory(xids, count, "Later"); 677ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerFactory(f, status); 678ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 679ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 680ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // iterate over the visual ids returned by the multiple factory 681ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 682ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UVector ids(uprv_deleteUObject, uhash_compareUnicodeString, 0, status); 684ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getVisibleIDs(ids, status); 685ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < ids.size(); ++i) { 686ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString* id = (const UnicodeString*)ids[i]; 687ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get(*id, status); 688ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (result) { 689ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(" " + *id + " --> " + *result); 690ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 691ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 692ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("could not find " + *id); 693ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 694ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 695ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // four visible ids 696ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("25) visible ids", ids.size(), 4); 697ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 698ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 699ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // iterate over the display names 700ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 701ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 702ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UVector names(status); 703ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayNames(names, status); 704ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < names.size(); ++i) { 705ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const StringPair* pair = (const StringPair*)names[i]; 706ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(" " + pair->displayName + " --> " + pair->id); 707ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 708ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("26) display names", names.size(), 4); 709ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 710ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 711ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // no valid display name 712ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 713ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString name; 714ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayName("en_US_VALLEY_GEEK", name); 715ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmBoolean("27) get display name", name.isBogus()); 716ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 717ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 718ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 719ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString name; 720ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayName("en_US_SURFER_DUDE", name, Locale::getEnglish()); 721ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmStringsEqual("28) get display name", name, "English (United States, SURFER_DUDE)"); 722ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 723ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 724ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // register another multiple factory 725ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 726ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString xids[] = { 727ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "en_US_SURFER", 728ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "en_US_SURFER_GAL", 729ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "en_US_SILICON", 730ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "en_US_SILICON_GEEK", 731ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 732ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t count = sizeof(xids)/sizeof(UnicodeString); 733ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 734ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUServiceFactory* f = new TestMultipleKeyStringFactory(xids, count, "Rad dude"); 735ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerFactory(f, status); 736ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 737ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 738ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // this time, we have seven display names 739ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Rad dude's surfer gal 'replaces' Later's surfer gal 740ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 741ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 742ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UVector names(status); 743ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayNames(names, Locale("es"), status); 744ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < names.size(); ++i) { 745ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const StringPair* pair = (const StringPair*)names[i]; 746ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(" " + pair->displayName + " --> " + pair->id); 747ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 74885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho confirmIdentical("29) display names", names.size(), 7); 749ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 750ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 751ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // we should get the display name corresponding to the actual id 752ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // returned by the id we used. 753ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 754ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 755ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString actualID; 756ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString id = "en_us_surfer_gal"; 757ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* gal = (UnicodeString*)service.get(id, &actualID, status); 758ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (gal != NULL) { 759ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString displayName; 760ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("actual id: " + actualID); 761ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayName(actualID, displayName, Locale::getEnglish()); 762ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("found actual: " + *gal + " with display name: " + displayName); 763ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmBoolean("30) found display name for actual", !displayName.isBogus()); 764ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 765ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayName(id, displayName, Locale::getEnglish()); 766ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("found actual: " + *gal + " with display name: " + displayName); 767ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmBoolean("31) found display name for query", displayName.isBogus()); 768ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 769ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete gal; 770ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 771ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("30) service could not find entry for " + id); 772ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 773ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 774ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 775ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // this should be handled by the 'dude' factory, since it overrides en_US_SURFER. 776ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 777ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 778ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString actualID; 779ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString id = "en_US_SURFER_BOZO"; 780ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* bozo = (UnicodeString*)service.get(id, &actualID, status); 781ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (bozo != NULL) { 782ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString displayName; 783ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayName(actualID, displayName, Locale::getEnglish()); 784ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("found actual: " + *bozo + " with display name: " + displayName); 785ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmBoolean("32) found display name for actual", !displayName.isBogus()); 786ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 787ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayName(id, displayName, Locale::getEnglish()); 788ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("found actual: " + *bozo + " with display name: " + displayName); 789ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmBoolean("33) found display name for query", displayName.isBogus()); 790ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 791ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete bozo; 792ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 793ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("32) service could not find entry for " + id); 794ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 795ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 796ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 797ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // certainly not default... 798ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 799ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmBoolean("34) is default ", !service.isDefault()); 800ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 801ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 802ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 803ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 804103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UVector ids(uprv_deleteUObject, uhash_compareUnicodeString, 0, status); 805ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getVisibleIDs(ids, status); 806ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < ids.size(); ++i) { 807ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString* id = (const UnicodeString*)ids[i]; 808ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru msgstr(*id + "? ", service.get(*id, status)); 809ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 810ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 811ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logstr("valleygirl? ", service.get("en_US_VALLEY_GIRL", status)); 812ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logstr("valleyboy? ", service.get("en_US_VALLEY_BOY", status)); 813ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logstr("valleydude? ", service.get("en_US_VALLEY_DUDE", status)); 814ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logstr("surfergirl? ", service.get("en_US_SURFER_GIRL", status)); 815ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 816ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 817ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 818ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 819ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass CalifornioLanguageFactory : public ICUResourceBundleFactory 820ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 821ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 822ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char* californio; // = "en_US_CA"; 823ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char* valley; // = californio ## "_VALLEY"; 824ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char* surfer; // = californio ## "_SURFER"; 825ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char* geek; // = californio ## "_GEEK"; 826ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static Hashtable* supportedIDs; // = NULL; 827ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 828ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static void cleanup(void) { 829ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete supportedIDs; 830ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru supportedIDs = NULL; 831ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 832ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 833ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const Hashtable* getSupportedIDs(UErrorCode& status) const 834ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 835ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (supportedIDs == NULL) { 836ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Hashtable* table = new Hashtable(); 837ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru table->put(UnicodeString(californio), (void*)table, status); 838ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru table->put(UnicodeString(valley), (void*)table, status); 839ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru table->put(UnicodeString(surfer), (void*)table, status); 840ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru table->put(UnicodeString(geek), (void*)table, status); 841ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 842ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // not necessarily atomic, but this is a test... 843ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru supportedIDs = table; 844ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 845ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return supportedIDs; 846ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 847ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 848ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const 849ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 850ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString prefix = ""; 851ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString suffix = ""; 852ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString ls = locale.getName(); 853ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (LocaleUtility::isFallbackOf(californio, ls)) { 854ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (!ls.caseCompare(valley, 0)) { 855ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru prefix = "Like, you know, it's so totally "; 856ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if (!ls.caseCompare(surfer, 0)) { 857ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru prefix = "Dude, it's "; 858ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if (!ls.caseCompare(geek, 0)) { 859ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru prefix = "I'd estimate it is approximately "; 860ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 861ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru prefix = "Huh? Maybe "; 862ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 863ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 864ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (LocaleUtility::isFallbackOf(californio, id)) { 865ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (!id.caseCompare(valley, 0)) { 866ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru suffix = "like the Valley, you know? Let's go to the mall!"; 867ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if (!id.caseCompare(surfer, 0)) { 868ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru suffix = "time to hit those gnarly waves, Dude!!!"; 869ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else if (!id.caseCompare(geek, 0)) { 870ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru suffix = "all systems go. T-Minus 9, 8, 7..."; 871ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 872ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru suffix = "No Habla Englais"; 873ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 874ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 875ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru suffix = ICUResourceBundleFactory::getDisplayName(id, locale, result); 876ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 877ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 878ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result = prefix + suffix; 879ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 880ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 881ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 882ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 883ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char* CalifornioLanguageFactory::californio = "en_US_CA"; 884ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char* CalifornioLanguageFactory::valley = "en_US_CA_VALLEY"; 885ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char* CalifornioLanguageFactory::surfer = "en_US_CA_SURFER"; 886ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char* CalifornioLanguageFactory::geek = "en_US_CA_GEEK"; 887ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruHashtable* CalifornioLanguageFactory::supportedIDs = NULL; 888ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 889ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 890ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::testRBF() 891ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 892ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // resource bundle factory. 893ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 894ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestStringService service; 895ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerFactory(new ICUResourceBundleFactory(), status); 896ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 897ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // list all of the resources 898ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 899ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 900103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UVector ids(uprv_deleteUObject, uhash_compareUnicodeString, 0, status); 901ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getVisibleIDs(ids, status); 902ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("all visible ids:"); 903ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < ids.size(); ++i) { 904ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString* id = (const UnicodeString*)ids[i]; 905ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(*id); 906ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 907ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 908ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 909ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // get all the display names of these resources 910ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // this should be fast since the display names were cached. 911ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 912ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 913ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UVector names(status); 914ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayNames(names, Locale::getGermany(), status); 915ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("service display names for de_DE"); 916ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < names.size(); ++i) { 917ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const StringPair* pair = (const StringPair*)names[i]; 918ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(" " + pair->displayName + " --> " + pair->id); 919ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 920ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 921ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 922ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerFactory(new CalifornioLanguageFactory(), status); 923ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 924ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // get all the display names of these resources 925ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 926ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("californio language factory:"); 927ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* idNames[] = { 928ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CalifornioLanguageFactory::californio, 929ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CalifornioLanguageFactory::valley, 930ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CalifornioLanguageFactory::surfer, 931ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CalifornioLanguageFactory::geek, 932ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 933ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t count = sizeof(idNames)/sizeof(idNames[0]); 934ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 935ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < count; ++i) { 936ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(UnicodeString("\n --- ") + idNames[i] + " ---"); 937ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 938ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 939ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UVector names(status); 940ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getDisplayNames(names, idNames[i], status); 941ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < names.size(); ++i) { 942ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const StringPair* pair = (const StringPair*)names[i]; 943ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(" " + pair->displayName + " --> " + pair->id); 944ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 945ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 946ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 947ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 948ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CalifornioLanguageFactory::cleanup(); 949ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 950ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 951ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass SimpleListener : public ServiceListener { 952ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUServiceTest* _test; 953ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString _name; 954ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 955ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 95659d709d503bab6e2b61931737e662dd293b40578ccornelius SimpleListener(ICUServiceTest* test, const UnicodeString& name) : _test(test), _name(name) {} 957ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 958ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual void serviceChanged(const ICUService& service) const { 959ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString serviceName = "listener "; 960ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru serviceName.append(_name); 961ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru serviceName.append(" n++"); 962ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru serviceName.append(" service changed: " ); 963ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getName(serviceName); 964ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru _test->logln(serviceName); 965ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 966ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 967ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 968ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 969ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::testNotification() 970ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 971ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru SimpleListener one(this, "one"); 972ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru SimpleListener two(this, "two"); 973ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 974ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 975ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 976ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("simple registration notification"); 977ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestStringService ls; 978ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.addListener(&one, status); 979ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.addListener(&two, status); 980ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 981ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("registering foo... "); 982ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.registerInstance(new UnicodeString("Foo"), "en_FOO", status); 983ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("registering bar... "); 984ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.registerInstance(new UnicodeString("Bar"), "en_BAR", status); 985ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("getting foo..."); 986ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)ls.get("en_FOO", status); 987ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(*result); 988ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 989ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 990ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("removing listener 2..."); 991ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.removeListener(&two, status); 992ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("registering baz..."); 993ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.registerInstance(new UnicodeString("Baz"), "en_BAZ", status); 994ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("removing listener 1"); 995ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.removeListener(&one, status); 996ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("registering burp..."); 997ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.registerInstance(new UnicodeString("Burp"), "en_BURP", status); 998ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 999ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // should only get one notification even if register multiple times 1000ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("... trying multiple registration"); 1001ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.addListener(&one, status); 1002ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.addListener(&one, status); 1003ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.addListener(&one, status); 1004ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.addListener(&two, status); 1005ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.registerInstance(new UnicodeString("Foo"), "en_FOO", status); 1006ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("... registered foo"); 1007ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1008ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if 0 1009ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // same thread, so we can't callback within notification, unlike Java 1010ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ServiceListener l3 = new ServiceListener() { 1011ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate int n; 1012ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic void serviceChanged(ICUService s) { 1013ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("listener 3 report " + n++ + " service changed..."); 1014ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (s.get("en_BOINK") == null) { // don't recurse on ourselves!!! 1015ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("registering boink..."); 1016ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru s.registerInstance("boink", "en_BOINK"); 1017ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1018ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 1019ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 1020ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.addListener(l3); 1021ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("registering boo..."); 1022ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ls.registerInstance("Boo", "en_BOO"); 1023ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 1024ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1025ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("...done"); 1026ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 1027ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1028ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass TestStringLocaleService : public ICULocaleService { 1029ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 1030ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UObject* cloneInstance(UObject* instance) const { 1031ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return instance ? new UnicodeString(*(UnicodeString*)instance) : NULL; 1032ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1033ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 1034ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1035ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid ICUServiceTest::testLocale() { 1036ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1037ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestStringLocaleService service; 1038ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1039ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* root = new UnicodeString("root"); 1040ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* german = new UnicodeString("german"); 1041ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* germany = new UnicodeString("german_Germany"); 1042ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* japanese = new UnicodeString("japanese"); 1043ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* japan = new UnicodeString("japanese_Japan"); 1044ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1045ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(root, "", status); 1046ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(german, "de", status); 1047ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(germany, Locale::getGermany(), status); 1048ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(japanese, (UnicodeString)"ja", TRUE, status); 1049ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(japan, Locale::getJapan(), status); 1050ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1051ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1052ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1053ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", status); 1054ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US", german, target); 1055ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1056ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1057ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1058ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1059ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1060ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", LocaleKey::KIND_ANY, status); 1061ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US 2", german, target); 1062ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1063ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1064ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1065ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1066ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1067ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", 1234, status); 1068ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US 3", german, target); 1069ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1070ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1071ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1072ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1073ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1074ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale actualReturn; 1075ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", &actualReturn, status); 1076ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US 5", german, target); 1077ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US 6", &actualReturn, &Locale::getGerman()); 1078ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1079ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1080ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1081ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1082ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1083ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale actualReturn; 1084ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", LocaleKey::KIND_ANY, &actualReturn, status); 1085ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US 7", &actualReturn, &Locale::getGerman()); 1086ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1087ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1088ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1089ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1090ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1091ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale actualReturn; 1092ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", 1234, &actualReturn, status); 1093ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US 8", german, target); 1094ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US 9", &actualReturn, &Locale::getGerman()); 1095ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1096ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1097ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1098ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* one = new UnicodeString("one/de_US"); 1099ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* two = new UnicodeString("two/de_US"); 1100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(one, Locale("de_US"), 1, status); 1102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(two, Locale("de_US"), 2, status); 1103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", 1, status); 1107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US kind 1", one, target); 1108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", 2, status); 1114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US kind 2", two, target); 1115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("de_US", status); 1121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test de_US kind 3", german, target); 1122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString english = "en"; 1128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale localeResult; 1129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString result; 1130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LocaleKey* lkey = LocaleKey::createWithCanonicalFallback(&english, NULL, 1234, status); 1131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("lkey prefix: " + lkey->prefix(result)); 1132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.remove(); 1133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("lkey descriptor: " + lkey->currentDescriptor(result)); 1134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.remove(); 1135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(UnicodeString("lkey current locale: ") + lkey->currentLocale(localeResult).getName()); 1136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.remove(); 1137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lkey->fallback(); 1139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("lkey descriptor 2: " + lkey->currentDescriptor(result)); 1140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.remove(); 1141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lkey->fallback(); 1143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("lkey descriptor 3: " + lkey->currentDescriptor(result)); 1144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.remove(); 1145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete lkey; // tentatively weiv 1146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("za_PPP", status); 1151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test zappp", root, target); 1152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale loc = Locale::getDefault(); 1156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale::setDefault(Locale::getJapanese(), status); 1157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("za_PPP", status); 1160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test with ja locale", japanese, target); 1161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UVector ids(uprv_deleteUObject, uhash_compareUnicodeString, 0, status); 1167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getVisibleIDs(ids, status); 1168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("all visible ids:"); 1169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < ids.size(); ++i) { 1170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString* id = (const UnicodeString*)ids[i]; 1171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(*id); 1172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale::setDefault(loc, status); 1176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UVector ids(uprv_deleteUObject, uhash_compareUnicodeString, 0, status); 1179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getVisibleIDs(ids, status); 1180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("all visible ids:"); 1181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (int i = 0; i < ids.size(); ++i) { 1182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString* id = (const UnicodeString*)ids[i]; 1183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(*id); 1184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* target = (UnicodeString*)service.get("za_PPP", status); 1190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("test with en locale", root, target); 1191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete target; 1192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru StringEnumeration* locales = service.getAvailableLocales(); 1197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (locales) { 1198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("test available locales", locales->count(status), 6); 1199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("locales: "); 1200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* p; 1202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while ((p = locales->next(NULL, status))) { 1203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(p); 1204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(" "); 1207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete locales; 1208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 1209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("could not create available locales"); 1210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 1213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass WrapFactory : public ICUServiceFactory { 1215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 1216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const UnicodeString& getGreetingID() { 1217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (greetingID == NULL) { 1218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru greetingID = new UnicodeString("greeting"); 1219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return *greetingID; 1221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static void cleanup() { 1224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete greetingID; 1225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru greetingID = NULL; 1226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const { 1229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(status)) { 1230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 1231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (key.currentID(temp).compare(getGreetingID()) == 0) { 1232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* previous = (UnicodeString*)service->getKey((ICUServiceKey&)key, NULL, this, status); 1233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (previous) { 1234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru previous->insert(0, "A different greeting: \""); 1235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru previous->append("\""); 1236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return previous; 1237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 1241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void updateVisibleIDs(Hashtable& result, UErrorCode& status) const { 1244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(status)) { 1245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.put("greeting", (void*)this, status); 1246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString& getDisplayName(const UnicodeString& id, const Locale& /* locale */, UnicodeString& result) const { 1250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append("wrap '"); 1251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append(id); 1252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru result.append("'"); 1253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 1254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /** 1257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * UObject boilerplate. 1258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 1259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static UClassID getStaticClassID() { 1260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return (UClassID)&fgClassID; 1261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru virtual UClassID getDynamicClassID() const { 1264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return getStaticClassID(); 1265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private: 1268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static const char fgClassID; 1269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru static UnicodeString* greetingID; 1270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 1271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString* WrapFactory::greetingID = NULL; 1273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst char WrapFactory::fgClassID = '\0'; 1274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 1276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruICUServiceTest::testWrapFactory() 1277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 1278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* greeting = new UnicodeString("Hello There"); 1279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString greetingID = "greeting"; 1280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestStringService service; 1282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(greeting, greetingID, status); 1283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get(greetingID, status); 1287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (result) { 1288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("test one: " + *result); 1289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 1290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerFactory(new WrapFactory(), status); 1294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get(greetingID, status); 1297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString target = "A different greeting: \"Hello There\""; 1298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmEqual("wrap test: ", result, &target); 1299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 1300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru WrapFactory::cleanup(); 1303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 1304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // misc coverage tests 1306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid ICUServiceTest::testCoverage() 1307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 1308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // ICUServiceKey 1309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 1311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUServiceKey key("foobar"); 1312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("ID: " + key.getID()); 1313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("canonicalID: " + key.canonicalID(temp)); 1314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("currentID: " + key.currentID(temp.remove())); 1315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("has fallback: " + UnicodeString(key.fallback() ? "true" : "false")); 1316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (key.getDynamicClassID() != ICUServiceKey::getStaticClassID()) { 1318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("service key rtt failed."); 1319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // SimpleFactory 1323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* obj = new UnicodeString("An Object"); 1327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru SimpleFactory* sf = new SimpleFactory(obj, "object"); 1328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString temp; 1330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(sf->getDisplayName("object", Locale::getDefault(), temp)); 1331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (sf->getDynamicClassID() != SimpleFactory::getStaticClassID()) { 1333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("simple factory rtti failed."); 1334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // ICUService 1337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestStringService service; 1339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerFactory(sf, status); 1340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get("object", status); 1343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (result) { 1344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("object is: " + *result); 1345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 1346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 1347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("could not get object"); 1348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // ICUServiceKey 1354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* howdy = new UnicodeString("Howdy"); 1357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TestStringSimpleKeyService service; 1359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.registerInstance(howdy, "Greetings", status); 1360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = (UnicodeString*)service.get("Greetings", status); 1362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (result) { 1363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("object is: " + *result); 1364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete result; 1365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 1366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("could not get object"); 1367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1370103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UVector ids(uprv_deleteUObject, uhash_compareUnicodeString, status); 1371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // yuck, this is awkward to use. All because we pass null in an overload. 1372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // TODO: change this. 1373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString str("Greet"); 1374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru service.getVisibleIDs(ids, &str, status); 1375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru confirmIdentical("no fallback of greet", ids.size(), 0); 1376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // ICULocaleService 1379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // LocaleKey 1381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 1382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString primary("en_US"); 1383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString fallback("ja_JP"); 1384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LocaleKey* key = LocaleKey::createWithCanonicalFallback(&primary, &fallback, status); 1386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (key->getDynamicClassID() != LocaleKey::getStaticClassID()) { 1388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("localekey rtti error"); 1389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (!key->isFallbackOf("en_US_FOOBAR")) { 1392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("localekey should be fallback for en_US_FOOBAR"); 1393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (!key->isFallbackOf("en_US")) { 1395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("localekey should be fallback for en_US"); 1396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (key->isFallbackOf("en")) { 1398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("localekey should not be fallback for en"); 1399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru do { 1402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Locale loc; 1403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(UnicodeString("current locale: ") + key->currentLocale(loc).getName()); 1404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(UnicodeString("canonical locale: ") + key->canonicalLocale(loc).getName()); 1405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(UnicodeString("is fallback of en: ") + (key->isFallbackOf("en") ? "true" : " false")); 1406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } while (key->fallback()); 1407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete key; 1408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // LocaleKeyFactory 1410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru key = LocaleKey::createWithCanonicalFallback(&primary, &fallback, status); 1411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString result; 1413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LKFSubclass lkf(TRUE); // empty 1414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Hashtable table; 1415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UObject *obj = lkf.create(*key, NULL, status); 1417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("obj: " + UnicodeString(obj ? "obj" : "null")); 1418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(lkf.getDisplayName("en_US", Locale::getDefault(), result)); 1419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lkf.updateVisibleIDs(table, status); 1420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete obj; 1421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (table.count() != 1) { 1422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("visible IDs does not contain en_US"); 1423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LKFSubclass invisibleLKF(FALSE); 1426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru obj = lkf.create(*key, NULL, status); 1427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("obj: " + UnicodeString(obj ? "obj" : "null")); 1428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(invisibleLKF.getDisplayName("en_US", Locale::getDefault(), result.remove())); 1429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru invisibleLKF.updateVisibleIDs(table, status); 1430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (table.count() != 0) { 1431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("visible IDs contains en_US"); 1432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete obj; 1434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete key; 1435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru key = LocaleKey::createWithCanonicalFallback(&primary, &fallback, 123, status); 1437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_SUCCESS(status)) { 1438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString str; 1439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru key->currentDescriptor(str); 1440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru key->parsePrefix(str); 1441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (str != "123") { 1442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("did not get expected prefix"); 1443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete key; 1445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // coverage, getSupportedIDs is either overridden or the calling method is 1448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LKFSubclass0 lkFactory; 1449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Hashtable table0; 1450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lkFactory.updateVisibleIDs(table0, status); 1451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (table0.count() != 0) { 1452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("LKF returned non-empty hashtable"); 1453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // ResourceBundleFactory 1457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru key = LocaleKey::createWithCanonicalFallback(&primary, &fallback, status); 1458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUResourceBundleFactory rbf; 1459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UObject* icurb = rbf.create(*key, NULL, status); 1460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (icurb != NULL) { 1461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("got resource bundle for key"); 1462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete icurb; 1463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete key; 1465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru #if 0 1468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // ICUNotifier 1469ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ICUNotifier nf = new ICUNSubclass(); 1470ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru try { 1471ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nf.addListener(null); 1472ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("added null listener"); 1473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1474ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catch (NullPointerException e) { 1475ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(e.getMessage()); 1476ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1477ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catch (Exception e) { 1478ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("got wrong exception"); 1479ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru try { 1482ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nf.addListener(new WrongListener()); 1483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("added wrong listener"); 1484ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catch (InternalError e) { 1486ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(e.getMessage()); 1487ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1488ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catch (Exception e) { 1489ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("got wrong exception"); 1490ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru try { 1493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nf.removeListener(null); 1494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("removed null listener"); 1495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catch (NullPointerException e) { 1497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(e.getMessage()); 1498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru catch (Exception e) { 1500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("got wrong exception"); 1501ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 1502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1503ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nf.removeListener(new MyListener()); 1504ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nf.notifyChanged(); 1505ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nf.addListener(new MyListener()); 1506ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nf.removeListener(new MyListener()); 1507ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 1508ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 1509ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1510ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1511ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* !UCONFIG_NO_SERVICE */ 1512ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 1513ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1514ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 1515