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