1 2 /******************************************************************** 3 * COPYRIGHT: 4 * Copyright (c) 1997-2009, 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 41 void 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 */ 55 void 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 266 //====== test format in testFormat() 267 268 } 269 270 271 /** 272 * Test format 273 */ 274 void DateIntervalFormatTest::testFormat() { 275 // first item is date pattern 276 // followed by a group of locale/from_data/to_data/skeleton/interval_data 277 const char* DATA[] = { 278 "yyyy MM dd HH:mm:ss", 279 // test root 280 "root", "2007 11 10 10:10:10", "2007 12 10 10:10:10", "yM", "2007-11 \\u2013 12", 281 282 // test 'H' and 'h', using availableFormat in fallback 283 "en", "2007 11 10 10:10:10", "2007 11 10 15:10:10", "Hms", "10:10:10 \\u2013 15:10:10", 284 "en", "2007 11 10 10:10:10", "2007 11 10 15:10:10", "hms", "10:10:10 AM \\u2013 3:10:10 PM", 285 286 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMM", "October 2007 \\u2013 October 2008", 287 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMM", "Oct 2007 \\u2013 Oct 2008", 288 // test skeleton with both date and time 289 "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", 290 291 "en", "2007 11 10 10:10:10", "2007 11 10 11:10:10", "dMMMyhm", "Nov 10, 2007 10:10\\u201311:10 AM", 292 293 "en", "2007 11 10 10:10:10", "2007 11 10 11:10:10", "hms", "10:10:10 AM \\u2013 11:10:10 AM", 294 295 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMMy", "Wednesday, October 10, 2007 \\u2013 Friday, October 10, 2008", 296 297 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMMy", "October 10, 2007 \\u2013 October 10, 2008", 298 299 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMM", "October 10, 2007 \\u2013 October 10, 2008", 300 301 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMMy", "October 2007 \\u2013 October 2008", 302 303 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMM", "Wednesday, October 10, 2007 \\u2013 Friday, October 10, 2008", 304 305 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMMMy", "Wed, Oct 10, 2007 \\u2013 Fri, Oct 10, 2008", 306 307 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMy", "Oct 10, 2007 \\u2013 Oct 10, 2008", 308 309 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMM", "Oct 10, 2007 \\u2013 Oct 10, 2008", 310 311 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMy", "Oct 2007 \\u2013 Oct 2008", 312 313 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMMM", "Wed, Oct 10, 2007 \\u2013 Fri, Oct 10, 2008", 314 315 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMy", "Wed, 10/10/07 \\u2013 Fri, 10/10/08", 316 317 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMy", "10/10/07 \\u2013 10/10/08", 318 319 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dM", "10/10/07 \\u2013 10/10/08", 320 321 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "My", "10/07 \\u2013 10/08", 322 323 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdM", "Wed, 10/10/07 \\u2013 Fri, 10/10/08", 324 325 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "d", "10/10/07 \\u2013 10/10/08", 326 327 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Ed", "10 Wed \\u2013 10 Fri", 328 329 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "y", "2007\\u20132008", 330 331 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "M", "10/07 \\u2013 10/08", 332 333 334 335 "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", 336 337 "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", 338 339 "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", 340 341 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "h", "10/10/2007 10 \\u2013 10/10/2008 10", 342 343 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hv", "10/10/2007 PT (Hour: 10) \\u2013 10/10/2008 PT (Hour: 10)", 344 345 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "hz", "10/10/2007 PDT (Hour: 10) \\u2013 10/10/2008 PDT (Hour: 10)", 346 347 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEddMMyyyy", "Wed, 10/10/07 \\u2013 Fri, 10/10/08", 348 349 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EddMMy", "Wed, 10/10/07 \\u2013 Fri, 10/10/08", 350 351 "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", 352 353 "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", 354 355 "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", 356 357 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMMMMy", "O 10, 2007 \\u2013 O 10, 2008", 358 359 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEEdM", "W, 10/10/07 \\u2013 F, 10/10/08", 360 361 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMMy", "Wednesday, October 10 \\u2013 Saturday, November 10, 2007", 362 363 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMy", "October 10 \\u2013 November 10, 2007", 364 365 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMM", "October 10 \\u2013 November 10", 366 367 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMMy", "October\\u2013November 2007", 368 369 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMM", "Wednesday, October 10 \\u2013 Saturday, November 10", 370 371 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMMMy", "Wed, Oct 10 \\u2013 Sat, Nov 10, 2007", 372 373 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMy", "Oct 10 \\u2013 Nov 10, 2007", 374 375 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMM", "Oct 10 \\u2013 Nov 10", 376 377 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMy", "Oct\\u2013Nov 2007", 378 379 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMMM", "Wed, Oct 10 \\u2013 Sat, Nov 10", 380 381 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdMy", "Wed, 10/10/07 \\u2013 Sat, 11/10/07", 382 383 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMy", "10/10/07 \\u2013 11/10/07", 384 385 386 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "My", "10/07 \\u2013 11/07", 387 388 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EdM", "Wed, 10/10 \\u2013 Sat, 11/10", 389 390 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "d", "10/10 \\u2013 11/10", 391 392 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "Ed", "10 Wed \\u2013 10 Sat", 393 394 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "y", "2007", 395 396 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "M", "10\\u201311", 397 398 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMM", "Oct\\u2013Nov", 399 400 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMM", "October-November", 401 402 "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", 403 404 "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", 405 406 "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", 407 408 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "h", "10/10/2007 10 \\u2013 11/10/2007 10", 409 410 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hv", "10/10/2007 PT (Hour: 10) \\u2013 11/10/2007 PT (Hour: 10)", 411 412 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "hz", "10/10/2007 PDT (Hour: 10) \\u2013 11/10/2007 PST (Hour: 10)", 413 414 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEddMMyyyy", "Wed, 10/10/07 \\u2013 Sat, 11/10/07", 415 416 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EddMMy", "Wed, 10/10/07 \\u2013 Sat, 11/10/07", 417 418 419 "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", 420 421 "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", 422 423 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMMy", "O 10 \\u2013 N 10, 2007", 424 425 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEEdM", "W, 10/10 \\u2013 S, 11/10", 426 427 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMMy", "Saturday, November 10 \\u2013 Tuesday, November 20, 2007", 428 429 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMMy", "November 10\\u201320, 2007", 430 431 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMM", "November 10\\u201320", 432 433 434 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMM", "Saturday, November 10 \\u2013 Tuesday, November 20", 435 436 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMMMy", "Sat, Nov 10 \\u2013 Tue, Nov 20, 2007", 437 438 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMy", "Nov 10\\u201320, 2007", 439 440 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMM", "Nov 10\\u201320", 441 442 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMy", "Nov 2007", 443 444 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMMM", "Sat, Nov 10 \\u2013 Tue, Nov 20", 445 446 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "Sat, 11/10/07 \\u2013 Tue, 11/20/07", 447 448 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMy", "11/10/07 \\u2013 11/20/07", 449 450 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "11/10 \\u2013 11/20", 451 452 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "11/2007", 453 454 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdM", "Sat, 11/10 \\u2013 Tue, 11/20", 455 456 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "d", "10\\u201320", 457 458 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Ed", "10 Sat \\u2013 20 Tue", 459 460 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007", 461 462 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "M", "11", 463 464 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMM", "Nov", 465 466 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMM", "November", 467 468 "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", 469 470 "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", 471 472 "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", 473 474 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "h", "11/10/2007 10 \\u2013 11/20/2007 10", 475 476 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hv", "11/10/2007 PT (Hour: 10) \\u2013 11/20/2007 PT (Hour: 10)", 477 478 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "hz", "11/10/2007 PST (Hour: 10) \\u2013 11/20/2007 PST (Hour: 10)", 479 480 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEddMMyyyy", "Sat, 11/10/07 \\u2013 Tue, 11/20/07", 481 482 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EddMMy", "Sat, 11/10/07 \\u2013 Tue, 11/20/07", 483 484 "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", 485 486 "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", 487 488 "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", 489 490 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMMMy", "N 10\\u201320, 2007", 491 492 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEEdM", "S, 11/10 \\u2013 T, 11/20", 493 494 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMMy", "Wednesday, January 10, 2007", 495 496 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMMy", "January 10, 2007", 497 498 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMM", "January 10", 499 500 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMMy", "January 2007", 501 502 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMM", "Wednesday, January 10", 503 504 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdMMMy", "Wed, Jan 10, 2007", 505 506 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMy", "Jan 10, 2007", 507 508 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMM", "Jan 10", 509 510 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMy", "Jan 2007", 511 512 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdMMM", "Wed, Jan 10", 513 514 515 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMy", "1/10/2007", 516 517 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dM", "1/10", 518 519 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "My", "1/2007", 520 521 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EdM", "Wed, 1/10", 522 523 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "d", "10", 524 525 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Ed", "10 Wed", 526 527 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "y", "2007", 528 529 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "M", "1", 530 531 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMM", "Jan", 532 533 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMM", "January", 534 535 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hm", "10:00 AM \\u2013 2:10 PM", 536 537 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hmv", "10:00 AM \\u2013 2:10 PM PT", 538 539 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hmz", "10:00 AM \\u2013 2:10 PM PST", 540 541 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "10 AM \\u2013 2 PM", 542 543 544 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hz", "10 AM \\u2013 2 PM PST", 545 546 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEddMMyyyy", "Wed, 01/10/2007", 547 548 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EddMMy", "Wed, 01/10/2007", 549 550 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hhmm", "10:00 AM \\u2013 2:10 PM", 551 552 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hhmmzz", "10:00 AM \\u2013 2:10 PM PST", 553 554 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hms", "10:00:10 AM \\u2013 2:10:10 PM", 555 556 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMMMMy", "J 10, 2007", 557 558 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEEdM", "W, 1/10", 559 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMMy", "January 10, 2007", 560 561 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMM", "January 10", 562 563 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "MMMMy", "January 2007", 564 565 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EEEEdMMMM", "Wednesday, January 10", 566 567 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMMMy", "Wed, Jan 10, 2007", 568 569 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMy", "Jan 10, 2007", 570 571 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMM", "Jan 10", 572 573 574 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMMM", "Wed, Jan 10", 575 576 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdMy", "Wed, 1/10/2007", 577 578 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMy", "1/10/2007", 579 580 581 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "My", "1/2007", 582 583 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EdM", "Wed, 1/10", 584 585 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "d", "10", 586 587 588 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "y", "2007", 589 590 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "M", "1", 591 592 593 594 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hm", "10:00\\u201310:20 AM", 595 596 597 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmz", "10:00\\u201310:20 AM PST", 598 599 600 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hv", "PT (Hour: 10)", 601 602 603 604 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EddMMy", "Wed, 01/10/2007", 605 606 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hhmm", "10:00\\u201310:20 AM", 607 608 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hhmmzz", "10:00\\u201310:20 AM PST", 609 610 611 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "dMMMMMy", "J 10, 2007", 612 613 614 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMMy", "Wednesday, January 10, 2007", 615 616 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMMy", "January 10, 2007", 617 618 619 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "MMMMy", "January 2007", 620 621 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMM", "Wednesday, January 10", 622 623 624 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMy", "Jan 10, 2007", 625 626 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMM", "Jan 10", 627 628 629 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdMMM", "Wed, Jan 10", 630 631 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdMy", "Wed, 1/10/2007", 632 633 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMy", "1/10/2007", 634 635 636 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "My", "1/2007", 637 638 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EdM", "Wed, 1/10", 639 640 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "d", "10", 641 642 643 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "y", "2007", 644 645 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "M", "1", 646 647 648 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "MMMM", "January", 649 650 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hm", "10:10 AM", 651 652 653 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmz", "10:10 AM PST", 654 655 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "h", "10", 656 657 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hv", "PT (Hour: 10)", 658 659 660 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEddMMyyyy", "Wed, 01/10/2007", 661 662 663 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hhmm", "10:10 AM", 664 665 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hhmmzz", "10:10 AM PST", 666 667 668 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "dMMMMMy", "J 10, 2007", 669 670 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEEdM", "W, 1/10", 671 672 "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", 673 674 675 "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMMMy", "2007\\u5e7410\\u670810\\u65e5\\u81f311\\u670810\\u65e5", 676 677 678 "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMMy", "2007\\u5e7410\\u6708\\u81f311\\u6708", 679 680 681 "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)", 682 683 "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", 684 685 686 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMM", "11\\u670810\\u65e5\\u81f320\\u65e5", 687 688 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMMy", "2007\\u5E7411\\u6708", // (fixed expected result per ticket:6626:) 689 690 "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", 691 692 693 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "07-11-10\\u5468\\u516d\\u81f307-11-20\\u5468\\u4e8c", 694 695 696 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "11-10\\u81f311-20", 697 698 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "2007-11", 699 700 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdM", "11-10\\u5468\\u516d\\u81f311-20\\u5468\\u4e8c", 701 702 703 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007\\u5E74", // (fixed expected result per ticket:6626:) 704 705 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "M", "11", 706 707 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMM", "11\\u6708", // (fixed expected result per ticket:6626:) 708 709 710 "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", 711 712 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "h", "2007\\u5e7411\\u670810\\u65e5 10\\u65F6\\u20132007\\u5e7411\\u670820\\u65e5 10\\u65F6", // (fixed expected result per ticket:6626:) 713 714 "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:) 715 716 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "hm", "\\u4e0a\\u534810:00\\u81f3\\u4e0b\\u53482:10", 717 718 719 "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", 720 721 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "\\u4e0a\\u534810\\u81f3\\u4e0b\\u53482\\u65f6", 722 723 "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", 724 725 "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hm", "\\u4e0a\\u534810:00\\u81f310:20", 726 727 "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmv", "\\u7f8e\\u56fd (\\u6d1b\\u6749\\u77f6)\\u4e0a\\u534810:00\\u81f310:20", 728 729 "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0800 (\\u5c0f\\u65f6: 10\\u65F6)", // (fixed expected result per ticket:6626:) 730 731 "zh", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hm", "\\u4e0a\\u534810:10", 732 733 "zh", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "h", "10\\u65F6", // (fixed expected result per ticket:6626:) 734 735 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EEEEdMMMy", "Mittwoch, 10. Okt 2007 - Freitag, 10. Okt 2008", 736 737 738 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMMM", "10. Okt 2007 - 10. Okt 2008", 739 740 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "MMMy", "Okt 2007 - Okt 2008", 741 742 743 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdMy", "Mi., 10.10.07 - Fr., 10.10.08", 744 745 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "dMy", "10.10.07 - 10.10.08", 746 747 748 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "My", "10.07 - 10.08", 749 750 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "EdM", "Mi., 10.10.07 - Fr., 10.10.08", 751 752 753 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "y", "2007-2008", 754 755 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "M", "10.07 - 10.08", 756 757 758 "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.", 759 760 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMMy", "Mittwoch, 10. Okt - Samstag, 10. Nov 2007", 761 762 763 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dMMM", "10. Okt - 10. Nov", 764 765 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMMy", "Okt-Nov 2007", 766 767 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "EEEEdMMM", "Mittwoch, 10. Okt - Samstag, 10. Nov", 768 769 770 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "dM", "10.10. - 10.11.", 771 772 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "My", "10.07 - 11.07", 773 774 775 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "d", "10.10. - 10.11.", 776 777 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "y", "2007", 778 779 780 "de", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "MMM", "Okt-Nov", 781 782 783 "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.", 784 785 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMMy", "Samstag, 10. - Dienstag, 20. Nov 2007", 786 787 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dMMMy", "10.-20. Nov 2007", 788 789 790 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "MMMy", "Nov 2007", 791 792 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EEEEdMMM", "Samstag, 10. - Dienstag, 20. Nov", 793 794 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "EdMy", "Sa., 10.11.07 - Di., 20.11.07", 795 796 797 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "dM", "10.11. - 20.11.", 798 799 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "My", "2007-11", 800 801 802 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "d", "10.-20.", 803 804 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "y", "2007", 805 806 807 "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)", 808 809 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMMy", "Mittwoch, 10. Jan 2007", 810 811 812 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "dMMM", "10. Jan", 813 814 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "MMMy", "Jan 2007", 815 816 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "EEEEdMMM", "Mittwoch 10. Jan", 817 818 819 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "h", "10-14", 820 821 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "EEEEdMMM", "Mittwoch 10. Jan", 822 823 824 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmv", "10:00-10:20 Vereinigte Staaten (Los Angeles)", 825 826 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hmz", "10:00-10:20 GMT-08:00", 827 828 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "h", "10", 829 830 831 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "hz", "GMT-08:00 (Stunde: 10)", 832 833 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "EEEEdMMMy", "Mittwoch, 10. Jan 2007", 834 835 836 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmv", "10:10 vorm. Vereinigte Staaten (Los Angeles)", 837 838 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hmz", "10:10 vorm. GMT-08:00", 839 840 841 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hv", "Vereinigte Staaten (Los Angeles) (Stunde: 10)", 842 843 "de", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "hz", "GMT-08:00 (Stunde: 10)", 844 }; 845 expect(DATA, ARRAY_SIZE(DATA)); 846 } 847 848 849 void DateIntervalFormatTest::expect(const char** data, int32_t data_length) { 850 int32_t i = 0; 851 UErrorCode ec = U_ZERO_ERROR; 852 UnicodeString str, str2; 853 const char* pattern = data[0]; 854 i++; 855 856 #ifdef DTIFMTTS_DEBUG 857 char result[1000]; 858 char mesg[1000]; 859 sprintf(mesg, "locale: %s\n", locName); 860 PRINTMESG(mesg); 861 #endif 862 863 while (i<data_length) { 864 const char* locName = data[i++]; 865 Locale loc(locName); 866 SimpleDateFormat ref(pattern, loc, ec); 867 if (!assertSuccess("construct SimpleDateFormat in expect", ec)) return; 868 // 'f' 869 const char* datestr = data[i++]; 870 const char* datestr_2 = data[i++]; 871 #ifdef DTIFMTTS_DEBUG 872 sprintf(mesg, "original date: %s - %s\n", datestr, datestr_2); 873 PRINTMESG(mesg) 874 #endif 875 UDate date = ref.parse(ctou(datestr), ec); 876 if (!assertSuccess("parse 1st data in expect", ec)) return; 877 UDate date_2 = ref.parse(ctou(datestr_2), ec); 878 if (!assertSuccess("parse 2nd data in expect", ec)) return; 879 DateInterval dtitv(date, date_2); 880 881 const UnicodeString& oneSkeleton = data[i++]; 882 883 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(oneSkeleton, loc, ec); 884 if (!assertSuccess("createInstance(skeleton) in expect", ec)) return; 885 FieldPosition pos=0; 886 dtitvfmt->format(&dtitv, str.remove(), pos, ec); 887 if (!assertSuccess("format in expect", ec)) return; 888 assertEquals((UnicodeString)"\"" + locName + "\\" + oneSkeleton + "\\" + datestr + "\\" + datestr_2 + "\"", ctou(data[i++]), str); 889 890 891 892 #ifdef DTIFMTTS_DEBUG 893 str.extract(0, str.length(), result, "UTF-8"); 894 sprintf(mesg, "interval date: %s\n", result); 895 std::cout << "//"; 896 PRINTMESG(mesg) 897 std::cout << "\"" << locName << "\", " 898 << "\"" << datestr << "\", " 899 << "\"" << datestr_2 << "\", "; 900 printUnicodeString(oneSkeleton); 901 printUnicodeString(str); 902 std::cout << "\n\n"; 903 #endif 904 delete dtitvfmt; 905 } 906 } 907 908 909 /* 910 * Test format using user defined DateIntervalInfo 911 */ 912 void DateIntervalFormatTest::testFormatUserDII() { 913 // first item is date pattern 914 const char* DATA[] = { 915 "yyyy MM dd HH:mm:ss", 916 "en", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "Oct 10, 2007 --- Oct 10, 2008", 917 918 "en", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "2007 Oct 10 - Nov 2007", 919 920 "en", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "Nov 10, 2007 --- Nov 20, 2007", 921 922 "en", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "Jan 10, 2007", 923 924 "en", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "Jan 10, 2007", 925 926 "en", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "Jan 10, 2007", 927 928 "zh", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "2007\\u5e7410\\u670810\\u65e5 --- 2008\\u5e7410\\u670810\\u65e5", 929 930 "zh", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "2007 10\\u6708 10 - 11\\u6708 2007", 931 932 "zh", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "2007\\u5e7411\\u670810\\u65e5 --- 2007\\u5e7411\\u670820\\u65e5", 933 934 "zh", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "2007\\u5e741\\u670810\\u65e5", // (fixed expected result per ticket:6626:) 935 936 "zh", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "2007\\u5e741\\u670810\\u65e5", // (fixed expected result per ticket:6626:) 937 938 "zh", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "2007\\u5e741\\u670810\\u65e5", // (fixed expected result per ticket:6626:) 939 940 "de", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "10. Okt 2007 --- 10. Okt 2008", 941 942 943 "de", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "10. Nov 2007 --- 20. Nov 2007", 944 945 "de", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "10. Jan 2007", 946 947 "de", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "10. Jan 2007", 948 949 950 "es", "2007 10 10 10:10:10", "2008 10 10 10:10:10", "10 de oct de 2007 --- 10 de oct de 2008", 951 952 "es", "2007 10 10 10:10:10", "2007 11 10 10:10:10", "2007 oct 10 - nov 2007", 953 954 "es", "2007 11 10 10:10:10", "2007 11 20 10:10:10", "10 de nov de 2007 --- 20 de nov de 2007", 955 956 "es", "2007 01 10 10:00:10", "2007 01 10 14:10:10", "10 de ene de 2007", 957 958 "es", "2007 01 10 10:00:10", "2007 01 10 10:20:10", "10 de ene de 2007", 959 960 "es", "2007 01 10 10:10:10", "2007 01 10 10:10:20", "10 de ene de 2007", 961 }; 962 expectUserDII(DATA, ARRAY_SIZE(DATA)); 963 } 964 965 966 void DateIntervalFormatTest::expectUserDII(const char** data, 967 int32_t data_length) { 968 int32_t i = 0; 969 UnicodeString str; 970 UErrorCode ec = U_ZERO_ERROR; 971 const char* pattern = data[0]; 972 i++; 973 974 while ( i < data_length ) { 975 const char* locName = data[i++]; 976 Locale loc(locName); 977 SimpleDateFormat ref(pattern, loc, ec); 978 if (!assertSuccess("construct SimpleDateFormat in expectUserDII", ec)) return; 979 const char* datestr = data[i++]; 980 const char* datestr_2 = data[i++]; 981 UDate date = ref.parse(ctou(datestr), ec); 982 if (!assertSuccess("parse in expectUserDII", ec)) return; 983 UDate date_2 = ref.parse(ctou(datestr_2), ec); 984 if (!assertSuccess("parse in expectUserDII", ec)) return; 985 DateInterval dtitv(date, date_2); 986 987 ec = U_ZERO_ERROR; 988 // test user created DateIntervalInfo 989 DateIntervalInfo* dtitvinf = new DateIntervalInfo(ec); 990 dtitvinf->setFallbackIntervalPattern("{0} --- {1}", ec); 991 dtitvinf->setIntervalPattern(UDAT_YEAR_ABBR_MONTH_DAY, UCAL_MONTH, "yyyy MMM d - MMM y",ec); 992 if (!assertSuccess("DateIntervalInfo::setIntervalPattern", ec)) return; 993 dtitvinf->setIntervalPattern(UDAT_YEAR_ABBR_MONTH_DAY, UCAL_HOUR_OF_DAY, "yyyy MMM d HH:mm - HH:mm", ec); 994 if (!assertSuccess("DateIntervalInfo::setIntervalPattern", ec)) return; 995 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(UDAT_YEAR_ABBR_MONTH_DAY, loc, *dtitvinf, ec); 996 delete dtitvinf; 997 if (!assertSuccess("createInstance(skeleton,dtitvinf) in expectUserDII", ec)) return; 998 FieldPosition pos=0; 999 dtitvfmt->format(&dtitv, str.remove(), pos, ec); 1000 if (!assertSuccess("format in expectUserDII", ec)) return; 1001 assertEquals((UnicodeString)"\"" + locName + "\\" + datestr + "\\" + datestr_2 + "\"", ctou(data[i++]), str); 1002 #ifdef DTIFMTTS_DEBUG 1003 char result[1000]; 1004 char mesg[1000]; 1005 PRINTMESG("interval format using user defined DateIntervalInfo\n"); 1006 str.extract(0, str.length(), result, "UTF-8"); 1007 sprintf(mesg, "interval date: %s\n", result); 1008 PRINTMESG(mesg); 1009 #endif 1010 delete dtitvfmt; 1011 } 1012 } 1013 1014 1015 void DateIntervalFormatTest::testStress() { 1016 if(quick){ 1017 logln("Quick mode: Skipping test"); 1018 return; 1019 } 1020 const char* DATA[] = { 1021 "yyyy MM dd HH:mm:ss", 1022 "2007 10 10 10:10:10", "2008 10 10 10:10:10", 1023 "2007 10 10 10:10:10", "2007 11 10 10:10:10", 1024 "2007 11 10 10:10:10", "2007 11 20 10:10:10", 1025 "2007 01 10 10:00:10", "2007 01 10 14:10:10", 1026 "2007 01 10 10:00:10", "2007 01 10 10:20:10", 1027 "2007 01 10 10:10:10", "2007 01 10 10:10:20", 1028 }; 1029 1030 const char* testLocale[][3] = { 1031 //{"th", "", ""}, 1032 {"en", "", ""}, 1033 {"zh", "", ""}, 1034 {"de", "", ""}, 1035 {"ar", "", ""}, 1036 {"en", "GB", ""}, 1037 {"fr", "", ""}, 1038 {"it", "", ""}, 1039 {"nl", "", ""}, 1040 {"zh", "TW", ""}, 1041 {"ja", "", ""}, 1042 {"pt", "BR", ""}, 1043 {"ru", "", ""}, 1044 {"pl", "", ""}, 1045 {"tr", "", ""}, 1046 {"es", "", ""}, 1047 {"ko", "", ""}, 1048 {"sv", "", ""}, 1049 {"fi", "", ""}, 1050 {"da", "", ""}, 1051 {"pt", "PT", ""}, 1052 {"ro", "", ""}, 1053 {"hu", "", ""}, 1054 {"he", "", ""}, 1055 {"in", "", ""}, 1056 {"cs", "", ""}, 1057 {"el", "", ""}, 1058 {"no", "", ""}, 1059 {"vi", "", ""}, 1060 {"bg", "", ""}, 1061 {"hr", "", ""}, 1062 {"lt", "", ""}, 1063 {"sk", "", ""}, 1064 {"sl", "", ""}, 1065 {"sr", "", ""}, 1066 {"ca", "", ""}, 1067 {"lv", "", ""}, 1068 {"uk", "", ""}, 1069 {"hi", "", ""}, 1070 }; 1071 1072 uint32_t localeIndex; 1073 for ( localeIndex = 0; localeIndex < ARRAY_SIZE(testLocale); ++localeIndex ) { 1074 char locName[32]; 1075 uprv_strcpy(locName, testLocale[localeIndex][0]); 1076 uprv_strcat(locName, testLocale[localeIndex][1]); 1077 stress(DATA, ARRAY_SIZE(DATA), Locale(testLocale[localeIndex][0], testLocale[localeIndex][1], testLocale[localeIndex][2]), locName); 1078 } 1079 } 1080 1081 1082 void DateIntervalFormatTest::stress(const char** data, int32_t data_length, 1083 const Locale& loc, const char* locName) { 1084 UnicodeString skeleton[] = { 1085 "EEEEdMMMMy", 1086 "dMMMMy", 1087 "dMMMM", 1088 "MMMMy", 1089 "EEEEdMMMM", 1090 "EdMMMy", 1091 "dMMMy", 1092 "dMMM", 1093 "MMMy", 1094 "EdMMM", 1095 "EdMy", 1096 "dMy", 1097 "dM", 1098 "My", 1099 "EdM", 1100 "d", 1101 "Ed", 1102 "y", 1103 "M", 1104 "MMM", 1105 "MMMM", 1106 "hm", 1107 "hmv", 1108 "hmz", 1109 "h", 1110 "hv", 1111 "hz", 1112 "EEddMMyyyy", // following could be normalized 1113 "EddMMy", 1114 "hhmm", 1115 "hhmmzz", 1116 "hms", // following could not be normalized 1117 "dMMMMMy", 1118 "EEEEEdM", 1119 }; 1120 1121 int32_t i = 0; 1122 UErrorCode ec = U_ZERO_ERROR; 1123 UnicodeString str, str2; 1124 SimpleDateFormat ref(data[i++], loc, ec); 1125 if (!assertSuccess("construct SimpleDateFormat", ec)) return; 1126 1127 #ifdef DTIFMTTS_DEBUG 1128 char result[1000]; 1129 char mesg[1000]; 1130 sprintf(mesg, "locale: %s\n", locName); 1131 PRINTMESG(mesg); 1132 #endif 1133 1134 while (i<data_length) { 1135 1136 // 'f' 1137 const char* datestr = data[i++]; 1138 const char* datestr_2 = data[i++]; 1139 #ifdef DTIFMTTS_DEBUG 1140 sprintf(mesg, "original date: %s - %s\n", datestr, datestr_2); 1141 PRINTMESG(mesg) 1142 #endif 1143 UDate date = ref.parse(ctou(datestr), ec); 1144 if (!assertSuccess("parse", ec)) return; 1145 UDate date_2 = ref.parse(ctou(datestr_2), ec); 1146 if (!assertSuccess("parse", ec)) return; 1147 DateInterval dtitv(date, date_2); 1148 1149 for ( uint32_t skeletonIndex = 0; 1150 skeletonIndex < ARRAY_SIZE(skeleton); 1151 ++skeletonIndex ) { 1152 const UnicodeString& oneSkeleton = skeleton[skeletonIndex]; 1153 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(oneSkeleton, loc, ec); 1154 if (!assertSuccess("createInstance(skeleton)", ec)) return; 1155 /* 1156 // reset the calendar to be Gregorian calendar for "th" 1157 if ( uprv_strcmp(locName, "th") == 0 ) { 1158 GregorianCalendar* gregCal = new GregorianCalendar(loc, ec); 1159 if (!assertSuccess("GregorianCalendar()", ec)) return; 1160 const DateFormat* dformat = dtitvfmt->getDateFormat(); 1161 DateFormat* newOne = (DateFormat*)dformat->clone(); 1162 newOne->adoptCalendar(gregCal); 1163 //dtitvfmt->adoptDateFormat(newOne, ec); 1164 dtitvfmt->setDateFormat(*newOne, ec); 1165 delete newOne; 1166 if (!assertSuccess("adoptDateFormat()", ec)) return; 1167 } 1168 */ 1169 FieldPosition pos=0; 1170 dtitvfmt->format(&dtitv, str.remove(), pos, ec); 1171 if (!assertSuccess("format", ec)) return; 1172 #ifdef DTIFMTTS_DEBUG 1173 oneSkeleton.extract(0, oneSkeleton.length(), result, "UTF-8"); 1174 sprintf(mesg, "interval by skeleton: %s\n", result); 1175 PRINTMESG(mesg) 1176 str.extract(0, str.length(), result, "UTF-8"); 1177 sprintf(mesg, "interval date: %s\n", result); 1178 PRINTMESG(mesg) 1179 #endif 1180 delete dtitvfmt; 1181 } 1182 1183 // test user created DateIntervalInfo 1184 ec = U_ZERO_ERROR; 1185 DateIntervalInfo* dtitvinf = new DateIntervalInfo(ec); 1186 dtitvinf->setFallbackIntervalPattern("{0} --- {1}", ec); 1187 dtitvinf->setIntervalPattern(UDAT_YEAR_ABBR_MONTH_DAY, UCAL_MONTH, "yyyy MMM d - MMM y",ec); 1188 if (!assertSuccess("DateIntervalInfo::setIntervalPattern", ec)) return; 1189 dtitvinf->setIntervalPattern(UDAT_YEAR_ABBR_MONTH_DAY, UCAL_HOUR_OF_DAY, "yyyy MMM d HH:mm - HH:mm", ec); 1190 if (!assertSuccess("DateIntervalInfo::setIntervalPattern", ec)) return; 1191 DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(UDAT_YEAR_ABBR_MONTH_DAY, loc, *dtitvinf, ec); 1192 delete dtitvinf; 1193 if (!assertSuccess("createInstance(skeleton,dtitvinf)", ec)) return; 1194 FieldPosition pos=0; 1195 dtitvfmt->format(&dtitv, str.remove(), pos, ec); 1196 if ( uprv_strcmp(locName, "th") ) { 1197 if (!assertSuccess("format", ec)) return; 1198 #ifdef DTIFMTTS_DEBUG 1199 PRINTMESG("interval format using user defined DateIntervalInfo\n"); 1200 str.extract(0, str.length(), result, "UTF-8"); 1201 sprintf(mesg, "interval date: %s\n", result); 1202 PRINTMESG(mesg) 1203 #endif 1204 } else { 1205 // for "th", the default calendar is Budhist, 1206 // not Gregorian. 1207 assertTrue("Default calendar for \"th\" is Budhist", ec == U_ILLEGAL_ARGUMENT_ERROR); 1208 ec = U_ZERO_ERROR; 1209 } 1210 delete dtitvfmt; 1211 } 1212 } 1213 1214 #endif /* #if !UCONFIG_NO_FORMATTING */ 1215