• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*********************************************************************
2  * COPYRIGHT:
3  * Copyright (c) 2010-2014, International Business Machines Corporation and
4  * others. All Rights Reserved.
5  *********************************************************************/
6 
7 #include "locnmtst.h"
8 #include "cstring.h"
9 
10 /*
11  Usage:
12     test_assert(    Test (should be TRUE)  )
13 
14    Example:
15        test_assert(i==3);
16 
17    the macro is ugly but makes the tests pretty.
18 */
19 
20 #define test_assert(test) \
21     { \
22         if(!(test)) \
23             errln("FAIL: " #test " was not true. In " __FILE__ " on line %d", __LINE__ ); \
24         else \
25             logln("PASS: asserted " #test); \
26     }
27 
28 /*
29  Usage:
30     test_assert_print(    Test (should be TRUE),  printable  )
31 
32    Example:
33        test_assert(i==3, toString(i));
34 
35    the macro is ugly but makes the tests pretty.
36 */
37 
38 #define test_assert_print(test,print) \
39     { \
40         if(!(test)) \
41             errln("FAIL: " #test " was not true. " + UnicodeString(print) ); \
42         else \
43             logln("PASS: asserted " #test "-> " + UnicodeString(print)); \
44     }
45 
46 #define test_assert_equal(target,value) \
47   { \
48     if (UnicodeString(target)!=(value)) { \
49       logln("unexpected value '" + (value) + "'"); \
50       dataerrln("FAIL: " #target " == " #value " was not true. In " __FILE__ " on line %d", __LINE__); \
51     } else { \
52       logln("PASS: asserted " #target " == " #value); \
53     } \
54   }
55 
56 #define test_dumpLocale(l) { logln(#l " = " + UnicodeString(l.getName(), "")); }
57 
LocaleDisplayNamesTest()58 LocaleDisplayNamesTest::LocaleDisplayNamesTest() {
59 }
60 
~LocaleDisplayNamesTest()61 LocaleDisplayNamesTest::~LocaleDisplayNamesTest() {
62 }
63 
runIndexedTest(int32_t index,UBool exec,const char * & name,char *)64 void LocaleDisplayNamesTest::runIndexedTest(int32_t index, UBool exec, const char* &name,
65                         char* /*par*/) {
66     switch (index) {
67 #if !UCONFIG_NO_FORMATTING
68         TESTCASE(0, TestCreate);
69         TESTCASE(1, TestCreateDialect);
70         TESTCASE(2, TestWithKeywordsAndEverything);
71         TESTCASE(3, TestUldnOpen);
72         TESTCASE(4, TestUldnOpenDialect);
73         TESTCASE(5, TestUldnWithKeywordsAndEverything);
74         TESTCASE(6, TestUldnComponents);
75         TESTCASE(7, TestRootEtc);
76         TESTCASE(8, TestCurrencyKeyword);
77         TESTCASE(9, TestUnknownCurrencyKeyword);
78         TESTCASE(10, TestUntranslatedKeywords);
79         TESTCASE(11, TestPrivateUse);
80         TESTCASE(12, TestUldnDisplayContext);
81 #endif
82         default:
83             name = "";
84             break;
85     }
86 }
87 
88 #if !UCONFIG_NO_FORMATTING
TestCreate()89 void LocaleDisplayNamesTest::TestCreate() {
90   UnicodeString temp;
91   LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getGermany());
92   ldn->localeDisplayName("de_DE", temp);
93   delete ldn;
94   test_assert_equal("Deutsch (Deutschland)", temp);
95 }
96 
TestCreateDialect()97 void LocaleDisplayNamesTest::TestCreateDialect() {
98   UnicodeString temp;
99   LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS(), ULDN_DIALECT_NAMES);
100   ldn->localeDisplayName("en_GB", temp);
101   delete ldn;
102   test_assert_equal("British English", temp);
103 }
104 
TestWithKeywordsAndEverything()105 void LocaleDisplayNamesTest::TestWithKeywordsAndEverything() {
106   UnicodeString temp;
107   LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
108   const char *locname = "en_Hant_US_VALLEY@calendar=gregorian;collation=phonebook";
109   const char *target = "English (Traditional, United States, VALLEY, "
110     "Gregorian Calendar, Phonebook Sort Order)";
111   ldn->localeDisplayName(locname, temp);
112   delete ldn;
113   test_assert_equal(target, temp);
114 }
115 
TestCurrencyKeyword()116 void LocaleDisplayNamesTest::TestCurrencyKeyword() {
117   UnicodeString temp;
118   LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
119   const char *locname = "ja@currency=JPY";
120   const char *target = "Japanese (Japanese Yen)";
121   ldn->localeDisplayName(locname, temp);
122   delete ldn;
123   test_assert_equal(target, temp);
124 }
125 
TestUnknownCurrencyKeyword()126 void LocaleDisplayNamesTest::TestUnknownCurrencyKeyword() {
127   UnicodeString temp;
128   LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
129   const char *locname = "de@currency=XYZ";
130   const char *target = "German (Currency: XYZ)";
131   ldn->localeDisplayName(locname, temp);
132   delete ldn;
133   test_assert_equal(target, temp);
134 }
135 
TestUntranslatedKeywords()136 void LocaleDisplayNamesTest::TestUntranslatedKeywords() {
137   UnicodeString temp;
138   LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
139   const char *locname = "de@foo=bar";
140   const char *target = "German (foo=bar)";
141   ldn->localeDisplayName(locname, temp);
142   delete ldn;
143   test_assert_equal(target, temp);
144 }
145 
TestPrivateUse()146 void LocaleDisplayNamesTest::TestPrivateUse() {
147   UnicodeString temp;
148   LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
149   const char *locname = "de@x=foobar";
150   const char *target = "German (Private-Use: foobar)";
151   ldn->localeDisplayName(locname, temp);
152   delete ldn;
153   test_assert_equal(target, temp);
154 }
155 
TestUldnOpen()156 void LocaleDisplayNamesTest::TestUldnOpen() {
157   UErrorCode status = U_ZERO_ERROR;
158   const int32_t kMaxResultSize = 150;  // long enough
159   UChar result[150];
160   ULocaleDisplayNames *ldn = uldn_open(Locale::getGermany().getName(), ULDN_STANDARD_NAMES, &status);
161   int32_t len = uldn_localeDisplayName(ldn, "de_DE", result, kMaxResultSize, &status);
162   uldn_close(ldn);
163   test_assert(U_SUCCESS(status));
164 
165   UnicodeString str(result, len, kMaxResultSize);
166   test_assert_equal("Deutsch (Deutschland)", str);
167 
168   // make sure that NULL gives us the default locale as usual
169   ldn = uldn_open(NULL, ULDN_STANDARD_NAMES, &status);
170   const char *locale = uldn_getLocale(ldn);
171   if(0 != uprv_strcmp(uloc_getDefault(), locale)) {
172     errln("uldn_getLocale(uldn_open(NULL))=%s != default locale %s\n", locale, uloc_getDefault());
173   }
174   uldn_close(ldn);
175   test_assert(U_SUCCESS(status));
176 }
177 
TestUldnOpenDialect()178 void LocaleDisplayNamesTest::TestUldnOpenDialect() {
179   UErrorCode status = U_ZERO_ERROR;
180   const int32_t kMaxResultSize = 150;  // long enough
181   UChar result[150];
182   ULocaleDisplayNames *ldn = uldn_open(Locale::getUS().getName(), ULDN_DIALECT_NAMES, &status);
183   int32_t len = uldn_localeDisplayName(ldn, "en_GB", result, kMaxResultSize, &status);
184   uldn_close(ldn);
185   test_assert(U_SUCCESS(status));
186 
187   UnicodeString str(result, len, kMaxResultSize);
188   test_assert_equal("British English", str);
189 }
190 
TestUldnWithKeywordsAndEverything()191 void LocaleDisplayNamesTest::TestUldnWithKeywordsAndEverything() {
192   UErrorCode status = U_ZERO_ERROR;
193   const int32_t kMaxResultSize = 150;  // long enough
194   UChar result[150];
195   const char *locname = "en_Hant_US_VALLEY@calendar=gregorian;collation=phonebook";
196   const char *target = "English (Traditional, United States, VALLEY, "
197     "Gregorian Calendar, Phonebook Sort Order)";
198   ULocaleDisplayNames *ldn = uldn_open(Locale::getUS().getName(), ULDN_STANDARD_NAMES, &status);
199   int32_t len = uldn_localeDisplayName(ldn, locname, result, kMaxResultSize, &status);
200   uldn_close(ldn);
201   test_assert(U_SUCCESS(status));
202 
203   UnicodeString str(result, len, kMaxResultSize);
204   test_assert_equal(target, str);
205 }
206 
TestUldnComponents()207 void LocaleDisplayNamesTest::TestUldnComponents() {
208   UErrorCode status = U_ZERO_ERROR;
209   const int32_t kMaxResultSize = 150;  // long enough
210   UChar result[150];
211 
212   ULocaleDisplayNames *ldn = uldn_open(Locale::getGermany().getName(), ULDN_STANDARD_NAMES, &status);
213   test_assert(U_SUCCESS(status));
214   if (U_FAILURE(status)) {
215     return;
216   }
217 
218   // "en_Hant_US_PRE_EURO@calendar=gregorian";
219 
220   {
221     int32_t len = uldn_languageDisplayName(ldn, "en", result, kMaxResultSize, &status);
222     UnicodeString str(result, len, kMaxResultSize);
223     test_assert_equal("Englisch", str);
224   }
225 
226 
227   {
228     int32_t len = uldn_scriptDisplayName(ldn, "Hant", result, kMaxResultSize, &status);
229     UnicodeString str(result, len, kMaxResultSize);
230     test_assert_equal("Traditionell", str);
231   }
232 
233   {
234     int32_t len = uldn_scriptCodeDisplayName(ldn, USCRIPT_TRADITIONAL_HAN, result, kMaxResultSize,
235                          &status);
236     UnicodeString str(result, len, kMaxResultSize);
237     test_assert_equal("Traditionell", str);
238   }
239 
240   {
241     int32_t len = uldn_regionDisplayName(ldn, "US", result, kMaxResultSize, &status);
242     UnicodeString str(result, len, kMaxResultSize);
243     test_assert_equal("Vereinigte Staaten", str);
244   }
245 
246   {
247     int32_t len = uldn_variantDisplayName(ldn, "PRE_EURO", result, kMaxResultSize, &status);
248     UnicodeString str(result, len, kMaxResultSize);
249     test_assert_equal("PRE_EURO", str);
250   }
251 
252   {
253     int32_t len = uldn_keyDisplayName(ldn, "calendar", result, kMaxResultSize, &status);
254     UnicodeString str(result, len, kMaxResultSize);
255     test_assert_equal("Kalender", str);
256   }
257 
258   {
259     int32_t len = uldn_keyValueDisplayName(ldn, "calendar", "gregorian", result,
260                        kMaxResultSize, &status);
261     UnicodeString str(result, len, kMaxResultSize);
262     test_assert_equal("Gregorianischer Kalender", str);
263   }
264 
265   uldn_close(ldn);
266 }
267 
268 
269 typedef struct {
270     const char * displayLocale;
271     UDisplayContext dialectHandling;
272     UDisplayContext capitalization;
273     UDisplayContext displayLength;
274     const char * localeToBeNamed;
275     const UChar * result;
276 } LocNameDispContextItem;
277 
278 static char en[]    = "en";
279 static char en_GB[] = "en_GB";
280 
281 static UChar daFor_en[]       = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"engelsk"
282 static UChar daFor_en_GB[]    = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x53,0x74,0x6F,0x72,0x62,0x72,0x69,0x74,0x61,0x6E,0x6E,0x69,0x65,0x6E,0x29,0}; //"engelsk (Storbritannien)"
283 static UChar daFor_en_GB_S[]  = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x55,0x4B,0x29,0}; //"engelsk (UK)"
284 static UChar daFor_en_GB_D[]  = {0x62,0x72,0x69,0x74,0x69,0x73,0x6B,0x20,0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"britisk engelsk"
285 static UChar esFor_en[]       = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0}; //"ingles" with acute on the e
286 static UChar esFor_en_GB[]    = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x28,0x52,0x65,0x69,0x6E,0x6F,0x20,0x55,0x6E,0x69,0x64,0x6F,0x29,0}; //"ingles (Reino Unido)" ...
287 static UChar esFor_en_GB_S[]  = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x28,0x52,0x55,0x29,0}; //"ingles (RU)" ...
288 static UChar esFor_en_GB_D[]  = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x62,0x72,0x69,0x74,0xE1,0x6E,0x69,0x63,0x6F,0}; //"ingles britanico" with acute on the e, a
289 #if !UCONFIG_NO_BREAK_ITERATION
290 static UChar daFor_en_T[]     = {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"Engelsk"
291 static UChar daFor_en_GB_T[]  = {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x53,0x74,0x6F,0x72,0x62,0x72,0x69,0x74,0x61,0x6E,0x6E,0x69,0x65,0x6E,0x29,0}; //"Engelsk (Storbritannien)"
292 static UChar daFor_en_GB_ST[] = {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x55,0x4B,0x29,0}; //"Engelsk (UK)"
293 static UChar daFor_en_GB_DT[] = {0x42,0x72,0x69,0x74,0x69,0x73,0x6B,0x20,0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"Britisk engelsk"
294 static UChar esFor_en_T[]     = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0}; //"Ingles" with acute on the e
295 static UChar esFor_en_GB_T[]  = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x28,0x52,0x65,0x69,0x6E,0x6F,0x20,0x55,0x6E,0x69,0x64,0x6F,0x29,0}; //"Ingles (Reino Unido)" ...
296 static UChar esFor_en_GB_ST[] = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x28,0x52,0x55,0x29,0}; //"Ingles (RU)" ...
297 static UChar esFor_en_GB_DT[] = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x62,0x72,0x69,0x74,0xE1,0x6E,0x69,0x63,0x6F,0}; //"Ingles britanico" with acute on the e, a
298 #endif /* #if !UCONFIG_NO_BREAK_ITERATION */
299 
300 static const LocNameDispContextItem ctxtItems[] = {
301     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UDISPCTX_LENGTH_FULL,   en,    daFor_en },
302     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UDISPCTX_LENGTH_FULL,   en_GB, daFor_en_GB },
303     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UDISPCTX_LENGTH_SHORT,  en_GB, daFor_en_GB_S },
304     { "da", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UDISPCTX_LENGTH_FULL,   en_GB, daFor_en_GB_D },
305     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UDISPCTX_LENGTH_FULL,   en,    esFor_en },
306     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UDISPCTX_LENGTH_FULL,   en_GB, esFor_en_GB },
307     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UDISPCTX_LENGTH_SHORT,  en_GB, esFor_en_GB_S },
308     { "es", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UDISPCTX_LENGTH_FULL,   en_GB, esFor_en_GB_D },
309 #if !UCONFIG_NO_BREAK_ITERATION
310     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL,   en,    daFor_en_T },
311     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL,   en_GB, daFor_en_GB_T },
312     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_SHORT,  en_GB, daFor_en_GB_ST },
313     { "da", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL,   en_GB, daFor_en_GB_DT },
314     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL,   en,    esFor_en_T },
315     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL,   en_GB, esFor_en_GB_T },
316     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_SHORT,  en_GB, esFor_en_GB_ST },
317     { "es", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UDISPCTX_LENGTH_FULL,   en_GB, esFor_en_GB_DT },
318 
319     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UDISPCTX_LENGTH_FULL,   en,    daFor_en_T },
320     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UDISPCTX_LENGTH_FULL,   en_GB, daFor_en_GB_T },
321     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UDISPCTX_LENGTH_SHORT,  en_GB, daFor_en_GB_ST },
322     { "da", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UDISPCTX_LENGTH_FULL,   en_GB, daFor_en_GB_DT },
323     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UDISPCTX_LENGTH_FULL,   en,    esFor_en_T },
324     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UDISPCTX_LENGTH_FULL,   en_GB, esFor_en_GB_T },
325     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UDISPCTX_LENGTH_SHORT,  en_GB, esFor_en_GB_ST },
326     { "es", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UDISPCTX_LENGTH_FULL,   en_GB, esFor_en_GB_DT },
327 
328     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UDISPCTX_LENGTH_FULL,   en,    daFor_en },
329     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UDISPCTX_LENGTH_FULL,   en_GB, daFor_en_GB },
330     { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UDISPCTX_LENGTH_SHORT,  en_GB, daFor_en_GB_S },
331     { "da", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UDISPCTX_LENGTH_FULL,   en_GB, daFor_en_GB_D },
332     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UDISPCTX_LENGTH_FULL,   en,    esFor_en_T },
333     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UDISPCTX_LENGTH_FULL,   en_GB, esFor_en_GB_T },
334     { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UDISPCTX_LENGTH_SHORT,  en_GB, esFor_en_GB_ST },
335     { "es", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UDISPCTX_LENGTH_FULL,   en_GB, esFor_en_GB_DT },
336  #endif /* #if !UCONFIG_NO_BREAK_ITERATION */
337     { NULL, (UDisplayContext)0,      (UDisplayContext)0,                                (UDisplayContext)0,     NULL,  NULL }
338 };
339 
TestUldnDisplayContext()340 void LocaleDisplayNamesTest::TestUldnDisplayContext() {
341     const LocNameDispContextItem * ctxtItemPtr;
342     for (ctxtItemPtr = ctxtItems; ctxtItemPtr->displayLocale != NULL; ctxtItemPtr++) {
343         UDisplayContext contexts[3] = {ctxtItemPtr->dialectHandling, ctxtItemPtr->capitalization, ctxtItemPtr->displayLength};
344         UErrorCode status = U_ZERO_ERROR;
345         ULocaleDisplayNames * uldn = uldn_openForContext(ctxtItemPtr->displayLocale, contexts, 3, &status);
346         if (U_FAILURE(status)) {
347             errln(UnicodeString("FAIL: uldn_openForContext failed for locale ") + ctxtItemPtr->displayLocale +
348                   ", dialectHandling " + ctxtItemPtr->dialectHandling +
349                   ", capitalization " +  ctxtItemPtr->capitalization +
350                   ", displayLength " +  ctxtItemPtr->displayLength);
351         } else {
352             UDisplayContext dialectHandling = uldn_getContext(uldn, UDISPCTX_TYPE_DIALECT_HANDLING, &status);
353             UDisplayContext capitalization = uldn_getContext(uldn, UDISPCTX_TYPE_CAPITALIZATION, &status);
354             UDisplayContext displayLength = uldn_getContext(uldn, UDISPCTX_TYPE_DISPLAY_LENGTH, &status);
355             if (U_FAILURE(status)) {
356                 errln(UnicodeString("FAIL: uldn_getContext status ") + (int)status);
357             } else if (dialectHandling != ctxtItemPtr->dialectHandling ||
358                        capitalization != ctxtItemPtr->capitalization ||
359                        displayLength != ctxtItemPtr->displayLength) {
360                 errln("FAIL: uldn_getContext retrieved incorrect dialectHandling, capitalization, or displayLength");
361             } else {
362                 UChar nameBuf[ULOC_FULLNAME_CAPACITY];
363                 int32_t len = uldn_localeDisplayName(uldn, ctxtItemPtr->localeToBeNamed, nameBuf, ULOC_FULLNAME_CAPACITY, &status);
364                 if (U_FAILURE(status)) {
365                     dataerrln(UnicodeString("FAIL: uldn_localeDisplayName status: ") + u_errorName(status));
366                 } else if (u_strcmp(ctxtItemPtr->result, nameBuf) != 0) {
367                     UnicodeString exp(ctxtItemPtr->result, u_strlen(ctxtItemPtr->result));
368                     UnicodeString got(nameBuf, len);
369                     dataerrln(UnicodeString("FAIL: uldn_localeDisplayName, capitalization ") + ctxtItemPtr->capitalization +
370                           ", expected " + exp + ", got " + got );
371                 }
372             }
373             uldn_close(uldn);
374         }
375     }
376 }
377 
TestRootEtc()378 void LocaleDisplayNamesTest::TestRootEtc() {
379   UnicodeString temp;
380   LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
381   const char *locname = "@collation=phonebook";
382   const char *target = "Root (Phonebook Sort Order)";
383   ldn->localeDisplayName(locname, temp);
384   test_assert_equal(target, temp);
385 
386   ldn->languageDisplayName("root", temp);
387   test_assert_equal("root", temp);
388 
389   ldn->languageDisplayName("en_GB", temp);
390   test_assert_equal("en_GB", temp);
391 
392   delete ldn;
393 }
394 
395 #endif   /*  UCONFIG_NO_FORMATTING */
396