150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*********************************************************************
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT:
3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 2010-2014, International Business Machines Corporation and
450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * others. All Rights Reserved.
550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *********************************************************************/
650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "locnmtst.h"
850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "cstring.h"
950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*
1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Usage:
1250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    test_assert(    Test (should be TRUE)  )
1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho   Example:
1550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho       test_assert(i==3);
1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho   the macro is ugly but makes the tests pretty.
1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/
1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define test_assert(test) \
2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    { \
2250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if(!(test)) \
2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln("FAIL: " #test " was not true. In " __FILE__ " on line %d", __LINE__ ); \
2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        else \
2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            logln("PASS: asserted " #test); \
2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*
2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Usage:
3050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    test_assert_print(    Test (should be TRUE),  printable  )
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho   Example:
3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho       test_assert(i==3, toString(i));
3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho   the macro is ugly but makes the tests pretty.
3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define test_assert_print(test,print) \
3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    { \
4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if(!(test)) \
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln("FAIL: " #test " was not true. " + UnicodeString(print) ); \
4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        else \
4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            logln("PASS: asserted " #test "-> " + UnicodeString(print)); \
4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define test_assert_equal(target,value) \
4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  { \
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (UnicodeString(target)!=(value)) { \
4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      logln("unexpected value '" + (value) + "'"); \
5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      dataerrln("FAIL: " #target " == " #value " was not true. In " __FILE__ " on line %d", __LINE__); \
5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    } else { \
5254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      logln("PASS: asserted " #target " == " #value); \
5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    } \
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define test_dumpLocale(l) { logln(#l " = " + UnicodeString(l.getName(), "")); }
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesTest::LocaleDisplayNamesTest() {
5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoLocaleDisplayNamesTest::~LocaleDisplayNamesTest() {
6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::runIndexedTest(int32_t index, UBool exec, const char* &name,
6554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        char* /*par*/) {
6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    switch (index) {
6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FORMATTING
6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        TESTCASE(0, TestCreate);
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        TESTCASE(1, TestCreateDialect);
7054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        TESTCASE(2, TestWithKeywordsAndEverything);
7154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        TESTCASE(3, TestUldnOpen);
7254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        TESTCASE(4, TestUldnOpenDialect);
7354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        TESTCASE(5, TestUldnWithKeywordsAndEverything);
7454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        TESTCASE(6, TestUldnComponents);
7554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        TESTCASE(7, TestRootEtc);
76103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        TESTCASE(8, TestKeywords);
77103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        TESTCASE(9, TestUntranslatedKeywords);
78103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        TESTCASE(10, TestPrivateUse);
7954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        TESTCASE(11, TestUldnDisplayContext);
8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        default:
8254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            name = "";
8354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            break;
8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FORMATTING
8850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::TestCreate() {
8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString temp;
9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getGermany());
9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ldn->localeDisplayName("de_DE", temp);
9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete ldn;
9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal("Deutsch (Deutschland)", temp);
9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
9650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::TestCreateDialect() {
9750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString temp;
9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS(), ULDN_DIALECT_NAMES);
9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ldn->localeDisplayName("en_GB", temp);
10050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete ldn;
10150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal("British English", temp);
10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
10450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::TestWithKeywordsAndEverything() {
10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString temp;
10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const char *locname = "en_Hant_US_VALLEY@calendar=gregorian;collation=phonebook";
108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  const char *target = "English (Traditional, United States, VALLEY, "
109103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    "Gregorian Calendar, Phonebook Sort Order)";
110103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  ldn->localeDisplayName(locname, temp);
111103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  delete ldn;
112103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  test_assert_equal(target, temp);
113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid LocaleDisplayNamesTest::TestKeywords() {
116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString temp;
117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *locname = "de@currency=XYZ";
119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *target = "German (Currency: XYZ)";
120103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  ldn->localeDisplayName(locname, temp);
121103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  delete ldn;
122103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  test_assert_equal(target, temp);
123103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid LocaleDisplayNamesTest::TestUntranslatedKeywords() {
126103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString temp;
127103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *locname = "de@foo=bar";
129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *target = "German (foo=bar)";
130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  ldn->localeDisplayName(locname, temp);
131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  delete ldn;
132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  test_assert_equal(target, temp);
133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid LocaleDisplayNamesTest::TestPrivateUse() {
136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString temp;
137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *locname = "de@x=foobar";
139103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *target = "German (Private-Use: foobar)";
14050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ldn->localeDisplayName(locname, temp);
14150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete ldn;
14250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal(target, temp);
14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
14450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
14550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::TestUldnOpen() {
14650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
14750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const int32_t kMaxResultSize = 150;  // long enough
14850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UChar result[150];
14950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ULocaleDisplayNames *ldn = uldn_open(Locale::getGermany().getName(), ULDN_STANDARD_NAMES, &status);
15050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  int32_t len = uldn_localeDisplayName(ldn, "de_DE", result, kMaxResultSize, &status);
15150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  uldn_close(ldn);
15250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert(U_SUCCESS(status));
15350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
15450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str(result, len, kMaxResultSize);
15550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal("Deutsch (Deutschland)", str);
15650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
15750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // make sure that NULL gives us the default locale as usual
15850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ldn = uldn_open(NULL, ULDN_STANDARD_NAMES, &status);
15950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const char *locale = uldn_getLocale(ldn);
16050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if(0 != uprv_strcmp(uloc_getDefault(), locale)) {
16150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    errln("uldn_getLocale(uldn_open(NULL))=%s != default locale %s\n", locale, uloc_getDefault());
16250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
16350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  uldn_close(ldn);
16450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert(U_SUCCESS(status));
16550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
16650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
16750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::TestUldnOpenDialect() {
16850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const int32_t kMaxResultSize = 150;  // long enough
17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UChar result[150];
17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ULocaleDisplayNames *ldn = uldn_open(Locale::getUS().getName(), ULDN_DIALECT_NAMES, &status);
17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  int32_t len = uldn_localeDisplayName(ldn, "en_GB", result, kMaxResultSize, &status);
17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  uldn_close(ldn);
17450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert(U_SUCCESS(status));
17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str(result, len, kMaxResultSize);
17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal("British English", str);
17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
18050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::TestUldnWithKeywordsAndEverything() {
18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const int32_t kMaxResultSize = 150;  // long enough
18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UChar result[150];
18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const char *locname = "en_Hant_US_VALLEY@calendar=gregorian;collation=phonebook";
185b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  const char *target = "English (Traditional, United States, VALLEY, "
186103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    "Gregorian Calendar, Phonebook Sort Order)";
18750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ULocaleDisplayNames *ldn = uldn_open(Locale::getUS().getName(), ULDN_STANDARD_NAMES, &status);
18850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  int32_t len = uldn_localeDisplayName(ldn, locname, result, kMaxResultSize, &status);
18950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  uldn_close(ldn);
19050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert(U_SUCCESS(status));
19150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
19250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str(result, len, kMaxResultSize);
19350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal(target, str);
19450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
19550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
19650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::TestUldnComponents() {
19750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
19850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const int32_t kMaxResultSize = 150;  // long enough
19950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UChar result[150];
20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
20150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ULocaleDisplayNames *ldn = uldn_open(Locale::getGermany().getName(), ULDN_STANDARD_NAMES, &status);
20250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert(U_SUCCESS(status));
20350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (U_FAILURE(status)) {
20450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return;
20550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
20750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // "en_Hant_US_PRE_EURO@calendar=gregorian";
20850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
21050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t len = uldn_languageDisplayName(ldn, "en", result, kMaxResultSize, &status);
21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString str(result, len, kMaxResultSize);
21250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    test_assert_equal("Englisch", str);
21350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
21550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
21650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
21750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t len = uldn_scriptDisplayName(ldn, "Hant", result, kMaxResultSize, &status);
21850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString str(result, len, kMaxResultSize);
219b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    test_assert_equal("Traditionell", str);
22050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
22150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
22250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
22350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t len = uldn_scriptCodeDisplayName(ldn, USCRIPT_TRADITIONAL_HAN, result, kMaxResultSize,
22454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                         &status);
22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString str(result, len, kMaxResultSize);
226b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    test_assert_equal("Traditionell", str);
22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
23050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t len = uldn_regionDisplayName(ldn, "US", result, kMaxResultSize, &status);
23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString str(result, len, kMaxResultSize);
23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    test_assert_equal("Vereinigte Staaten", str);
23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
23450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t len = uldn_variantDisplayName(ldn, "PRE_EURO", result, kMaxResultSize, &status);
23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString str(result, len, kMaxResultSize);
23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    test_assert_equal("PRE_EURO", str);
23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
24150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
24250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t len = uldn_keyDisplayName(ldn, "calendar", result, kMaxResultSize, &status);
24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString str(result, len, kMaxResultSize);
24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    test_assert_equal("Kalender", str);
24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t len = uldn_keyValueDisplayName(ldn, "calendar", "gregorian", result,
24954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                       kMaxResultSize, &status);
25050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString str(result, len, kMaxResultSize);
25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    test_assert_equal("Gregorianischer Kalender", str);
25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
25350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
25450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  uldn_close(ldn);
25550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
25754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
25854dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliustypedef struct {
25954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const char * displayLocale;
26054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UDisplayContext dialectHandling;
26154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UDisplayContext capitalization;
26254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const char * localeToBeNamed;
26354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const UChar * result;
26454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} LocNameDispContextItem;
26554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
26654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic char en[]    = "en";
26754dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic char en_US[] = "en_US";
26854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
26954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar daFor_en[]       = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"engelsk"
27054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar daFor_en_US[]    = {0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x55,0x53,0x41,0x29,0}; //"engelsk (USA)"
27154dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar daFor_en_US_D[]  = {0x61,0x6D,0x65,0x72,0x69,0x6B,0x61,0x6E,0x73,0x6B,0x20,0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"amerikansk engelsk"
27254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar esFor_en[]       = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0}; //"ingles" with acute on e
27354dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar esFor_en_US[]    = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x28,0x45,0x73,0x74,0x61,0x64,0x6F,0x73,0x20,0x55,0x6E,0x69,0x64,0x6F,0x73,0x29,0}; //"ingles (Estados Unidos)" ...
27454dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar esFor_en_US_D[]  = {0x69,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x65,0x73,0x74,0x61,0x64,0x6F,0x75,0x6E,0x69,0x64,0x65,0x6E,0x73,0x65,0}; //"ingles estadounidense" ...
27554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_BREAK_ITERATION
27654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar daFor_en_T[]     = {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"Engelsk"
27754dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar daFor_en_US_T[]  = {0x45,0x6E,0x67,0x65,0x6C,0x73,0x6B,0x20,0x28,0x55,0x53,0x41,0x29,0}; //"Engelsk (USA)"
27854dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar daFor_en_US_DT[] = {0x41,0x6D,0x65,0x72,0x69,0x6B,0x61,0x6E,0x73,0x6B,0x20,0x65,0x6E,0x67,0x65,0x6C,0x73,0x6B,0}; //"Amerikansk engelsk"
27954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar esFor_en_T[]     = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0}; //"Ingles" ...
28054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar esFor_en_US_T[]  = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x28,0x45,0x73,0x74,0x61,0x64,0x6F,0x73,0x20,0x55,0x6E,0x69,0x64,0x6F,0x73,0x29,0}; //"Ingles (Estados Unidos)" ...
28154dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar esFor_en_US_DT[] = {0x49,0x6E,0x67,0x6C,0xE9,0x73,0x20,0x65,0x73,0x74,0x61,0x64,0x6F,0x75,0x6E,0x69,0x64,0x65,0x6E,0x73,0x65,0}; //"Ingles estadounidense" ...
28254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
28354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
28454dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const LocNameDispContextItem ctxtItems[] = {
28554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    en,    daFor_en   },
28654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    en_US, daFor_en_US   },
28754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "da", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    en_US, daFor_en_US_D  },
28854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    en,    esFor_en   },
28954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    en_US, esFor_en_US   },
29054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "es", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    en_US, esFor_en_US_D  },
29154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_BREAK_ITERATION
29254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, en,    daFor_en_T },
29354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, en_US, daFor_en_US_T },
29454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "da", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, en_US, daFor_en_US_DT },
29554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, en,    esFor_en_T },
29654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, en_US, esFor_en_US_T },
297fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    { "es", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, en_US, esFor_en_US_DT },
29854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
29959d709d503bab6e2b61931737e662dd293b40578ccornelius    { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       en,    daFor_en_T },
30059d709d503bab6e2b61931737e662dd293b40578ccornelius    { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       en_US, daFor_en_US_T },
30159d709d503bab6e2b61931737e662dd293b40578ccornelius    { "da", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       en_US, daFor_en_US_DT },
30254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       en,    esFor_en_T },
30354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       en_US, esFor_en_US_T },
304fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    { "es", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       en_US, esFor_en_US_DT },
305fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
306fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            en,    daFor_en   },
307fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    { "da", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            en_US, daFor_en_US   },
308fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    { "da", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            en_US, daFor_en_US_D  },
309fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            en,    esFor_en_T },
310fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    { "es", UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            en_US, esFor_en_US_T },
311fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    { "es", UDISPCTX_DIALECT_NAMES,  UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            en_US, esFor_en_US_DT },
31254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius #endif /* #if !UCONFIG_NO_BREAK_ITERATION */
31354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    { NULL, (UDisplayContext)0,      (UDisplayContext)0,                                NULL,  NULL }
31454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius};
31554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
31654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid LocaleDisplayNamesTest::TestUldnDisplayContext() {
31754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const LocNameDispContextItem * ctxtItemPtr;
31854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    for (ctxtItemPtr = ctxtItems; ctxtItemPtr->displayLocale != NULL; ctxtItemPtr++) {
31954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UDisplayContext contexts[2] = {ctxtItemPtr->dialectHandling, ctxtItemPtr->capitalization};
32054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status = U_ZERO_ERROR;
32154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        ULocaleDisplayNames * uldn = uldn_openForContext(ctxtItemPtr->displayLocale, contexts, 2, &status);
32254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if (U_FAILURE(status)) {
32354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errln(UnicodeString("FAIL: uldn_openForContext failed for locale ") + ctxtItemPtr->displayLocale +
32454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                  ", dialectHandling " + ctxtItemPtr->dialectHandling + ", capitalization " +  ctxtItemPtr->capitalization);
32554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
32654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            UDisplayContext dialectHandling = uldn_getContext(uldn, UDISPCTX_TYPE_DIALECT_HANDLING, &status);
32754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            UDisplayContext capitalization = uldn_getContext(uldn, UDISPCTX_TYPE_CAPITALIZATION, &status);
32854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            if (U_FAILURE(status)) {
32954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                errln(UnicodeString("FAIL: uldn_getContext status ") + (int)status);
33054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            } else if (dialectHandling != ctxtItemPtr->dialectHandling || capitalization != ctxtItemPtr->capitalization) {
33154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                errln("FAIL: uldn_getContext retrieved incorrect dialectHandling or capitalization");
33254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            } else {
33354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                UChar nameBuf[ULOC_FULLNAME_CAPACITY];
33454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                int32_t len = uldn_localeDisplayName(uldn, ctxtItemPtr->localeToBeNamed, nameBuf, ULOC_FULLNAME_CAPACITY, &status);
33554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                if (U_FAILURE(status)) {
33654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    dataerrln(UnicodeString("FAIL: uldn_localeDisplayName status: ") + u_errorName(status));
33754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                } else if (u_strcmp(ctxtItemPtr->result, nameBuf) != 0) {
33854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    UnicodeString exp(ctxtItemPtr->result, u_strlen(ctxtItemPtr->result));
33954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    UnicodeString got(nameBuf, len);
34054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    dataerrln(UnicodeString("FAIL: uldn_localeDisplayName, capitalization ") + ctxtItemPtr->capitalization +
34154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                          ", expected " + exp + ", got " + got );
34254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                }
34354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            }
34454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            uldn_close(uldn);
34554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
34654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
34754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
34854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
34950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid LocaleDisplayNamesTest::TestRootEtc() {
35050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString temp;
35150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
35250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const char *locname = "@collation=phonebook";
353103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *target = "Root (Phonebook Sort Order)";
35450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ldn->localeDisplayName(locname, temp);
35550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal(target, temp);
35650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
35750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ldn->languageDisplayName("root", temp);
35850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal("root", temp);
35950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
36050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ldn->languageDisplayName("en_GB", temp);
36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  test_assert_equal("en_GB", temp);
36250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
36350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete ldn;
36450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
36550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
36650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif   /*  UCONFIG_NO_FORMATTING */
367