]>
git.saurik.com Git - apple/icu.git/blob - icuSources/test/cintltst/cdtrgtst.c
1 /********************************************************************
3 * Copyright (c) 1997-2003, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6 /********************************************************************************
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 *********************************************************************************
16 /* REGRESSION TEST FOR DATE FORMAT */
18 #include "unicode/utypes.h"
20 #if !UCONFIG_NO_FORMATTING
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"
31 void addDateForRgrTest(TestNode
** root
);
33 void addDateForRgrTest(TestNode
** root
)
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");
50 int32_t resultlength
, resultlengthneeded
;
51 UChar
*fmdt
, *todayS
, *rt
;
57 UErrorCode status
= U_ZERO_ERROR
;
59 log_verbose("Testing date format and parse function in regression test\n");
60 today
= ucal_getNow();
62 df
= udat_open(UDAT_DEFAULT
,UDAT_DEFAULT
,"en_US", NULL
, 0, NULL
, 0, &status
);
65 log_err("FAIL: error in creating the dateformat using default date and time style : %s\n", myErrorName(status
));
69 resultlengthneeded
=udat_toPattern(df
, TRUE
, NULL
, resultlength
, &status
);
70 if(status
==U_BUFFER_OVERFLOW_ERROR
)
73 resultlength
=resultlengthneeded
+ 1;
74 pat
=(UChar
*)malloc(sizeof(UChar
) * resultlength
);
75 udat_toPattern(df
, TRUE
, pat
, resultlength
, &status
);
78 log_verbose("pattern: %s\n", austrdup(pat
));
81 fmdt
= myFormatit(df
, today
);
83 log_verbose("today: %s\n", austrdup(fmdt
));
85 log_data_err("ERROR: couldn't format, exitting test");
89 temp
=(UChar
*)malloc(sizeof(UChar
) * 10);
90 u_uastrcpy(temp
, "M yyyy dd");
91 udat_applyPattern(df
, TRUE
, temp
, u_strlen(temp
));
93 todayS
=myFormatit(df
, today
);
94 log_verbose("After teh pattern is applied\n today: %s\n", austrdup(todayS
) );
96 d1
=udat_parse(df
, todayS
, u_strlen(todayS
), &parsepos
, &status
);
99 log_err("FAIL: Error in parsing using udat_parse(.....): %s\n", myErrorName(status
));
102 rt
=myFormatit(df
, d1
);
103 log_verbose("today: %s\n", austrdup(rt
) );
105 log_verbose("round trip: %s\n", austrdup(rt
) );
107 if(u_strcmp(rt
, todayS
)!=0) {
108 log_err("Fail: Want %s Got %s\n", austrdup(todayS
), austrdup(rt
) );
111 log_verbose("Pass: parse and format working fine\n");
122 * Verify the function of the [s|g]et2DigitYearStart() API.
131 UChar
*gotdate
, *expdate
;
134 UErrorCode status
= U_ZERO_ERROR
;
135 const char* strings
[] = {
142 log_verbose("Testing s[get] 2 digit year start regressively\n");
143 cal
=ucal_open(NULL
, 0, "en_US", UCAL_GREGORIAN
, &status
);
144 if(U_FAILURE(status
)){
145 log_err("error in ucal_open caldef : %s\n", myErrorName(status
));
147 ucal_setDateTime(cal
, 1809, UCAL_DECEMBER
, 25, 17, 40, 30, &status
);
148 d
[0]=ucal_getMillis(cal
, &status
);
149 if(U_FAILURE(status
)){
150 log_err("Error: failure in get millis: %s\n", myErrorName(status
));
152 ucal_setDateTime(cal
, 1909, UCAL_DECEMBER
, 24, 17, 40, 30, &status
);
153 d
[1]=ucal_getMillis(cal
, &status
);
154 ucal_setDateTime(cal
, 1861, UCAL_DECEMBER
, 26, 17, 40, 30, &status
);
155 d
[2]=ucal_getMillis(cal
, &status
);
156 ucal_setDateTime(cal
, 1999, UCAL_DECEMBER
, 27, 17, 40, 30, &status
);
157 d
[3]=ucal_getMillis(cal
, &status
);
160 u_uastrcpy(pat
, "yyMMdd");
161 def
= udat_open(UDAT_IGNORE
,UDAT_IGNORE
,NULL
, NULL
, 0, pat
, u_strlen(pat
), &status
);
162 if(U_FAILURE(status
))
164 log_err("FAIL: error in creating the dateformat using u_openPattern(): %s\n", myErrorName(status
));
168 udat_set2DigitYearStart(def
, start
, &status
);
169 if(U_FAILURE(status
))
170 log_err("ERROR: in setTwoDigitStartDate: %s\n", myErrorName(status
));
171 if( (udat_get2DigitYearStart(def
, &status
) != start
))
172 log_err("ERROR: get2DigitYearStart broken\n");
175 for(i
= 0; i
< 4; ++i
) {
176 u_uastrcpy(s
, strings
[i
]);
178 got
= udat_parse(def
, s
, u_strlen(s
), 0, &status
);
179 gotdate
=myFormatit(def
, got
);
180 expdate
=myFormatit(def
, exp
);
182 if(u_strcmp(gotdate
, expdate
) !=0){
183 log_err("set2DigitYearStart broken for %s \n got: %s, expected: %s\n", austrdup(s
),
184 austrdup(gotdate
), austrdup(expdate
) );
200 UErrorCode status
= U_ZERO_ERROR
;
204 log_verbose("Testing apply pattern and to pattern regressively\n");
205 u_uastrcpy(tzID
, "PST");
206 pattern
=(UChar
*)malloc(sizeof(UChar
) * 11);
207 u_uastrcpy(pattern
, "yyyy/MM/dd");
208 log_verbose("%s\n", austrdup(pattern
) );
209 def
= udat_open(UDAT_IGNORE
,UDAT_IGNORE
,NULL
,tzID
,-1,pattern
, u_strlen(pattern
),&status
);
210 if(U_FAILURE(status
))
212 log_err("FAIL: error in creating the dateformat using openPattern: %s\n", myErrorName(status
));
215 myDate
=(UChar
*)malloc(sizeof(UChar
) * 11);
216 u_uastrcpy(myDate
, "1970/01/12");
218 aux917( def
, myDate
);
221 u_uastrcpy(pattern
, "yyyyMMdd");
222 def
= udat_open(UDAT_IGNORE
,UDAT_IGNORE
,NULL
,NULL
,0,pattern
, u_strlen(pattern
),&status
);
223 if(U_FAILURE(status
))
225 log_err("FAIL: error in creating the dateformat using openPattern: %s\n", myErrorName(status
));
228 u_uastrcpy(myDate
, "19700112");
229 aux917( def
, myDate
);
236 void aux917( UDateFormat
*fmt
, UChar
* str
)
238 int32_t resultlength
, resultlengthneeded
;
239 UErrorCode status
= U_ZERO_ERROR
;
240 UChar
* formatted
=NULL
;
242 UDate d1
=1000000000.0;
245 resultlengthneeded
=udat_toPattern(fmt
, TRUE
, NULL
, resultlength
, &status
);
246 if(status
==U_BUFFER_OVERFLOW_ERROR
)
249 resultlength
=resultlengthneeded
+ 1;
250 pat
=(UChar
*)malloc(sizeof(UChar
) * (resultlength
));
251 udat_toPattern(fmt
, TRUE
, pat
, resultlength
, &status
);
253 if(U_FAILURE(status
)){
254 log_err("failure in retrieving the pattern: %s\n", myErrorName(status
));
256 log_verbose("pattern: %s\n", austrdup(pat
) );
258 status
= U_ZERO_ERROR
;
259 formatted
= myFormatit(fmt
, d1
);
260 if( u_strcmp(formatted
,str
)!=0) {
261 log_err("Fail: Want %s Got: %s\n", austrdup(str
), austrdup(formatted
) );
273 UDateFormat
*formatter
, *fmt
;
274 UErrorCode status
= U_ZERO_ERROR
;
277 UChar dateString
[30], pattern
[20], tzID
[4];
278 u_uastrcpy(dateString
, "1995-040.05:01:29 -8");
279 u_uastrcpy(pattern
, "yyyy-DDD.hh:mm:ss z");
281 log_verbose( "dateString= %s Using yyyy-DDD.hh:mm:ss\n", austrdup(dateString
) );
282 status
= U_ZERO_ERROR
;
283 u_uastrcpy(tzID
, "PST");
285 formatter
= udat_open(UDAT_IGNORE
,UDAT_IGNORE
,"en_US",tzID
,-1,pattern
, u_strlen(pattern
), &status
);
287 myDate
= udat_parse(formatter
, dateString
, u_strlen(dateString
), &pos
, &status
);
290 fmt
= udat_open(UDAT_FULL
,UDAT_LONG
,NULL
, tzID
, -1, NULL
, 0, &status
);
291 if(U_FAILURE(status
))
293 log_err("FAIL: error in creating the dateformat using default date and time style: %s\n",
294 myErrorName(status
) );
297 myString
= myFormatit(fmt
, myDate
);
298 cal
=ucal_open(tzID
, u_strlen(tzID
), "en_US", UCAL_GREGORIAN
, &status
);
299 if(U_FAILURE(status
)){
300 log_err("FAIL: error in ucal_open caldef : %s\n", myErrorName(status
));
302 ucal_setMillis(cal
, myDate
, &status
);
303 if ((ucal_get(cal
, UCAL_DAY_OF_YEAR
, &status
) != 40)){
304 log_err("Fail: Got %d Expected 40\n", ucal_get(cal
, UCAL_DAY_OF_YEAR
, &status
));
307 udat_close(formatter
);
321 UErrorCode status
= U_ZERO_ERROR
;
323 UChar pattern
[21], dateString
[11];
325 u_uastrcpy(dateString
, "35/13/1971");
326 u_uastrcpy(pattern
, "dd/mm/yyyy");
327 status
= U_ZERO_ERROR
;
328 log_verbose("Testing parsing by changing the attribute lenient\n");
329 df
= udat_open(UDAT_IGNORE
,UDAT_IGNORE
,NULL
,NULL
,0,pattern
, u_strlen(pattern
),&status
);
330 if(U_FAILURE(status
)){
331 log_err("ERROR: failure in open pattern of test4061287: %s\n", myErrorName(status
));
337 udat_setLenient(df
, FALSE
);
338 ok
=udat_isLenient(df
);
340 log_err("setLenient nor working\n");
342 myDate
= udat_parse(df
, dateString
, u_strlen(dateString
), &pos
, &status
);
343 if(U_FAILURE(status
))
346 log_err("Fail: Lenient not working: does lenient parsing in spite of setting Leninent as FALSE ");
354 /* The java.text.DateFormat.parse(String) method expects for the
355 US locale a string formatted according to mm/dd/yy and parses it
358 When given a string mm/dd/yyyy it only parses up to the first
359 two y's, typically resulting in a date in the year 1919.
361 Please extend the parsing method(s) to handle strings with
362 four-digit year values (probably also applicable to various
373 UErrorCode status
= U_ZERO_ERROR
;
375 UChar
*result
, *result2
;
376 const char* tests
[] = {
383 fmt
= udat_open(UDAT_SHORT
,UDAT_SHORT
,NULL
, NULL
, 0, NULL
, 0, &status
);
384 if(U_FAILURE(status
))
386 log_err("FAIL: error in creating the dateformat using short date and time style: %s\n",
387 myErrorName(status
));
390 u_uastrcpy(temp
, "m/D/yy");
391 udat_applyPattern(fmt
, TRUE
, temp
, u_strlen(temp
));
393 for(i
= 0; i
< 4; i
+=2) {
395 datestr
=(UChar
*)malloc(sizeof(UChar
) * (strlen(tests
[i
])+1));
396 u_uastrcpy(datestr
, tests
[i
]);
399 d
= udat_parse(fmt
, datestr
, u_strlen(datestr
), &pos
, &status
);
400 if(U_FAILURE(status
)){
401 log_err("ERROR : in test 4073003: %s\n", myErrorName(status
));
405 datestr
=(UChar
*)malloc(sizeof(UChar
) * (strlen(tests
[i
+1])+1));
406 u_uastrcpy(datestr
, tests
[i
+1]);
410 dd
= udat_parse(fmt
, datestr
, u_strlen(datestr
), &pos
, &status
);
411 if(U_FAILURE(status
)){
412 log_err("ERROR : in test 4073003: %s\n", myErrorName(status
));
416 result
=myFormatit(fmt
, d
);
417 result2
=myFormatit(fmt
, dd
);
418 if(!result
|| !result2
) {
419 log_data_err("Fail: could not format - exitting test");
422 if (u_strcmp(result
, result2
)!=0){
423 log_err("Fail: %s != %s\n", austrdup(result
), austrdup(result2
) );
426 log_verbose("Ok: %s == %s\n", austrdup(result
), austrdup(result2
) );
442 UErrorCode status
= U_ZERO_ERROR
;
446 u_uastrcpy(datestr
, "Thu, 30-Jul-1999 11:51:14 GMT");
447 u_uastrcpy(format
, "EEE', 'dd-MMM-yyyy HH:mm:ss z"); /* RFC 822/1123 */
448 status
= U_ZERO_ERROR
;
449 /* Can't hardcode the result to assume the default locale is "en_US". */
450 df
= udat_open(UDAT_IGNORE
,UDAT_IGNORE
,"en_US",NULL
,0,format
, u_strlen(format
),&status
);
451 if(U_FAILURE(status
)){
452 log_data_err("ERROR: couldn't create date format: %s\n", myErrorName(status
));
456 x
= udat_parse(df
, datestr
, u_strlen(datestr
), &pos
, &status
);
457 if(U_FAILURE(status
)){
458 log_data_err("ERROR : parse format %s fails : %s\n", austrdup(format
), myErrorName(status
));
461 log_verbose("Parse format \"%s \" ok.\n", austrdup(format
) );
463 log_verbose("date= %s\n", austrdup(myFormatit(df
, x
)) );
469 UDate d
=978103543000.0;
471 UErrorCode status
= U_ZERO_ERROR
;
474 const char* expect
= "7:25:43 AM";
476 ctest_setTimeZone(NULL
, &status
);
478 fmt
= udat_open(UDAT_MEDIUM
,UDAT_NONE
,"en_US_CA", NULL
, -1, NULL
, 0, &status
);
479 if(U_FAILURE(status
))
481 log_err("FAIL: error in creating the dateformat using medium time style and NO date style: %s\n",
482 myErrorName(status
));
485 result
=myFormatit(fmt
, d
);
487 log_data_err("Fail: could not format - exitting test\n");
490 u_uastrcpy(temp
, expect
);
491 if (u_strcmp(result
, temp
)!=0){
492 log_err("Fail: %s != %s\n", austrdup(result
), expect
);
495 log_verbose("Ok: %s == %s\n", austrdup(result
), expect
);
500 ctest_resetTimeZone();
503 /*INTERNAL FUNCTION USED */
505 UChar
* myFormatit(UDateFormat
* datdef
, UDate d1
)
508 int32_t resultlength
, resultlengthneeded
;
509 UErrorCode status
= U_ZERO_ERROR
;
512 resultlengthneeded
=udat_format(datdef
, d1
, NULL
, resultlength
, NULL
, &status
);
513 if(status
==U_BUFFER_OVERFLOW_ERROR
)
516 resultlength
=resultlengthneeded
+1;
517 /*result1=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /*this leaks*/
518 result1
=(UChar
*)ctst_malloc(sizeof(UChar
) * resultlength
); /*this won't*/
519 udat_format(datdef
, d1
, result1
, resultlength
, NULL
, &status
);
521 if(U_FAILURE(status
))
523 log_err("FAIL: Error in formatting using udat_format(.....): %s\n", myErrorName(status
));
532 #endif /* #if !UCONFIG_NO_FORMATTING */