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