1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/***********************************************************************
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT:
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (c) 1997-2010, International Business Machines Corporation
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ***********************************************************************/
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "dtfmapts.h"
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h"
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h"
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h"
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/choicfmt.h"
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/msgfmt.h"
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This is an API test, not a unit test.  It doesn't test very many cases, and doesn't
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// try to test the full functionality.  It just calls each function in the class and
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// verifies that it works on a basic level.
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateFormatAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (exec) logln("TestSuite DateFormatAPI");
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    switch (index) {
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 0: name = "DateFormat API test";
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (exec) {
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    logln("DateFormat API test---"); logln("");
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UErrorCode status = U_ZERO_ERROR;
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    Locale saveLocale;
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    Locale::setDefault(Locale::getEnglish(), status);
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if(U_FAILURE(status)) {
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln("ERROR: Could not set default locale, test may not give correct results");
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    testAPI(/*par*/);
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    Locale::setDefault(saveLocale, status);
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 1: name = "TestEquals";
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (exec) {
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    logln("TestEquals---"); logln("");
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    TestEquals();
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 2: name = "TestNameHiding";
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (exec) {
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    logln("TestNameHiding---"); logln("");
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    TestNameHiding();
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        case 3: name = "TestCoverage";
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if (exec) {
5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    logln("TestCoverage---"); logln("");
5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    TestCoverage();
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                break;
6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        default: name = ""; break;
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Add better code coverage.
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
7050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid IntlTestDateFormatAPI::TestCoverage(void)
7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{
7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    const char *LOCALES[] = {
7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "zh_CN@calendar=chinese",
7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "cop_EG@calendar=coptic",
7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "hi_IN@calendar=indian",
7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "am_ET@calendar=ethiopic"
7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    };
7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t numOfLocales = 4;
7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int32_t i = 0; i < numOfLocales; i++) {
8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        DateFormat *df = DateFormat::createDateTimeInstance(DateFormat::kMedium, DateFormat::kMedium, Locale(LOCALES[i]));
8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if (df == NULL){
8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            dataerrln("Error creating DateFormat instances.");
8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            return;
8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete df;
8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that the equals method works correctly.
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateFormatAPI::TestEquals(void)
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Create two objects at different system times
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *a = DateFormat::createInstance();
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate start = Calendar::getNow();
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (Calendar::getNow() == start) ; // Wait for time to change
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *b = DateFormat::createInstance();
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (a == NULL || b == NULL){
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createInstance()");
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete a;
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete b;
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*a == *b))
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: DateFormat objects created at different times are unequal.");
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11127f654740f2a26ad62a5c155af9199af9e69b889claireho    SimpleDateFormat *sdtfmt = dynamic_cast<SimpleDateFormat *>(b);
11227f654740f2a26ad62a5c155af9199af9e69b889claireho    if (sdtfmt != NULL)
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double ONE_YEAR = 365*24*60*60*1000.0;
11527f654740f2a26ad62a5c155af9199af9e69b889claireho        sdtfmt->set2DigitYearStart(start + 50*ONE_YEAR, status);
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status))
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: setTwoDigitStartDate failed.");
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (*a == *b)
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: DateFormat objects with different two digit start dates are equal.");
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete a;
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete b;
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This test checks various generic API methods in DateFormat to achieve 100%
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API coverage.
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateFormatAPI::testAPI(/* char* par */)
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test constructors
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Testing DateFormat constructors");
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *def = DateFormat::createInstance();
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *fr = DateFormat::createTimeInstance(DateFormat::FULL, Locale::getFrench());
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *it = DateFormat::createDateInstance(DateFormat::MEDIUM, Locale::getItalian());
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *de = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG, Locale::getGerman());
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (def == NULL || fr == NULL || it == NULL || de == NULL){
14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Error creating DateFormat instances.");
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test equality
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (fr != NULL && def != NULL)
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Testing equality operator");
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if( *fr == *it ) {
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: == failed");
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test various format() methods
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (fr != NULL && it != NULL && de != NULL)
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Testing various format() methods");
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = 837039928046.0;
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable fD(d, Formattable::kIsDate);
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString res1, res2, res3;
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos1(0), pos2(0);
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res1 = fr->format(d, res1, pos1, status);
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: format() failed (French)");
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln( (UnicodeString) "" + d + " formatted to " + res1);
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res2 = it->format(d, res2, pos2);
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln( (UnicodeString) "" + d + " formatted to " + res2);
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res3 = de->format(d, res3);
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln( (UnicodeString) "" + d + " formatted to " + res3);
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test parse()
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (def != NULL)
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Testing parse()");
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString text("02/03/76 2:50 AM, CST");
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable result1;
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate result2, result3;
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0), pos01(0);
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    def->parseObject(text, result1, pos);
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(result1.getType() != Formattable::kDate) {
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: parseObject() failed for " + text);
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(text + " parsed into " + result1.getDate());
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result2 = def->parse(text, status);
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: parse() failed, stopping testing");
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(text + " parsed into " + result2);
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result3 = def->parse(text, pos01);
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(text + " parsed into " + result3);
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getters and setters
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (fr != NULL && it != NULL && de != NULL)
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Testing getters and setters");
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t count = 0;
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale *locales = DateFormat::getAvailableLocales(count);
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString) "Got " + count + " locales" );
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(int32_t i = 0; i < count; i++) {
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString name;
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        name = locales[i].getName();
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(name);
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fr->setLenient(it->isLenient());
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(fr->isLenient() != it->isLenient()) {
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: setLenient() failed");
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Calendar *cal = def->getCalendar();
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *newCal = cal->clone();
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    de->adoptCalendar(newCal);
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    it->setCalendar(*newCal);
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if( *(de->getCalendar()) != *(it->getCalendar())) {
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: adopt or set Calendar() failed");
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const NumberFormat *nf = def->getNumberFormat();
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat *newNf = (NumberFormat*) nf->clone();
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    de->adoptNumberFormat(newNf);
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    it->setNumberFormat(*newNf);
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if( *(de->getNumberFormat()) != *(it->getNumberFormat())) {
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: adopt or set NumberFormat() failed");
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const TimeZone& tz = def->getTimeZone();
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *newTz = tz.clone();
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    de->adoptTimeZone(newTz);
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    it->setTimeZone(*newTz);
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if( de->getTimeZone() != it->getTimeZone()) {
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: adopt or set TimeZone() failed");
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getStaticClassID()
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Testing getStaticClassID()");
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *test = new SimpleDateFormat(status);
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("ERROR: Couldn't create a DateFormat - %s", u_errorName(status));
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(test->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) {
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("ERROR: getDynamicClassID() didn't return the expected value");
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete test;
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete def;
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fr;
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete it;
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete de;
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test hiding of parse() and format() APIs in the Format hierarchy.
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * We test the entire hierarchy, even though this test is located in
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the DateFormat API test.
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTestDateFormatAPI::TestNameHiding(void) {
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // N.B.: This test passes if it COMPILES, since it's a test of
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // compile-time name hiding.
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable dateObj(0, Formattable::kIsDate);
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable numObj(3.1415926535897932384626433832795);
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable obj;
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition fpos;
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition ppos;
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // DateFormat calling Format API
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("DateFormat");
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat *dateFmt = DateFormat::createInstance();
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (dateFmt) {
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dateFmt->format(dateObj, str, status);
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dateFmt->format(dateObj, str, fpos, status);
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete dateFmt;
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
3006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            dataerrln("FAIL: Can't create DateFormat");
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // SimpleDateFormat calling Format & DateFormat API
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("SimpleDateFormat");
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        SimpleDateFormat sdf(status);
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Format API
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf.format(dateObj, str, status);
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf.format(dateObj, str, fpos, status);
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // DateFormat API
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf.format((UDate)0, str, fpos);
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf.format((UDate)0, str);
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf.parse(str, status);
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf.parse(str, ppos);
31727f654740f2a26ad62a5c155af9199af9e69b889claireho        sdf.getNumberFormat();
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // NumberFormat calling Format API
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("NumberFormat");
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NumberFormat *fmt = NumberFormat::createInstance(status);
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (fmt) {
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt->format(numObj, str, status);
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt->format(numObj, str, fpos, status);
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete fmt;
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
3306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            dataerrln("FAIL: Can't create NumberFormat()");
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // DecimalFormat calling Format & NumberFormat API
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("DecimalFormat");
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat fmt(status);
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_SUCCESS(status)) {
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          // Format API
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.format(numObj, str, status);
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.format(numObj, str, fpos, status);
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          // NumberFormat API
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.format(2.71828, str);
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.format((int32_t)1234567, str);
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.format(1.41421, str, fpos);
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.format((int32_t)9876543, str, fpos);
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.parse(str, obj, ppos);
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.parse(str, obj, status);
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
3516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          errcheckln(status, "FAIL: Couldn't instantiate DecimalFormat, error %s. Quitting test", u_errorName(status));
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ChoiceFormat calling Format & NumberFormat API
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("ChoiceFormat");
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ChoiceFormat fmt("0#foo|1#foos|2#foos", status);
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Format API
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format(numObj, str, status);
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format(numObj, str, fpos, status);
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // NumberFormat API
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format(2.71828, str);
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format((int32_t)1234567, str);
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format(1.41421, str, fpos);
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format((int32_t)9876543, str, fpos);
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.parse(str, obj, ppos);
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.parse(str, obj, status);
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // MessageFormat calling Format API
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("MessageFormat");
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        MessageFormat fmt("", status);
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Format API
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // We use dateObj, which MessageFormat should reject.
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // We're testing name hiding, not the format method.
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format(dateObj, str, status);
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.format(dateObj, str, fpos, status);
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
386