OLD | NEW |
| (Empty) |
1 | |
2 /******************************************************************** | |
3 * COPYRIGHT: | |
4 * Copyright (c) 1997-2015, International Business Machines Corporation and | |
5 * others. All Rights Reserved. | |
6 ********************************************************************/ | |
7 | |
8 #include "unicode/utypes.h" | |
9 | |
10 #if !UCONFIG_NO_FORMATTING | |
11 | |
12 | |
13 //TODO: define it in compiler flag | |
14 //#define DTIFMTTS_DEBUG 1 | |
15 | |
16 | |
17 #ifdef DTIFMTTS_DEBUG | |
18 #include <iostream> | |
19 #endif | |
20 | |
21 | |
22 #include "cstring.h" | |
23 #include "dtifmtts.h" | |
24 #include "unicode/gregocal.h" | |
25 #include "unicode/dtintrv.h" | |
26 #include "unicode/dtitvinf.h" | |
27 #include "unicode/dtitvfmt.h" | |
28 #include "unicode/localpointer.h" | |
29 #include "unicode/timezone.h" | |
30 | |
31 | |
32 | |
33 #ifdef DTIFMTTS_DEBUG | |
34 //#define PRINTMESG(msg) { std::cout << "(" << __FILE__ << ":" << __LINE__ << ")
" << msg << "\n"; } | |
35 #define PRINTMESG(msg) { std::cout << msg; } | |
36 #endif | |
37 | |
38 #define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) | |
39 | |
40 #include <stdio.h> | |
41 | |
42 | |
43 void DateIntervalFormatTest::runIndexedTest( int32_t index, UBool exec, const ch
ar* &name, char* /*par*/ ) { | |
44 if (exec) logln("TestSuite DateIntervalFormat"); | |
45 switch (index) { | |
46 TESTCASE(0, testAPI); | |
47 TESTCASE(1, testFormat); | |
48 TESTCASE(2, testFormatUserDII); | |
49 TESTCASE(3, testSetIntervalPatternNoSideEffect); | |
50 TESTCASE(4, testYearFormats); | |
51 TESTCASE(5, testStress); | |
52 TESTCASE(6, testTicket11583_2); | |
53 default: name = ""; break; | |
54 } | |
55 } | |
56 | |
57 /** | |
58 * Test various generic API methods of DateIntervalFormat for API coverage. | |
59 */ | |
60 void DateIntervalFormatTest::testAPI() { | |
61 | |
62 /* ====== Test create interval instance with default locale and skeleton | |
63 */ | |
64 UErrorCode status = U_ZERO_ERROR; | |
65 logln("Testing DateIntervalFormat create instance with default locale and sk
eleton"); | |
66 | |
67 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(UDAT_YEAR_
MONTH_DAY, status); | |
68 if(U_FAILURE(status)) { | |
69 dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + defaul
t locale) - exitting"); | |
70 return; | |
71 } else { | |
72 delete dtitvfmt; | |
73 } | |
74 | |
75 | |
76 /* ====== Test create interval instance with given locale and skeleton | |
77 */ | |
78 status = U_ZERO_ERROR; | |
79 logln("Testing DateIntervalFormat create instance with given locale and skel
eton"); | |
80 | |
81 dtitvfmt = DateIntervalFormat::createInstance(UDAT_YEAR_MONTH_DAY, Locale::g
etJapanese(), status); | |
82 if(U_FAILURE(status)) { | |
83 dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + locale
) - exitting"); | |
84 return; | |
85 } else { | |
86 delete dtitvfmt; | |
87 } | |
88 | |
89 | |
90 /* ====== Test create interval instance with dateIntervalInfo and skeleton | |
91 */ | |
92 status = U_ZERO_ERROR; | |
93 logln("Testing DateIntervalFormat create instance with dateIntervalInfo and
skeleton"); | |
94 | |
95 DateIntervalInfo* dtitvinf = new DateIntervalInfo(Locale::getSimplifiedChine
se(), status); | |
96 | |
97 dtitvfmt = DateIntervalFormat::createInstance("EEEdMMMyhms", *dtitvinf, stat
us); | |
98 delete dtitvinf; | |
99 | |
100 if(U_FAILURE(status)) { | |
101 dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + DateIn
tervalInfo + default locale) - exitting"); | |
102 return; | |
103 } else { | |
104 delete dtitvfmt; | |
105 } | |
106 | |
107 | |
108 /* ====== Test create interval instance with dateIntervalInfo and skeleton | |
109 */ | |
110 status = U_ZERO_ERROR; | |
111 logln("Testing DateIntervalFormat create instance with dateIntervalInfo and
skeleton"); | |
112 | |
113 dtitvinf = new DateIntervalInfo(Locale::getSimplifiedChinese(), status); | |
114 | |
115 dtitvfmt = DateIntervalFormat::createInstance("EEEdMMMyhms", Locale::getSimp
lifiedChinese(), *dtitvinf, status); | |
116 delete dtitvinf; | |
117 if(U_FAILURE(status)) { | |
118 dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + DateIn
tervalInfo + locale) - exitting"); | |
119 return; | |
120 } | |
121 // not deleted, test clone | |
122 | |
123 | |
124 // ====== Test clone() | |
125 status = U_ZERO_ERROR; | |
126 logln("Testing DateIntervalFormat clone"); | |
127 | |
128 DateIntervalFormat* another = (DateIntervalFormat*)dtitvfmt->clone(); | |
129 if ( (*another) != (*dtitvfmt) ) { | |
130 dataerrln("ERROR: clone failed"); | |
131 } | |
132 | |
133 | |
134 // ====== Test getDateIntervalInfo, setDateIntervalInfo, adoptDateIntervalIn
fo | |
135 status = U_ZERO_ERROR; | |
136 logln("Testing DateIntervalFormat getDateIntervalInfo"); | |
137 const DateIntervalInfo* inf = another->getDateIntervalInfo(); | |
138 dtitvfmt->setDateIntervalInfo(*inf, status); | |
139 const DateIntervalInfo* anotherInf = dtitvfmt->getDateIntervalInfo(); | |
140 if ( (*inf) != (*anotherInf) || U_FAILURE(status) ) { | |
141 dataerrln("ERROR: getDateIntervalInfo/setDateIntervalInfo failed"); | |
142 } | |
143 | |
144 { | |
145 // We make sure that setDateIntervalInfo does not corrupt the cache. See
ticket 9919. | |
146 status = U_ZERO_ERROR; | |
147 logln("Testing DateIntervalFormat setDateIntervalInfo"); | |
148 const Locale &enLocale = Locale::getEnglish(); | |
149 LocalPointer<DateIntervalFormat> dif(DateIntervalFormat::createInstance(
"yMd", enLocale, status)); | |
150 if (U_FAILURE(status)) { | |
151 errln("Failure encountered: %s", u_errorName(status)); | |
152 return; | |
153 } | |
154 UnicodeString expected; | |
155 LocalPointer<Calendar> fromTime(Calendar::createInstance(enLocale, statu
s)); | |
156 LocalPointer<Calendar> toTime(Calendar::createInstance(enLocale, status)
); | |
157 if (U_FAILURE(status)) { | |
158 errln("Failure encountered: %s", u_errorName(status)); | |
159 return; | |
160 } | |
161 FieldPosition pos = 0; | |
162 fromTime->set(2013, 3, 26); | |
163 toTime->set(2013, 3, 28); | |
164 dif->format(*fromTime, *toTime, expected, pos, status); | |
165 if (U_FAILURE(status)) { | |
166 errln("Failure encountered: %s", u_errorName(status)); | |
167 return; | |
168 } | |
169 LocalPointer<DateIntervalInfo> dii(new DateIntervalInfo(Locale::getEngli
sh(), status), status); | |
170 if (U_FAILURE(status)) { | |
171 errln("Failure encountered: %s", u_errorName(status)); | |
172 return; | |
173 } | |
174 dii->setIntervalPattern(ctou("yMd"), UCAL_DATE, ctou("M/d/y \\u2013 d"),
status); | |
175 dif->setDateIntervalInfo(*dii, status); | |
176 if (U_FAILURE(status)) { | |
177 errln("Failure encountered: %s", u_errorName(status)); | |
178 return; | |
179 } | |
180 dif.adoptInstead(DateIntervalFormat::createInstance("yMd", enLocale, sta
tus)); | |
181 if (U_FAILURE(status)) { | |
182 errln("Failure encountered: %s", u_errorName(status)); | |
183 return; | |
184 } | |
185 UnicodeString actual; | |
186 pos = 0; | |
187 dif->format(*fromTime, *toTime, actual, pos, status); | |
188 if (U_FAILURE(status)) { | |
189 errln("Failure encountered: %s", u_errorName(status)); | |
190 return; | |
191 } | |
192 if (expected != actual) { | |
193 errln("DateIntervalFormat.setIntervalInfo should have no side effect
s."); | |
194 } | |
195 } | |
196 | |
197 /* | |
198 status = U_ZERO_ERROR; | |
199 DateIntervalInfo* nonConstInf = inf->clone(); | |
200 dtitvfmt->adoptDateIntervalInfo(nonConstInf, status); | |
201 anotherInf = dtitvfmt->getDateIntervalInfo(); | |
202 if ( (*inf) != (*anotherInf) || U_FAILURE(status) ) { | |
203 dataerrln("ERROR: adoptDateIntervalInfo failed"); | |
204 } | |
205 */ | |
206 | |
207 // ====== Test getDateFormat, setDateFormat, adoptDateFormat | |
208 | |
209 status = U_ZERO_ERROR; | |
210 logln("Testing DateIntervalFormat getDateFormat"); | |
211 /* | |
212 const DateFormat* fmt = another->getDateFormat(); | |
213 dtitvfmt->setDateFormat(*fmt, status); | |
214 const DateFormat* anotherFmt = dtitvfmt->getDateFormat(); | |
215 if ( (*fmt) != (*anotherFmt) || U_FAILURE(status) ) { | |
216 dataerrln("ERROR: getDateFormat/setDateFormat failed"); | |
217 } | |
218 | |
219 status = U_ZERO_ERROR; | |
220 DateFormat* nonConstFmt = (DateFormat*)fmt->clone(); | |
221 dtitvfmt->adoptDateFormat(nonConstFmt, status); | |
222 anotherFmt = dtitvfmt->getDateFormat(); | |
223 if ( (*fmt) != (*anotherFmt) || U_FAILURE(status) ) { | |
224 dataerrln("ERROR: adoptDateFormat failed"); | |
225 } | |
226 delete fmt; | |
227 */ | |
228 | |
229 | |
230 // ======= Test getStaticClassID() | |
231 | |
232 logln("Testing getStaticClassID()"); | |
233 | |
234 | |
235 if(dtitvfmt->getDynamicClassID() != DateIntervalFormat::getStaticClassID())
{ | |
236 errln("ERROR: getDynamicClassID() didn't return the expected value"); | |
237 } | |
238 | |
239 delete another; | |
240 | |
241 // ====== test constructor/copy constructor and assignment | |
242 /* they are protected, no test | |
243 logln("Testing DateIntervalFormat constructor and assigment operator"); | |
244 status = U_ZERO_ERROR; | |
245 | |
246 DateFormat* constFmt = (constFmt*)dtitvfmt->getDateFormat()->clone(); | |
247 inf = dtitvfmt->getDateIntervalInfo()->clone(); | |
248 | |
249 | |
250 DateIntervalFormat* dtifmt = new DateIntervalFormat(fmt, inf, status); | |
251 if(U_FAILURE(status)) { | |
252 dataerrln("ERROR: Could not create DateIntervalFormat (default) - exitti
ng"); | |
253 return; | |
254 } | |
255 | |
256 DateIntervalFormat* dtifmt2 = new(dtifmt); | |
257 if ( (*dtifmt) != (*dtifmt2) ) { | |
258 dataerrln("ERROR: Could not create DateIntervalFormat (default) - exitti
ng"); | |
259 return; | |
260 } | |
261 | |
262 DateIntervalFormat dtifmt3 = (*dtifmt); | |
263 if ( (*dtifmt) != dtifmt3 ) { | |
264 dataerrln("ERROR: Could not create DateIntervalFormat (default) - exitti
ng"); | |
265 return; | |
266 } | |
267 | |
268 delete dtifmt2; | |
269 delete dtifmt3; | |
270 delete dtifmt; | |
271 */ | |
272 | |
273 | |
274 //===== test format and parse ================== | |
275 Formattable formattable; | |
276 formattable.setInt64(10); | |
277 UnicodeString res; | |
278 FieldPosition pos = 0; | |
279 status = U_ZERO_ERROR; | |
280 dtitvfmt->format(formattable, res, pos, status); | |
281 if ( status != U_ILLEGAL_ARGUMENT_ERROR ) { | |
282 dataerrln("ERROR: format non-date-interval object should set U_ILLEGAL_A
RGUMENT_ERROR - exitting"); | |
283 return; | |
284 } | |
285 | |
286 DateInterval* dtitv = new DateInterval(3600*24*365, 3600*24*366); | |
287 formattable.adoptObject(dtitv); | |
288 res.remove(); | |
289 pos = 0; | |
290 status = U_ZERO_ERROR; | |
291 dtitvfmt->format(formattable, res, pos, status); | |
292 if ( U_FAILURE(status) ) { | |
293 dataerrln("ERROR: format date interval failed - exitting"); | |
294 return; | |
295 } | |
296 | |
297 const DateFormat* dfmt = dtitvfmt->getDateFormat(); | |
298 Calendar* fromCal = dfmt->getCalendar()->clone(); | |
299 Calendar* toCal = dfmt->getCalendar()->clone(); | |
300 res.remove(); | |
301 pos = 0; | |
302 status = U_ZERO_ERROR; | |
303 dtitvfmt->format(*fromCal, *toCal, res, pos, status); | |
304 if ( U_FAILURE(status) ) { | |
305 dataerrln("ERROR: format date interval failed - exitting"); | |
306 return; | |
307 } | |
308 delete fromCal; | |
309 delete toCal; | |
310 | |
311 | |
312 Formattable fmttable; | |
313 status = U_ZERO_ERROR; | |
314 // TODO: why do I need cast? | |
315 ((Format*)dtitvfmt)->parseObject(res, fmttable, status); | |
316 if ( status != U_INVALID_FORMAT_ERROR ) { | |
317 dataerrln("ERROR: parse should set U_INVALID_FORMAT_ERROR - exitting"); | |
318 return; | |
319 } | |
320 | |
321 delete dtitvfmt; | |
322 | |
323 //====== test setting time zone | |
324 logln("Testing DateIntervalFormat set & format with different time zones, ge
t time zone"); | |
325 status = U_ZERO_ERROR; | |
326 dtitvfmt = DateIntervalFormat::createInstance("MMMdHHmm", Locale::getEnglish
(), status); | |
327 if ( U_SUCCESS(status) ) { | |
328 UDate date1 = 1299090600000.0; // 2011-Mar-02 1030 in US/Pacific, 2011-M
ar-03 0330 in Asia/Tokyo | |
329 UDate date2 = 1299115800000.0; // 2011-Mar-02 1730 in US/Pacific, 2011-M
ar-03 1030 in Asia/Tokyo | |
330 | |
331 DateInterval * dtitv12 = new DateInterval(date1, date2); | |
332 TimeZone * tzCalif = TimeZone::createTimeZone("US/Pacific"); | |
333 TimeZone * tzTokyo = TimeZone::createTimeZone("Asia/Tokyo"); | |
334 UnicodeString fmtCalif = UnicodeString(ctou("Mar 2, 10:30 \\u2013 17:30"
)); | |
335 UnicodeString fmtTokyo = UnicodeString(ctou("Mar 3, 03:30 \\u2013 10:30"
)); | |
336 | |
337 dtitvfmt->adoptTimeZone(tzCalif); | |
338 res.remove(); | |
339 pos = 0; | |
340 status = U_ZERO_ERROR; | |
341 dtitvfmt->format(dtitv12, res, pos, status); | |
342 if ( U_SUCCESS(status) ) { | |
343 if ( res.compare(fmtCalif) != 0 ) { | |
344 errln("ERROR: DateIntervalFormat::format for tzCalif, expect " +
fmtCalif + ", get " + res); | |
345 } | |
346 } else { | |
347 errln("ERROR: DateIntervalFormat::format for tzCalif, status %s", u_
errorName(status)); | |
348 } | |
349 | |
350 dtitvfmt->setTimeZone(*tzTokyo); | |
351 res.remove(); | |
352 pos = 0; | |
353 status = U_ZERO_ERROR; | |
354 dtitvfmt->format(dtitv12, res, pos, status); | |
355 if ( U_SUCCESS(status) ) { | |
356 if ( res.compare(fmtTokyo) != 0 ) { | |
357 errln("ERROR: DateIntervalFormat::format for fmtTokyo, expect "
+ fmtTokyo + ", get " + res); | |
358 } | |
359 } else { | |
360 errln("ERROR: DateIntervalFormat::format for tzTokyo, status %s", u_
errorName(status)); | |
361 } | |
362 | |
363 if ( dtitvfmt->getTimeZone() != *tzTokyo ) { | |
364 errln("ERROR: DateIntervalFormat::getTimeZone returns mismatch."); | |
365 } | |
366 | |
367 delete tzTokyo; // tzCalif was owned by dtitvfmt which should have delet
ed it | |
368 delete dtitv12; | |
369 delete dtitvfmt; | |
370 } else { | |
371 errln("ERROR: DateIntervalFormat::createInstance(\"MdHH\", Locale::getEn
glish(), ...), status %s", u_errorName(status)); | |
372 } | |
373 //====== test format in testFormat() | |
374 | |
375 //====== test DateInterval class (better coverage) | |
376 DateInterval dtitv1(3600*24*365, 3600*24*366); | |
377 DateInterval dtitv2(dtitv1); | |
378 | |
379 if (!(dtitv1 == dtitv2)) { | |
380 errln("ERROR: Copy constructor failed for DateInterval."); | |
381 } | |
382 | |
383 DateInterval dtitv3(3600*365, 3600*366); | |
384 dtitv3 = dtitv1; | |
385 if (!(dtitv3 == dtitv1)) { | |
386 errln("ERROR: Equal operator failed for DateInterval."); | |
387 } | |
388 | |
389 DateInterval *dtitv4 = dtitv1.clone(); | |
390 if (*dtitv4 != dtitv1) { | |
391 errln("ERROR: Equal operator failed for DateInterval."); | |
392 } | |
393 delete dtitv4; | |
394 } | |
395 | |
396 | |
397 /** | |
398 * Test format | |
399 */ | |
400 void DateIntervalFormatTest::testFormat() { | |
401 // first item is date pattern | |
402 // followed by a group of locale/from_data/to_data/skeleton/interval_data | |
403 const char* DATA[] = { | |
404 "yyyy MM dd HH:mm:ss", | |
405 // test root | |
406 "root", "2007 11 10 10:10:10", "2007 12 10 10:10:10", "yM", "2007-11 \\u
2013 2007-12", | |
407 | |
408 // test 'H' and 'h', using availableFormat in fallback | |
409 "en", "2007 11 10 10:10:10", "2007 11 10 15:10:10", "Hms", "10:10:10 \\u
2013 15:10:10", | |
410 "en", "2007 11 10 10:10:10", "2007 11 10 15:10:10", "hms", "10:10:10 AM
\\u2013 3:10:10 PM", | |
411 | |
412 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMM", "October 200
7 \\u2013 October 2008", | |
413 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMM", "Oct 2007 \\u
2013 Oct 2008", | |
414 // test skeleton with both date and time | |
415 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMyhm", "Nov 10,
2007, 10:10 AM \\u2013 Nov 20, 2007, 10:10 AM", | |
416 | |
417 "en", "2007 11 10 10:10:10", "2007 11 10 11:10:10", "dMMMyhm", "Nov 10,
2007, 10:10 \\u2013 11:10 AM", | |
418 | |
419 "en", "2007 11 10 10:10:10", "2007 11 10 11:10:10", "hms", "10:10:10 AM
\\u2013 11:10:10 AM", | |
420 "en", "2007 11 10 10:10:10", "2007 11 10 11:10:10", "Hms", "10:10:10 \\u
2013 11:10:10", | |
421 "en", "2007 11 10 20:10:10", "2007 11 10 21:10:10", "Hms", "20:10:10 \\u
2013 21:10:10", | |
422 | |
423 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMMy", "Wedne
sday, October 10, 2007 \\u2013 Friday, October 10, 2008", | |
424 | |
425 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMMy", "October 1
0, 2007 \\u2013 October 10, 2008", | |
426 | |
427 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMM", "October 10
, 2007 \\u2013 October 10, 2008", | |
428 | |
429 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMMy", "October 20
07 \\u2013 October 2008", | |
430 | |
431 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMM", "Wednes
day, October 10, 2007 \\u2013 Friday, October 10, 2008", | |
432 | |
433 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMMMy", "Wed, Oct
10, 2007 \\u2013 Fri, Oct 10, 2008", | |
434 | |
435 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMy", "Oct 10, 20
07 \\u2013 Oct 10, 2008", | |
436 | |
437 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMM", "Oct 10, 200
7 \\u2013 Oct 10, 2008", | |
438 | |
439 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMy", "Oct 2007 \\
u2013 Oct 2008", | |
440 | |
441 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMMM", "Wed, Oct 1
0, 2007 \\u2013 Fri, Oct 10, 2008", | |
442 | |
443 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMy", "Wed, 10/10/
2007 \\u2013 Fri, 10/10/2008", | |
444 | |
445 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMy", "10/10/2007 \
\u2013 10/10/2008", | |
446 | |
447 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dM", "10/10/2007 \\
u2013 10/10/2008", | |
448 | |
449 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "My", "10/2007 \\u20
13 10/2008", | |
450 | |
451 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdM", "Wed, 10/10/2
007 \\u2013 Fri, 10/10/2008", | |
452 | |
453 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "d", "10/10/2007 \\u
2013 10/10/2008", | |
454 | |
455 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Ed", "10 Wed \\u201
3 10 Fri", | |
456 | |
457 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "y", "2007 \\u2013 2
008", | |
458 | |
459 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "M", "10/2007 \\u201
3 10/2008", | |
460 | |
461 | |
462 | |
463 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hm", "10/10/2007, 1
0:10 AM \\u2013 10/10/2008, 10:10 AM", | |
464 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Hm", "10/10/2007, 1
0:10 \\u2013 10/10/2008, 10:10", | |
465 "en", "2007 10 10 20:10:10", "2008 10 10 20:10:10", "Hm", "10/10/2007, 2
0:10 \\u2013 10/10/2008, 20:10", | |
466 | |
467 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hmv", "10/10/2007,
10:10 AM PT \\u2013 10/10/2008, 10:10 AM PT", | |
468 | |
469 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hmz", "10/10/2007,
10:10 AM PDT \\u2013 10/10/2008, 10:10 AM PDT", | |
470 | |
471 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "h", "10/10/2007, 10
AM \\u2013 10/10/2008, 10 AM", | |
472 | |
473 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hv", "10/10/2007, 1
0 AM PT \\u2013 10/10/2008, 10 AM PT", | |
474 | |
475 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hz", "10/10/2007, 1
0 AM PDT \\u2013 10/10/2008, 10 AM PDT", | |
476 | |
477 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEddMMyyyy", "Wed,
10/10/2007 \\u2013 Fri, 10/10/2008", | |
478 | |
479 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EddMMy", "Wed, 10/1
0/2007 \\u2013 Fri, 10/10/2008", | |
480 | |
481 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hhmm", "10/10/2007,
10:10 AM \\u2013 10/10/2008, 10:10 AM", | |
482 | |
483 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hhmmzz", "10/10/200
7, 10:10 AM PDT \\u2013 10/10/2008, 10:10 AM PDT", | |
484 | |
485 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hms", "10/10/2007,
10:10:10 AM \\u2013 10/10/2008, 10:10:10 AM", | |
486 | |
487 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMMMy", "O 10, 20
07 \\u2013 O 10, 2008", | |
488 | |
489 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEEdM", "W, 10/10
/2007 \\u2013 F, 10/10/2008", | |
490 | |
491 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMMy", "Wedne
sday, October 10 \\u2013 Saturday, November 10, 2007", | |
492 | |
493 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMy", "October 1
0 \\u2013 November 10, 2007", | |
494 | |
495 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMM", "October 10
\\u2013 November 10", | |
496 | |
497 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMMy", "October \\
u2013 November 2007", | |
498 | |
499 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMM", "Wednes
day, October 10 \\u2013 Saturday, November 10", | |
500 | |
501 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMMMy", "Wed, Oct
10 \\u2013 Sat, Nov 10, 2007", | |
502 | |
503 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMy", "Oct 10 \\u
2013 Nov 10, 2007", | |
504 | |
505 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMM", "Oct 10 \\u2
013 Nov 10", | |
506 | |
507 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMy", "Oct \\u2013
Nov 2007", | |
508 | |
509 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMMM", "Wed, Oct 1
0 \\u2013 Sat, Nov 10", | |
510 | |
511 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMy", "Wed, 10/10/
2007 \\u2013 Sat, 11/10/2007", | |
512 | |
513 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMy", "10/10/2007 \
\u2013 11/10/2007", | |
514 | |
515 | |
516 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "My", "10/2007 \\u20
13 11/2007", | |
517 | |
518 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdM", "Wed, 10/10 \
\u2013 Sat, 11/10", | |
519 | |
520 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "d", "10/10 \\u2013
11/10", | |
521 | |
522 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "Ed", "10 Wed \\u201
3 10 Sat", | |
523 | |
524 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "y", "2007", | |
525 | |
526 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "M", "10 \\u2013 11"
, | |
527 | |
528 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMM", "Oct \\u2013
Nov", | |
529 | |
530 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMM", "October \\u
2013 November", | |
531 | |
532 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hm", "10/10/2007, 1
0:10 AM \\u2013 11/10/2007, 10:10 AM", | |
533 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "Hm", "10/10/2007, 1
0:10 \\u2013 11/10/2007, 10:10", | |
534 "en", "2007 10 10 20:10:10", "2007 11 10 20:10:10", "Hm", "10/10/2007, 2
0:10 \\u2013 11/10/2007, 20:10", | |
535 | |
536 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hmv", "10/10/2007,
10:10 AM PT \\u2013 11/10/2007, 10:10 AM PT", | |
537 | |
538 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hmz", "10/10/2007,
10:10 AM PDT \\u2013 11/10/2007, 10:10 AM PST", | |
539 | |
540 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "h", "10/10/2007, 10
AM \\u2013 11/10/2007, 10 AM", | |
541 | |
542 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hv", "10/10/2007, 1
0 AM PT \\u2013 11/10/2007, 10 AM PT", | |
543 | |
544 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hz", "10/10/2007, 1
0 AM PDT \\u2013 11/10/2007, 10 AM PST", | |
545 | |
546 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEddMMyyyy", "Wed,
10/10/2007 \\u2013 Sat, 11/10/2007", | |
547 | |
548 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EddMMy", "Wed, 10/1
0/2007 \\u2013 Sat, 11/10/2007", | |
549 | |
550 | |
551 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hhmmzz", "10/10/200
7, 10:10 AM PDT \\u2013 11/10/2007, 10:10 AM PST", | |
552 | |
553 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hms", "10/10/2007,
10:10:10 AM \\u2013 11/10/2007, 10:10:10 AM", | |
554 | |
555 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMMy", "O 10 \\u
2013 N 10, 2007", | |
556 | |
557 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEEdM", "W, 10/10
\\u2013 S, 11/10", | |
558 | |
559 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMMy", "Satur
day, November 10 \\u2013 Tuesday, November 20, 2007", | |
560 | |
561 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMMy", "November
10 \\u2013 20, 2007", | |
562 | |
563 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMM", "November 1
0 \\u2013 20", | |
564 | |
565 | |
566 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMM", "Saturd
ay, November 10 \\u2013 Tuesday, November 20", | |
567 | |
568 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMMMy", "Sat, Nov
10 \\u2013 Tue, Nov 20, 2007", | |
569 | |
570 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMy", "Nov 10 \\u
2013 20, 2007", | |
571 | |
572 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMM", "Nov 10 \\u2
013 20", | |
573 | |
574 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMy", "Nov 2007", | |
575 | |
576 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMMM", "Sat, Nov 1
0 \\u2013 Tue, Nov 20", | |
577 | |
578 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "Sat, 11/10/
2007 \\u2013 Tue, 11/20/2007", | |
579 | |
580 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMy", "11/10/2007 \
\u2013 11/20/2007", | |
581 | |
582 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "11/10 \\u2013
11/20", | |
583 | |
584 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "11/2007", | |
585 | |
586 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdM", "Sat, 11/10 \
\u2013 Tue, 11/20", | |
587 | |
588 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "d", "10 \\u2013 20"
, | |
589 | |
590 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Ed", "10 Sat \\u201
3 20 Tue", | |
591 | |
592 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007", | |
593 | |
594 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "M", "11", | |
595 | |
596 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMM", "Nov", | |
597 | |
598 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMM", "November", | |
599 | |
600 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hm", "11/10/2007, 1
0:10 AM \\u2013 11/20/2007, 10:10 AM", | |
601 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Hm", "11/10/2007, 1
0:10 \\u2013 11/20/2007, 10:10", | |
602 "en", "2007 11 10 20:10:10", "2007 11 20 20:10:10", "Hm", "11/10/2007, 2
0:10 \\u2013 11/20/2007, 20:10", | |
603 | |
604 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hmv", "11/10/2007,
10:10 AM PT \\u2013 11/20/2007, 10:10 AM PT", | |
605 | |
606 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hmz", "11/10/2007,
10:10 AM PST \\u2013 11/20/2007, 10:10 AM PST", | |
607 | |
608 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "h", "11/10/2007, 10
AM \\u2013 11/20/2007, 10 AM", | |
609 | |
610 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hv", "11/10/2007, 1
0 AM PT \\u2013 11/20/2007, 10 AM PT", | |
611 | |
612 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hz", "11/10/2007, 1
0 AM PST \\u2013 11/20/2007, 10 AM PST", | |
613 | |
614 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEddMMyyyy", "Sat,
11/10/2007 \\u2013 Tue, 11/20/2007", | |
615 | |
616 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EddMMy", "Sat, 11/1
0/2007 \\u2013 Tue, 11/20/2007", | |
617 | |
618 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hhmm", "11/10/2007,
10:10 AM \\u2013 11/20/2007, 10:10 AM", | |
619 | |
620 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hhmmzz", "11/10/200
7, 10:10 AM PST \\u2013 11/20/2007, 10:10 AM PST", | |
621 | |
622 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hms", "11/10/2007,
10:10:10 AM \\u2013 11/20/2007, 10:10:10 AM", | |
623 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Hms", "11/10/2007,
10:10:10 \\u2013 11/20/2007, 10:10:10", | |
624 "en", "2007 11 10 20:10:10", "2007 11 20 20:10:10", "Hms", "11/10/2007,
20:10:10 \\u2013 11/20/2007, 20:10:10", | |
625 | |
626 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMMMy", "N 10 \\u
2013 20, 2007", | |
627 | |
628 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEEdM", "S, 11/10
\\u2013 T, 11/20", | |
629 | |
630 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMMy", "Wedne
sday, January 10, 2007", | |
631 | |
632 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMMy", "January 1
0, 2007", | |
633 | |
634 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMM", "January 10
", | |
635 | |
636 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMMy", "January 20
07", | |
637 | |
638 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMM", "Wednes
day, January 10", | |
639 | |
640 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdMMMy", "Wed, Jan
10, 2007", | |
641 | |
642 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMy", "Jan 10, 20
07", | |
643 | |
644 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMM", "Jan 10", | |
645 | |
646 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMy", "Jan 2007", | |
647 | |
648 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdMMM", "Wed, Jan 1
0", | |
649 | |
650 | |
651 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMy", "1/10/2007", | |
652 | |
653 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dM", "1/10", | |
654 | |
655 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "My", "1/2007", | |
656 | |
657 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdM", "Wed, 1/10", | |
658 | |
659 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "d", "10", | |
660 | |
661 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Ed", "10 Wed", | |
662 | |
663 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "y", "2007", | |
664 | |
665 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "M", "1", | |
666 | |
667 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMM", "Jan", | |
668 | |
669 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMM", "January", | |
670 | |
671 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hm", "10:00 AM \\u2
013 2:10 PM", | |
672 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Hm", "10:00 \\u2013
14:10", | |
673 | |
674 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hmv", "10:00 AM \\u
2013 2:10 PM PT", | |
675 | |
676 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hmz", "10:00 AM \\u
2013 2:10 PM PST", | |
677 | |
678 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "10 AM \\u2013
2 PM", | |
679 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "H", "10 \\u2013 14"
, | |
680 | |
681 | |
682 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hz", "10 AM \\u2013
2 PM PST", | |
683 | |
684 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEddMMyyyy", "Wed,
01/10/2007", | |
685 | |
686 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EddMMy", "Wed, 01/1
0/2007", | |
687 | |
688 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hhmm", "10:00 AM \\
u2013 2:10 PM", | |
689 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "HHmm", "10:00 \\u20
13 14:10", | |
690 | |
691 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hhmmzz", "10:00 AM
\\u2013 2:10 PM PST", | |
692 | |
693 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hms", "10:00:10 AM
\\u2013 2:10:10 PM", | |
694 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Hms", "10:00:10 \\u
2013 14:10:10", | |
695 | |
696 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMMMy", "J 10, 20
07", | |
697 | |
698 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEEdM", "W, 1/10"
, | |
699 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMMy", "January 1
0, 2007", | |
700 | |
701 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMM", "January 10
", | |
702 | |
703 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "MMMMy", "January 20
07", | |
704 | |
705 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EEEEdMMMM", "Wednes
day, January 10", | |
706 | |
707 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMMMy", "Wed, Jan
10, 2007", | |
708 | |
709 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMy", "Jan 10, 20
07", | |
710 | |
711 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMM", "Jan 10", | |
712 | |
713 | |
714 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMMM", "Wed, Jan 1
0", | |
715 | |
716 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMy", "Wed, 1/10/2
007", | |
717 | |
718 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMy", "1/10/2007", | |
719 | |
720 | |
721 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "My", "1/2007", | |
722 | |
723 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdM", "Wed, 1/10", | |
724 | |
725 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "d", "10", | |
726 | |
727 | |
728 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "y", "2007", | |
729 | |
730 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "M", "1", | |
731 | |
732 | |
733 | |
734 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hm", "10:00 \\u2013
10:20 AM", | |
735 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "Hm", "10:00 \\u2013
10:20", | |
736 | |
737 | |
738 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmz", "10:00 \\u201
3 10:20 AM PST", | |
739 | |
740 | |
741 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hv", "10 AM PT", | |
742 | |
743 | |
744 | |
745 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EddMMy", "Wed, 01/1
0/2007", | |
746 | |
747 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hhmm", "10:00 \\u20
13 10:20 AM", | |
748 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "HHmm", "10:00 \\u20
13 10:20", | |
749 | |
750 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hhmmzz", "10:00 \\u
2013 10:20 AM PST", | |
751 | |
752 | |
753 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMMMy", "J 10, 20
07", | |
754 | |
755 | |
756 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMMy", "Wedne
sday, January 10, 2007", | |
757 | |
758 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMMy", "January 1
0, 2007", | |
759 | |
760 | |
761 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "MMMMy", "January 20
07", | |
762 | |
763 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMM", "Wednes
day, January 10", | |
764 | |
765 | |
766 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMy", "Jan 10, 20
07", | |
767 | |
768 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMM", "Jan 10", | |
769 | |
770 | |
771 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdMMM", "Wed, Jan 1
0", | |
772 | |
773 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdMy", "Wed, 1/10/2
007", | |
774 | |
775 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMy", "1/10/2007", | |
776 | |
777 | |
778 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "My", "1/2007", | |
779 | |
780 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdM", "Wed, 1/10", | |
781 | |
782 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "d", "10", | |
783 | |
784 | |
785 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "y", "2007", | |
786 | |
787 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "M", "1", | |
788 | |
789 | |
790 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "MMMM", "January", | |
791 | |
792 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hm", "10:10 AM", | |
793 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "Hm", "10:10", | |
794 | |
795 | |
796 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmz", "10:10 AM PST
", | |
797 | |
798 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "h", "10 AM", | |
799 | |
800 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hv", "10 AM PT", | |
801 | |
802 | |
803 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEddMMyyyy", "Wed,
01/10/2007", | |
804 | |
805 | |
806 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hhmm", "10:10 AM", | |
807 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "HHmm", "10:10", | |
808 | |
809 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hhmmzz", "10:10 AM
PST", | |
810 | |
811 | |
812 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMMMy", "J 10, 20
07", | |
813 | |
814 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEEdM", "W, 1/10"
, | |
815 | |
816 "zh", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMMy", "2007\
\u5e7410\\u670810\\u65e5\\u661f\\u671f\\u4e09\\u81f32008\\u5e7410\\u670810\\u65e
5\\u661f\\u671f\\u4e94", | |
817 | |
818 | |
819 "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMy", "2007\\u5e
7410\\u670810\\u65e5\\u81f311\\u670810\\u65e5", | |
820 | |
821 | |
822 "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMMy", "2007\\u5e7
410\\u6708\\u81f311\\u6708", | |
823 | |
824 | |
825 "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hmv", "2007/10/10 \
\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10 \\u2013 2007/11/10 \\u6D1
B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10", | |
826 | |
827 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMMy", "2007\
\u5e7411\\u670810\\u65e5\\u661f\\u671f\\u516d\\u81f320\\u65e5\\u661f\\u671f\\u4e
8c", | |
828 | |
829 | |
830 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMM", "11\\u67081
0\\u65e5\\u81f320\\u65e5", | |
831 | |
832 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMMy", "2007\\u5E7
411\\u6708", // (fixed expected result per ticket:6626:) | |
833 | |
834 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMM", "11\\u6
70810\\u65e5\\u661f\\u671f\\u516d\\u81f320\\u65e5\\u661f\\u671f\\u4e8c", | |
835 | |
836 | |
837 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "2007/11/10\
\u5468\\u516d\\u81f32007/11/20\\u5468\\u4e8c", | |
838 | |
839 | |
840 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "11/10 \\u2013
11/20", | |
841 | |
842 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "2007\\u5E7411
\\u6708", | |
843 | |
844 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdM", "11/10\\u5468
\\u516d\\u81f311/20\\u5468\\u4e8c", | |
845 | |
846 | |
847 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007\\u5E74",
// (fixed expected result per ticket:6626:) | |
848 | |
849 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "M", "11\\u6708", | |
850 | |
851 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMM", "11\\u6708",
// (fixed expected result per ticket:6626: and others) | |
852 | |
853 | |
854 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hmz", "2007/11/10 G
MT-8 \\u4e0a\\u534810:10 \\u2013 2007/11/20 GMT-8 \\u4e0a\\u534810:10", | |
855 | |
856 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "h", "2007/11/10 \\u
4e0a\\u534810\\u65f6 \\u2013 2007/11/20 \\u4e0a\\u534810\\u65f6", | |
857 | |
858 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMMy", "2007\
\u5e741\\u670810\\u65e5\\u661f\\u671f\\u4e09", // (fixed expected result per tic
ket:6626:) | |
859 | |
860 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hm", "\\u4e0a\\u534
810:00\\u81f3\\u4e0b\\u53482:10", | |
861 | |
862 | |
863 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hmz", "GMT-8\\u4e0a
\\u534810:00\\u81f3\\u4e0b\\u53482:10", | |
864 | |
865 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "\\u4e0a\\u5348
10\\u65F6\\u81f3\\u4e0b\\u53482\\u65f6", | |
866 | |
867 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hv", "\\u6D1B\\u674
9\\u77F6\\u65F6\\u95F4\\u4E0A\\u534810\\u65F6\\u81F3\\u4E0B\\u53482\\u65F6", | |
868 | |
869 "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hm", "\\u4e0a\\u534
810:00\\u81f310:20", | |
870 | |
871 "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmv", "\\u6D1B\\u67
49\\u77F6\\u65F6\\u95F4\\u4E0A\\u534810:00\\u81F310:20", | |
872 | |
873 "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hz", "GMT-8\\u4e0a\
\u534810\\u65f6", | |
874 | |
875 "zh", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hm", "\\u4e0a\\u534
810:10", | |
876 | |
877 "zh", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "h", "\\u4e0a\\u5348
10\\u65f6", | |
878 | |
879 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMy", "Mittwo
ch, 10. Okt. 2007 \\u2013 Freitag, 10. Okt. 2008", | |
880 | |
881 | |
882 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMM", "10. Okt. 20
07 \\u2013 10. Okt. 2008", | |
883 | |
884 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMy", "Okt. 2007 \
\u2013 Okt. 2008", | |
885 | |
886 | |
887 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMy", "Mi., 10.10.
2007 \\u2013 Fr., 10.10.2008", | |
888 | |
889 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMy", "10.10.2007 \
\u2013 10.10.2008", | |
890 | |
891 | |
892 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "My", "10.2007 \\u20
13 10.2008", | |
893 | |
894 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdM", "Mi., 10.10.2
007 \\u2013 Fr., 10.10.2008", | |
895 | |
896 | |
897 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "y", "2007\\u2013200
8", | |
898 | |
899 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "M", "10.2007 \\u201
3 10.2008", | |
900 | |
901 | |
902 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hm", "10.10.2007, 1
0:10 vorm. \\u2013 10.10.2008, 10:10 vorm.", | |
903 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Hm", "10.10.2007, 1
0:10 \\u2013 10.10.2008, 10:10", | |
904 | |
905 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMy", "Mittwo
ch, 10. Okt. \\u2013 Samstag, 10. Nov. 2007", | |
906 | |
907 | |
908 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMM", "10. Okt. \\
u2013 10. Nov.", | |
909 | |
910 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMy", "Okt.\\u2013
Nov. 2007", | |
911 | |
912 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMM", "Mittwoc
h, 10. Okt. \\u2013 Samstag, 10. Nov.", | |
913 | |
914 | |
915 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dM", "10.10. \\u201
3 10.11.", | |
916 | |
917 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "My", "10.2007 \\u20
13 11.2007", | |
918 | |
919 | |
920 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "d", "10.10. \\u2013
10.11.", | |
921 | |
922 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "y", "2007", | |
923 | |
924 | |
925 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMM", "Okt.\\u2013N
ov.", | |
926 | |
927 | |
928 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hms", "10.10.2007,
10:10:10 vorm. \\u2013 10.11.2007, 10:10:10 vorm.", | |
929 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "Hms", "10.10.2007,
10:10:10 \\u2013 10.11.2007, 10:10:10", | |
930 | |
931 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMy", "Samsta
g, 10. \\u2013 Dienstag, 20. Nov. 2007", | |
932 | |
933 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMy", "10.\\u2013
20. Nov. 2007", | |
934 | |
935 | |
936 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMy", "Nov. 2007",
| |
937 | |
938 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMM", "Samstag
, 10. \\u2013 Dienstag, 20. Nov.", | |
939 | |
940 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "Sa., 10.11.
2007 \\u2013 Di., 20.11.2007", | |
941 | |
942 | |
943 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "10.11. \\u201
3 20.11.", | |
944 | |
945 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "11.2007", | |
946 | |
947 | |
948 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "d", "10.\\u201320."
, | |
949 | |
950 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007", | |
951 | |
952 | |
953 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hmv", "10.11.2007,
10:10 vorm. Los Angeles Zeit \\u2013 20.11.2007, 10:10 vorm. Los Angeles Zeit", | |
954 | |
955 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMy", "Mittwo
ch, 10. Jan. 2007", | |
956 | |
957 | |
958 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMM", "10. Jan.", | |
959 | |
960 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMy", "Jan. 2007",
| |
961 | |
962 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMM", "Mittwoc
h, 10. Jan.", | |
963 | |
964 | |
965 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "10 vorm. \\u20
13 2 nachm.", | |
966 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "H", "10\\u201314 Uh
r", | |
967 | |
968 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EEEEdMMM", "Mittwoc
h, 10. Jan.", | |
969 | |
970 | |
971 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmv", "10:00\\u2013
10:20 vorm. Los Angeles Zeit", | |
972 | |
973 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmz", "10:00\\u2013
10:20 vorm. GMT-8", | |
974 | |
975 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "h", "10 vorm.", | |
976 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "H", "10 Uhr", | |
977 | |
978 | |
979 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hz", "10 vorm. GMT-
8", | |
980 | |
981 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMy", "Mittwo
ch, 10. Jan. 2007", | |
982 | |
983 | |
984 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmv", "10:10 vorm.
Los Angeles Zeit", | |
985 | |
986 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmz", "10:10 vorm.
GMT-8", | |
987 | |
988 | |
989 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hv", "10 vorm. Los
Angeles Zeit", | |
990 | |
991 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hz", "10 vorm. GMT-
8", | |
992 | |
993 // Thai (default calendar buddhist) | |
994 | |
995 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "EEEEdMMMy", "\\u0E2
7\\u0E31\\u0E19\\u0E1E\\u0E38\\u0E18\\u0E17\\u0E35\\u0E48 10 \\u0E15.\\u0E04. 25
50 \\u2013 \\u0E27\\u0E31\\u0E19\\u0E28\\u0E38\\u0E01\\u0E23\\u0E4C\\u0E17\\u0E3
5\\u0E48 10 \\u0E15.\\u0E04. 2551", | |
996 | |
997 | |
998 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "dMMM", "10 \\u0E15.
\\u0E04. 2550 \\u2013 10 \\u0E15.\\u0E04. 2551", | |
999 | |
1000 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "MMMy", "\\u0E15.\\u
0E04. 2550 \\u2013 \\u0E15.\\u0E04. 2551", | |
1001 | |
1002 | |
1003 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "EdMy", "\\u0E1E. 10
/10/2550 \\u2013 \\u0E28. 10/10/2551", | |
1004 | |
1005 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "dMy", "10/10/2550 \
\u2013 10/10/2551", | |
1006 | |
1007 | |
1008 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "My", "10/2550 \\u20
13 10/2551", | |
1009 | |
1010 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "EdM", "\\u0E1E. 10/
10/2550 \\u2013 \\u0E28. 10/10/2551", | |
1011 | |
1012 | |
1013 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "y", "2550\\u2013255
1", | |
1014 | |
1015 "th", "2550 10 10 10:10:10", "2551 10 10 10:10:10", "M", "10/2550 \\u201
3 10/2551", | |
1016 | |
1017 | |
1018 "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "EEEEdMMMy", "\\u0E2
7\\u0E31\\u0E19\\u0E1E\\u0E38\\u0E18\\u0E17\\u0E35\\u0E48 10 \\u0E15.\\u0E04. \\
u2013 \\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0
E48 10 \\u0E1E.\\u0E22. 2550", | |
1019 | |
1020 | |
1021 "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "dMMM", "10 \\u0E15.
\\u0E04. \\u2013 10 \\u0E1E.\\u0E22.", | |
1022 | |
1023 "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "MMMy", "\\u0E15.\\u
0E04.\\u2013\\u0E1E.\\u0E22. 2550", | |
1024 | |
1025 "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "dM", "10/10 \\u2013
10/11", | |
1026 | |
1027 "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "My", "10/2550 \\u20
13 11/2550", | |
1028 | |
1029 | |
1030 "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "d", "10/10 \\u2013
10/11", | |
1031 | |
1032 "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "y", "\\u0E1E.\\u0E2
8. 2550", | |
1033 | |
1034 | |
1035 "th", "2550 10 10 10:10:10", "2550 11 10 10:10:10", "MMM", "\\u0E15.\\u0
E04.\\u2013\\u0E1E.\\u0E22.", | |
1036 | |
1037 }; | |
1038 expect(DATA, ARRAY_SIZE(DATA)); | |
1039 } | |
1040 | |
1041 | |
1042 void DateIntervalFormatTest::expect(const char** data, int32_t data_length) { | |
1043 int32_t i = 0; | |
1044 UErrorCode ec = U_ZERO_ERROR; | |
1045 UnicodeString str, str2; | |
1046 const char* pattern = data[0]; | |
1047 i++; | |
1048 | |
1049 #ifdef DTIFMTTS_DEBUG | |
1050 char result[1000]; | |
1051 char mesg[1000]; | |
1052 sprintf(mesg, "locale: %s\n", locName); | |
1053 PRINTMESG(mesg); | |
1054 #endif | |
1055 | |
1056 while (i<data_length) { | |
1057 const char* locName = data[i++]; | |
1058 Locale loc(locName); | |
1059 SimpleDateFormat ref(pattern, loc, ec); | |
1060 if (U_FAILURE(ec)) { | |
1061 dataerrln("contruct SimpleDateFormat in expect failed: %s", u_errorN
ame(ec)); | |
1062 return; | |
1063 } | |
1064 // 'f' | |
1065 const char* datestr = data[i++]; | |
1066 const char* datestr_2 = data[i++]; | |
1067 #ifdef DTIFMTTS_DEBUG | |
1068 sprintf(mesg, "original date: %s - %s\n", datestr, datestr_2); | |
1069 PRINTMESG(mesg) | |
1070 #endif | |
1071 UDate date = ref.parse(ctou(datestr), ec); | |
1072 if (!assertSuccess("parse 1st data in expect", ec)) return; | |
1073 UDate date_2 = ref.parse(ctou(datestr_2), ec); | |
1074 if (!assertSuccess("parse 2nd data in expect", ec)) return; | |
1075 DateInterval dtitv(date, date_2); | |
1076 | |
1077 const UnicodeString& oneSkeleton = data[i++]; | |
1078 | |
1079 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(oneSke
leton, loc, ec); | |
1080 if (!assertSuccess("createInstance(skeleton) in expect", ec)) return; | |
1081 FieldPosition pos=0; | |
1082 dtitvfmt->format(&dtitv, str.remove(), pos, ec); | |
1083 if (!assertSuccess("format in expect", ec)) return; | |
1084 assertEquals((UnicodeString)"\"" + locName + "\\" + oneSkeleton + "\\" +
datestr + "\\" + datestr_2 + "\"", ctou(data[i++]), str); | |
1085 | |
1086 | |
1087 | |
1088 #ifdef DTIFMTTS_DEBUG | |
1089 str.extract(0, str.length(), result, "UTF-8"); | |
1090 sprintf(mesg, "interval date: %s\n", result); | |
1091 std::cout << "//"; | |
1092 PRINTMESG(mesg) | |
1093 std::cout << "\"" << locName << "\", " | |
1094 << "\"" << datestr << "\", " | |
1095 << "\"" << datestr_2 << "\", "; | |
1096 printUnicodeString(oneSkeleton); | |
1097 printUnicodeString(str); | |
1098 std::cout << "\n\n"; | |
1099 #endif | |
1100 delete dtitvfmt; | |
1101 } | |
1102 } | |
1103 | |
1104 | |
1105 /* | |
1106 * Test format using user defined DateIntervalInfo | |
1107 */ | |
1108 void DateIntervalFormatTest::testFormatUserDII() { | |
1109 // first item is date pattern | |
1110 const char* DATA[] = { | |
1111 "yyyy MM dd HH:mm:ss", | |
1112 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Oct 10, 2007 --- Oc
t 10, 2008", | |
1113 | |
1114 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "2007 Oct 10 - Nov 2
007", | |
1115 | |
1116 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Nov 10, 2007 --- No
v 20, 2007", | |
1117 | |
1118 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Jan 10, 2007", | |
1119 | |
1120 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "Jan 10, 2007", | |
1121 | |
1122 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "Jan 10, 2007", | |
1123 | |
1124 "zh", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "2007\\u5e7410\\u670
810\\u65e5 --- 2008\\u5e7410\\u670810\\u65e5", | |
1125 | |
1126 "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "2007 10\\u6708 10 -
11\\u6708 2007", | |
1127 | |
1128 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "2007\\u5e7411\\u670
810\\u65e5 --- 2007\\u5e7411\\u670820\\u65e5", | |
1129 | |
1130 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "2007\\u5e741\\u6708
10\\u65e5", // (fixed expected result per ticket:6626:) | |
1131 | |
1132 "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "2007\\u5e741\\u6708
10\\u65e5", // (fixed expected result per ticket:6626:) | |
1133 | |
1134 "zh", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "2007\\u5e741\\u6708
10\\u65e5", // (fixed expected result per ticket:6626:) | |
1135 | |
1136 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "10. Okt. 2007 --- 1
0. Okt. 2008", | |
1137 | |
1138 | |
1139 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "10. Nov. 2007 --- 2
0. Nov. 2007", | |
1140 | |
1141 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "10. Jan. 2007", | |
1142 | |
1143 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "10. Jan. 2007", | |
1144 | |
1145 | |
1146 "es", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "10 oct. 2007 --- 10
oct. 2008", | |
1147 | |
1148 "es", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "2007 oct. 10 - nov.
2007", | |
1149 | |
1150 "es", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "10 nov. 2007 --- 20
nov. 2007", | |
1151 | |
1152 "es", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "10 ene. 2007", | |
1153 | |
1154 "es", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "10 ene. 2007", | |
1155 | |
1156 "es", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "10 ene. 2007", | |
1157 }; | |
1158 expectUserDII(DATA, ARRAY_SIZE(DATA)); | |
1159 } | |
1160 | |
1161 | |
1162 void DateIntervalFormatTest::testSetIntervalPatternNoSideEffect() { | |
1163 UErrorCode ec = U_ZERO_ERROR; | |
1164 LocalPointer<DateIntervalInfo> dtitvinf(new DateIntervalInfo(ec), ec); | |
1165 if (U_FAILURE(ec)) { | |
1166 errln("Failure encountered: %s", u_errorName(ec)); | |
1167 return; | |
1168 } | |
1169 UnicodeString expected; | |
1170 dtitvinf->getIntervalPattern(ctou("yMd"), UCAL_DATE, expected, ec); | |
1171 dtitvinf->setIntervalPattern(ctou("yMd"), UCAL_DATE, ctou("M/d/y \\u2013 d")
, ec); | |
1172 if (U_FAILURE(ec)) { | |
1173 errln("Failure encountered: %s", u_errorName(ec)); | |
1174 return; | |
1175 } | |
1176 dtitvinf.adoptInsteadAndCheckErrorCode(new DateIntervalInfo(ec), ec); | |
1177 if (U_FAILURE(ec)) { | |
1178 errln("Failure encountered: %s", u_errorName(ec)); | |
1179 return; | |
1180 } | |
1181 UnicodeString actual; | |
1182 dtitvinf->getIntervalPattern(ctou("yMd"), UCAL_DATE, actual, ec); | |
1183 if (U_FAILURE(ec)) { | |
1184 errln("Failure encountered: %s", u_errorName(ec)); | |
1185 return; | |
1186 } | |
1187 if (expected != actual) { | |
1188 errln("DateIntervalInfo.setIntervalPattern should have no side effects."
); | |
1189 } | |
1190 } | |
1191 | |
1192 void DateIntervalFormatTest::testYearFormats() { | |
1193 const Locale &enLocale = Locale::getEnglish(); | |
1194 UErrorCode status = U_ZERO_ERROR; | |
1195 LocalPointer<Calendar> fromTime(Calendar::createInstance(enLocale, status)); | |
1196 LocalPointer<Calendar> toTime(Calendar::createInstance(enLocale, status)); | |
1197 if (U_FAILURE(status)) { | |
1198 errln("Failure encountered: %s", u_errorName(status)); | |
1199 return; | |
1200 } | |
1201 // April 26, 113. Three digit year so that we can test 2 digit years; | |
1202 // 4 digit years with padded 0's and full years. | |
1203 fromTime->set(113, 3, 26); | |
1204 // April 28, 113. | |
1205 toTime->set(113, 3, 28); | |
1206 { | |
1207 LocalPointer<DateIntervalFormat> dif(DateIntervalFormat::createInstance(
"yyyyMd", enLocale, status)); | |
1208 if (U_FAILURE(status)) { | |
1209 dataerrln("Failure encountered: %s", u_errorName(status)); | |
1210 return; | |
1211 } | |
1212 UnicodeString actual; | |
1213 UnicodeString expected(ctou("4/26/0113 \\u2013 4/28/0113")); | |
1214 FieldPosition pos = 0; | |
1215 dif->format(*fromTime, *toTime, actual, pos, status); | |
1216 if (U_FAILURE(status)) { | |
1217 errln("Failure encountered: %s", u_errorName(status)); | |
1218 return; | |
1219 } | |
1220 if (actual != expected) { | |
1221 errln("Expected " + expected + ", got: " + actual); | |
1222 } | |
1223 } | |
1224 { | |
1225 LocalPointer<DateIntervalFormat> dif(DateIntervalFormat::createInstance(
"yyMd", enLocale, status)); | |
1226 if (U_FAILURE(status)) { | |
1227 errln("Failure encountered: %s", u_errorName(status)); | |
1228 return; | |
1229 } | |
1230 UnicodeString actual; | |
1231 UnicodeString expected(ctou("4/26/13 \\u2013 4/28/13")); | |
1232 FieldPosition pos = 0; | |
1233 dif->format(*fromTime, *toTime, actual, pos, status); | |
1234 if (U_FAILURE(status)) { | |
1235 errln("Failure encountered: %s", u_errorName(status)); | |
1236 return; | |
1237 } | |
1238 if (actual != expected) { | |
1239 errln("Expected " + expected + ", got: " + actual); | |
1240 } | |
1241 } | |
1242 { | |
1243 LocalPointer<DateIntervalFormat> dif(DateIntervalFormat::createInstance(
"yMd", enLocale, status)); | |
1244 if (U_FAILURE(status)) { | |
1245 errln("Failure encountered: %s", u_errorName(status)); | |
1246 return; | |
1247 } | |
1248 UnicodeString actual; | |
1249 UnicodeString expected(ctou("4/26/113 \\u2013 4/28/113")); | |
1250 FieldPosition pos = 0; | |
1251 dif->format(*fromTime, *toTime, actual, pos, status); | |
1252 if (U_FAILURE(status)) { | |
1253 errln("Failure encountered: %s", u_errorName(status)); | |
1254 return; | |
1255 } | |
1256 if (actual != expected) { | |
1257 errln("Expected " + expected + ", got: " + actual); | |
1258 } | |
1259 } | |
1260 } | |
1261 | |
1262 void DateIntervalFormatTest::expectUserDII(const char** data, | |
1263 int32_t data_length) { | |
1264 int32_t i = 0; | |
1265 UnicodeString str; | |
1266 UErrorCode ec = U_ZERO_ERROR; | |
1267 const char* pattern = data[0]; | |
1268 i++; | |
1269 | |
1270 while ( i < data_length ) { | |
1271 const char* locName = data[i++]; | |
1272 Locale loc(locName); | |
1273 SimpleDateFormat ref(pattern, loc, ec); | |
1274 if (U_FAILURE(ec)) { | |
1275 dataerrln("contruct SimpleDateFormat in expectUserDII failed: %s", u
_errorName(ec)); | |
1276 return; | |
1277 } | |
1278 const char* datestr = data[i++]; | |
1279 const char* datestr_2 = data[i++]; | |
1280 UDate date = ref.parse(ctou(datestr), ec); | |
1281 if (!assertSuccess("parse in expectUserDII", ec)) return; | |
1282 UDate date_2 = ref.parse(ctou(datestr_2), ec); | |
1283 if (!assertSuccess("parse in expectUserDII", ec)) return; | |
1284 DateInterval dtitv(date, date_2); | |
1285 | |
1286 ec = U_ZERO_ERROR; | |
1287 // test user created DateIntervalInfo | |
1288 DateIntervalInfo* dtitvinf = new DateIntervalInfo(ec); | |
1289 dtitvinf->setFallbackIntervalPattern("{0} --- {1}", ec); | |
1290 dtitvinf->setIntervalPattern(UDAT_YEAR_ABBR_MONTH_DAY, UCAL_MONTH, "yyyy
MMM d - MMM y",ec); | |
1291 if (!assertSuccess("DateIntervalInfo::setIntervalPattern", ec)) return; | |
1292 dtitvinf->setIntervalPattern(UDAT_YEAR_ABBR_MONTH_DAY, UCAL_HOUR_OF_DAY,
"yyyy MMM d HH:mm - HH:mm", ec); | |
1293 if (!assertSuccess("DateIntervalInfo::setIntervalPattern", ec)) return; | |
1294 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(UDAT_Y
EAR_ABBR_MONTH_DAY, loc, *dtitvinf, ec); | |
1295 delete dtitvinf; | |
1296 if (!assertSuccess("createInstance(skeleton,dtitvinf) in expectUserDII",
ec)) return; | |
1297 FieldPosition pos=0; | |
1298 dtitvfmt->format(&dtitv, str.remove(), pos, ec); | |
1299 if (!assertSuccess("format in expectUserDII", ec)) return; | |
1300 assertEquals((UnicodeString)"\"" + locName + "\\" + datestr + "\\" + dat
estr_2 + "\"", ctou(data[i++]), str); | |
1301 #ifdef DTIFMTTS_DEBUG | |
1302 char result[1000]; | |
1303 char mesg[1000]; | |
1304 PRINTMESG("interval format using user defined DateIntervalInfo\n"); | |
1305 str.extract(0, str.length(), result, "UTF-8"); | |
1306 sprintf(mesg, "interval date: %s\n", result); | |
1307 PRINTMESG(mesg); | |
1308 #endif | |
1309 delete dtitvfmt; | |
1310 } | |
1311 } | |
1312 | |
1313 | |
1314 void DateIntervalFormatTest::testStress() { | |
1315 if(quick){ | |
1316 logln("Quick mode: Skipping test"); | |
1317 return; | |
1318 } | |
1319 const char* DATA[] = { | |
1320 "yyyy MM dd HH:mm:ss", | |
1321 "2007 10 10 10:10:10", "2008 10 10 10:10:10", | |
1322 "2007 10 10 10:10:10", "2007 11 10 10:10:10", | |
1323 "2007 11 10 10:10:10", "2007 11 20 10:10:10", | |
1324 "2007 01 10 10:00:10", "2007 01 10 14:10:10", | |
1325 "2007 01 10 10:00:10", "2007 01 10 10:20:10", | |
1326 "2007 01 10 10:10:10", "2007 01 10 10:10:20", | |
1327 }; | |
1328 | |
1329 const char* testLocale[][3] = { | |
1330 //{"th", "", ""}, | |
1331 {"en", "", ""}, | |
1332 {"zh", "", ""}, | |
1333 {"de", "", ""}, | |
1334 {"ar", "", ""}, | |
1335 {"en", "GB", ""}, | |
1336 {"fr", "", ""}, | |
1337 {"it", "", ""}, | |
1338 {"nl", "", ""}, | |
1339 {"zh", "TW", ""}, | |
1340 {"ja", "", ""}, | |
1341 {"pt", "BR", ""}, | |
1342 {"ru", "", ""}, | |
1343 {"pl", "", ""}, | |
1344 {"tr", "", ""}, | |
1345 {"es", "", ""}, | |
1346 {"ko", "", ""}, | |
1347 {"sv", "", ""}, | |
1348 {"fi", "", ""}, | |
1349 {"da", "", ""}, | |
1350 {"pt", "PT", ""}, | |
1351 {"ro", "", ""}, | |
1352 {"hu", "", ""}, | |
1353 {"he", "", ""}, | |
1354 {"in", "", ""}, | |
1355 {"cs", "", ""}, | |
1356 {"el", "", ""}, | |
1357 {"no", "", ""}, | |
1358 {"vi", "", ""}, | |
1359 {"bg", "", ""}, | |
1360 {"hr", "", ""}, | |
1361 {"lt", "", ""}, | |
1362 {"sk", "", ""}, | |
1363 {"sl", "", ""}, | |
1364 {"sr", "", ""}, | |
1365 {"ca", "", ""}, | |
1366 {"lv", "", ""}, | |
1367 {"uk", "", ""}, | |
1368 {"hi", "", ""}, | |
1369 }; | |
1370 | |
1371 uint32_t localeIndex; | |
1372 for ( localeIndex = 0; localeIndex < ARRAY_SIZE(testLocale); ++localeIndex )
{ | |
1373 char locName[32]; | |
1374 uprv_strcpy(locName, testLocale[localeIndex][0]); | |
1375 uprv_strcat(locName, testLocale[localeIndex][1]); | |
1376 stress(DATA, ARRAY_SIZE(DATA), Locale(testLocale[localeIndex][0], testLo
cale[localeIndex][1], testLocale[localeIndex][2]), locName); | |
1377 } | |
1378 } | |
1379 | |
1380 | |
1381 void DateIntervalFormatTest::stress(const char** data, int32_t data_length, | |
1382 const Locale& loc, const char* locName) { | |
1383 UnicodeString skeleton[] = { | |
1384 "EEEEdMMMMy", | |
1385 "dMMMMy", | |
1386 "dMMMM", | |
1387 "MMMMy", | |
1388 "EEEEdMMMM", | |
1389 "EdMMMy", | |
1390 "dMMMy", | |
1391 "dMMM", | |
1392 "MMMy", | |
1393 "EdMMM", | |
1394 "EdMy", | |
1395 "dMy", | |
1396 "dM", | |
1397 "My", | |
1398 "EdM", | |
1399 "d", | |
1400 "Ed", | |
1401 "y", | |
1402 "M", | |
1403 "MMM", | |
1404 "MMMM", | |
1405 "hm", | |
1406 "hmv", | |
1407 "hmz", | |
1408 "h", | |
1409 "hv", | |
1410 "hz", | |
1411 "EEddMMyyyy", // following could be normalized | |
1412 "EddMMy", | |
1413 "hhmm", | |
1414 "hhmmzz", | |
1415 "hms", // following could not be normalized | |
1416 "dMMMMMy", | |
1417 "EEEEEdM", | |
1418 }; | |
1419 | |
1420 int32_t i = 0; | |
1421 UErrorCode ec = U_ZERO_ERROR; | |
1422 UnicodeString str, str2; | |
1423 SimpleDateFormat ref(data[i++], loc, ec); | |
1424 if (!assertSuccess("construct SimpleDateFormat", ec)) return; | |
1425 | |
1426 #ifdef DTIFMTTS_DEBUG | |
1427 char result[1000]; | |
1428 char mesg[1000]; | |
1429 sprintf(mesg, "locale: %s\n", locName); | |
1430 PRINTMESG(mesg); | |
1431 #endif | |
1432 | |
1433 while (i<data_length) { | |
1434 | |
1435 // 'f' | |
1436 const char* datestr = data[i++]; | |
1437 const char* datestr_2 = data[i++]; | |
1438 #ifdef DTIFMTTS_DEBUG | |
1439 sprintf(mesg, "original date: %s - %s\n", datestr, datestr_2); | |
1440 PRINTMESG(mesg) | |
1441 #endif | |
1442 UDate date = ref.parse(ctou(datestr), ec); | |
1443 if (!assertSuccess("parse", ec)) return; | |
1444 UDate date_2 = ref.parse(ctou(datestr_2), ec); | |
1445 if (!assertSuccess("parse", ec)) return; | |
1446 DateInterval dtitv(date, date_2); | |
1447 | |
1448 for ( uint32_t skeletonIndex = 0; | |
1449 skeletonIndex < ARRAY_SIZE(skeleton); | |
1450 ++skeletonIndex ) { | |
1451 const UnicodeString& oneSkeleton = skeleton[skeletonIndex]; | |
1452 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(on
eSkeleton, loc, ec); | |
1453 if (!assertSuccess("createInstance(skeleton)", ec)) return; | |
1454 /* | |
1455 // reset the calendar to be Gregorian calendar for "th" | |
1456 if ( uprv_strcmp(locName, "th") == 0 ) { | |
1457 GregorianCalendar* gregCal = new GregorianCalendar(loc, ec); | |
1458 if (!assertSuccess("GregorianCalendar()", ec)) return; | |
1459 const DateFormat* dformat = dtitvfmt->getDateFormat(); | |
1460 DateFormat* newOne = (DateFormat*)dformat->clone(); | |
1461 newOne->adoptCalendar(gregCal); | |
1462 //dtitvfmt->adoptDateFormat(newOne, ec); | |
1463 dtitvfmt->setDateFormat(*newOne, ec); | |
1464 delete newOne; | |
1465 if (!assertSuccess("adoptDateFormat()", ec)) return; | |
1466 } | |
1467 */ | |
1468 FieldPosition pos=0; | |
1469 dtitvfmt->format(&dtitv, str.remove(), pos, ec); | |
1470 if (!assertSuccess("format", ec)) return; | |
1471 #ifdef DTIFMTTS_DEBUG | |
1472 oneSkeleton.extract(0, oneSkeleton.length(), result, "UTF-8"); | |
1473 sprintf(mesg, "interval by skeleton: %s\n", result); | |
1474 PRINTMESG(mesg) | |
1475 str.extract(0, str.length(), result, "UTF-8"); | |
1476 sprintf(mesg, "interval date: %s\n", result); | |
1477 PRINTMESG(mesg) | |
1478 #endif | |
1479 delete dtitvfmt; | |
1480 } | |
1481 | |
1482 // test user created DateIntervalInfo | |
1483 ec = U_ZERO_ERROR; | |
1484 DateIntervalInfo* dtitvinf = new DateIntervalInfo(ec); | |
1485 dtitvinf->setFallbackIntervalPattern("{0} --- {1}", ec); | |
1486 dtitvinf->setIntervalPattern(UDAT_YEAR_ABBR_MONTH_DAY, UCAL_MONTH, "yyyy
MMM d - MMM y",ec); | |
1487 if (!assertSuccess("DateIntervalInfo::setIntervalPattern", ec)) return; | |
1488 dtitvinf->setIntervalPattern(UDAT_YEAR_ABBR_MONTH_DAY, UCAL_HOUR_OF_DAY,
"yyyy MMM d HH:mm - HH:mm", ec); | |
1489 if (!assertSuccess("DateIntervalInfo::setIntervalPattern", ec)) return; | |
1490 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(UDAT_Y
EAR_ABBR_MONTH_DAY, loc, *dtitvinf, ec); | |
1491 delete dtitvinf; | |
1492 if (!assertSuccess("createInstance(skeleton,dtitvinf)", ec)) return; | |
1493 FieldPosition pos=0; | |
1494 dtitvfmt->format(&dtitv, str.remove(), pos, ec); | |
1495 if ( uprv_strcmp(locName, "th") ) { | |
1496 if (!assertSuccess("format", ec)) return; | |
1497 #ifdef DTIFMTTS_DEBUG | |
1498 PRINTMESG("interval format using user defined DateIntervalInfo\n"); | |
1499 str.extract(0, str.length(), result, "UTF-8"); | |
1500 sprintf(mesg, "interval date: %s\n", result); | |
1501 PRINTMESG(mesg) | |
1502 #endif | |
1503 } else { | |
1504 // for "th", the default calendar is Budhist, | |
1505 // not Gregorian. | |
1506 assertTrue("Default calendar for \"th\" is Budhist", ec == U_ILLEGAL
_ARGUMENT_ERROR); | |
1507 ec = U_ZERO_ERROR; | |
1508 } | |
1509 delete dtitvfmt; | |
1510 } | |
1511 } | |
1512 | |
1513 void DateIntervalFormatTest::testTicket11583_2() { | |
1514 UErrorCode status = U_ZERO_ERROR; | |
1515 LocalPointer<DateIntervalFormat> fmt( | |
1516 DateIntervalFormat::createInstance("yMMM", "es-US", status)); | |
1517 if (!assertSuccess("Error create format object", status)) { | |
1518 return; | |
1519 } | |
1520 DateInterval interval((UDate) 1232364615000.0, (UDate) 1328787015000.0); | |
1521 UnicodeString appendTo; | |
1522 FieldPosition fpos(FieldPosition::DONT_CARE); | |
1523 UnicodeString expected("ene. de 2009 \\u2013 feb. de 2012"); | |
1524 assertEquals( | |
1525 "", | |
1526 expected.unescape(), | |
1527 fmt->format(&interval, appendTo, fpos, status)); | |
1528 if (!assertSuccess("Error formatting", status)) { | |
1529 return; | |
1530 } | |
1531 } | |
1532 | |
1533 #endif /* #if !UCONFIG_NO_FORMATTING */ | |
OLD | NEW |