1 /*********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 2010-2011, 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 #endif
77 default:
78 name = "";
79 break;
80 }
81 }
82
83 #if !UCONFIG_NO_FORMATTING
TestCreate()84 void 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
TestCreateDialect()92 void 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
TestWithKeywordsAndEverything()100 void 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, United States, VALLEY, "
105 "Calendar=Gregorian Calendar, Sort Order=Phonebook Sort Order)";
106 ldn->localeDisplayName(locname, temp);
107 delete ldn;
108 test_assert_equal(target, temp);
109 }
110
TestUldnOpen()111 void 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
TestUldnOpenDialect()133 void 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
TestUldnWithKeywordsAndEverything()146 void 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, United States, VALLEY, "
152 "Calendar=Gregorian Calendar, Sort Order=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
TestUldnComponents()162 void 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("Traditionell", 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("Traditionell", 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
TestRootEtc()223 void LocaleDisplayNamesTest::TestRootEtc() {
224 UnicodeString temp;
225 LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
226 const char *locname = "@collation=phonebook";
227 const char *target = "Root (Sort Order=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