1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/***********************************************************************
2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 1997-2011, International Business Machines Corporation
3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved.
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ***********************************************************************/
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "miscdtfm.h"
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/format.h"
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h"
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h"
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h"
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h"
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/locid.h"
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/msgfmt.h"
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/numfmt.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/choicfmt.h"
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h"
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class DateFormatMiscTests
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break;
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // if (exec) logln((UnicodeString)"TestSuite DateFormatMiscTests");
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    switch (index) {
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CASE(0, test4097450)
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CASE(1, test4099975)
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CASE(2, test4117335)
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        default: name = ""; break;
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::failure(UErrorCode status, const char* msg)
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(status, UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status));
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return TRUE;
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return FALSE;
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4097450
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::test4097450()
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Date parse requiring 4 digit year.
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString  dstring [] = {
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("97"),
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("1997"),
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("97"),
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("1997"),
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("01"),
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("2001"),
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("01"),
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("2001"),
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("1"),
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("1"),
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("11"),
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("11"),
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("111"),
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("111")
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dformat [] = {
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yy"),
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yy"),
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yyyy"),
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yyyy"),
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yy"),
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yy"),
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yyyy"),
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yyyy"),
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yy"),
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yyyy"),
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yy"),
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yyyy"),
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yy"),
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString("yyyy")
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*    UBool dresult [] = {
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TRUE,
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE,
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE,
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TRUE,
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TRUE,
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE,
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE,
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TRUE,
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE,
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE,
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TRUE,
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE,
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE,
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FALSE
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };*/
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter;
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *resultFormatter = new SimpleDateFormat((UnicodeString)"yyyy", status);
11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
11750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Format\tSource\tResult");
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("-------\t-------\t-------");
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i = 0; i < 14/*dstring.length*/; i++)
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log(dformat[i] + "\t" + dstring[i] + "\t");
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        formatter = new SimpleDateFormat(dformat[i], status);
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(failure(status, "new SimpleDateFormat")) return;
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //try {
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString str;
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FieldPosition pos(FieldPosition::DONT_CARE);
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(resultFormatter->format(formatter->parse(dstring[i], status), str, pos));
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "resultFormatter->format");
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            //if ( !dresult[i] ) System.out.print("   <-- error!");
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*}
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        catch (ParseException exception) {
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            //if ( dresult[i] ) System.out.print("   <-- error!");
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            System.out.print("exception --> " + exception);
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }*/
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete formatter;
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln();
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete resultFormatter;
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4099975
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::test4099975()
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test Constructor SimpleDateFormat::SimpleDateFormat (const UnicodeString & pattern,
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                                    const DateFormatSymbols & formatData, UErrorCode & status )
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * The DateFormatSymbols object is NOT adopted; Modifying the original DateFormatSymbols
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * should not change the SimpleDateFormat's behavior.
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = Calendar::getNow();
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
16283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius        if (U_FAILURE(status)) {
16383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius            dataerrln("Unable to create DateFormatSymbols - %s", u_errorName(status));
16483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius            return;
16583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius        }
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), *symbols, status);
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(failure(status, "new SimpleDateFormat")) return;
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format0;
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format0 = df->format(d, format0);
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString localizedPattern0;
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "df->toLocalizedPattern");
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format1;
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format1 = df->format(d, format1);
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (format0 != format1) {
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Formats are different. format0: ") + format0
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString("; format1: ") + format1);
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString localizedPattern1;
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "df->toLocalizedPattern");
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (localizedPattern0 != localizedPattern1) {
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString("; localizedPattern1: ") + localizedPattern1);
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete symbols;
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete df;
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test void SimpleDateFormat::setDateFormatSymbols (  const DateFormatSymbols & newFormatSymbols )
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Modifying the original DateFormatSymbols should not change the SimpleDateFormat's behavior.
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(failure(status, "new DateFormatSymbols")) return;
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status);
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(failure(status, "new SimpleDateFormat")) return;
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df->setDateFormatSymbols(*symbols);
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format0;
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format0 = df->format(d, format0);
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString localizedPattern0;
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "df->toLocalizedPattern");
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format1;
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format1 = df->format(d, format1);
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (format0 != format1) {
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Formats are different. format0: ") + format0
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString("; format1: ") + format1);
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString localizedPattern1;
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "df->toLocalizedPattern");
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (localizedPattern0 != localizedPattern1) {
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString("; localizedPattern1: ") + localizedPattern1);
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete symbols;
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete df;
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //Test the pointer version of the constructor (and the adoptDateFormatSymbols method)
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(failure(status, "new DateFormatSymbols")) return;
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), symbols, status);
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(failure(status, "new SimpleDateFormat")) return;
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format0;
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format0 = df->format(d, format0);
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString localizedPattern0;
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "df->toLocalizedPattern");
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format1;
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format1 = df->format(d, format1);
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (format0 != format1) {
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Formats are different. format0: ") + format0
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString("; format1: ") + format1);
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString localizedPattern1;
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "df->toLocalizedPattern");
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (localizedPattern0 == localizedPattern1) {
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString("; localizedPattern1: ") + localizedPattern1);
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //delete symbols; the caller is no longer responsible for deleting the symbols
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete df;
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "new DateFormatSymbols");
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status);
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(failure(status, "new SimpleDateFormat")) return;
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df-> adoptDateFormatSymbols(symbols);
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format0;
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format0 = df->format(d, format0);
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString localizedPattern0;
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "df->toLocalizedPattern");
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format1;
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format1 = df->format(d, format1);
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (format0 != format1) {
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Formats are different. format0: ") + format0
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString("; format1: ") + format1);
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString localizedPattern1;
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "df->toLocalizedPattern");
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (localizedPattern0 == localizedPattern1) {
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString("; localizedPattern1: ") + localizedPattern1);
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //delete symbols; the caller is no longer responsible for deleting the symbols
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete df;
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @test @(#)bug4117335.java    1.1 3/5/98
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4117335
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::test4117335()
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UnicodeString bc = "\u7d00\u5143\u524d";
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar bcC [] = {
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x7D00,
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x5143,
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x524D
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bc(bcC, 3, 3);
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UnicodeString ad = "\u897f\u66a6";
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar adC [] = {
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x897F,
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x66A6
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString ad(adC, 2, 2);
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642";
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar jstLongC [] = {
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x65e5,
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x672c,
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x6a19,
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x6e96,
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x6642
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar jdtLongC [] = {0x65E5, 0x672C, 0x590F, 0x6642, 0x9593};
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString jstLong(jstLongC, 5, 5);
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
320b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//    UnicodeString jstShort = "JST";
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString tzID = "Asia/Tokyo";
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString jdtLong(jdtLongC, 5, 5);
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
326b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//    UnicodeString jdtShort = "JDT";
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), status);
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
33083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius      dataerrln("Failure creating DateFormatSymbols, %s", u_errorName(status));
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      delete symbols;
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    failure(status, "new DateFormatSymbols");
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t eraCount = 0;
33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    const UnicodeString *eras = symbols->getEraNames(eraCount);
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("BC = ") + eras[0]);
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (eras[0] != bc) {
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("*** Should have been " + bc);
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //throw new Exception("Error in BC");
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("AD = ") + eras[1]);
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (eras[1] != ad) {
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("*** Should have been " + ad);
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //throw new Exception("Error in AD");
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t rowCount, colCount;
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount);
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //don't hard code the index .. compute it.
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t index = -1;
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < rowCount; ++i) {
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (tzID == (zones[i][0])) {
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            index = i;
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("Long zone name = ") + zones[index][1]);
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (zones[index][1] != jstLong) {
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("*** Should have been " + prettify(jstLong)+ " but it is: " + prettify(zones[index][1]));
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //throw new Exception("Error in long TZ name");
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
365b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//    logln(UnicodeString("Short zone name = ") + zones[index][2]);
366b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//    if (zones[index][2] != jstShort) {
367b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//        errln("*** Should have been " + prettify(jstShort) + " but it is: " + prettify(zones[index][2]));
368b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//        //throw new Exception("Error in short TZ name");
369b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//    }
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("Long zone name = ") + zones[index][3]);
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (zones[index][3] != jdtLong) {
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("*** Should have been " + prettify(jstLong) + " but it is: " + prettify(zones[index][3]));
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //throw new Exception("Error in long TZ name");
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
375b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//    logln(UnicodeString("SHORT zone name = ") + zones[index][4]);
376b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//    if (zones[index][4] != jdtShort) {
377b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//        errln("*** Should have been " + prettify(jstShort)+ " but it is: " + prettify(zones[index][4]));
378b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//        //throw new Exception("Error in short TZ name");
379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho//    }
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete symbols;
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
385