1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius * Copyright (c) 1997-2014, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************************** 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File CDTDPTST.C 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Madhu Katragadda Creation 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************* 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* INDEPTH TEST FOR DATE FORMAT */ 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udat.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucal.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unum.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cdtdptst.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cformtst.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addDtFrDepTest(TestNode** root); 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addDtFrDepTest(TestNode** root) 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestTwoDigitYearDSTParse, "tsformat/cdtdptst/TestTwoDigitYearDSTParse"); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestPartialParse994, "tsformat/cdtdptst/TestPartialParse994"); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestRunTogetherPattern985, "tsformat/cdtdptst/TestRunTogetherPattern985"); 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCzechMonths459, "tsformat/cdtdptst/TestCzechMonths459"); 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestQuotePattern161, "tsformat/cdtdptst/TestQuotePattern161"); 41f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius addTest(root, &TestBooleanAttributes, "tsformat/cdtdptst/TestBooleanAttributes"); 42f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of 2-digit years. 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestTwoDigitYearDSTParse() 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *fullFmt, *fmt; 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern; 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *s; 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * (strlen("EEE MMM dd HH:mm:ss.SSS zzz yyyy G")+1 )); 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "EEE MMM dd HH:mm:ss.SSS zzz yyyy G"); 6254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fullFmt= udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern),&status); 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("FAIL: Error in creating a date format using udat_openPattern %s - (Are you missing data?)\n", 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru else { 686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_verbose("PASS: creating dateformat using udat_openPattern() succesful\n"); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru u_uastrcpy(pattern, "dd-MMM-yy h:mm:ss 'o''clock' a z"); 7154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fmt= udat_open(UDAT_PATTERN,UDAT_PATTERN,"en_US", NULL, 0,pattern, u_strlen(pattern), &status); 726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru s=(UChar*)malloc(sizeof(UChar) * (strlen("03-Apr-04 2:20:47 o'clock AM PST")+1) ); 756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru u_uastrcpy(s, "03-Apr-04 2:20:47 o'clock AM PST"); 766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru pos=0; 776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru d = udat_parse(fmt, s, u_strlen(s), &pos, &status); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("FAIL: Could not parse \"%s\"\n", austrdup(s)); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UCalendar *cal = ucal_open(NULL, 0, uloc_getDefault(), UCAL_TRADITIONAL, &status); 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "FAIL: Could not open calendar: %s\n", u_errorName(status)); 846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru int32_t h; 866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ucal_setMillis(cal, d, &status); 876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru h = ucal_get(cal, UCAL_HOUR_OF_DAY, &status); 886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("FAIL: Some calendar operations failed"); 906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else if (h != 2) { 916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("FAIL: Parse of \"%s\" returned HOUR_OF_DAY %d\n", 926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru austrdup(s), h); 936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ucal_close(cal); 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru udat_close(fullFmt); 996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru udat_close(fmt); 1006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru free(s); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pattern); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that strings which contain incomplete specifications are parsed 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * correctly. In some instances, this means not being parsed at all, and 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * returning an appropriate error. 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestPartialParse994() 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *f; 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *s; 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *fmtChars; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d, null; 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru null=0; 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* f = udat_open(UDAT_DEFAULT, UDAT_SHORT, NULL, NULL, 0, &status); */ 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = udat_open(UDAT_DEFAULT, UDAT_SHORT, "en_US", NULL, 0, NULL, 0,&status); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: ErrorCode received during test: %s (Are you missing data?)\n", myErrorName(status)); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s=(UChar*)malloc(sizeof(UChar) * (strlen("01/01/1997 10:11:42 AM")+1) ); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(s, "01/01/1997 10:11:42 AM"); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos=0; 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = udat_parse(f, s, u_strlen(s), &pos, &status); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: could not parse - exitting"); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmtChars = myDateFormat(f, d); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fmtChars) { 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n", fmtChars); 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: could not format \n"); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01 10:11:42", d); 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01 10:", null); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01 10", null); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01 ", null); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/01", null); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(f); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(s); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid tryPat994(UDateFormat* format, const char* pattern, const char* s, UDate expected) 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *f; 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str, *pat; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate null=0; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (strlen(s) + 1) ); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, s); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat=(UChar*)malloc(sizeof(UChar) * (strlen(pattern) + 1) ); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pat, pattern); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pattern : %s ; String : %s\n", austrdup(pat), austrdup(str)); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_applyPattern(format, FALSE, pat, u_strlen(pat)); 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos=0; 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = udat_parse(format, str, u_strlen(str), &pos, &status); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || date == null) { 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("ParseException: : %s\n", myErrorName(status) ); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expected != null) 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected: %s\n", austrdup(myDateFormat(format, expected)) ); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f=myDateFormat(format, date); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose(" parse( %s ) -> %s\n", austrdup(str), austrdup(f)); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expected == null || date != expected) 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected null for \"%s\"\n", s); 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(f, str) !=0) 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected : %s\n", austrdup(str) ); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pat); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators. 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestRunTogetherPattern985() 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern=NULL, *now=NULL, *then=NULL; 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *format; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date1, date2; 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * (strlen("yyyyMMddHHmmssSSS")+1) ); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "yyyyMMddHHmmssSSS"); 20554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius format = udat_open(UDAT_PATTERN, UDAT_PATTERN, NULL, NULL, 0,pattern, u_strlen(pattern), &status); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 20750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("FAIL: Error in date format construction with pattern: %s - (Are you missing data?)\n", myErrorName(status)); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date1 = ucal_getNow(); 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru now=myDateFormat(format, date1); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n", austrdup(now) ); 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = 0; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date2 = udat_parse(format, now, u_strlen(now), &pos, &status); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (date2 == 0) log_verbose("Parse stopped at : %d\n", pos); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else then=myDateFormat(format, date2); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n", austrdup(then) ); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(date2 == date1)) log_err("FAIL\n"); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(format); 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pattern); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the handling of Czech June and July, which have the unique attribute that 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * one is a proper prefix substring of the other. 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestCzechMonths459() 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lneed, pos; 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern=NULL, *tzID=NULL; 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *juneStr, *julyStr; 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *fmt; 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal; 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate june, july, d; 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *date; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = udat_open(UDAT_FULL, UDAT_FULL, "cs", NULL, 0, NULL, 0, &status); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error in constructing the date format -> %s (Are you missing data?)\n", u_errorName(status)); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=udat_toPattern(fmt, TRUE, NULL, lneed, &status); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_toPattern(fmt, TRUE, pattern, lneed+1, &status); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ log_err("Error in extracting the pattern\n"); } 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tzID=(UChar*)malloc(sizeof(UChar) * 4); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "GMT"); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "cs", UCAL_GREGORIAN, &status); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ log_err("error in ucal_open caldef : %s\n", myErrorName(status)); } 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(cal, 1997, UCAL_JUNE, 15, &status); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru june=ucal_getMillis(cal, &status); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(cal, 1997, UCAL_JULY, 15, &status); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru july=ucal_getMillis(cal, &status); 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru juneStr = myDateFormat(fmt, june); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru julyStr = myDateFormat(fmt, july); 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos=0; 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(juneStr == NULL) { 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Can't load juneStr. Quitting.\n"); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = udat_parse(fmt, juneStr, u_strlen(juneStr), &pos, &status); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = myDateFormat(fmt, d); 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)){ 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* out1 = myDateFormat(fmt, june); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* out2 = myDateFormat(fmt, d); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(out1, out2) !=0) 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in handling the czech month june\n"); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pass: Date = %s (czech month June)\n", aescstrdup(date, -1)); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("udat_parse failed. Error. %s\n",u_errorName(status)); 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos=0; 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = udat_parse(fmt, julyStr, u_strlen(julyStr), &pos, &status); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = myDateFormat(fmt, d); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(fmt, july), myDateFormat(fmt, d) ) !=0) 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in handling the czech month july\n"); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pass: Date = %s (czech month July)\n", aescstrdup(date, -1)); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fmt); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pattern); 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tzID); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of single quotes in patterns. 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestQuotePattern161() 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *format; 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal; 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate currentTime_1; 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern, *tzID, *exp; 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *dateString; 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* expStr = "04/13/1999 at 10:42:28 AM "; 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * (strlen("MM/dd/yyyy 'at' hh:mm:ss a zzz")+1) ); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "MM/dd/yyyy 'at' hh:mm:ss a zzz"); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* format= udat_openPattern(pattern, u_strlen(pattern), NULL, &status); */ 32154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius format= udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US", NULL, 0,pattern, u_strlen(pattern), &status); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 32350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("error in udat_open: %s - (Are you missing data?)\n", myErrorName(status)); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tzID=(UChar*)malloc(sizeof(UChar) * 4); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* cal=ucal_open(tzID, u_strlen(tzID), NULL, UCAL_TRADITIONAL, &status); */ 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ log_err("error in ucal_open cal : %s\n", myErrorName(status)); } 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(cal, 1999, UCAL_APRIL, 13, 10, 42, 28, &status); 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currentTime_1 = ucal_getMillis(cal, &status); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateString = myDateFormat(format, currentTime_1); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exp=(UChar*)malloc(sizeof(UChar) * (strlen(expStr) + 1) ); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(exp, expStr); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n", austrdup(dateString) ); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strncmp(dateString, exp, (int32_t)strlen(expStr)) !=0) 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting a pattern with single quotes\n"); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(format); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(exp); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tzID); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pattern); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 354f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius/* 355f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius * Testing udat_getBooleanAttribute and unum_setBooleanAttribute() to make sure basic C wrapper functionality is present 356f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius */ 357f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusvoid TestBooleanAttributes(void) 358f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius{ 359f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UDateFormat *en; 360f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UErrorCode status=U_ZERO_ERROR; 361f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UBool initialState = TRUE; 362f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UBool switchedState = FALSE; 363f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 364f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_verbose("\ncreating a date format with english locale\n"); 365f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius en = udat_open(UDAT_FULL, UDAT_DEFAULT, "en_US", NULL, 0, NULL, 0, &status); 366f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(U_FAILURE(status)) { 367f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_data_err("error in creating the dateformat -> %s (Are you missing data?)\n", 368f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius myErrorName(status) ); 369f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius return; 370f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 371f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 372f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 373f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius initialState = udat_getBooleanAttribute(en, UDAT_PARSE_ALLOW_NUMERIC, &status); 374f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(initialState != TRUE) switchedState = TRUE; // if it wasn't the default of TRUE, then flip what we expect 375f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 376f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius udat_setBooleanAttribute(en, UDAT_PARSE_ALLOW_NUMERIC, switchedState, &status); 377f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(switchedState != udat_getBooleanAttribute(en, UDAT_PARSE_ALLOW_NUMERIC, &status)) { 378f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius log_err("unable to switch states!"); 379f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius return; 380f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 381f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 382f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius udat_close(en); 383f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 384f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 386