1/*********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 2010, 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
58LocaleDisplayNamesTest::LocaleDisplayNamesTest() {
59}
60
61LocaleDisplayNamesTest::~LocaleDisplayNamesTest() {
62}
63
64void 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#endif
77        default:
78	  name = "";
79	  break;
80    }
81}
82
83#if !UCONFIG_NO_FORMATTING
84void LocaleDisplayNamesTest::TestCreate() {
85  UnicodeString temp;
86  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getGermany());
87  ldn->localeDisplayName("de_DE", temp);
88  delete ldn;
89  test_assert_equal("Deutsch (Deutschland)", temp);
90}
91
92void LocaleDisplayNamesTest::TestCreateDialect() {
93  UnicodeString temp;
94  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS(), ULDN_DIALECT_NAMES);
95  ldn->localeDisplayName("en_GB", temp);
96  delete ldn;
97  test_assert_equal("British English", temp);
98}
99
100void LocaleDisplayNamesTest::TestWithKeywordsAndEverything() {
101  UnicodeString temp;
102  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
103  const char *locname = "en_Hant_US_VALLEY@calendar=gregorian;collation=phonebook";
104  const char *target = "English (Traditional Han, United States, VALLEY, "
105    "Calendar=Gregorian Calendar, Collation=Phonebook Sort Order)";
106  ldn->localeDisplayName(locname, temp);
107  delete ldn;
108  test_assert_equal(target, temp);
109}
110
111void LocaleDisplayNamesTest::TestUldnOpen() {
112  UErrorCode status = U_ZERO_ERROR;
113  const int32_t kMaxResultSize = 150;  // long enough
114  UChar result[150];
115  ULocaleDisplayNames *ldn = uldn_open(Locale::getGermany().getName(), ULDN_STANDARD_NAMES, &status);
116  int32_t len = uldn_localeDisplayName(ldn, "de_DE", result, kMaxResultSize, &status);
117  uldn_close(ldn);
118  test_assert(U_SUCCESS(status));
119
120  UnicodeString str(result, len, kMaxResultSize);
121  test_assert_equal("Deutsch (Deutschland)", str);
122
123  // make sure that NULL gives us the default locale as usual
124  ldn = uldn_open(NULL, ULDN_STANDARD_NAMES, &status);
125  const char *locale = uldn_getLocale(ldn);
126  if(0 != uprv_strcmp(uloc_getDefault(), locale)) {
127    errln("uldn_getLocale(uldn_open(NULL))=%s != default locale %s\n", locale, uloc_getDefault());
128  }
129  uldn_close(ldn);
130  test_assert(U_SUCCESS(status));
131}
132
133void LocaleDisplayNamesTest::TestUldnOpenDialect() {
134  UErrorCode status = U_ZERO_ERROR;
135  const int32_t kMaxResultSize = 150;  // long enough
136  UChar result[150];
137  ULocaleDisplayNames *ldn = uldn_open(Locale::getUS().getName(), ULDN_DIALECT_NAMES, &status);
138  int32_t len = uldn_localeDisplayName(ldn, "en_GB", result, kMaxResultSize, &status);
139  uldn_close(ldn);
140  test_assert(U_SUCCESS(status));
141
142  UnicodeString str(result, len, kMaxResultSize);
143  test_assert_equal("British English", str);
144}
145
146void LocaleDisplayNamesTest::TestUldnWithKeywordsAndEverything() {
147  UErrorCode status = U_ZERO_ERROR;
148  const int32_t kMaxResultSize = 150;  // long enough
149  UChar result[150];
150  const char *locname = "en_Hant_US_VALLEY@calendar=gregorian;collation=phonebook";
151  const char *target = "English (Traditional Han, United States, VALLEY, "
152    "Calendar=Gregorian Calendar, Collation=Phonebook Sort Order)";
153  ULocaleDisplayNames *ldn = uldn_open(Locale::getUS().getName(), ULDN_STANDARD_NAMES, &status);
154  int32_t len = uldn_localeDisplayName(ldn, locname, result, kMaxResultSize, &status);
155  uldn_close(ldn);
156  test_assert(U_SUCCESS(status));
157
158  UnicodeString str(result, len, kMaxResultSize);
159  test_assert_equal(target, str);
160}
161
162void LocaleDisplayNamesTest::TestUldnComponents() {
163  UErrorCode status = U_ZERO_ERROR;
164  const int32_t kMaxResultSize = 150;  // long enough
165  UChar result[150];
166
167  ULocaleDisplayNames *ldn = uldn_open(Locale::getGermany().getName(), ULDN_STANDARD_NAMES, &status);
168  test_assert(U_SUCCESS(status));
169  if (U_FAILURE(status)) {
170    return;
171  }
172
173  // "en_Hant_US_PRE_EURO@calendar=gregorian";
174
175  {
176    int32_t len = uldn_languageDisplayName(ldn, "en", result, kMaxResultSize, &status);
177    UnicodeString str(result, len, kMaxResultSize);
178    test_assert_equal("Englisch", str);
179  }
180
181
182  {
183    int32_t len = uldn_scriptDisplayName(ldn, "Hant", result, kMaxResultSize, &status);
184    UnicodeString str(result, len, kMaxResultSize);
185    test_assert_equal("Traditionelle Chinesische Schrift", str);
186  }
187
188  {
189    int32_t len = uldn_scriptCodeDisplayName(ldn, USCRIPT_TRADITIONAL_HAN, result, kMaxResultSize,
190					     &status);
191    UnicodeString str(result, len, kMaxResultSize);
192    test_assert_equal("Traditionelle Chinesische Schrift", str);
193  }
194
195  {
196    int32_t len = uldn_regionDisplayName(ldn, "US", result, kMaxResultSize, &status);
197    UnicodeString str(result, len, kMaxResultSize);
198    test_assert_equal("Vereinigte Staaten", str);
199  }
200
201  {
202    int32_t len = uldn_variantDisplayName(ldn, "PRE_EURO", result, kMaxResultSize, &status);
203    UnicodeString str(result, len, kMaxResultSize);
204    test_assert_equal("PRE_EURO", str);
205  }
206
207  {
208    int32_t len = uldn_keyDisplayName(ldn, "calendar", result, kMaxResultSize, &status);
209    UnicodeString str(result, len, kMaxResultSize);
210    test_assert_equal("Kalender", str);
211  }
212
213  {
214    int32_t len = uldn_keyValueDisplayName(ldn, "calendar", "gregorian", result,
215					   kMaxResultSize, &status);
216    UnicodeString str(result, len, kMaxResultSize);
217    test_assert_equal("Gregorianischer Kalender", str);
218  }
219
220  uldn_close(ldn);
221}
222
223void LocaleDisplayNamesTest::TestRootEtc() {
224  UnicodeString temp;
225  LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
226  const char *locname = "@collation=phonebook";
227  const char *target = "Root (Collation=Phonebook Sort Order)";
228  ldn->localeDisplayName(locname, temp);
229  test_assert_equal(target, temp);
230
231  ldn->languageDisplayName("root", temp);
232  test_assert_equal("root", temp);
233
234  ldn->languageDisplayName("en_GB", temp);
235  test_assert_equal("en_GB", temp);
236
237  delete ldn;
238}
239
240#endif   /*  UCONFIG_NO_FORMATTING */
241
242