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