Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: icu46/source/test/intltest/tufmtts.cpp

Issue 5516007: Check in the pristine copy of ICU 4.6... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « icu46/source/test/intltest/tufmtts.h ('k') | icu46/source/test/intltest/tzbdtest.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 /********************************************************************
2 * Copyright (c) 2008-2010, International Business Machines Corporation and
3 * others. All Rights Reserved.
4 ********************************************************************/
5
6 #include "unicode/utypes.h"
7
8 #if !UCONFIG_NO_FORMATTING
9
10 #include "unicode/tmunit.h"
11 #include "unicode/tmutamt.h"
12 #include "unicode/tmutfmt.h"
13 #include "tufmtts.h"
14 #include "unicode/ustring.h"
15
16 //TODO: put as compilation flag
17 //#define TUFMTTS_DEBUG 1
18
19 #ifdef TUFMTTS_DEBUG
20 #include <iostream>
21 #endif
22
23 void TimeUnitTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) {
24 if (exec) logln("TestSuite TimeUnitTest");
25 switch (index) {
26 TESTCASE(0, testBasic);
27 TESTCASE(1, testAPI);
28 TESTCASE(2, testGreek);
29 default: name = ""; break;
30 }
31 }
32
33 /**
34 * Test basic
35 */
36 void TimeUnitTest::testBasic() {
37 const char* locales[] = {"en", "sl", "fr", "zh", "ar", "ru", "zh_Hant", "pa" };
38 for ( unsigned int locIndex = 0;
39 locIndex < sizeof(locales)/sizeof(locales[0]);
40 ++locIndex ) {
41 UErrorCode status = U_ZERO_ERROR;
42 Locale loc(locales[locIndex]);
43 TimeUnitFormat** formats = new TimeUnitFormat*[2];
44 formats[TimeUnitFormat::kFull] = new TimeUnitFormat(loc, status);
45 if (!assertSuccess("TimeUnitFormat(full)", status, TRUE)) return;
46 formats[TimeUnitFormat::kAbbreviate] = new TimeUnitFormat(loc, TimeUnitF ormat::kAbbreviate, status);
47 if (!assertSuccess("TimeUnitFormat(short)", status)) return;
48 #ifdef TUFMTTS_DEBUG
49 std::cout << "locale: " << locales[locIndex] << "\n";
50 #endif
51 for (int style = TimeUnitFormat::kFull;
52 style <= TimeUnitFormat::kAbbreviate;
53 ++style) {
54 for (TimeUnit::UTimeUnitFields j = TimeUnit::UTIMEUNIT_YEAR;
55 j < TimeUnit::UTIMEUNIT_FIELD_COUNT;
56 j = (TimeUnit::UTimeUnitFields)(j+1)) {
57 #ifdef TUFMTTS_DEBUG
58 std::cout << "time unit: " << j << "\n";
59 #endif
60 double tests[] = {0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 5, 10, 100, 101.35 };
61 for (unsigned int i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) {
62 #ifdef TUFMTTS_DEBUG
63 std::cout << "number: " << tests[i] << "\n";
64 #endif
65 TimeUnitAmount* source = new TimeUnitAmount(tests[i], j, status) ;
66 if (!assertSuccess("TimeUnitAmount()", status)) return;
67 UnicodeString formatted;
68 Formattable formattable;
69 formattable.adoptObject(source);
70 formatted = ((Format*)formats[style])->format(formattable, forma tted, status);
71 if (!assertSuccess("format()", status)) return;
72 #ifdef TUFMTTS_DEBUG
73 char formatResult[1000];
74 formatted.extract(0, formatted.length(), formatResult, "UTF-8");
75 std::cout << "format result: " << formatResult << "\n";
76 #endif
77 Formattable result;
78 ((Format*)formats[style])->parseObject(formatted, result, status );
79 if (!assertSuccess("parseObject()", status)) return;
80 if (result != formattable) {
81 dataerrln("No round trip: ");
82 }
83 // other style parsing
84 Formattable result_1;
85 ((Format*)formats[1-style])->parseObject(formatted, result_1, st atus);
86 if (!assertSuccess("parseObject()", status)) return;
87 if (result_1 != formattable) {
88 dataerrln("No round trip: ");
89 }
90 }
91 }
92 }
93 delete formats[TimeUnitFormat::kFull];
94 delete formats[TimeUnitFormat::kAbbreviate];
95 delete[] formats;
96 }
97 }
98
99
100 void TimeUnitTest::testAPI() {
101 //================= TimeUnit =================
102 UErrorCode status = U_ZERO_ERROR;
103
104 TimeUnit* tmunit = TimeUnit::createInstance(TimeUnit::UTIMEUNIT_YEAR, status );
105 if (!assertSuccess("TimeUnit::createInstance", status)) return;
106
107 TimeUnit* another = (TimeUnit*)tmunit->clone();
108 TimeUnit third(*tmunit);
109 TimeUnit fourth = third;
110
111 assertTrue("orig and clone are equal", (*tmunit == *another));
112 assertTrue("copied and assigned are equal", (third == fourth));
113
114 TimeUnit* tmunit_m = TimeUnit::createInstance(TimeUnit::UTIMEUNIT_MONTH, sta tus);
115 assertTrue("year != month", (*tmunit != *tmunit_m));
116
117 TimeUnit::UTimeUnitFields field = tmunit_m->getTimeUnitField();
118 assertTrue("field of month time unit is month", (field == TimeUnit::UTIMEUNI T_MONTH));
119
120 delete tmunit;
121 delete another;
122 delete tmunit_m;
123 //
124 //================= TimeUnitAmount =================
125
126 Formattable formattable((int32_t)2);
127 TimeUnitAmount tma_long(formattable, TimeUnit::UTIMEUNIT_DAY, status);
128 if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
129
130 formattable.setDouble(2);
131 TimeUnitAmount tma_double(formattable, TimeUnit::UTIMEUNIT_DAY, status);
132 if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
133
134 formattable.setDouble(3);
135 TimeUnitAmount tma_double_3(formattable, TimeUnit::UTIMEUNIT_DAY, status);
136 if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return;
137
138 TimeUnitAmount tma(2, TimeUnit::UTIMEUNIT_DAY, status);
139 if (!assertSuccess("TimeUnitAmount(number...)", status)) return;
140
141 TimeUnitAmount tma_h(2, TimeUnit::UTIMEUNIT_HOUR, status);
142 if (!assertSuccess("TimeUnitAmount(number...)", status)) return;
143
144 TimeUnitAmount second(tma);
145 TimeUnitAmount third_tma = tma;
146 TimeUnitAmount* fourth_tma = (TimeUnitAmount*)tma.clone();
147
148 assertTrue("orig and copy are equal", (second == tma));
149 assertTrue("clone and assigned are equal", (third_tma == *fourth_tma));
150 assertTrue("different if number diff", (tma_double != tma_double_3));
151 assertTrue("different if number type diff", (tma_double != tma_long));
152 assertTrue("different if time unit diff", (tma != tma_h));
153 assertTrue("same even different constructor", (tma_double == tma));
154
155 assertTrue("getTimeUnitField", (tma.getTimeUnitField() == TimeUnit::UTIMEUNI T_DAY));
156 delete fourth_tma;
157 //
158 //================= TimeUnitFormat =================
159 //
160 TimeUnitFormat* tmf_en = new TimeUnitFormat(Locale("en"), status);
161 if (!assertSuccess("TimeUnitFormat(en...)", status, TRUE)) return;
162 TimeUnitFormat tmf_fr(Locale("fr"), status);
163 if (!assertSuccess("TimeUnitFormat(fr...)", status)) return;
164
165 assertTrue("TimeUnitFormat: en and fr diff", (*tmf_en != tmf_fr));
166
167 TimeUnitFormat tmf_assign = *tmf_en;
168 assertTrue("TimeUnitFormat: orig and assign are equal", (*tmf_en == tmf_assi gn));
169
170 TimeUnitFormat tmf_copy(tmf_fr);
171 assertTrue("TimeUnitFormat: orig and copy are equal", (tmf_fr == tmf_copy));
172
173 TimeUnitFormat* tmf_clone = (TimeUnitFormat*)tmf_en->clone();
174 assertTrue("TimeUnitFormat: orig and clone are equal", (*tmf_en == *tmf_clon e));
175 delete tmf_clone;
176
177 tmf_en->setLocale(Locale("fr"), status);
178 if (!assertSuccess("setLocale(fr...)", status)) return;
179
180 NumberFormat* numberFmt = NumberFormat::createInstance(
181 Locale("fr"), status);
182 if (!assertSuccess("NumberFormat::createInstance()", status)) return;
183 tmf_en->setNumberFormat(*numberFmt, status);
184 if (!assertSuccess("setNumberFormat(en...)", status)) return;
185 assertTrue("TimeUnitFormat: setLocale", (*tmf_en == tmf_fr));
186
187 delete tmf_en;
188
189 TimeUnitFormat* en_long = new TimeUnitFormat(Locale("en"), TimeUnitFormat::k Full, status);
190 if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
191 delete en_long;
192
193 TimeUnitFormat* en_short = new TimeUnitFormat(Locale("en"), TimeUnitFormat:: kAbbreviate, status);
194 if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
195 delete en_short;
196
197 TimeUnitFormat* format = new TimeUnitFormat(status);
198 format->setLocale(Locale("zh"), status);
199 format->setNumberFormat(*numberFmt, status);
200 if (!assertSuccess("TimeUnitFormat(en...)", status)) return;
201 delete numberFmt;
202 delete format;
203 }
204
205 /* @bug 7902
206 * Tests for Greek Language.
207 * This tests that requests for short unit names correctly fall back
208 * to long unit names for a locale where the locale data does not
209 * provide short unit names. As of CLDR 1.9, Greek is one such language.
210 */
211 void TimeUnitTest::testGreek() {
212 UErrorCode status = U_ZERO_ERROR;
213
214 const char* locales[] = {"el-GR", "el"};
215 TimeUnit::UTimeUnitFields tunits[] = {TimeUnit::UTIMEUNIT_SECOND, TimeUnit:: UTIMEUNIT_MINUTE, TimeUnit::UTIMEUNIT_HOUR, TimeUnit::UTIMEUNIT_DAY, TimeUnit::U TIMEUNIT_MONTH, TimeUnit::UTIMEUNIT_YEAR};
216 TimeUnitFormat::EStyle styles[] = {TimeUnitFormat::kFull, TimeUnitFormat::kA bbreviate};
217 const int numbers[] = {1, 7};
218
219 const UChar oneSecond[] = {0x0031, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0 x03b5, 0x03c1, 0x03cc, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03bf, 0};
220 const UChar oneMinute[] = {0x0031, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0 x03cc, 0};
221 const UChar oneHour[] = {0x0031, 0x0020, 0x03ce, 0x03c1, 0x03b1, 0};
222 const UChar oneDay[] = {0x0031, 0x0020, 0x03b7, 0x03bc, 0x03ad, 0x03c1, 0x03 b1, 0};
223 const UChar oneMonth[] = {0x0031, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x03b1, 0x 03c2, 0};
224 const UChar oneYear[] = {0x0031, 0x0020, 0x03ad, 0x03c4, 0x03bf, 0x03c2, 0};
225 const UChar sevenSeconds[] = {0x0037, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4 , 0x03b5, 0x03c1, 0x03cc, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03b1, 0};
226 const UChar sevenMinutes[] = {0x0037, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x03c4 , 0x03ac, 0};
227 const UChar sevenHours[] = {0x0037, 0x0020, 0x03ce, 0x03c1, 0x03b5, 0x03c2, 0};
228 const UChar sevenDays[] = {0x0037, 0x0020, 0x03b7, 0x03bc, 0x03ad, 0x03c1, 0 x03b5, 0x03c2, 0};
229 const UChar sevenMonths[] = {0x0037, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x03b5, 0x3c2, 0};
230 const UChar sevenYears[] = {0x0037, 0x0020, 0x03ad, 0x03c4, 0x03b7, 0};
231
232 const UnicodeString oneSecondStr(oneSecond);
233 const UnicodeString oneMinuteStr(oneMinute);
234 const UnicodeString oneHourStr(oneHour);
235 const UnicodeString oneDayStr(oneDay);
236 const UnicodeString oneMonthStr(oneMonth);
237 const UnicodeString oneYearStr(oneYear);
238 const UnicodeString sevenSecondsStr(sevenSeconds);
239 const UnicodeString sevenMinutesStr(sevenMinutes);
240 const UnicodeString sevenHoursStr(sevenHours);
241 const UnicodeString sevenDaysStr(sevenDays);
242 const UnicodeString sevenMonthsStr(sevenMonths);
243 const UnicodeString sevenYearsStr(sevenYears);
244
245 const UnicodeString expected[] = {oneSecondStr, oneMinuteStr, oneHourStr, on eDayStr, oneMonthStr, oneYearStr,
246 oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
247 sevenSecondsStr, sevenMinutesStr, sevenHoursStr, s evenDaysStr, sevenMonthsStr, sevenYearsStr,
248 sevenSecondsStr, sevenMinutesStr, sevenHoursStr, s evenDaysStr, sevenMonthsStr, sevenYearsStr,
249 oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
250 oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
251 sevenSecondsStr, sevenMinutesStr, sevenHoursStr, s evenDaysStr, sevenMonthsStr, sevenYearsStr,
252 sevenSecondsStr, sevenMinutesStr, sevenHoursStr, s evenDaysStr, sevenMonthsStr, sevenYearsStr};
253
254 int counter = 0;
255 for ( unsigned int locIndex = 0;
256 locIndex < sizeof(locales)/sizeof(locales[0]);
257 ++locIndex ) {
258
259 Locale l = Locale::createFromName(locales[locIndex]);
260
261 for ( unsigned int numberIndex = 0;
262 numberIndex < sizeof(numbers)/sizeof(int);
263 ++numberIndex ) {
264
265 for ( unsigned int styleIndex = 0;
266 styleIndex < sizeof(styles)/sizeof(styles[0]);
267 ++styleIndex ) {
268
269 for ( unsigned int unitIndex = 0;
270 unitIndex < sizeof(tunits)/sizeof(tunits[0]);
271 ++unitIndex ) {
272
273 TimeUnitAmount *tamt = new TimeUnitAmount(numbers[numberInde x], tunits[unitIndex], status);
274 if (U_FAILURE(status)) {
275 dataerrln("generating TimeUnitAmount Object failed.");
276 #ifdef TUFMTTS_DEBUG
277 std::cout << "Failed to get TimeUnitAmount for " << tuni ts[unitIndex] << "\n";
278 #endif
279 return;
280 }
281
282 TimeUnitFormat *tfmt = new TimeUnitFormat(l, styles[styleInd ex], status);
283 if (U_FAILURE(status)) {
284 dataerrln("generating TimeUnitAmount Object failed.");
285 #ifdef TUFMTTS_DEBUG
286 std::cout << "Failed to get TimeUnitFormat for " << loca les[locIndex] << "\n";
287 #endif
288 return;
289 }
290
291 Formattable fmt;
292 UnicodeString str;
293
294 fmt.adoptObject(tamt);
295 str = ((Format *)tfmt)->format(fmt, str, status);
296 if (!assertSuccess("formatting relative time failed", status )) {
297 delete tfmt;
298 #ifdef TUFMTTS_DEBUG
299 std::cout << "Failed to format" << "\n";
300 #endif
301 return;
302 }
303
304 #ifdef TUFMTTS_DEBUG
305 char tmp[128]; //output
306 char tmp1[128]; //expected
307 int len = 0;
308 u_strToUTF8(tmp, 128, &len, str.getTerminatedBuffer(), str.l ength(), &status);
309 u_strToUTF8(tmp1, 128, &len, expected[counter].unescape().ge tTerminatedBuffer(), expected[counter].unescape().length(), &status);
310 std::cout << "Formatted string : " << tmp << " expected : " << tmp1 << "\n";
311 #endif
312 if (!assertEquals("formatted time string is not expected, lo cale: " + UnicodeString(locales[locIndex]) + " style: " + (int)styles[styleIndex ] + " units: " + (int)tunits[unitIndex], expected[counter], str)) {
313 delete tfmt;
314 str.remove();
315 return;
316 }
317 delete tfmt;
318 str.remove();
319 ++counter;
320 }
321 }
322 }
323 }
324 }
325
326 #endif
OLDNEW
« no previous file with comments | « icu46/source/test/intltest/tufmtts.h ('k') | icu46/source/test/intltest/tzbdtest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698