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