OLD | NEW |
(Empty) | |
| 1 /******************************************************************** |
| 2 * COPYRIGHT: |
| 3 * Copyright (c) 1997-2010, International Business Machines Corporation and |
| 4 * others. All Rights Reserved. |
| 5 ********************************************************************/ |
| 6 /*******************************************************************************
* |
| 7 * |
| 8 * File CDTRGTST.C |
| 9 * |
| 10 * Madhu Katragadda Ported for C API |
| 11 * Modification History: |
| 12 * Date Name Description |
| 13 * 07/15/99 helena Ported to HPUX 10/11 CC. |
| 14 ********************************************************************************
* |
| 15 */ |
| 16 /* REGRESSION TEST FOR DATE FORMAT */ |
| 17 |
| 18 #include "unicode/utypes.h" |
| 19 |
| 20 #if !UCONFIG_NO_FORMATTING |
| 21 |
| 22 #include "unicode/uloc.h" |
| 23 #include "unicode/udat.h" |
| 24 #include "unicode/ucal.h" |
| 25 #include "unicode/unum.h" |
| 26 #include "unicode/ustring.h" |
| 27 #include "cintltst.h" |
| 28 #include "cdtrgtst.h" |
| 29 #include "cmemory.h" |
| 30 |
| 31 void addDateForRgrTest(TestNode** root); |
| 32 |
| 33 void addDateForRgrTest(TestNode** root) |
| 34 { |
| 35 addTest(root, &Test4029195, "tsformat/cdtrgtst/Test4029195"); |
| 36 addTest(root, &Test4056591, "tsformat/cdtrgtst/Test4056591"); |
| 37 addTest(root, &Test4059917, "tsformat/cdtrgtst/Test4059917"); |
| 38 addTest(root, &Test4060212, "tsformat/cdtrgtst/Test4060212"); |
| 39 addTest(root, &Test4061287, "tsformat/cdtrgtst/Test4061287"); |
| 40 addTest(root, &Test4073003, "tsformat/cdtrgtst/Test4073003"); |
| 41 addTest(root, &Test4162071, "tsformat/cdtrgtst/Test4162071"); |
| 42 addTest(root, &Test714, "tsformat/cdtrgtst/Test714"); |
| 43 addTest(root, &Test_GEec, "tsformat/cdtrgtst/Test_GEec"); /* tests for for
mat chars GEec, jitterbugs 5726 6072 6585 */ |
| 44 } |
| 45 |
| 46 /** |
| 47 * @bug 4029195 |
| 48 */ |
| 49 void Test4029195() |
| 50 { |
| 51 int32_t resultlength, resultlengthneeded; |
| 52 UChar *fmdt, *todayS, *rt; |
| 53 UChar *pat=NULL; |
| 54 UChar *temp; |
| 55 UDate today, d1; |
| 56 UDateFormat *df; |
| 57 int32_t parsepos; |
| 58 UErrorCode status = U_ZERO_ERROR; |
| 59 |
| 60 log_verbose("Testing date format and parse function in regression test\n"); |
| 61 today = ucal_getNow(); |
| 62 |
| 63 df = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,"en_US", NULL, 0, NULL, 0, &status
); |
| 64 if(U_FAILURE(status)) |
| 65 { |
| 66 log_data_err("FAIL: error in creating the dateformat using default date
and time style : %s (Are you missing data?)\n", myErrorName(status)); |
| 67 return; |
| 68 } |
| 69 resultlength=0; |
| 70 resultlengthneeded=udat_toPattern(df, TRUE, NULL, resultlength, &status); |
| 71 if(status==U_BUFFER_OVERFLOW_ERROR) |
| 72 { |
| 73 status=U_ZERO_ERROR; |
| 74 resultlength=resultlengthneeded + 1; |
| 75 pat=(UChar*)malloc(sizeof(UChar) * resultlength); |
| 76 udat_toPattern(df, TRUE, pat, resultlength, &status); |
| 77 } |
| 78 |
| 79 log_verbose("pattern: %s\n", austrdup(pat)); |
| 80 |
| 81 |
| 82 fmdt = myFormatit(df, today); |
| 83 if(fmdt) { |
| 84 log_verbose("today: %s\n", austrdup(fmdt)); |
| 85 } else { |
| 86 log_data_err("ERROR: couldn't format, exitting test"); |
| 87 return; |
| 88 } |
| 89 |
| 90 temp=(UChar*)malloc(sizeof(UChar) * 10); |
| 91 u_uastrcpy(temp, "M yyyy dd"); |
| 92 udat_applyPattern(df, TRUE, temp, u_strlen(temp)); |
| 93 |
| 94 todayS =myFormatit(df, today); |
| 95 log_verbose("After teh pattern is applied\n today: %s\n", austrdup(todayS) )
; |
| 96 parsepos=0; |
| 97 d1=udat_parse(df, todayS, u_strlen(todayS), &parsepos, &status); |
| 98 if(U_FAILURE(status)) |
| 99 { |
| 100 log_err("FAIL: Error in parsing using udat_parse(.....): %s\n", myErrorN
ame(status)); |
| 101 } |
| 102 |
| 103 rt =myFormatit(df, d1); |
| 104 log_verbose("today: %s\n", austrdup(rt) ); |
| 105 |
| 106 log_verbose("round trip: %s\n", austrdup(rt) ); |
| 107 |
| 108 if(u_strcmp(rt, todayS)!=0) { |
| 109 log_err("Fail: Want %s Got %s\n", austrdup(todayS), austrdup(rt)
); |
| 110 } |
| 111 else |
| 112 log_verbose("Pass: parse and format working fine\n"); |
| 113 udat_close(df); |
| 114 free(temp); |
| 115 if(pat != NULL) { |
| 116 free(pat); |
| 117 } |
| 118 } |
| 119 |
| 120 |
| 121 /** |
| 122 * @bug 4056591 |
| 123 * Verify the function of the [s|g]et2DigitYearStart() API. |
| 124 */ |
| 125 void Test4056591() |
| 126 { |
| 127 int i; |
| 128 UCalendar *cal; |
| 129 UDateFormat *def; |
| 130 UDate start,exp,got; |
| 131 UChar s[10]; |
| 132 UChar *gotdate, *expdate; |
| 133 UChar pat[10]; |
| 134 UDate d[4]; |
| 135 UErrorCode status = U_ZERO_ERROR; |
| 136 const char* strings[] = { |
| 137 "091225", |
| 138 "091224", |
| 139 "611226", |
| 140 "991227" |
| 141 }; |
| 142 |
| 143 log_verbose("Testing s[get] 2 digit year start regressively\n"); |
| 144 cal=ucal_open(NULL, 0, "en_US", UCAL_GREGORIAN, &status); |
| 145 if(U_FAILURE(status)){ |
| 146 log_data_err("error in ucal_open caldef : %s - (Are you missing data?)\n
", myErrorName(status)); |
| 147 return; |
| 148 } |
| 149 ucal_setDateTime(cal, 1809, UCAL_DECEMBER, 25, 17, 40, 30, &status); |
| 150 d[0]=ucal_getMillis(cal, &status); |
| 151 if(U_FAILURE(status)){ |
| 152 log_err("Error: failure in get millis: %s\n", myErrorName(status)); |
| 153 } |
| 154 ucal_setDateTime(cal, 1909, UCAL_DECEMBER, 24, 17, 40, 30, &status); |
| 155 d[1]=ucal_getMillis(cal, &status); |
| 156 ucal_setDateTime(cal, 1861, UCAL_DECEMBER, 26, 17, 40, 30, &status); |
| 157 d[2]=ucal_getMillis(cal, &status); |
| 158 ucal_setDateTime(cal, 1999, UCAL_DECEMBER, 27, 17, 40, 30, &status); |
| 159 d[3]=ucal_getMillis(cal, &status); |
| 160 |
| 161 |
| 162 u_uastrcpy(pat, "yyMMdd"); |
| 163 def = udat_open(UDAT_IGNORE,UDAT_IGNORE,NULL, NULL, 0, pat, u_strlen(pat), &
status); |
| 164 if(U_FAILURE(status)) |
| 165 { |
| 166 log_err_status(status, "FAIL: error in creating the dateformat using u_o
penPattern(): %s\n", myErrorName(status)); |
| 167 return; |
| 168 } |
| 169 start = 1800; |
| 170 udat_set2DigitYearStart(def, start, &status); |
| 171 if(U_FAILURE(status)) |
| 172 log_err("ERROR: in setTwoDigitStartDate: %s\n", myErrorName(status)); |
| 173 if( (udat_get2DigitYearStart(def, &status) != start)) |
| 174 log_err("ERROR: get2DigitYearStart broken\n"); |
| 175 |
| 176 |
| 177 for(i = 0; i < 4; ++i) { |
| 178 u_uastrcpy(s, strings[i]); |
| 179 exp = d[i]; |
| 180 got = udat_parse(def, s, u_strlen(s), 0, &status); |
| 181 gotdate=myFormatit(def, got); |
| 182 expdate=myFormatit(def, exp); |
| 183 |
| 184 if (gotdate == NULL || expdate == NULL) { |
| 185 log_err("myFormatit failed!\n"); |
| 186 } |
| 187 else if(u_strcmp(gotdate, expdate) !=0){ |
| 188 log_err("set2DigitYearStart broken for %s \n got: %s, expected: %s\
n", austrdup(s), |
| 189 austrdup(gotdate), austrdup(expdate) ); |
| 190 } |
| 191 } |
| 192 |
| 193 udat_close(def); |
| 194 ucal_close(cal); |
| 195 } |
| 196 |
| 197 |
| 198 /** |
| 199 * SimpleDateFormat does not properly parse date strings without delimiters |
| 200 * @bug 4059917 |
| 201 */ |
| 202 void Test4059917() |
| 203 { |
| 204 UDateFormat* def; |
| 205 UChar *myDate; |
| 206 UErrorCode status = U_ZERO_ERROR; |
| 207 UChar pattern[11]; |
| 208 UChar tzID[4]; |
| 209 |
| 210 log_verbose("Testing apply pattern and to pattern regressively\n"); |
| 211 u_uastrcpy(tzID, "PST"); |
| 212 u_uastrcpy(pattern, "yyyy/MM/dd"); |
| 213 log_verbose("%s\n", austrdup(pattern) ); |
| 214 def = udat_open(UDAT_IGNORE,UDAT_IGNORE,NULL,tzID,-1,pattern, u_strlen(patte
rn),&status); |
| 215 if(U_FAILURE(status)) |
| 216 { |
| 217 log_data_err("FAIL: error in creating the dateformat using openPattern:
%s - (Are you missing data?)\n", myErrorName(status)); |
| 218 return; |
| 219 } |
| 220 myDate=(UChar*)malloc(sizeof(UChar) * 11); |
| 221 u_uastrcpy(myDate, "1970/01/12"); |
| 222 |
| 223 aux917( def, myDate ); |
| 224 udat_close(def); |
| 225 |
| 226 u_uastrcpy(pattern, "yyyyMMdd"); |
| 227 def = udat_open(UDAT_IGNORE,UDAT_IGNORE,NULL,tzID,-1,pattern, u_strlen(patte
rn),&status); |
| 228 if(U_FAILURE(status)) |
| 229 { |
| 230 log_err("FAIL: error in creating the dateformat using openPattern: %s\n"
, myErrorName(status)); |
| 231 return; |
| 232 } |
| 233 u_uastrcpy(myDate, "19700112"); |
| 234 aux917( def, myDate ); |
| 235 udat_close(def); |
| 236 free(myDate); |
| 237 } |
| 238 |
| 239 void aux917( UDateFormat *fmt, UChar* str) |
| 240 { |
| 241 int32_t resultlength, resultlengthneeded; |
| 242 UErrorCode status = U_ZERO_ERROR; |
| 243 UChar* formatted=NULL; |
| 244 UChar *pat=NULL; |
| 245 UDate d1=1000000000.0; |
| 246 |
| 247 resultlength=0; |
| 248 resultlengthneeded=udat_toPattern(fmt, TRUE, NULL, resultlength, &status); |
| 249 if(status==U_BUFFER_OVERFLOW_ERROR) |
| 250 { |
| 251 status=U_ZERO_ERROR; |
| 252 resultlength=resultlengthneeded + 1; |
| 253 pat=(UChar*)malloc(sizeof(UChar) * (resultlength)); |
| 254 udat_toPattern(fmt, TRUE, pat, resultlength, &status); |
| 255 } |
| 256 if(U_FAILURE(status)){ |
| 257 log_err("failure in retrieving the pattern: %s\n", myErrorName(status)); |
| 258 } |
| 259 log_verbose("pattern: %s\n", austrdup(pat) ); |
| 260 |
| 261 status = U_ZERO_ERROR; |
| 262 formatted = myFormatit(fmt, d1); |
| 263 if( u_strcmp(formatted,str)!=0) { |
| 264 log_err("Fail: Want %s Got: %s\n", austrdup(str), austrdup(formatted) )
; |
| 265 } |
| 266 free(pat); |
| 267 } |
| 268 |
| 269 /** |
| 270 * @bug 4060212 |
| 271 */ |
| 272 void Test4060212() |
| 273 { |
| 274 int32_t pos; |
| 275 UCalendar *cal; |
| 276 UDateFormat *formatter, *fmt; |
| 277 UErrorCode status = U_ZERO_ERROR; |
| 278 UDate myDate; |
| 279 UChar *myString; |
| 280 UChar dateString[30], pattern[20], tzID[4]; |
| 281 u_uastrcpy(dateString, "1995-040.05:01:29 -8"); |
| 282 u_uastrcpy(pattern, "yyyy-DDD.hh:mm:ss z"); |
| 283 |
| 284 log_verbose( "dateString= %s Using yyyy-DDD.hh:mm:ss\n", austrdup(dateString
) ); |
| 285 status = U_ZERO_ERROR; |
| 286 u_uastrcpy(tzID, "PST"); |
| 287 |
| 288 formatter = udat_open(UDAT_IGNORE,UDAT_IGNORE,"en_US",tzID,-1,pattern, u_str
len(pattern), &status); |
| 289 pos=0; |
| 290 myDate = udat_parse(formatter, dateString, u_strlen(dateString), &pos, &stat
us); |
| 291 |
| 292 |
| 293 fmt = udat_open(UDAT_FULL,UDAT_LONG ,NULL, tzID, -1, NULL, 0, &status); |
| 294 if(U_FAILURE(status)) |
| 295 { |
| 296 log_data_err("FAIL: error in creating the dateformat using default date
and time style: %s - (Are you missing data?)\n", |
| 297 myErrorName(status) ); |
| 298 return; |
| 299 } |
| 300 myString = myFormatit(fmt, myDate); |
| 301 cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_GREGORIAN, &status); |
| 302 if(U_FAILURE(status)){ |
| 303 log_err("FAIL: error in ucal_open caldef : %s\n", myErrorName(status)); |
| 304 } |
| 305 ucal_setMillis(cal, myDate, &status); |
| 306 if ((ucal_get(cal, UCAL_DAY_OF_YEAR, &status) != 40)){ |
| 307 log_err("Fail: Got %d Expected 40\n", ucal_get(cal, UCAL_DAY_OF_YEAR, &
status)); |
| 308 } |
| 309 |
| 310 udat_close(formatter); |
| 311 ucal_close(cal); |
| 312 udat_close(fmt); |
| 313 |
| 314 } |
| 315 |
| 316 /** |
| 317 * @bug 4061287 |
| 318 */ |
| 319 void Test4061287() |
| 320 { |
| 321 UBool ok; |
| 322 int32_t pos; |
| 323 UDateFormat *df; |
| 324 UErrorCode status = U_ZERO_ERROR; |
| 325 UDate myDate; |
| 326 UChar pattern[21], dateString[11]; |
| 327 |
| 328 u_uastrcpy(dateString, "35/13/1971"); |
| 329 u_uastrcpy(pattern, "dd/mm/yyyy"); |
| 330 status = U_ZERO_ERROR; |
| 331 log_verbose("Testing parsing by changing the attribute lenient\n"); |
| 332 df = udat_open(UDAT_IGNORE,UDAT_IGNORE,NULL,NULL,0,pattern, u_strlen(pattern
),&status); |
| 333 if(U_FAILURE(status)){ |
| 334 log_data_err("ERROR: failure in open pattern of test4061287: %s - (Are y
ou missing data?)\n", myErrorName(status)); |
| 335 return; |
| 336 } |
| 337 |
| 338 pos=0; |
| 339 |
| 340 udat_setLenient(df, FALSE); |
| 341 ok=udat_isLenient(df); |
| 342 if(ok==TRUE) |
| 343 log_err("setLenient nor working\n"); |
| 344 ok = FALSE; |
| 345 myDate = udat_parse(df, dateString, u_strlen(dateString), &pos, &status); |
| 346 if(U_FAILURE(status)) |
| 347 ok = TRUE; |
| 348 if(ok!=TRUE) |
| 349 log_err("Fail: Lenient not working: does lenient parsing in spite of set
ting Leninent as FALSE "); |
| 350 |
| 351 udat_close(df); |
| 352 |
| 353 } |
| 354 |
| 355 |
| 356 |
| 357 /* The java.text.DateFormat.parse(String) method expects for the |
| 358 US locale a string formatted according to mm/dd/yy and parses it |
| 359 correctly. |
| 360 |
| 361 When given a string mm/dd/yyyy it only parses up to the first |
| 362 two y's, typically resulting in a date in the year 1919. |
| 363 |
| 364 Please extend the parsing method(s) to handle strings with |
| 365 four-digit year values (probably also applicable to various |
| 366 other locales. */ |
| 367 /** |
| 368 * @bug 4073003 |
| 369 */ |
| 370 void Test4073003() |
| 371 { |
| 372 int32_t pos,i; |
| 373 UDate d,dd; |
| 374 UChar *datestr; |
| 375 UChar temp[15]; |
| 376 UErrorCode status = U_ZERO_ERROR; |
| 377 UDateFormat *fmt; |
| 378 UChar *result, *result2; |
| 379 const char* tests [] = { |
| 380 "12/25/61", |
| 381 "12/25/1961", |
| 382 "4/3/1999", |
| 383 "4/3/99" |
| 384 }; |
| 385 |
| 386 fmt= udat_open(UDAT_SHORT,UDAT_SHORT ,NULL, NULL, 0, NULL, 0, &status); |
| 387 if(U_FAILURE(status)) |
| 388 { |
| 389 log_data_err("FAIL: error in creating the dateformat using short date an
d time style: %s (Are you missing data?)\n", |
| 390 myErrorName(status)); |
| 391 return; |
| 392 } |
| 393 u_uastrcpy(temp, "m/D/yy"); |
| 394 udat_applyPattern(fmt, FALSE, temp, u_strlen(temp)); |
| 395 |
| 396 for(i= 0; i < 4; i+=2) { |
| 397 status=U_ZERO_ERROR; |
| 398 datestr=(UChar*)malloc(sizeof(UChar) * (strlen(tests[i])+1)); |
| 399 u_uastrcpy(datestr, tests[i]); |
| 400 |
| 401 pos=0; |
| 402 d = udat_parse(fmt, datestr, u_strlen(datestr), &pos, &status); |
| 403 if(U_FAILURE(status)){ |
| 404 log_err("ERROR : in test 4073003: %s\n", myErrorName(status)); |
| 405 } |
| 406 |
| 407 free(datestr); |
| 408 datestr=(UChar*)malloc(sizeof(UChar) * (strlen(tests[i+1])+1)); |
| 409 u_uastrcpy(datestr, tests[i+1]); |
| 410 |
| 411 pos=0; |
| 412 status=U_ZERO_ERROR; |
| 413 dd = udat_parse(fmt, datestr, u_strlen(datestr), &pos, &status); |
| 414 if(U_FAILURE(status)){ |
| 415 log_err("ERROR : in test 4073003: %s\n", myErrorName(status)); |
| 416 } |
| 417 free(datestr); |
| 418 |
| 419 result =myFormatit(fmt, d); |
| 420 result2 =myFormatit(fmt, dd); |
| 421 if(!result || !result2) { |
| 422 log_data_err("Fail: could not format - exitting test\n"); |
| 423 return; |
| 424 } |
| 425 if (u_strcmp(result, result2)!=0){ |
| 426 log_err("Fail: %s != %s\n", austrdup(result), austrdup(result2) ); |
| 427 } |
| 428 else{ |
| 429 log_verbose("Ok: %s == %s\n", austrdup(result), austrdup(result2) ); |
| 430 } |
| 431 |
| 432 } |
| 433 udat_close(fmt); |
| 434 } |
| 435 |
| 436 /** |
| 437 * @bug 4162071 |
| 438 **/ |
| 439 void Test4162071() |
| 440 { |
| 441 int32_t pos; |
| 442 UDate x; |
| 443 UErrorCode status = U_ZERO_ERROR; |
| 444 UDateFormat *df; |
| 445 UChar datestr[30]; |
| 446 UChar format[50]; |
| 447 u_uastrcpy(datestr, "Thu, 30-Jul-1999 11:51:14 GMT"); |
| 448 u_uastrcpy(format, "EEE', 'dd-MMM-yyyy HH:mm:ss z"); /* RFC 822/1123 */ |
| 449 status = U_ZERO_ERROR; |
| 450 /* Can't hardcode the result to assume the default locale is "en_US". */ |
| 451 df = udat_open(UDAT_IGNORE,UDAT_IGNORE,"en_US",NULL,0,format, u_strlen(forma
t),&status); |
| 452 if(U_FAILURE(status)){ |
| 453 log_data_err("ERROR: couldn't create date format: %s\n", myErrorName(sta
tus)); |
| 454 return; |
| 455 } |
| 456 pos=0; |
| 457 x = udat_parse(df, datestr, u_strlen(datestr), &pos, &status); |
| 458 if(U_FAILURE(status)){ |
| 459 log_data_err("ERROR : parse format %s fails : %s\n", austrdup(format),
myErrorName(status)); |
| 460 } |
| 461 else{ |
| 462 log_verbose("Parse format \"%s \" ok.\n", austrdup(format) ); |
| 463 } |
| 464 /*log_verbose("date= %s\n", austrdup(myFormatit(df, x)) );*/ |
| 465 udat_close(df); |
| 466 } |
| 467 |
| 468 void Test714(void) |
| 469 { |
| 470 UDate d=978103543000.0; |
| 471 UChar temp[20]; |
| 472 UErrorCode status = U_ZERO_ERROR; |
| 473 UDateFormat *fmt; |
| 474 UChar *result; |
| 475 const char* expect = "7:25:43 AM"; |
| 476 |
| 477 ctest_setTimeZone(NULL, &status); |
| 478 |
| 479 fmt= udat_open(UDAT_MEDIUM,UDAT_NONE ,"en_US_CA", NULL, -1, NULL, 0, &status
); |
| 480 if(U_FAILURE(status)) |
| 481 { |
| 482 log_data_err("FAIL: error in creating the dateformat using medium time s
tyle and NO date style: %s (Are you missing data?)\n", |
| 483 myErrorName(status)); |
| 484 return; |
| 485 } |
| 486 result =myFormatit(fmt, d); |
| 487 if(!result) { |
| 488 log_data_err("Fail: could not format - exitting test\n"); |
| 489 return; |
| 490 } |
| 491 u_uastrcpy(temp, expect); |
| 492 if (u_strcmp(result, temp)!=0){ |
| 493 log_err("Fail: %s != %s\n", austrdup(result), expect); |
| 494 } |
| 495 else{ |
| 496 log_verbose("Ok: %s == %s\n", austrdup(result), expect ); |
| 497 } |
| 498 |
| 499 udat_close(fmt); |
| 500 |
| 501 ctest_resetTimeZone(); |
| 502 } |
| 503 |
| 504 enum { DATE_TEXT_MAX_CHARS = 64 }; |
| 505 static const UChar zonePST[] = { 0x50,0x53,0x54,0 }; /* "PST" */ |
| 506 static const UDate july022008 = 1215000001979.0; /* 02 July 2008 5:00:01.979 AM
PDT (near ICU 4.0 release date :-) */ |
| 507 static const double dayMillisec = 8.64e+07; |
| 508 |
| 509 static const UChar dMyGGGPattern[] = { 0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79
,0x79,0x79,0x79,0x20,0x47,0x47,0x47,0 }; /* "dd MMM yyyy GGG" */ |
| 510 static const UChar dMyGGGGGPattern[] = { 0x64,0x64,0x20,0x4D,0x4D,0x4D,0x20,0x79
,0x79,0x79,0x79,0x20,0x47,0x47,0x47,0x47,0x47,0 }; /* "dd MMM yyyy GGGGG" */ |
| 511 static const UChar dMyGGGText[] = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32
,0x30,0x30,0x38,0x20,0x41,0x44,0 }; /* "02 Jul 2008 AD" */ |
| 512 static const UChar dMyGGGGGText[] = { 0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32
,0x30,0x30,0x38,0x20,0x41,0 }; /* "02 Jul 2008 A" */ |
| 513 static const UChar edMyPattern[] = { 0x65,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D
,0x20,0x79,0x79,0x79,0x79,0 }; /* "e dd MMM yyyy" */ |
| 514 static const UChar eedMyPattern[] = { 0x65,0x65,0x20,0x64,0x64,0x20,0x4D,0x4D
,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "ee dd MMM yyyy" */ |
| 515 static const UChar cdMyPattern[] = { 0x63,0x20,0x64,0x64,0x20,0x4D,0x4D,0x4D
,0x20,0x79,0x79,0x79,0x79,0 }; /* "c dd MMM yyyy" */ |
| 516 static const UChar ccdMyPattern[] = { 0x63,0x63,0x20,0x64,0x64,0x20,0x4D,0x4D
,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "cc dd MMM yyyy" */ |
| 517 static const UChar edMyText[] = { 0x34,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C
,0x20,0x32,0x30,0x30,0x38,0 }; /* "4 02 Jul 2008" */ |
| 518 static const UChar eedMyText[] = { 0x30,0x34,0x20,0x30,0x32,0x20,0x4A,0x75
,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "04 02 Jul 2008" */ |
| 519 static const UChar eeedMyPattern[] = { 0x65,0x65,0x65,0x20,0x64,0x64,0x20,0x4D
,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eee dd MMM yyyy" */ |
| 520 static const UChar EEEdMyPattern[] = { 0x45,0x45,0x45,0x20,0x64,0x64,0x20,0x4D
,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "EEE dd MMM yyyy" */ |
| 521 static const UChar EEdMyPattern[] = { 0x45,0x45,0x20,0x64,0x64,0x20,0x4D,0x4D
,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "EE dd MMM yyyy" */ |
| 522 static const UChar eeedMyText[] = { 0x57,0x65,0x64,0x20,0x30,0x32,0x20,0x4A
,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "Wed 02 Jul 2008" */ |
| 523 static const UChar eeeedMyPattern[] = { 0x65,0x65,0x65,0x65,0x20,0x64,0x64,0x20
,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eeee dd MMM yyyy" */ |
| 524 static const UChar eeeedMyText[] = { 0x57,0x65,0x64,0x6E,0x65,0x73,0x64,0x61
,0x79,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C,0x20,0x32,0x30,0x30,0x38,0 }; /* "Wedne
sday 02 Jul 2008" */ |
| 525 static const UChar eeeeedMyPattern[] = { 0x65,0x65,0x65,0x65,0x65,0x20,0x64,0x64
,0x20,0x4D,0x4D,0x4D,0x20,0x79,0x79,0x79,0x79,0 }; /* "eeeee dd MMM yyyy" */ |
| 526 static const UChar eeeeedMyText[] = { 0x57,0x20,0x30,0x32,0x20,0x4A,0x75,0x6C
,0x20,0x32,0x30,0x30,0x38,0 }; /* "W 02 Jul 2008" */ |
| 527 static const UChar ewYPattern[] = { 0x65,0x20,0x77,0x77,0x20,0x59,0x59,0x59
,0x59,0 }; /* "e ww YYYY" */ |
| 528 static const UChar cwYPattern[] = { 0x63,0x20,0x77,0x77,0x20,0x59,0x59,0x59
,0x59,0 }; /* "c ww YYYY" */ |
| 529 static const UChar ewYText[] = { 0x34,0x20,0x32,0x37,0x20,0x32,0x30,0x30
,0x38,0 }; /* "4 27 2008" */ |
| 530 static const UChar HHmmssPattern[] = { 0x48,0x48,0x3A,0x6D,0x6D,0x3A,0x73,0x73
,0 }; /* "HH:mm:ss" */ |
| 531 static const UChar HHmmssText[] = { 0x30,0x35,0x3A,0x30,0x30,0x3A,0x30,0x31
,0 }; /* "05:00:01" */ |
| 532 static const UChar ssSPattern[] = { 0x73,0x73,0x2E,0x53,0 };
/* "ss.S" */ |
| 533 static const UChar ssSText[] = { 0x30,0x31,0x2E,0x39,0 };
/* "01.9" */ |
| 534 static const UChar ssSSPattern[] = { 0x73,0x73,0x2E,0x53,0x53,0 };
/* "ss.SS" */ |
| 535 static const UChar ssSSText[] = { 0x30,0x31,0x2E,0x39,0x37,0 };
/* "01.97" */ |
| 536 |
| 537 typedef struct { |
| 538 const UChar * pattern; |
| 539 const UChar * text; |
| 540 const char * label; |
| 541 } DatePatternAndText; |
| 542 static const DatePatternAndText datePatternsAndText[] = { |
| 543 { dMyGGGPattern, dMyGGGText, "dd MMM yyyy GGG" }, |
| 544 { dMyGGGGGPattern, dMyGGGGGText, "dd MMM yyyy GGGGG" }, |
| 545 { edMyPattern, edMyText, "e dd MMM yyyy" }, |
| 546 { eedMyPattern, eedMyText, "ee dd MMM yyyy" }, |
| 547 { cdMyPattern, edMyText, "c dd MMM yyyy" }, |
| 548 { ccdMyPattern, edMyText, "cc dd MMM yyyy" }, |
| 549 { eeedMyPattern, eeedMyText, "eee dd MMM yyyy" }, |
| 550 { EEEdMyPattern, eeedMyText, "EEE dd MMM yyyy" }, |
| 551 { EEdMyPattern, eeedMyText, "EE dd MMM yyyy" }, |
| 552 { eeeedMyPattern, eeeedMyText, "eeee dd MMM yyyy" }, |
| 553 { eeeeedMyPattern, eeeeedMyText, "eeeee dd MMM yyyy" }, |
| 554 { ewYPattern, ewYText, "e ww YYYY" }, |
| 555 { cwYPattern, ewYText, "c ww YYYY" }, |
| 556 { HHmmssPattern, HHmmssText, "* HH:mm:ss" }, /* '*' at start mean
s don't check value from parse (won't be july022008) */ |
| 557 { ssSPattern, ssSText, "* ss.S" }, |
| 558 { ssSSPattern, ssSSText, "* ss.SS" }, |
| 559 { NULL, NULL, NULL } |
| 560 }; |
| 561 void Test_GEec(void) |
| 562 { |
| 563 UErrorCode status = U_ZERO_ERROR; |
| 564 UDateFormat * dtfmt = udat_open(UDAT_LONG, UDAT_LONG, "en", zonePST, -1, NUL
L, 0, &status); |
| 565 if ( U_SUCCESS(status) ) { |
| 566 const DatePatternAndText *patTextPtr; |
| 567 for (patTextPtr = datePatternsAndText; patTextPtr->pattern != NULL; ++pa
tTextPtr) { |
| 568 UChar dmyGnText[DATE_TEXT_MAX_CHARS]; |
| 569 char byteText[3*DATE_TEXT_MAX_CHARS]; |
| 570 int32_t dmyGnTextLen; |
| 571 UDate dateResult; |
| 572 |
| 573 udat_applyPattern(dtfmt, FALSE, patTextPtr->pattern, -1); |
| 574 dmyGnTextLen = udat_format(dtfmt, july022008, dmyGnText, DATE_TEXT_M
AX_CHARS, NULL, &status); |
| 575 if ( U_FAILURE(status) ) { |
| 576 log_err("FAIL: udat_format with %s: %s\n", patTextPtr->label, my
ErrorName(status) ); |
| 577 status = U_ZERO_ERROR; |
| 578 } else if ( u_strcmp(dmyGnText, patTextPtr->text) != 0 ) { |
| 579 log_err("FAIL: udat_format with %s: wrong UChar[] result %s\n",
patTextPtr->label, u_austrcpy(byteText,dmyGnText) ); |
| 580 } |
| 581 |
| 582 dateResult = udat_parse(dtfmt, patTextPtr->text, -1, NULL, &status);
/* no time, dateResult != july022008 by some hours */ |
| 583 if ( U_FAILURE(status) ) { |
| 584 log_err("FAIL: udat_parse with %s: %s\n", patTextPtr->label, myE
rrorName(status) ); |
| 585 status = U_ZERO_ERROR; |
| 586 } else if ( patTextPtr->label[0] != '*' && july022008 - dateResult >
dayMillisec ) { |
| 587 log_err("FAIL: udat_parse with %s: wrong UDate result\n", patTex
tPtr->label ); |
| 588 } |
| 589 } |
| 590 udat_close(dtfmt); |
| 591 } else { |
| 592 log_data_err("FAIL: udat_open fails: %s (Are you missing data?)\n", myEr
rorName(status)); |
| 593 } |
| 594 } |
| 595 |
| 596 /*INTERNAL FUNCTION USED */ |
| 597 |
| 598 UChar* myFormatit(UDateFormat* datdef, UDate d1) |
| 599 { |
| 600 UChar *result1=NULL; |
| 601 int32_t resultlength, resultlengthneeded; |
| 602 UErrorCode status = U_ZERO_ERROR; |
| 603 |
| 604 resultlength=0; |
| 605 resultlengthneeded=udat_format(datdef, d1, NULL, resultlength, NULL, &status
); |
| 606 if(status==U_BUFFER_OVERFLOW_ERROR) |
| 607 { |
| 608 status=U_ZERO_ERROR; |
| 609 resultlength=resultlengthneeded+1; |
| 610 /*result1=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /*this leaks*/ |
| 611 result1=(UChar*)ctst_malloc(sizeof(UChar) * resultlength); /*this won't*
/ |
| 612 udat_format(datdef, d1, result1, resultlength, NULL, &status); |
| 613 } |
| 614 if(U_FAILURE(status)) |
| 615 { |
| 616 log_err("FAIL: Error in formatting using udat_format(.....): %s\n", myEr
rorName(status)); |
| 617 return 0; |
| 618 } |
| 619 |
| 620 |
| 621 return result1; |
| 622 |
| 623 } |
| 624 |
| 625 #endif /* #if !UCONFIG_NO_FORMATTING */ |
| 626 |
| 627 /*eof*/ |
OLD | NEW |