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

Side by Side Diff: icu46/source/test/intltest/dtptngts.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/dtptngts.h ('k') | icu46/source/test/intltest/encoll.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:
3 * Copyright (c) 2008-2010, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6
7 #include "unicode/utypes.h"
8
9 #if !UCONFIG_NO_FORMATTING
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include "dtptngts.h"
14
15 #include "unicode/calendar.h"
16 #include "unicode/smpdtfmt.h"
17 #include "unicode/dtfmtsym.h"
18 #include "unicode/dtptngen.h"
19 #include "loctest.h"
20
21
22 // This is an API test, not a unit test. It doesn't test very many cases, and d oesn't
23 // try to test the full functionality. It just calls each function in the class and
24 // verifies that it works on a basic level.
25
26 void IntlTestDateTimePatternGeneratorAPI::runIndexedTest( int32_t index, UBool e xec, const char* &name, char* /*par*/ )
27 {
28 if (exec) logln("TestSuite DateTimePatternGeneratorAPI");
29 switch (index) {
30 TESTCASE(0, testAPI);
31 TESTCASE(1, testOptions);
32 default: name = ""; break;
33 }
34 }
35
36 #define MAX_LOCALE 9
37
38 /**
39 * Test various generic API methods of DateTimePatternGenerator for API coverage .
40 */
41 void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
42 {
43 UnicodeString patternData[] = {
44 UnicodeString("yM"), // 00
45 UnicodeString("yMMM"), // 01
46 UnicodeString("yMd"), // 02
47 UnicodeString("yMMMd"), // 03
48 UnicodeString("Md"), // 04
49 UnicodeString("MMMd"), // 05
50 UnicodeString("yQQQ"), // 06
51 UnicodeString("hhmm"), // 07
52 UnicodeString("HHmm"), // 08
53 UnicodeString("jjmm"), // 09
54 UnicodeString("mmss"), // 10
55 UnicodeString("yyyyMMMM"), // 11
56 UnicodeString("MMMEd"), // 12
57 UnicodeString("Ed"), // 13
58 UnicodeString(),
59 };
60
61 const char* testLocale[MAX_LOCALE][4] = {
62 {"en", "US", "", ""}, // 0
63 {"en", "US", "", "calendar=japanese"}, // 1
64 {"de", "DE", "", ""}, // 2
65 {"fi", "", "", ""}, // 3
66 {"ja", "", "", ""}, // 4
67 {"ja", "", "", "calendar=japanese"}, // 5
68 {"zh", "Hans", "CN", ""}, // 6
69 {"zh", "TW", "", "calendar=roc"}, // 7
70 {"ru", "", "", ""}, // 8
71 };
72
73 // For Weds, Jan 13, 1999, 23:58:59
74 UnicodeString patternResults[] = {
75 // en_US // 0 en_US
76 UnicodeString("1/1999"), // 00: yM
77 UnicodeString("Jan 1999"), // 01: yMMM
78 UnicodeString("1/13/1999"), // 02: yMd
79 UnicodeString("Jan 13, 1999"), // 03: yMMMd
80 UnicodeString("1/13"), // 04: Md
81 UnicodeString("Jan 13"), // 05: MMMd
82 UnicodeString("Q1 1999"), // 06: yQQQ
83 UnicodeString("11:58 PM"), // 07: hhmm
84 UnicodeString("23:58"), // 08: HHmm
85 UnicodeString("11:58 PM"), // 09: jjmm
86 UnicodeString("58:59"), // 10: mmss
87 UnicodeString("January 1999"), // 11: yyyyMMMM
88 UnicodeString("Wed, Jan 13"), // 12: MMMEd -> EE E, MMM d"
89 UnicodeString("13 Wed"), // 13: Ed -> d EEE
90
91 // en_US@calendar=japanese // 1 en_US@calenda r=japanese
92 UnicodeString("1/11 Heisei"), // 0: yM
93 UnicodeString("Jan 11 Heisei"), // 1: yMMM
94 UnicodeString("H 11-01-13"), // 2: yMd
95 UnicodeString("H 11 Jan 13"), // 3: yMMMd
96 UnicodeString("1/13"), // 4: Md
97 UnicodeString("Jan 13"), // 5: MMMd
98 UnicodeString("Q1 11 Heisei"), // 6: yQQQ
99 UnicodeString("11:58 PM"), // 7: hhmm
100 UnicodeString("23:58"), // 8: HHmm
101 UnicodeString("11:58 PM"), // 9: jjmm
102 UnicodeString("58:59"), // 10: mmss
103 UnicodeString("January 11 Heisei"), // 11: yyyyMMMM
104 UnicodeString("Wed, Jan 13"), // 12: MMMEd -> EE E, MMM d"
105 UnicodeString("13 Wed"), // 13: Ed -> d EEE
106
107 // de_DE // 2 de_DE
108 UnicodeString("1.1999"), // 00: yM
109 UnicodeString("Jan 1999"), // 01: yMMM
110 UnicodeString("13.1.1999"), // 02: yMd
111 UnicodeString("13. Jan 1999"), // 03: yMMMd
112 UnicodeString("13.1."), // 04: Md
113 UnicodeString("13. Jan"), // 05: MMMd
114 UnicodeString("Q1 1999"), // 06: yQQQ
115 UnicodeString("11:58 nachm."), // 07: hhmm
116 UnicodeString("23:58"), // 08: HHmm
117 UnicodeString("23:58"), // 09: jjmm
118 UnicodeString("58:59"), // 10: mmss
119 UnicodeString("Januar 1999"), // 11: yyyyMMMM
120 UnicodeString("Mi., 13. Jan"), // 12: MMMEd -> EE E, d. MMM
121 UnicodeString("Mi., 13."), // 13: Ed -> EE E, d.
122
123 // fi // 3 fi
124 UnicodeString("1.1999"), // 00: yM (fixed e xpected result per ticket:6626:)
125 UnicodeString("tammi 1999"), // 01: yMMM
126 UnicodeString("13.1.1999"), // 02: yMd
127 UnicodeString("13. tammikuuta 1999"), // 03: yMMMd
128 UnicodeString("13.1."), // 04: Md
129 UnicodeString("13. tammikuuta"), // 05: MMMd
130 UnicodeString("1. nelj. 1999"), // 06: yQQQ
131 UnicodeString("11.58 ip."), // 07: hhmm
132 UnicodeString("23.58"), // 08: HHmm
133 UnicodeString("23.58"), // 09: jjmm
134 UnicodeString("58.59"), // 10: mmss
135 UnicodeString("tammikuu 1999"), // 11: yyyyMMMM
136 UnicodeString("ke 13. tammikuuta"), // 12: MMMEd -> EE E d. MMM
137 UnicodeString("ke 13."), // 13: Ed -> cc c d.
138
139 // ja // 4 j a
140 UnicodeString("1999/1"), // 00: yM -> y/M
141 CharsToUnicodeString("1999\\u5E741\\u6708"), // 01: yMMM -> y\u5E74M\u6708
142 UnicodeString("1999/1/13"), // 02: yMd -> y/M/d
143 CharsToUnicodeString("1999\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> y\u5E74M\u6708d\u65E5
144 UnicodeString("1/13"), // 04: Md -> M/d
145 CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5
146 UnicodeString("1999Q1"), // 06: yQQQ -> yQQQ
147 CharsToUnicodeString("\\u5348\\u5F8C11:58"), // 07: hhmm
148 UnicodeString("23:58"), // 08: HHmm -> HH:mm
149 UnicodeString("23:58"), // 09: jjmm
150 UnicodeString("58:59"), // 10: mmss -> mm:ss
151 CharsToUnicodeString("1999\\u5E741\\u6708"), // 11: yyyyMMMM -> y\u5E74M\u6708
152 CharsToUnicodeString("1\\u670813\\u65E5(\\u6C34)"), // 12: MMMEd -> M\u6708d\u65E5(EEE)
153 CharsToUnicodeString("13\\u65E5(\\u6C34)"), // 13: Ed -> d\u65E5(EEE)
154
155 // ja@calendar=japanese // 5 j a@calendar=japanese
156 CharsToUnicodeString("\\u5E73\\u621011/1"), // 00: yM -> Gy/m
157 CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u6708"), // 01: yMMM -> Gy\u5E74M\u6708
158 CharsToUnicodeString("\\u5E73\\u621011/1/13"), // 02: yMd -> Gy/m/d
159 CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> Gy\u5E74M\u6708d\u65E5
160 UnicodeString("1/13"), // 04: Md -> M/d
161 CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> M\u6708d\u65E5
162 CharsToUnicodeString("\\u5E73\\u621011/Q1"), // 06: yQQQ -> Gy/QQQ
163 CharsToUnicodeString("\\u5348\\u5F8C11:58"), // 07: hhmm ->
164 UnicodeString("23:58"), // 08: HHmm -> HH:mm (as for ja)
165 UnicodeString("23:58"), // 09: jjmm
166 UnicodeString("58:59"), // 10: mmss -> mm:ss (as for ja)
167 CharsToUnicodeString("\\u5E73\\u621011\\u5E741\\u6708"), // 11: yyyyMMMM -> Gyyyy\u5E74M\u6708
168 CharsToUnicodeString("1\\u670813\\u65E5(\\u6C34)"), // 12: MMMEd -> M\u6708d\u65E5(EEE)
169 CharsToUnicodeString("13\\u65E5(\\u6C34)"), // 13: Ed -> d\u65E5(EEE)
170
171 // zh_Hans_CN // 6 z h_Hans_CN
172 UnicodeString("1999-1", -1, US_INV), // 00: yM
173 CharsToUnicodeString("1999\\u5E741\\u6708"), // 01: yMMM -> yyyy\u5E74MMM (fixed expected result per ticket:6626:)
174 CharsToUnicodeString("1999\\u5E741\\u670813\\u65E5"), // 02: yMd
175 CharsToUnicodeString("1999\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> yyyy\u5E74MMMd\u65E5 (fixed expected result per ticket:6626:)
176 UnicodeString("1-13"), // 04: Md
177 CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd -> MMMd\u65E5 (fixed expected result per ticket:6626:)
178 CharsToUnicodeString("1999\\u5E741\\u5B63"), // 06: yQQQ
179 CharsToUnicodeString("\\u4E0B\\u534811:58"), // 07: hhmm
180 UnicodeString("23:58"), // 08: HHmm
181 CharsToUnicodeString("\\u4E0B\\u534811:58"), // 09: jjmm
182 UnicodeString("58:59"), // 10: mmss
183 CharsToUnicodeString("1999\\u5E741\\u6708"), // 11: yyyyMMMM -> yyyy\u5E74MMM
184 CharsToUnicodeString("1\\u670813\\u65E5\\u5468\\u4E09"), // 12: MMMEd -> MMMd\u65E5EEE
185 CharsToUnicodeString("13\\u65E5\\u5468\\u4E09"), // 13: Ed -> d\u65E5EEE
186
187 // zh_TW@calendar=roc // 7 z h_TW@calendar=roc
188 CharsToUnicodeString("\\u6C11\\u570B88/1"), // 00: yM -> Gy/M
189 CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u6708"), // 01: yMMM -> Gy\u5E74M\u6708
190 CharsToUnicodeString("\\u6C11\\u570B88/1/13"), // 02: yMd -> Gy/M/d
191 CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u670813\\u65E5"), // 03: yMMMd -> Gy\u5E74M\u6708d\u65E5
192 UnicodeString("1/13"), // 04: Md -> M/d
193 CharsToUnicodeString("1\\u670813\\u65E5"), // 05: MMMd ->M\u6708d\u65E5
194 CharsToUnicodeString("\\u6C11\\u570B88 1\\u5B63"), // 06: yQQQ -> Gy QQQ
195 CharsToUnicodeString("\\u4E0B\\u534811:58"), // 07: hhmm ->
196 UnicodeString("23:58"), // 08: HHmm ->
197 CharsToUnicodeString("\\u4E0B\\u534811:58"), // 09: jjmm
198 UnicodeString("58:59"), // 10: mmss ->
199 CharsToUnicodeString("\\u6C11\\u570B88\\u5E741\\u6708"), // 11: yyyyMMMM -> Gy\u5E74M\u670
200 CharsToUnicodeString("1\\u670813\\u65E5\\u9031\\u4E09"), // 12: MMMEd -> M\u6708d\u65E5EEE
201 CharsToUnicodeString("13\\u65E5(\\u9031\\u4E09)"), // 13: Ed -> d\u65E5(EEE)
202
203 // ru // 8 r u
204 UnicodeString("1.1999"), // 00: yM -> M.y
205 CharsToUnicodeString("\\u044F\\u043D\\u0432. 1999"), // 01: yMMM -> LLL y
206 UnicodeString("13.1.1999"), // 02: yMd -> d.M.y
207 CharsToUnicodeString("13 \\u044F\\u043D\\u0432. 1999\\u00A0\\u0433."), / / 03: yMMMd -> d MMM y
208 UnicodeString("13.1"), // 04: Md -> d.M
209 CharsToUnicodeString("13 \\u044F\\u043D\\u0432."), // 05: MMMd -> d MMM
210 CharsToUnicodeString("1999 1-\\u0439 \\u043A\\u0432."), // 06: yQQQ -> y QQQ
211 UnicodeString("11:58 PM"), // 07: hhmm -> hh:mm a
212 UnicodeString("23:58"), // 08: HHmm -> HH:mm
213 UnicodeString("23:58"), // 09: jjmm -> HH:mm
214 UnicodeString("58:59"), // 10: mmss -> mm:ss
215 CharsToUnicodeString("\\u042F\\u043D\\u0432\\u0430\\u0440\\u044C 1999"), // 11: yyyyMMMM -> LLLL y
216 CharsToUnicodeString("\\u0421\\u0440, 13 \\u044F\\u043D\\u0432."), // 12 : MMMEd -> ccc, d MMM
217 CharsToUnicodeString("\\u0441\\u0440, 13"), // 13: Ed -> EEE, d
218
219 UnicodeString(),
220 };
221
222 UnicodeString patternTests2[] = {
223 UnicodeString("yyyyMMMdd"),
224 UnicodeString("yyyyqqqq"),
225 UnicodeString("yMMMdd"),
226 UnicodeString("EyyyyMMMdd"),
227 UnicodeString("yyyyMMdd"),
228 UnicodeString("yyyyMMM"),
229 UnicodeString("yyyyMM"),
230 UnicodeString("yyMM"),
231 UnicodeString("yMMMMMd"),
232 UnicodeString("EEEEEMMMMMd"),
233 UnicodeString("MMMd"),
234 UnicodeString("MMMdhmm"),
235 UnicodeString("EMMMdhmms"),
236 UnicodeString("MMdhmm"),
237 UnicodeString("EEEEMMMdhmms"),
238 UnicodeString("yyyyMMMddhhmmss"),
239 UnicodeString("EyyyyMMMddhhmmss"),
240 UnicodeString("hmm"),
241 UnicodeString("hhmm"),
242 UnicodeString("hhmmVVVV"),
243 UnicodeString(""),
244 };
245 UnicodeString patternResults2[] = {
246 UnicodeString("Oct 14, 1999"),
247 UnicodeString("4th quarter 1999"),
248 UnicodeString("Oct 14, 1999"),
249 UnicodeString("Thu, Oct 14, 1999"),
250 UnicodeString("10/14/1999"),
251 UnicodeString("Oct 1999"),
252 UnicodeString("10/1999"),
253 UnicodeString("10/99"),
254 UnicodeString("O 14, 1999"),
255 UnicodeString("T, O 14"),
256 UnicodeString("Oct 14"),
257 UnicodeString("Oct 14 6:58 AM"),
258 UnicodeString("Thu, Oct 14 6:58:59 AM"),
259 UnicodeString("10/14 6:58 AM"),
260 UnicodeString("Thursday, Oct 14 6:58:59 AM"),
261 UnicodeString("Oct 14, 1999 6:58:59 AM"),
262 UnicodeString("Thu, Oct 14, 1999 6:58:59 AM"),
263 UnicodeString("6:58 AM"),
264 UnicodeString("6:58 AM"),
265 UnicodeString("6:58 AM GMT+00:00"),
266 UnicodeString(""),
267 };
268
269 // results for getSkeletons() and getPatternForSkeleton()
270 const UnicodeString testSkeletonsResults[] = {
271 UnicodeString("HH:mm"),
272 UnicodeString("MMMMd"),
273 UnicodeString("MMMMMd"),
274 };
275
276 const UnicodeString testBaseSkeletonsResults[] = {
277 UnicodeString("Hm"),
278 UnicodeString("MMMd"),
279 UnicodeString("MMMd"),
280 };
281
282 UnicodeString newDecimal(" "); // space
283 UnicodeString newAppendItemName("hrs.");
284 UnicodeString newAppendItemFormat("{1} {0}");
285 UnicodeString newDateTimeFormat("{1} {0}");
286 UErrorCode status = U_ZERO_ERROR;
287 UnicodeString conflictingPattern;
288 UDateTimePatternConflict conflictingStatus;
289
290 // ======= Test CreateInstance with default locale
291 logln("Testing DateTimePatternGenerator createInstance from default locale") ;
292
293 DateTimePatternGenerator *instFromDefaultLocale=DateTimePatternGenerator::cr eateInstance(status);
294 if (U_FAILURE(status)) {
295 dataerrln("ERROR: Could not create DateTimePatternGenerator (default) - exitting");
296 return;
297 }
298 else {
299 delete instFromDefaultLocale;
300 }
301
302 // ======= Test CreateInstance with given locale
303 logln("Testing DateTimePatternGenerator createInstance from French locale");
304 status = U_ZERO_ERROR;
305 DateTimePatternGenerator *instFromLocale=DateTimePatternGenerator::createIns tance(Locale::getFrench(), status);
306 if (U_FAILURE(status)) {
307 dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::get French()) - exitting");
308 return;
309 }
310
311 // ======= Test clone DateTimePatternGenerator
312 logln("Testing DateTimePatternGenerator::clone()");
313 status = U_ZERO_ERROR;
314
315
316 UnicodeString decimalSymbol = instFromLocale->getDecimal();
317 UnicodeString newDecimalSymbol = UnicodeString("*");
318 decimalSymbol = instFromLocale->getDecimal();
319 instFromLocale->setDecimal(newDecimalSymbol);
320 DateTimePatternGenerator *cloneDTPatternGen=instFromLocale->clone();
321 decimalSymbol = cloneDTPatternGen->getDecimal();
322 if (decimalSymbol != newDecimalSymbol) {
323 errln("ERROR: inconsistency is found in cloned object.");
324 }
325 if ( !(*cloneDTPatternGen == *instFromLocale) ) {
326 errln("ERROR: inconsistency is found in cloned object.");
327 }
328
329 if ( *cloneDTPatternGen != *instFromLocale ) {
330 errln("ERROR: inconsistency is found in cloned object.");
331 }
332
333 delete instFromLocale;
334 delete cloneDTPatternGen;
335
336 // ======= Test simple use cases
337 logln("Testing simple use cases");
338 status = U_ZERO_ERROR;
339 Locale deLocale=Locale::getGermany();
340 UDate sampleDate=LocaleTest::date(99, 9, 13, 23, 58, 59);
341 DateTimePatternGenerator *gen = DateTimePatternGenerator::createInstance(deL ocale, status);
342 if (U_FAILURE(status)) {
343 dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::get Germany()) - exitting");
344 return;
345 }
346 UnicodeString findPattern = gen->getBestPattern(UnicodeString("MMMddHmm"), s tatus);
347 SimpleDateFormat *format = new SimpleDateFormat(findPattern, deLocale, statu s);
348 if (U_FAILURE(status)) {
349 dataerrln("ERROR: Could not create SimpleDateFormat (Locale::getGermany( ))");
350 delete gen;
351 return;
352 }
353 TimeZone *zone = TimeZone::createTimeZone(UnicodeString("ECT"));
354 if (zone==NULL) {
355 dataerrln("ERROR: Could not create TimeZone ECT");
356 delete gen;
357 delete format;
358 return;
359 }
360 format->setTimeZone(*zone);
361 UnicodeString dateReturned, expectedResult;
362 dateReturned.remove();
363 dateReturned = format->format(sampleDate, dateReturned, status);
364 expectedResult=UnicodeString("14. Okt 08:58", -1, US_INV);
365 if ( dateReturned != expectedResult ) {
366 errln("ERROR: Simple test in getBestPattern with Locale::getGermany())." );
367 }
368 // add new pattern
369 status = U_ZERO_ERROR;
370 conflictingStatus = gen->addPattern(UnicodeString("d'. von' MMMM", -1, US_IN V), true, conflictingPattern, status);
371 if (U_FAILURE(status)) {
372 errln("ERROR: Could not addPattern - d\'. von\' MMMM");
373 }
374 status = U_ZERO_ERROR;
375 UnicodeString testPattern=gen->getBestPattern(UnicodeString("MMMMdd"), statu s);
376 testPattern=gen->getBestPattern(UnicodeString("MMMddHmm"), status);
377 format->applyPattern(gen->getBestPattern(UnicodeString("MMMMdHmm"), status)) ;
378 dateReturned.remove();
379 dateReturned = format->format(sampleDate, dateReturned, status);
380 expectedResult=UnicodeString("14. von Oktober 08:58", -1, US_INV);
381 if ( dateReturned != expectedResult ) {
382 errln(UnicodeString("ERROR: Simple test addPattern failed!: d\'. von\' M MMM Got: ") + dateReturned + UnicodeString(" Expected: ") + expectedResult);
383 }
384 delete format;
385
386 // get a pattern and modify it
387 format = (SimpleDateFormat *)DateFormat::createDateTimeInstance(DateFormat:: kFull, DateFormat::kFull,
388 deLocale);
389 format->setTimeZone(*zone);
390 UnicodeString pattern;
391 pattern = format->toPattern(pattern);
392 dateReturned.remove();
393 dateReturned = format->format(sampleDate, dateReturned, status);
394 expectedResult=CharsToUnicodeString("Donnerstag, 14. Oktober 1999 08:58:59 M itteleurop\\u00E4ische Sommerzeit");
395 if ( dateReturned != expectedResult ) {
396 errln("ERROR: Simple test uses full date format.");
397 errln(UnicodeString(" Got: ") + dateReturned + UnicodeString(" Expected: ") + expectedResult);
398 }
399
400 // modify it to change the zone.
401 UnicodeString newPattern = gen->replaceFieldTypes(pattern, UnicodeString("vv vv"), status);
402 format->applyPattern(newPattern);
403 dateReturned.remove();
404 dateReturned = format->format(sampleDate, dateReturned, status);
405 expectedResult=UnicodeString("Donnerstag, 14. Oktober 1999 08:58:59 (Frankre ich)");
406 if ( dateReturned != expectedResult ) {
407 errln("ERROR: Simple test modify the timezone!");
408 errln(UnicodeString(" Got: ")+ dateReturned + UnicodeString(" Expected: ") + expectedResult);
409 }
410
411 // setDeciaml(), getDeciaml()
412 gen->setDecimal(newDecimal);
413 if (newDecimal != gen->getDecimal()) {
414 errln("ERROR: unexpected result from setDecimal() and getDecimal()!.\n") ;
415 }
416
417 // setAppenItemName() , getAppendItemName()
418 gen->setAppendItemName(UDATPG_HOUR_FIELD, newAppendItemName);
419 if (newAppendItemName != gen->getAppendItemName(UDATPG_HOUR_FIELD)) {
420 errln("ERROR: unexpected result from setAppendItemName() and getAppendIt emName()!.\n");
421 }
422
423 // setAppenItemFormat() , getAppendItemFormat()
424 gen->setAppendItemFormat(UDATPG_HOUR_FIELD, newAppendItemFormat);
425 if (newAppendItemFormat != gen->getAppendItemFormat(UDATPG_HOUR_FIELD)) {
426 errln("ERROR: unexpected result from setAppendItemFormat() and getAppend ItemFormat()!.\n");
427 }
428
429 // setDateTimeFormat() , getDateTimeFormat()
430 gen->setDateTimeFormat(newDateTimeFormat);
431 if (newDateTimeFormat != gen->getDateTimeFormat()) {
432 errln("ERROR: unexpected result from setDateTimeFormat() and getDateTime Format()!.\n");
433 }
434
435 // ======== Test getSkeleton and getBaseSkeleton
436 status = U_ZERO_ERROR;
437 pattern = UnicodeString("dd-MMM");
438 UnicodeString expectedSkeleton = UnicodeString("MMMdd");
439 UnicodeString expectedBaseSkeleton = UnicodeString("MMMd");
440 UnicodeString retSkeleton = gen->getSkeleton(pattern, status);
441 if(U_FAILURE(status) || retSkeleton != expectedSkeleton ) {
442 errln("ERROR: Unexpected result from getSkeleton().\n");
443 errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected: ") + expectedSkeleton );
444 }
445 retSkeleton = gen->getBaseSkeleton(pattern, status);
446 if(U_FAILURE(status) || retSkeleton != expectedBaseSkeleton) {
447 errln("ERROR: Unexpected result from getBaseSkeleton().\n");
448 errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected: ")+ expectedBaseSkeleton);
449 }
450
451 pattern = UnicodeString("dd/MMMM/yy");
452 expectedSkeleton = UnicodeString("yyMMMMdd");
453 expectedBaseSkeleton = UnicodeString("yMMMd");
454 retSkeleton = gen->getSkeleton(pattern, status);
455 if(U_FAILURE(status) || retSkeleton != expectedSkeleton ) {
456 errln("ERROR: Unexpected result from getSkeleton().\n");
457 errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected: ") + expectedSkeleton );
458 }
459 retSkeleton = gen->getBaseSkeleton(pattern, status);
460 if(U_FAILURE(status) || retSkeleton != expectedBaseSkeleton) {
461 errln("ERROR: Unexpected result from getBaseSkeleton().\n");
462 errln(UnicodeString(" Got: ") + retSkeleton + UnicodeString(" Expected: ")+ expectedBaseSkeleton);
463 }
464 delete format;
465 delete zone;
466 delete gen;
467
468 {
469 // Trac# 6104
470 status = U_ZERO_ERROR;
471 pattern = UnicodeString("YYYYMMM");
472 UnicodeString expR = CharsToUnicodeString("1999\\u5E741\\u6708"); // fix ed expected result per ticket:6626:
473 Locale loc("ja");
474 UDate testDate1= LocaleTest::date(99, 0, 13, 23, 58, 59);
475 DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstanc e(loc, status);
476 if(U_FAILURE(status)) {
477 dataerrln("ERROR: Could not create DateTimePatternGenerator");
478 return;
479 }
480 UnicodeString bPattern = patGen->getBestPattern(pattern, status);
481 UnicodeString rDate;
482 SimpleDateFormat sdf(bPattern, loc, status);
483 rDate.remove();
484 rDate = sdf.format(testDate1, rDate);
485
486 logln(UnicodeString(" ja locale with skeleton: YYYYMMM Best Pattern:") + bPattern);
487 logln(UnicodeString(" Formatted date:") + rDate);
488
489 if ( expR!= rDate ) {
490 errln(UnicodeString("\nERROR: Test Japanese month hack Got: ") + rDa te +
491 UnicodeString(" Expected: ") + expR );
492 }
493
494 delete patGen;
495 }
496 { // Trac# 6104
497 Locale loc("zh");
498 UnicodeString expR = CharsToUnicodeString("1999\\u5E741\\u6708"); // fix ed expected result per ticket:6626:
499 UDate testDate1= LocaleTest::date(99, 0, 13, 23, 58, 59);
500 DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstanc e(loc, status);
501 if(U_FAILURE(status)) {
502 dataerrln("ERROR: Could not create DateTimePatternGenerator");
503 return;
504 }
505 UnicodeString bPattern = patGen->getBestPattern(pattern, status);
506 UnicodeString rDate;
507 SimpleDateFormat sdf(bPattern, loc, status);
508 rDate.remove();
509 rDate = sdf.format(testDate1, rDate);
510
511 logln(UnicodeString(" zh locale with skeleton: YYYYMMM Best Pattern:") + bPattern);
512 logln(UnicodeString(" Formatted date:") + rDate);
513 if ( expR!= rDate ) {
514 errln(UnicodeString("\nERROR: Test Chinese month hack Got: ") + rDat e +
515 UnicodeString(" Expected: ") + expR );
516 }
517 delete patGen;
518 }
519
520 {
521 // Trac# 6172 duplicate time pattern
522 status = U_ZERO_ERROR;
523 pattern = UnicodeString("hmv");
524 UnicodeString expR = UnicodeString("h:mm a v"); // avail formats has hm -> "h:mm a" (fixed expected result per ticket:6626:)
525 Locale loc("en");
526 DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstan ce(loc, status);
527 if(U_FAILURE(status)) {
528 dataerrln("ERROR: Could not create DateTimePatternGenerator");
529 return;
530 }
531 UnicodeString bPattern = patGen->getBestPattern(pattern, status);
532 logln(UnicodeString(" en locale with skeleton: hmv Best Pattern:") + b Pattern);
533
534 if ( expR!= bPattern ) {
535 errln(UnicodeString("\nERROR: Test EN time format Got: ") + bPatter n +
536 UnicodeString(" Expected: ") + expR );
537 }
538
539 delete patGen;
540 }
541
542
543 // ======= Test various skeletons.
544 logln("Testing DateTimePatternGenerator with various skeleton");
545
546 status = U_ZERO_ERROR;
547 int32_t localeIndex=0;
548 int32_t resultIndex=0;
549 UnicodeString resultDate;
550 UDate testDate= LocaleTest::date(99, 0, 13, 23, 58, 59);
551 while (localeIndex < MAX_LOCALE )
552 {
553 int32_t dataIndex=0;
554 UnicodeString bestPattern;
555
556 Locale loc(testLocale[localeIndex][0], testLocale[localeIndex][1], testL ocale[localeIndex][2], testLocale[localeIndex][3]);
557 logln("\n\n Locale: %s_%s_%s@%s", testLocale[localeIndex][0], testLocale [localeIndex][1], testLocale[localeIndex][2], testLocale[localeIndex][3]);
558 DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstanc e(loc, status);
559 if(U_FAILURE(status)) {
560 dataerrln("ERROR: Could not create DateTimePatternGenerator with loc ale index:%d . - exitting\n", localeIndex);
561 return;
562 }
563 while (patternData[dataIndex].length() > 0) {
564 log(patternData[dataIndex]);
565 bestPattern = patGen->getBestPattern(patternData[dataIndex++], statu s);
566 logln(UnicodeString(" -> ") + bestPattern);
567
568 SimpleDateFormat sdf(bestPattern, loc, status);
569 resultDate.remove();
570 resultDate = sdf.format(testDate, resultDate);
571 if ( resultDate != patternResults[resultIndex] ) {
572 errln(UnicodeString("\nERROR: Test various skeletons[") + (dataI ndex-1) + UnicodeString("], localeIndex ") + localeIndex +
573 UnicodeString(". Got: \"") + resultDate + UnicodeString("\ " Expected: \"") + patternResults[resultIndex] + "\"" );
574 }
575
576 resultIndex++;
577 }
578 delete patGen;
579 localeIndex++;
580 }
581
582 // ======= More tests ticket#6110
583 logln("Testing DateTimePatternGenerator with various skeleton");
584
585 status = U_ZERO_ERROR;
586 localeIndex=0;
587 resultIndex=0;
588 testDate= LocaleTest::date(99, 9, 13, 23, 58, 59);
589 {
590 int32_t dataIndex=0;
591 UnicodeString bestPattern;
592 logln("\n\n Test various skeletons for English locale...");
593 DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstanc e(Locale::getEnglish(), status);
594 if(U_FAILURE(status)) {
595 dataerrln("ERROR: Could not create DateTimePatternGenerator with loc ale English . - exitting\n");
596 return;
597 }
598 TimeZone *enZone = TimeZone::createTimeZone(UnicodeString("ECT/GMT"));
599 if (enZone==NULL) {
600 dataerrln("ERROR: Could not create TimeZone ECT");
601 delete patGen;
602 return;
603 }
604 SimpleDateFormat *enFormat = (SimpleDateFormat *)DateFormat::createDateT imeInstance(DateFormat::kFull,
605 DateFormat::kFull, Locale::getEnglish());
606 enFormat->setTimeZone(*enZone);
607 while (patternTests2[dataIndex].length() > 0) {
608 logln(patternTests2[dataIndex]);
609 bestPattern = patGen->getBestPattern(patternTests2[dataIndex], statu s);
610 logln(UnicodeString(" -> ") + bestPattern);
611 enFormat->applyPattern(bestPattern);
612 resultDate.remove();
613 resultDate = enFormat->format(testDate, resultDate);
614 if ( resultDate != patternResults2[resultIndex] ) {
615 errln(UnicodeString("\nERROR: Test various skeletons[") + dataIn dex
616 + UnicodeString("]. Got: ") + resultDate + UnicodeString(" E xpected: ") +
617 patternResults2[resultIndex] );
618 }
619 dataIndex++;
620 resultIndex++;
621 }
622 delete patGen;
623 delete enZone;
624 delete enFormat;
625 }
626
627
628
629 // ======= Test random skeleton
630 DateTimePatternGenerator *randDTGen= DateTimePatternGenerator::createInstanc e(status);
631 if (U_FAILURE(status)) {
632 dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::get French()) - exitting");
633 return;
634 }
635 UChar newChar;
636 int32_t i;
637 for (i=0; i<10; ++i) {
638 UnicodeString randomSkeleton;
639 int32_t len = rand() % 20;
640 for (int32_t j=0; j<len; ++j ) {
641 while ((newChar = (UChar)(rand()%0x7f))>=(UChar)0x20) {
642 randomSkeleton += newChar;
643 }
644 }
645 UnicodeString bestPattern = randDTGen->getBestPattern(randomSkeleton, st atus);
646 }
647 delete randDTGen;
648
649 // UnicodeString randomString=Unicode
650 // ======= Test getStaticClassID()
651
652 logln("Testing getStaticClassID()");
653 status = U_ZERO_ERROR;
654 DateTimePatternGenerator *test= DateTimePatternGenerator::createInstance(sta tus);
655
656 if(test->getDynamicClassID() != DateTimePatternGenerator::getStaticClassID() ) {
657 errln("ERROR: getDynamicClassID() didn't return the expected value");
658 }
659 delete test;
660
661 // ====== Test createEmptyInstance()
662
663 logln("Testing createEmptyInstance()");
664 status = U_ZERO_ERROR;
665
666 test = DateTimePatternGenerator::createEmptyInstance(status);
667 if(U_FAILURE(status)) {
668 errln("ERROR: Fail to create an empty instance ! - exitting.\n");
669 delete test;
670 return;
671 }
672
673 conflictingStatus = test->addPattern(UnicodeString("MMMMd"), true, conflicti ngPattern, status);
674 status = U_ZERO_ERROR;
675 testPattern=test->getBestPattern(UnicodeString("MMMMdd"), status);
676 conflictingStatus = test->addPattern(UnicodeString("HH:mm"), true, conflicti ngPattern, status);
677 conflictingStatus = test->addPattern(UnicodeString("MMMMMd"), true, conflict ingPattern, status); //duplicate pattern
678 StringEnumeration *output=NULL;
679 output = test->getRedundants(status);
680 expectedResult=UnicodeString("MMMMd");
681 if (output != NULL) {
682 output->reset(status);
683 const UnicodeString *dupPattern=output->snext(status);
684 if ( (dupPattern==NULL) || (*dupPattern != expectedResult) ) {
685 errln("ERROR: Fail in getRedundants !\n");
686 }
687 }
688
689 // ======== Test getSkeletons and getBaseSkeletons
690 StringEnumeration* ptrSkeletonEnum = test->getSkeletons(status);
691 if(U_FAILURE(status)) {
692 errln("ERROR: Fail to get skeletons !\n");
693 }
694 UnicodeString returnPattern, *ptrSkeleton;
695 ptrSkeletonEnum->reset(status);
696 int32_t count=ptrSkeletonEnum->count(status);
697 for (i=0; i<count; ++i) {
698 ptrSkeleton = (UnicodeString *)ptrSkeletonEnum->snext(status);
699 returnPattern = test->getPatternForSkeleton(*ptrSkeleton);
700 if ( returnPattern != testSkeletonsResults[i] ) {
701 errln(UnicodeString("ERROR: Unexpected result from getSkeletons and getPatternForSkeleton\nGot: ") + returnPattern
702 + UnicodeString("\nExpected: ") + testSkeletonsResults[i]
703 + UnicodeString("\n"));
704 }
705 }
706 StringEnumeration* ptrBaseSkeletonEnum = test->getBaseSkeletons(status);
707 if(U_FAILURE(status)) {
708 errln("ERROR: Fail to get base skeletons !\n");
709 }
710 count=ptrBaseSkeletonEnum->count(status);
711 for (i=0; i<count; ++i) {
712 ptrSkeleton = (UnicodeString *)ptrBaseSkeletonEnum->snext(status);
713 if ( *ptrSkeleton != testBaseSkeletonsResults[i] ) {
714 errln("ERROR: Unexpected result from getBaseSkeletons() !\n");
715 }
716 }
717
718 // ========= DateTimePatternGenerator sample code in Userguide
719 // set up the generator
720 Locale locale = Locale::getFrench();
721 status = U_ZERO_ERROR;
722 DateTimePatternGenerator *generator = DateTimePatternGenerator::createInstan ce( locale, status);
723
724 // get a pattern for an abbreviated month and day
725 pattern = generator->getBestPattern(UnicodeString("MMMd"), status);
726 SimpleDateFormat formatter(pattern, locale, status);
727
728 zone = TimeZone::createTimeZone(UnicodeString("GMT"));
729 formatter.setTimeZone(*zone);
730 // use it to format (or parse)
731 UnicodeString formatted;
732 formatted = formatter.format(Calendar::getNow(), formatted, status);
733 // for French, the result is "13 sept."
734 formatted.remove();
735 // cannot use the result from getNow() because the value change evreyday.
736 testDate= LocaleTest::date(99, 0, 13, 23, 58, 59);
737 formatted = formatter.format(testDate, formatted, status);
738 expectedResult=UnicodeString("14 janv.");
739 if ( formatted != expectedResult ) {
740 errln("ERROR: Userguide sample code result!");
741 errln(UnicodeString(" Got: ")+ formatted + UnicodeString(" Expected: ") + expectedResult);
742 }
743
744 delete zone;
745 delete output;
746 delete ptrSkeletonEnum;
747 delete ptrBaseSkeletonEnum;
748 delete test;
749 delete generator;
750 }
751
752 /**
753 * Test handling of options
754 *
755 * For reference, as of ICU 4.3.3,
756 * root/gregorian has
757 * Hm{"H:mm"}
758 * Hms{"H:mm:ss"}
759 * hm{"h:mm a"}
760 * hms{"h:mm:ss a"}
761 * en/gregorian has
762 * Hm{"H:mm"}
763 * Hms{"H:mm:ss"}
764 * hm{"h:mm a"}
765 * be/gregorian has
766 * HHmmss{"HH.mm.ss"}
767 * Hm{"HH.mm"}
768 * hm{"h.mm a"}
769 * hms{"h.mm.ss a"}
770 */
771 typedef struct DTPtnGenOptionsData {
772 const char *locale;
773 const char *skel;
774 const char *expectedPattern;
775 UDateTimePatternMatchOptions options;
776 } DTPtnGenOptionsData;
777 void IntlTestDateTimePatternGeneratorAPI::testOptions(/*char *par*/)
778 {
779 DTPtnGenOptionsData testData[] = {
780 // locale skel expectedPattern options
781 { "en", "Hmm", "HH:mm", UDATPG_MATCH_NO_OPTIONS },
782 { "en", "HHmm", "HH:mm", UDATPG_MATCH_NO_OPTIONS },
783 { "en", "hhmm", "h:mm a", UDATPG_MATCH_NO_OPTIONS },
784 { "en", "Hmm", "HH:mm", UDATPG_MATCH_HOUR_FIELD_LENGTH },
785 { "en", "HHmm", "HH:mm", UDATPG_MATCH_HOUR_FIELD_LENGTH },
786 { "en", "hhmm", "hh:mm a", UDATPG_MATCH_HOUR_FIELD_LENGTH },
787 { "be", "Hmm", "HH.mm", UDATPG_MATCH_NO_OPTIONS },
788 { "be", "HHmm", "HH.mm", UDATPG_MATCH_NO_OPTIONS },
789 { "be", "hhmm", "h.mm a", UDATPG_MATCH_NO_OPTIONS },
790 { "be", "Hmm", "H.mm", UDATPG_MATCH_HOUR_FIELD_LENGTH },
791 { "be", "HHmm", "HH.mm", UDATPG_MATCH_HOUR_FIELD_LENGTH },
792 { "be", "hhmm", "hh.mm a", UDATPG_MATCH_HOUR_FIELD_LENGTH },
793 };
794
795 int count = sizeof(testData) / sizeof(testData[0]);
796 const DTPtnGenOptionsData * testDataPtr = testData;
797
798 for (; count-- > 0; ++testDataPtr) {
799 UErrorCode status = U_ZERO_ERROR;
800
801 Locale locale(testDataPtr->locale);
802 UnicodeString skel(testDataPtr->skel);
803 UnicodeString expectedPattern(testDataPtr->expectedPattern);
804 UDateTimePatternMatchOptions options = testDataPtr->options;
805
806 DateTimePatternGenerator * dtpgen = DateTimePatternGenerator::createInst ance(locale, status);
807 if (U_FAILURE(status)) {
808 dataerrln("Unable to create DateTimePatternGenerator instance for lo cale(%s): %s", locale.getName(), u_errorName(status));
809 delete dtpgen;
810 continue;
811 }
812 UnicodeString pattern = dtpgen->getBestPattern(skel, options, status);
813 if (pattern.compare(expectedPattern) != 0) {
814 errln( UnicodeString("ERROR in getBestPattern, locale ") + UnicodeSt ring(testDataPtr->locale) +
815 UnicodeString(", skeleton ") + skel +
816 ((options)?UnicodeString(", options!=0"):UnicodeString(", opt ions==0")) +
817 UnicodeString(", expected pattern ") + expectedPattern +
818 UnicodeString(", got ") + pattern );
819 }
820 delete dtpgen;
821 }
822 }
823
824 #endif /* #if !UCONFIG_NO_FORMATTING */
OLDNEW
« no previous file with comments | « icu46/source/test/intltest/dtptngts.h ('k') | icu46/source/test/intltest/encoll.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698