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