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