1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT:
38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * Copyright (c) 1997-2013, International Business Machines
450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Corporation and others. All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "dtfmttst.h"
1254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/localpointer.h"
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/timezone.h"
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h"
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h"
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h"
1754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/dtptngen.h"
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/simpletz.h"
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/strenum.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h"
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h"
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h"
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "caltest.h"  // for fieldName
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> // for sprintf
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
26103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_HAS_WIN32_API
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "windttst.h"
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
3154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ARRAY_SIZE(array) (sizeof array / sizeof array[0])
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define ASSERT_OK(status)  if(U_FAILURE(status)) {errcheckln(status, #status " = %s @ %s:%d", u_errorName(status), __FILE__, __LINE__); return; }
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class DateFormatTest
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
4254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    if(exec) {
4354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        logln("TestSuite DateFormatTest: ");
4454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
4554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO_BEGIN;
4654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestPatterns);
4754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestEquals);
4854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestTwoDigitYearDSTParse);
4954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestFieldPosition);
5054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestPartialParse994);
5154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestRunTogetherPattern985);
5254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestRunTogetherPattern917);
5354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestCzechMonths459);
5454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestLetterDPattern212);
5554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestDayOfYearPattern195);
5654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestQuotePattern161);
5754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestBadInput135);
5854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestBadInput135a);
5954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestTwoDigitYear);
6054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestDateFormatZone061);
6154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestDateFormatZone146);
6254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestLocaleDateFormat);
6354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestWallyWedel);
6454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestDateFormatCalendar);
6554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestSpaceParsing);
6654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestExactCountFormat);
6754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestWhiteSpaceParsing);
6854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestInvalidPattern);
6954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestGeneral);
7054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestGreekMay);
7154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestGenericTime);
7254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestGenericTimeZoneOrder);
7354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestHost);
7454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestEras);
7554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestNarrowNames);
768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    TESTCASE_AUTO(TestShortDays);
7754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestStandAloneDays);
7854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestStandAloneMonths);
7954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestQuarters);
8054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestZTimeZoneParsing);
8154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestRelative);
8254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestRelativeClone);
8354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestHostClone);
8454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestTimeZoneDisplayName);
8554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestRoundtripWithCalendar);
8654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(Test6338);
8754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(Test6726);
8854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestGMTParsing);
8954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(Test6880);
9054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestISOEra);
9154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestFormalChineseDate);
9254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestNumberAsStringParsing);
9354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestStandAloneGMTParse);
9454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestParsePosition);
9554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestMonthPatterns);
9654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestContext);
9754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestNonGregoFmtParse);
9854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    /*
9954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestRelativeError);
10054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestRelativeOther);
10154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    */
10254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO(TestDotAndAtLeniency);
10354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    TESTCASE_AUTO_END;
10454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
10554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
10654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid DateFormatTest::TestPatterns() {
10754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    static const struct {
10854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        const char *actualPattern;
10954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        const char *expectedPattern;
11054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        const char *localeID;
11154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        const char *expectedLocalPattern;
11254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    } EXPECTED[] = {
11354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR, "y","en","y"},
11454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
11554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_QUARTER, "QQQQ", "en", "QQQQ"},
11654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_ABBR_QUARTER, "QQQ", "en", "QQQ"},
11754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_QUARTER, "yQQQQ", "en", "QQQQ y"},
11854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_ABBR_QUARTER, "yQQQ", "en", "QQQ y"},
11954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
12054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_NUM_MONTH, "M", "en", "L"},
12154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_ABBR_MONTH, "MMM", "en", "LLL"},
12254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_MONTH, "MMMM", "en", "LLLL"},
12354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_NUM_MONTH, "yM","en","M/y"},
12454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_ABBR_MONTH, "yMMM","en","MMM y"},
12554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_MONTH, "yMMMM","en","MMMM y"},
12654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
12754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_DAY, "d","en","d"},
12854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_NUM_MONTH_DAY, "yMd", "en", "M/d/y"},
12954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_ABBR_MONTH_DAY, "yMMMd", "en", "MMM d, y"},
13054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_MONTH_DAY, "yMMMMd", "en", "MMMM d, y"},
13154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_NUM_MONTH_WEEKDAY_DAY, "yMEd", "en", "EEE, M/d/y"},
13254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY, "yMMMEd", "en", "EEE, MMM d, y"},
13354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_MONTH_WEEKDAY_DAY, "yMMMMEEEEd", "en", "EEEE, MMMM d, y"},
13454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
13554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_NUM_MONTH_DAY, "Md","en","M/d"},
13654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_ABBR_MONTH_DAY, "MMMd","en","MMM d"},
13754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_MONTH_DAY, "MMMMd","en","MMMM d"},
13854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_NUM_MONTH_WEEKDAY_DAY, "MEd","en","EEE, M/d"},
13954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_ABBR_MONTH_WEEKDAY_DAY, "MMMEd","en","EEE, MMM d"},
14054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_MONTH_WEEKDAY_DAY, "MMMMEEEEd","en","EEEE, MMMM d"},
14154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
14254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_HOUR, "j", "en", "h a"}, // (fixed expected result per ticket 6872<-6626)
14354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_HOUR24, "H", "en", "HH"}, // (fixed expected result per ticket 6872<-6626
14454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
14554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_MINUTE, "m", "en", "m"},
14654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_HOUR_MINUTE, "jm","en","h:mm a"}, // (fixed expected result per ticket 6872<-7180)
14754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_HOUR24_MINUTE, "Hm", "en", "HH:mm"}, // (fixed expected result per ticket 6872<-6626)
14854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
14954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_SECOND, "s", "en", "s"},
15054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_HOUR_MINUTE_SECOND, "jms","en","h:mm:ss a"}, // (fixed expected result per ticket 6872<-7180)
15154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_HOUR24_MINUTE_SECOND, "Hms","en","HH:mm:ss"}, // (fixed expected result per ticket 6872<-6626)
15254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_MINUTE_SECOND, "ms", "en", "mm:ss"}, // (fixed expected result per ticket 6872<-6626)
15354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
15454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_LOCATION_TZ, "VVVV", "en", "VVVV"},
15554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_GENERIC_TZ, "vvvv", "en", "vvvv"},
15654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_ABBR_GENERIC_TZ, "v", "en", "v"},
15754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_SPECIFIC_TZ, "zzzz", "en", "zzzz"},
15854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_ABBR_SPECIFIC_TZ, "z", "en", "z"},
15954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_ABBR_UTC_TZ, "ZZZZ", "en", "ZZZZ"},
16054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
16154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_YEAR_NUM_MONTH_DAY UDAT_ABBR_UTC_TZ, "yMdZZZZ", "en", "M/d/y, ZZZZ"},
16254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {UDAT_MONTH_DAY UDAT_LOCATION_TZ, "MMMMdVVVV", "en", "MMMM d, VVVV"}
16354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    };
16454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
16554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    IcuTestErrorCode errorCode(*this, "TestPatterns()");
16654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    for (int32_t i = 0; i < LENGTHOF(EXPECTED); i++) {
16754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // Verify that patterns have the correct values
16854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString actualPattern(EXPECTED[i].actualPattern, -1, US_INV);
16954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expectedPattern(EXPECTED[i].expectedPattern, -1, US_INV);
17054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        Locale locale(EXPECTED[i].localeID);
17154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if (actualPattern != expectedPattern) {
17254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errln("FAILURE! Expected pattern: " + expectedPattern +
17354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    " but was: " + actualPattern);
17454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
17554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
17654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // Verify that DataFormat instances produced contain the correct
17754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // localized patterns
17854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // TODO: use DateFormat::getInstanceForSkeleton(), ticket #9029
17954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // Java test code:
18054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // DateFormat date1 = DateFormat.getPatternInstance(actualPattern,
18154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //         locale);
18254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // DateFormat date2 = DateFormat.getPatternInstance(Calendar.getInstance(locale),
18354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //         actualPattern, locale);
18454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        LocalPointer<DateTimePatternGenerator> generator(
18554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                DateTimePatternGenerator::createInstance(locale, errorCode));
18654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(errorCode.logDataIfFailureAndReset("DateTimePatternGenerator::createInstance() failed for locale ID \"%s\"", EXPECTED[i].localeID)) {
18754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            continue;
18854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
18954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString pattern = generator->getBestPattern(actualPattern, errorCode);
19054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        SimpleDateFormat date1(pattern, locale, errorCode);
19154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        SimpleDateFormat date2(pattern, locale, errorCode);
19254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        date2.adoptCalendar(Calendar::createInstance(locale, errorCode));
19354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(errorCode.logIfFailureAndReset("DateFormat::getInstanceForSkeleton() failed")) {
19454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errln("  for actualPattern \"%s\" & locale ID \"%s\"",
19554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                  EXPECTED[i].actualPattern, EXPECTED[i].localeID);
19654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            continue;
19754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
19854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
19954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expectedLocalPattern(EXPECTED[i].expectedLocalPattern, -1, US_INV);
20054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString actualLocalPattern1;
20154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString actualLocalPattern2;
20254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        date1.toLocalizedPattern(actualLocalPattern1, errorCode);
20354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        date2.toLocalizedPattern(actualLocalPattern2, errorCode);
20454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if (actualLocalPattern1 != expectedLocalPattern) {
20554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errln("FAILURE! Expected local pattern: " + expectedLocalPattern
20654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    + " but was: " + actualLocalPattern1);
20754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
20854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if (actualLocalPattern2 != expectedLocalPattern) {
20954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errln("FAILURE! Expected local pattern: " + expectedLocalPattern
21054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    + " but was: " + actualLocalPattern2);
21154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test written by Wally Wedel and emailed to me.
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWallyWedel()
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a TimeZone so we can get the ids.
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *tz = new SimpleTimeZone(7,"");
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Computational variables.
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t offset, hours, minutes, seconds;
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a SimpleDateFormat set up to produce a full time
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     zone name.
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)"zzzz", status);
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * A String array for the time zone ids.
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ids_length;
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    StringEnumeration* ids = TimeZone::createEnumeration();
237b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (ids == NULL) {
238b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create TimeZone enumeration.");
239b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (sdf != NULL) {
240b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            delete sdf;
241b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
242b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        return;
243b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ids_length = ids->count(status);
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * How many ids do we have?
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Time Zone IDs size: %d", ids_length);
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Column headings (sort of)
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Ordinal ID offset(h:m) name");
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Loop through the tzs.
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = Calendar::createInstance(status);
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < ids_length; i++) {
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i]);
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UnicodeString* id = ids->snext(status);
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *ttz = TimeZone::createTimeZone(*id);
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // offset = ttz.getRawOffset();
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTimeZone(*ttz);
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTime(today, status);
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        offset = cal->get(UCAL_ZONE_OFFSET, status) + cal->get(UCAL_DST_OFFSET, status);
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i] + " offset " + offset);
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* sign = "+";
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (offset < 0) {
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            sign = "-";
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            offset = -offset;
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        hours = offset/3600000;
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        minutes = (offset%3600000)/60000;
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        seconds = (offset%60000)/1000;
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString dstOffset = (UnicodeString)"" + sign + (hours < 10 ? "0" : "") +
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (int32_t)hours + ":" + (minutes < 10 ? "0" : "") + (int32_t)minutes;
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (seconds != 0) {
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dstOffset = dstOffset + ":" + (seconds < 10 ? "0" : "") + seconds;
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Instantiate a date so we can display the time zone name.
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->setTimeZone(*ttz);
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Format the output.
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString fmtOffset;
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FieldPosition pos(0);
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->format(today,fmtOffset, pos);
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // UnicodeString fmtOffset = tzS.toString();
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString *fmtDstOffset = 0;
292b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (fmtOffset.startsWith("GMT") && fmtOffset.length() != 3)
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            //fmtDstOffset = fmtOffset->substring(3);
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtDstOffset = new UnicodeString();
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtOffset.extract(3, fmtOffset.length(), *fmtDstOffset);
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Show our result.
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool ok = fmtDstOffset == 0 || *fmtDstOffset == dstOffset;
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (ok)
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString() + i + " " + *id + " " + dstOffset +
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset +
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  (fmtDstOffset != 0 ? " ok" : " ?"));
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString() + i + " " + *id + " " + dstOffset +
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset + " *** FAIL ***");
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete ttz;
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtDstOffset;
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //  delete ids;   // TODO:  BAD API
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ids;
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete tz;
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
32450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test operator==
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestEquals()
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtA = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtB = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if ( fmtA == NULL || fmtB == NULL){
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance");
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtA;
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtB;
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*fmtA == *fmtB)) errln((UnicodeString)"FAIL");
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtA;
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtB;
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* test = TimeZone::createTimeZone("PDT");
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete test;
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
34750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of 2-digit years.
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYearDSTParse(void)
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fullFmt = new SimpleDateFormat((UnicodeString)"EEE MMM dd HH:mm:ss.SSS zzz yyyy G", status);
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *fmt = new SimpleDateFormat((UnicodeString)"dd-MMM-yy h:mm:ss 'o''clock' a z", Locale::getEnglish(), status);
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //DateFormat* fmt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, Locale::ENGLISH);
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString* s = new UnicodeString("03-Apr-04 2:20:47 o'clock AM PST", "");
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* defaultTZ = TimeZone::createDefault();
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PST = TimeZone::createTimeZone("PST");
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t defaultOffset = defaultTZ->getRawOffset();
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t PSTOffset = PST->getRawOffset();
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t hour = 2 + (defaultOffset - PSTOffset) / (60*60*1000);
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // hour is the expected hour of day, in units of seconds
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour = ((hour < 0) ? hour + 24 : hour) * 60*60;
36850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
37250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Could not set up test. exitting - %s", u_errorName(status));
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fmt->parse(*s, status);
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(*s + " P> " + ((DateFormat*)fullFmt)->format(d, str));
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y, m, day, hr, min, sec;
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateToFields(d, y, m, day, hr, min, sec);
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour += defaultTZ->inDaylightTime(d, status) ? 1 : 0;
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hr = hr*60*60;
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (hr != hour)
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Should parse to hour " + hour + " but got " + hr);
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + (int32_t)status);
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete s;
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullFmt;
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PST;
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete defaultTZ;
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
39450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString&
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::escape(UnicodeString& s)
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<s.length(); ++i)
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar c = s[(int32_t)i];
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c <= (UChar)0x7F) buf += c;
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += (UChar)0x5c; buf += (UChar)0x55;
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0xF000) >> 12);
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x0F00) >> 8);
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x00F0) >> 4);
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString(c & 0x000F);
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (s = buf);
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormatSymbols.gPatternChars.
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
4238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXx";
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A list of the names of all the fields in DateFormat.
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormat.
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* DATEFORMAT_FIELD_NAMES[] = {
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "ERA_FIELD",
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_FIELD",
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MONTH_FIELD",
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DATE_FIELD",
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY1_FIELD",
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY0_FIELD",
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MINUTE_FIELD",
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "SECOND_FIELD",
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECOND_FIELD",
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_FIELD",
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_YEAR_FIELD",
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_IN_MONTH_FIELD",
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_YEAR_FIELD",
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_MONTH_FIELD",
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "AM_PM_FIELD",
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR1_FIELD",
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR0_FIELD",
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_FIELD",
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_WOY_FIELD",
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DOW_LOCAL_FIELD",
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "EXTENDED_YEAR_FIELD",
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "JULIAN_DAY_FIELD",
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECONDS_IN_DAY_FIELD",
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_RFC_FIELD",
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "GENERIC_TIMEZONE_FIELD",
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_DAY_FIELD",
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_MONTH_FIELD",
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "QUARTER_FIELD",
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_QUARTER_FIELD",
459103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    "TIMEZONE_SPECIAL_FIELD",
4608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    "YEAR_NAME_FIELD",
4618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    "TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD",
4628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    "TIMEZONE_ISO_FIELD",
4638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    "TIMEZONE_ISO_LOCAL_FIELD",
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t DATEFORMAT_FIELD_NAMES_LENGTH =
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sizeof(DATEFORMAT_FIELD_NAMES) / sizeof(DATEFORMAT_FIELD_NAMES[0]);
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that returned field position indices are correct.
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestFieldPosition() {
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i, j, exp;
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Verify data
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormatSymbols rootSyms(Locale(""), ec);
47985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(ec)) {
480103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln("Unable to create DateFormatSymbols - %s", u_errorName(ec));
48185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
48285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // local pattern chars data is not longer loaded
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // from icu locale bundle
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf));
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, DateFormatSymbols::getPatternUChars());
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("DATEFORMAT_FIELD_NAMES", DATEFORMAT_FIELD_NAMES_LENGTH == UDAT_FIELD_COUNT);
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS));
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Create test formatters
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t COUNT = 4;
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* dateFormats[COUNT];
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[0] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getUS());
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[1] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getFrance());
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "G y M d..."
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.remove().append(PATTERN_CHARS);
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; --j) buf.insert(j, (UChar)32/*' '*/);
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[2] = new SimpleDateFormat(buf, Locale::getUS(), ec);
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "GGGG yyyy MMMM dddd..."
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; j-=2) {
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<3; ++i) {
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.insert(j, buf.charAt(j));
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[3] = new SimpleDateFormat(buf, Locale::getUS(), ec);
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(ec)){
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("Could not create SimpleDateFormat object for locale en_US. Error: " )+ UnicodeString(u_errorName(ec)));
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate aug13 = 871508052513.0;
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Expected output field values for above DateFormats on aug13
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Fields are given in order of DateFormat field number
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* EXPECTED[] = {
5168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "", "1997", "August", "13", "", "", "34", "12", "", "Wednesday",
5178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "", "", "", "", "PM", "2", "", "Pacific Daylight Time", "", "",
5188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "", "", "", "", "", "", "", "", "", "",
5198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "", "", "", "",
5208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
5218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "", "1997", "ao\\u00FBt", "13", "", "14", "34", "12", "", "mercredi",
5228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "", "", "", "", "", "", "", "heure avanc\\u00e9e du Pacifique", "", "",
5238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "", "", "", "", "",  "", "", "", "", "",
5248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "", "", "", "",
5258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
5268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "AD", "1997", "8", "13", "14", "14", "34", "12", "5", "Wed",
5278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "225", "2", "33", "3", "PM", "2", "2", "PDT", "1997", "4",
5288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "1997", "2450674", "52452513", "-0700", "PT",  "4", "8", "3", "3", "uslax",
5298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "1997", "GMT-7", "-07", "-07",
5308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
5318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130", "Wednesday",
5328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "0225", "0002", "0033", "0003", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "Wednesday",
5338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "1997", "2450674", "52452513", "GMT-07:00", "Pacific Time",  "Wednesday", "August", "3rd quarter", "3rd quarter", "Los Angeles Time",
5348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "1997", "GMT-07:00", "-0700", "-0700",
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]);
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("data size", EXPECTED_LENGTH == COUNT * UDAT_FIELD_COUNT);
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PT = TimeZone::createTimeZone("America/Los_Angeles");
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j = 0, exp = 0; j < COUNT; ++j) {
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //  String str;
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat* df = dateFormats[j];
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df->setTimeZone(*PT);
54627f654740f2a26ad62a5c155af9199af9e69b889claireho        SimpleDateFormat* sdtfmt = dynamic_cast<SimpleDateFormat*>(df);
54727f654740f2a26ad62a5c155af9199af9e69b889claireho        if (sdtfmt != NULL) {
54827f654740f2a26ad62a5c155af9199af9e69b889claireho            logln(" Pattern = " + sdtfmt->toPattern(buf.remove()));
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(" Pattern = ? (not a SimpleDateFormat)");
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  Result = " + df->format(aug13, buf.remove()));
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
55450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        int32_t expBase = exp; // save for later
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < UDAT_FIELD_COUNT; ++i, ++exp) {
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            FieldPosition pos(i);
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.remove();
55850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            df->format(aug13, buf, pos);
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString field;
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.extractBetween(pos.getBeginIndex(), pos.getEndIndex(), field);
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(EXPECTED[exp]), field);
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
56450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
56550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // test FieldPositionIterator API
56650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        logln("FieldPositionIterator");
56750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {
56850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          UErrorCode status = U_ZERO_ERROR;
56950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          FieldPositionIterator posIter;
57050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          FieldPosition fp;
57150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
57250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          buf.remove();
57350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          df->format(aug13, buf, &posIter, status);
57450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          while (posIter.next(fp)) {
57550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t i = fp.getField();
57650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UnicodeString field;
57750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            buf.extractBetween(fp.getBeginIndex(), fp.getEndIndex(), field);
57850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
57950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         ctou(EXPECTED[expBase + i]), field);
58050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          }
58150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
58250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
58550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
58650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // test null posIter
58750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    buf.remove();
58850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UErrorCode status = U_ZERO_ERROR;
58950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dateFormats[0]->format(aug13, buf, NULL, status);
59050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // if we didn't crash, we succeeded.
59150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<COUNT; ++i) {
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dateFormats[i];
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PT;
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * General parse/format tests.  Add test cases as needed.
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGeneral() {
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss.SSS",
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Milliseconds are left-justified, since they format as fractions of a second
60827f654740f2a26ad62a5c155af9199af9e69b889claireho        "y/M/d H:mm:ss.S", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.5", "2004 03 10 16:36:31.500",
60927f654740f2a26ad62a5c155af9199af9e69b889claireho        "y/M/d H:mm:ss.SS", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.56", "2004 03 10 16:36:31.560",
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567",
6118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "y/M/d H:mm:ss.SSSS", "pf", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.5670",
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(DATA, ARRAY_SIZE(DATA), Locale("en", "", ""));
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
61550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that strings which contain incomplete specifications are parsed
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * correctly.  In some instances, this means not being parsed at all, and
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * returning an appropriate error.
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestPartialParse994()
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* f = new SimpleDateFormat(status);
62885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
62950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
63085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete f;
63185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
63285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:11:42", date(97, 1 - 1, 17, 10, 11, 42));
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:", null);
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10", null);
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 ", null);
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17", null);
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete f;
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
64250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
64450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPat994(SimpleDateFormat* format, const char* pat, const char* str, UDate expected)
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("Pattern \"") + pat + "\"   String \"" + str + "\"");
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format->applyPattern(pat);
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = format->parse(str, status);
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status) || date == null)
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"ParseException: " + (int32_t)status);
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString f;
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ((DateFormat*)format)->format(date, f);
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString(" parse(") + str + ") -> " + dateToString(date));
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" format -> " + f);
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected == null ||
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                !(date == expected)) errln((UnicodeString)"FAIL: Expected null");//" + expected);
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!(f == str)) errln(UnicodeString("FAIL: Expected ") + str);
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    logln((UnicodeString)"ParseException: " + e.getMessage());
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    errln((UnicodeString)"*** Exception:");
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
67950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
68150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern985()
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString format("yyyyMMddHHmmssSSS");
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString now, then;
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UBool flag;
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(format, status);
69450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
69550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
69650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
69750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
69850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date1 = Calendar::getNow();
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateFormat*)formatter)->format(date1, now);
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(now);
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date2 = formatter->parse(now, pos);
7048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if (date2 == 0) then = UnicodeString("Parse stopped at ") + pos.getIndex();
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else ((DateFormat*)formatter)->format(date2, then);
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(then);
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(date2 == date1)) errln((UnicodeString)"FAIL");
708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
71150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
71350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern917()
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fmt;
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString myDate;
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyy/MM/dd", status);
72550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
72650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
72750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete fmt;
72850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
72950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "1997/02/03";
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 2 - 1, 3));
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyyMMdd", status);
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "19970304";
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 3 - 1, 4));
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
73950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
74150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::testIt917(SimpleDateFormat* fmt, UnicodeString& str, UDate expected)
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern=" + fmt->toPattern(pattern) + "   string=" + str);
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable o;
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ((Format*)fmt)->parseObject(str, o, status);
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) return;
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    return;
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Parsed object: " + dateToString(o.getDate()));
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(o.getDate() == expected)) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatted; ((Format*)fmt)->format(o, formatted, status);
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted string: " + formatted);
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(formatted == str)) errln((UnicodeString)"FAIL: Expected " + str);
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
76450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
76650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the handling of Czech June and July, which have the unique attribute that
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * one is a proper prefix substring of the other.
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestCzechMonths459()
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmt = DateFormat::createDateInstance(DateFormat::FULL, Locale("cs", "", ""));
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fmt == NULL){
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern " + ((SimpleDateFormat*) fmt)->toPattern(pattern));
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate june = date(97, UCAL_JUNE, 15);
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate july = date(97, UCAL_JULY, 15);
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString juneStr; fmt->format(june, juneStr);
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString julyStr; fmt->format(july, julyStr);
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(June 15 1997) = " + juneStr);
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt->parse(juneStr, status);
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s; fmt->format(d, s);
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t month,yr,day,hr,min,sec; dateToFields(d,yr,month,day,hr,min,sec);
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JUNE) errln((UnicodeString)"FAIL: Month should be June");
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(July 15 1997) = " + julyStr);
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        d = fmt->parse(julyStr, status);
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->format(d, s);
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dateToFields(d,yr,month,day,hr,min,sec);
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JULY) errln((UnicodeString)"FAIL: Month should be July");
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Exception: " + (int32_t)status);
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
80750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of 'D' in patterns.
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLetterDPattern212()
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString("1995-040.05:01:29");
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bigD("yyyy-DDD.hh:mm:ss");
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString littleD("yyyy-ddd.hh:mm:ss");
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expLittleD = date(95, 0, 1, 5, 1, 29);
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expBigD = expLittleD + 39 * 24 * 3600000.0;
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expLittleD = expBigD; // Expect the same, with default lenient parsing
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"dateString= " + dateString);
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(bigD, status);
82550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
82650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
82750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
82850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
82950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate myDate = formatter->parse(dateString, pos);
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + bigD + " -> " + myDate);
833b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (myDate != expBigD) errln((UnicodeString)"FAIL: bigD - Expected " + dateToString(expBigD));
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat(littleD, status);
83650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    ASSERT_OK(status);
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos = ParsePosition(0);
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = formatter->parse(dateString, pos);
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + littleD + " -> " + dateToString(myDate));
840b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (myDate != expLittleD) errln((UnicodeString)"FAIL: littleD - Expected " + dateToString(expLittleD));
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
84450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the day of year pattern.
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDayOfYearPattern195()
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t year,month,day,hour,min,sec; dateToFields(today,year,month,day,hour,min,sec);
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expected = date(year, month, day);
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Test Date: " + dateToString(today));
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* sdf = (SimpleDateFormat*)DateFormat::createDateInstance();
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (sdf == NULL){
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, 0, expected);
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, "G yyyy DDD", expected);
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
86850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
87050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPattern(SimpleDateFormat& sdf, UDate d, const char* pattern, UDate expected)
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pattern != 0) sdf.applyPattern(pattern);
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString thePat;
877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern: " + sdf.toPattern(thePat));
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatResult; (*(DateFormat*)&sdf).format(d, formatResult);
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" format -> " + formatResult);
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // try {
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d2 = sdf.parse(formatResult, status);
882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" parse(" + formatResult + ") -> " + dateToString(d2));
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d2 != expected) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format2; (*(DateFormat*)&sdf).format(d2, format2);
885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" format -> " + format2);
886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(formatResult == format2)) errln((UnicodeString)"FAIL: Round trip drift");
887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Error: " + (int32_t)status);
891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
89350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of single quotes in patterns.
898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestQuotePattern161()
901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* formatter = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy 'at' hh:mm:ss a zzz", status);
90450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
90550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
90650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
90750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
90850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate currentTime_1 = date(97, UCAL_AUGUST, 13, 10, 42, 28);
910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString; ((DateFormat*)formatter)->format(currentTime_1, dateString);
911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString exp("08/13/1997 at 10:42:28 AM ");
912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"format(" + dateToString(currentTime_1) + ") = " + dateString);
913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (0 != dateString.compareBetween(0, exp.length(), exp, 0, exp.length())) errln((UnicodeString)"FAIL: Expected " + exp);
914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
91750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when handling invalid input strings.
922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135()
925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat::EStyle looks[] = {
928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::SHORT, DateFormat::MEDIUM, DateFormat::LONG, DateFormat::FULL
929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t looks_length = (int32_t)(sizeof(looks) / sizeof(looks[0]));
931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* strings[] = {
932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Mar 15", "Mar 15 1997", "asdf", "3/1/97 1:23:", "3/1/00 1:23:45 AM"
933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t strings_length = (int32_t)(sizeof(strings) / sizeof(strings[0]));
935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG);
936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(full==NULL) {
93785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho      dataerrln("could not create date time instance");
938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
94054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UnicodeString expected("March 1, 2000 at 1:23:45 AM ");
941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < strings_length;++i) {
942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* text = strings[i];
943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t j = 0; j < looks_length;++j) {
944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DateFormat::EStyle dateLook = looks[j];
945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (int32_t k = 0; k < looks_length;++k) {
946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat::EStyle timeLook = looks[k];
947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat *df = DateFormat::createDateTimeInstance(dateLook, timeLook);
948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (df == NULL){
949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    dataerrln("Error calling DateFormat::createDateTimeInstance()");
950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString prefix = UnicodeString(text) + ", " + dateLook + "/" + timeLook + ": ";
953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //try {
954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UDate when = df->parse(text, status);
955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (when == 0 && U_SUCCESS(status)) {
956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln(prefix + "SHOULD NOT HAPPEN: parse returned 0.");
957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        continue;
958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (U_SUCCESS(status))
960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    {
961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UnicodeString format;
962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        UnicodeString pattern;
963b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        SimpleDateFormat* sdtfmt = dynamic_cast<SimpleDateFormat*>(df);
964b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        if (sdtfmt != NULL) {
965b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                            sdtfmt->toPattern(pattern);
966b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        }
967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        full->format(when, format);
968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        logln(prefix + "OK: " + format);
969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if (0!=format.compareBetween(0, expected.length(), expected, 0, expected.length()))
970b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                            errln((UnicodeString)"FAIL: Parse \"" + text + "\", pattern \"" + pattern + "\", expected " + expected + " got " + format);
971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(ParseException e) {
974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    else
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        status = U_ZERO_ERROR;
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(StringIndexOutOfBoundsException e) {
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //    errln(prefix + "SHOULD NOT HAPPEN: " + (int)status);
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete df;
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
98850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const parseFormats[] = {
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d, yyyy",
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d yyyy",
992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "M/d/yy",
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM, yyyy",
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM yyyy",
995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM",
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d",
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy",
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "h:mm a MMMM d, yyyy"
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
100050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1001b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if 0
1002b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// strict inputStrings
1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const inputStrings[] = {
1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 1, 1997", "April 1, 1997", 0, 0, 0, 0, 0, "April 1", 0, 0,
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1, 1970", "January 1, 1970", 0, 0, 0, 0, 0, "January 1", 0, 0,
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1 2037", 0, "January 1 2037", 0, 0, 0, 0, "January 1", 0, 0,
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1/1/70", 0, 0, "1/1/70", 0, 0, 0, 0, "0001", 0,
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "5 May 1997", 0, 0, 0, 0, "5 May 1997", "5 May", 0, "0005", 0,
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "16 May", 0, 0, 0, 0, 0, "16 May", 0, "0016", 0,
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
1016b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#else
1017b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// lenient inputStrings
1018b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char* const inputStrings[] = {
1019b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
1020b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "April 1, 1997", "April 1, 1997", "April 1 1997", "4/1/97", 0, 0, 0, "April 1", 0, 0,
1021b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "Jan 1, 1970", "January 1, 1970", "January 1 1970", "1/1/70", 0, 0, 0, "January 1", 0, 0,
1022b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "Jan 1 2037", "January 1, 2037", "January 1 2037", "1/1/37", 0, 0, 0, "January 1", 0, 0,
10238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    "1/1/70", "January 1, 0070", "January 1 0070", "1/1/70", "1 January, 0070", "1 January 0070", "1 January", "January 1", "0001", 0,
1024b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "5 May 1997", 0, 0, 0, "5 May, 1997", "5 May 1997", "5 May", 0, "0005", 0,
10258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    "16 May", 0, 0, 0, 0, 0, "16 May", 0, "0016", 0,
1026b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
1027b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
1028b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
1029b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
1030b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
1031b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif
1032b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when parsing an array of inputs against an
1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * array of patterns, with known results.  The results are encoded after
1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the input strings in each row.
1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135a()
1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat* dateParse = new SimpleDateFormat(status);
1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
104650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dataerrln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dateParse;
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return;
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* s;
1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UDate date;
1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t PF_LENGTH = (int32_t)(sizeof(parseFormats)/sizeof(parseFormats[0]));
1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t INPUT_LENGTH = (int32_t)(sizeof(inputStrings)/sizeof(inputStrings[0]));
1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->applyPattern("d MMMM, yyyy");
1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->adoptTimeZone(TimeZone::createDefault());
1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  s = "not parseable";
1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString thePat;
1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln(UnicodeString("Trying to parse \"") + s + "\" with " + dateParse->toPattern(thePat));
1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //try {
1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  date = dateParse->parse(s, status);
1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_SUCCESS(status))
1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: Expected exception during parse");
1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //catch(Exception ex) {
1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  else
1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Exception during parse: " + (int32_t)status);
1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_ZERO_ERROR;
1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (uint32_t i = 0; i < INPUT_LENGTH; i += (PF_LENGTH + 1)) {
1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition parsePosition(0);
1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s( inputStrings[i]);
1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (uint32_t index = 0; index < PF_LENGTH;++index) {
1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const char* expected = inputStrings[i + 1 + index];
1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->applyPattern(parseFormats[index]);
1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->adoptTimeZone(TimeZone::createDefault());
1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //try {
1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      parsePosition.setIndex(0);
1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      date = dateParse->parse(s, parsePosition);
1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (parsePosition.getIndex() != 0) {
1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s1, s2;
1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(0, parsePosition.getIndex(), s1);
1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(parsePosition.getIndex(), s.length(), s2);
1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (date == 0) {
1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          errln((UnicodeString)"ERROR: null result fmt=\"" +
1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     parseFormats[index] +
1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     "\" pos=" + parsePosition.getIndex() + " " +
1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s1 + "|" + s2);
1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          UnicodeString result;
1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          ((DateFormat*)dateParse)->format(date, result);
1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          logln((UnicodeString)"Parsed \"" + s + "\" using \"" + dateParse->toPattern(thePat) + "\" to: " + result);
1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (expected == 0)
1095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln((UnicodeString)"FAIL: Expected parse failure, got " + result);
1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          else if (!(result == expected))
1097b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln(UnicodeString("FAIL: Parse \"") + s + UnicodeString("\", expected ") + expected + UnicodeString(", got ") + result);
1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      else if (expected != 0) {
1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL: Expected ") + expected + " from \"" +
1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s + "\" with \"" + dateParse->toPattern(thePat) + "\"");
1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //catch(Exception ex) {
1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (U_FAILURE(status))
1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"An exception was thrown during parse: " + (int32_t)status);
1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  delete dateParse;
1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_FAILURE(status))
1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
111550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of two-digit years.
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYear()
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("dd/MM/yy", Locale::getUK(), ec);
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
112750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "5/6/17", date(117, UCAL_JUNE, 5));
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "4/6/34", date(34, UCAL_JUNE, 4));
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
113350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
113550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::parse2DigitYear(DateFormat& fmt, const char* str, UDate expected)
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt.parse(str, status);
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString thePat;
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Parsing \"") + str + "\" with " + ((SimpleDateFormat*)&fmt)->toPattern(thePat) +
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "  => " + dateToString(d));
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d != expected) errln((UnicodeString)"FAIL: Expected " + expected);
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status))
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Got exception");
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
115250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone061()
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date;
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *formatter;
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date= 859248000000.0;
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date 1997/3/25 00:00 GMT: " + date);
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat((UnicodeString)"dd-MMM-yyyyy HH:mm", Locale::getUK(), status);
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
116850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      dataerrln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      delete formatter;
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter->adoptTimeZone(TimeZone::createTimeZone("GMT"));
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString temp; formatter->format(date, temp);
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted in GMT to: " + temp);
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate tempDate = formatter->parse(temp, status);
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Parsed to: " + dateToString(tempDate));
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (tempDate != date) errln((UnicodeString)"FAIL: Expected " + dateToString(date));
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Throwable t) {
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Date Formatter throws: " + (int32_t)status);
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
118650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
118850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone146()
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *saveDefault = TimeZone::createDefault();
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //try {
1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *thedefault = TimeZone::createTimeZone("GMT");
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone::setDefault(*thedefault);
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // java.util.Locale.setDefault(new java.util.Locale("ar", "", ""));
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // check to be sure... its GMT all right
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *testdefault = TimeZone::createDefault();
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString testtimezone;
1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        testdefault->getID(testtimezone);
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (testtimezone == "GMT")
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("Test timezone = " + testtimezone);
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
1209b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("Test timezone should be GMT, not " + testtimezone);
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // now try to use the default GMT time zone
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        GregorianCalendar *greenwichcalendar =
1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            new GregorianCalendar(1997, 3, 4, 23, 0, status);
121550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if (U_FAILURE(status)) {
121650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            dataerrln("Fail new GregorianCalendar: %s", u_errorName(status));
121750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        } else {
121850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            //*****************************greenwichcalendar.setTimeZone(TimeZone.getDefault());
121950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            //greenwichcalendar.set(1997, 3, 4, 23, 0);
122050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // try anything to set hour to 23:00 !!!
122150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            greenwichcalendar->set(UCAL_HOUR_OF_DAY, 23);
122250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // get time
122350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UDate greenwichdate = greenwichcalendar->getTime(status);
122450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // format every way
122550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UnicodeString DATA [] = {
1226b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                UnicodeString("simple format:  "), UnicodeString("04/04/97 23:00 GMT"),
122750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("MM/dd/yy HH:mm z"),
1228b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                UnicodeString("full format:    "), UnicodeString("Friday, April 4, 1997 11:00:00 o'clock PM GMT"),
122950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("EEEE, MMMM d, yyyy h:mm:ss 'o''clock' a z"),
1230b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                UnicodeString("long format:    "), UnicodeString("April 4, 1997 11:00:00 PM GMT"),
123150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("MMMM d, yyyy h:mm:ss a z"),
123250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("default format: "), UnicodeString("04-Apr-97 11:00:00 PM"),
123350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("dd-MMM-yy h:mm:ss a"),
123450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("short format:   "), UnicodeString("4/4/97 11:00 PM"),
123550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("M/d/yy h:mm a")
123650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            };
123750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t DATA_length = (int32_t)(sizeof(DATA) / sizeof(DATA[0]));
123850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
123950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            for (int32_t i=0; i<DATA_length; i+=3) {
124050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                DateFormat *fmt = new SimpleDateFormat(DATA[i+2], Locale::getEnglish(), status);
1241103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                if (U_FAILURE(status)) {
1242103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
1243103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    break;
1244103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                }
124550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                fmt->setCalendar(*greenwichcalendar);
124650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString result;
124750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                result = fmt->format(greenwichdate, result);
124850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                logln(DATA[i] + result);
124950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if (result != DATA[i+1])
125050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    errln("FAIL: Expected " + DATA[i+1] + ", got " + result);
125150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                delete fmt;
125250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            }
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //finally {
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone::adoptDefault(saveDefault);
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete testdefault;
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete greenwichcalendar;
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete thedefault;
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
126450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
126650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of dates in different locales.
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLocaleDateFormat() // Bug 495
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate testDate = date(97, UCAL_SEPTEMBER, 15);
127450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    DateFormat *dfFrench = DateFormat::createDateTimeInstance(DateFormat::FULL,
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getFrench());
127650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    DateFormat *dfUS = DateFormat::createDateTimeInstance(DateFormat::FULL,
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getUS());
127885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 00:00:00 heure avanc\\u00E9e du Pacifique", -1, US_INV );
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectedFRENCH = expectedFRENCH.unescape();
128054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UnicodeString expectedUS ( "Monday, September 15, 1997 at 12:00:00 AM Pacific Daylight Time" );
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date set to : " + dateToString(testDate));
128250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString out;
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (dfUS == NULL || dfFrench == NULL){
1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance)");
1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfUS;
1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfFrench;
1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfFrench->format(testDate, out);
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with French Locale " + out);
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedFRENCH))
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedFRENCH);
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    out.truncate(0);
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfUS->format(testDate, out);
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with US Locale " + out);
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedUS))
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedUS);
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfUS;
1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfFrench;
1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat(Calendar) API
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestDateFormatCalendar() {
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *date=0, *time=0, *full=0;
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal=0;
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos;
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate when;
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for date fields. */
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date = DateFormat::createDateInstance(DateFormat::kShort, Locale::getUS());
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date == NULL) {
131785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: createDateInstance failed");
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for time fields. */
1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time = DateFormat::createTimeInstance(DateFormat::kShort, Locale::getUS());
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (time == NULL) {
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createTimeInstance failed");
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a full format for output */
1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull,
1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                              Locale::getUS());
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createInstance failed");
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a calendar */
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal = Calendar::createInstance(Locale::getUS(), ec);
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal == NULL || U_FAILURE(ec)) {
133950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln((UnicodeString)"FAIL: Calendar::createInstance failed with " +
1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              u_errorName(ec));
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the date */
1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("4/5/2001", "");
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date->parse(str, *cal, pos);
1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(4/5/2001) failed at " +
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the time */
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("5:45 PM", "");
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time->parse(str, *cal, pos);
1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(17:45) failed at " +
1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
136450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Check result */
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    when = cal->getTime(ec);
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: cal->getTime() failed with " + u_errorName(ec));
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(when, str);
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Thursday, April 5, 2001 5:45:00 PM PDT 986517900000
1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (when == 986517900000.0) {
1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("Ok: Parsed result: " + str);
1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Parsed result: " + str + ", exp 4/5/2001 5:45 PM");
1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
138050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FAIL:
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete date;
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete time;
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat's parsing of space characters.  See jitterbug 1916.
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestSpaceParsing() {
1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1395b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "MMMM d yy", " 04 05 06",  "2006 04 05 00:00:00",
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "04 05 06",   "2006 04 05 00:00:00",
1397b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1398b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "MM d yy",   " 04 05 06",    "2006 04 05 00:00:00",
1399b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04 05 06",     "2006 04 05 00:00:00",
1400b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04/05/06",     "2006 04 05 00:00:00",
1401b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04-05-06",     "2006 04 05 00:00:00",
1402b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04.05.06",     "2006 04 05 00:00:00",
1403b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04 / 05 / 06", "2006 04 05 00:00:00",
1404b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "Apr / 05/ 06", "2006 04 05 00:00:00",
1405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "Apr-05-06",    "2006 04 05 00:00:00",
1406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "Apr 05, 2006", "2006 04 05 00:00:00",
1407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM d yy", " Apr 05 06", "2006 04 05 00:00:00",
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "Apr 05 06",  "2006 04 05 00:00:00",
1410b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "Apr05 06",   "2006 04 05 00:00:00",
1411b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1412b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "hh:mm:ss a", "12:34:56 PM", "1970 01 01 12:34:56",
1413b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,         "12:34:56PM",  "1970 01 01 12:34:56",
1414b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,         "12.34.56PM",  "1970 01 01 12:34:56",
1415b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,         "12-34-56 PM", "1970 01 01 12:34:56",
1416b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,         "12 : 34 : 56  PM", "1970 01 01 12:34:56",
1417b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1418b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "MM d yy 'at' hh:mm:ss a", "04/05/06 12:34:56 PM", "2006 04 05 12:34:56",
1419b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1420b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "MMMM dd yyyy hh:mm a", "September 27, 1964 21:56 PM", "1964 09 28 09:56:00",
1421b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,                   "November 4, 2008 0:13 AM",    "2008 11 04 00:13:00",
1422b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1423b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "HH'h'mm'min'ss's'", "12h34min56s", "1970 01 01 12:34:56",
1424b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,                "12h34mi56s",  "1970 01 01 12:34:56",
1425b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,                "12h34m56s",   "1970 01 01 12:34:56",
1426b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,                "12:34:56",    "1970 01 01 12:34:56"
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of "HHmmss" pattern.
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestExactCountFormat() {
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "HHmmss", "123456", "1970 01 01 12:34:56",
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12345",  "1970 01 01 01:23:45",
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "1234",   NULL,
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00-05",  NULL,
1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12-34",  NULL,
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00+05",  NULL,
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ahhmm",  "PM730",  "1970 01 01 19:30:00",
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of white space.
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWhiteSpaceParsing() {
1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
146050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or null if expect parse failure
146250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Pattern space run should parse input text space run
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MM   d yy",   " 04 01 03",    "2003 04 01",
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,          " 04  01   03 ", "2003 04 01",
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
146850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestInvalidPattern() {
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat f(UnicodeString("Yesterday"), ec);
147650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
147750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
147850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
147950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.format((UDate)0, out, pos);
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(out);
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // The bug is that the call to format() will crash.  By not
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // crashing, the test passes.
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGreekMay() {
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date = -9896080848000.0;
1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("EEEE, dd MMMM yyyy h:mm:ss a", Locale("el", "", ""), ec);
149250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
149350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
149450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
149550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(date, str);
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d2 = fmt.parse(str, pos);
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date != d2) {
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: unable to parse strings where case-folding changes length");
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneMonths()
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "fp", "2004 03 10 16:36:31", "2004 March 10 16:36:31", "2004 03 10 16:36:31",
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLL dd H:mm:ss",  "fp", "2004 03 10 16:36:31", "2004 Mar 10 16:36:31",   "2004 03 10 16:36:31",
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 03 10 16:36:31", "2004 March 10 16:36:31",
1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLL dd H:mm:ss",  "pf", "2004 Mar 10 16:36:31", "2004 03 10 16:36:31", "2004 Mar 10 16:36:31",
151450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "January",   "1970 01 01 0:00:00",
1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "February",  "1970 02 01 0:00:00",
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "March",     "1970 03 01 0:00:00",
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "April",     "1970 04 01 0:00:00",
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "May",       "1970 05 01 0:00:00",
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "June",      "1970 06 01 0:00:00",
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "July",      "1970 07 01 0:00:00",
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "August",    "1970 08 01 0:00:00",
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "September", "1970 09 01 0:00:00",
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "October",   "1970 10 01 0:00:00",
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "November",  "1970 11 01 0:00:00",
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "December",  "1970 12 01 0:00:00",
152750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "Jan", "1970 01 01 0:00:00",
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "Feb", "1970 02 01 0:00:00",
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "Mar", "1970 03 01 0:00:00",
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "Apr", "1970 04 01 0:00:00",
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00",
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "Jun", "1970 06 01 0:00:00",
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "Jul", "1970 07 01 0:00:00",
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "Aug", "1970 08 01 0:00:00",
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "Sep", "1970 09 01 0:00:00",
1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "Oct", "1970 10 01 0:00:00",
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "Nov", "1970 11 01 0:00:00",
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "Dec", "1970 12 01 0:00:00",
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
154150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "fp", "2004 04 10 16:36:31", "2004 duben 10 16:36:31", "2004 04 10 16:36:31",
1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MMMM dd H:mm:ss", "fp", "2004 04 10 16:36:31", "2004 dubna 10 16:36:31", "2004 04 10 16:36:31",
154754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "yyyy LLL dd H:mm:ss",  "fp", "2004 04 10 16:36:31", "2004 dub 10 16:36:31",   "2004 04 10 16:36:31",
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 duben 10 16:36:31",
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MMMM dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 dubna 10 16:36:31",
1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "pf", "2004 duben 10 16:36:31", "2004 04 10 16:36:31", "2004 duben 10 16:36:31",
1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MMMM dd H:mm:ss", "pf", "2004 dubna 10 16:36:31", "2004 04 10 16:36:31", "2004 dubna 10 16:36:31",
155250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "leden",               "1970 01 01 0:00:00",
1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "\\u00FAnor",           "1970 02 01 0:00:00",
1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "b\\u0159ezen",         "1970 03 01 0:00:00",
1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "duben",               "1970 04 01 0:00:00",
1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "kv\\u011Bten",         "1970 05 01 0:00:00",
1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "\\u010Derven",         "1970 06 01 0:00:00",
1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "\\u010Dervenec",       "1970 07 01 0:00:00",
1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "srpen",               "1970 08 01 0:00:00",
1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159\\u00ED", "1970 09 01 0:00:00",
1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDjen",     "1970 10 01 0:00:00",
1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "listopad",            "1970 11 01 0:00:00",
1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "prosinec",            "1970 12 01 0:00:00",
1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
156654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 01 01 0:00:00", "led",  "1970 01 01 0:00:00",
156754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 02 01 0:00:00", "\\u00FAno",  "1970 02 01 0:00:00",
156854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 03 01 0:00:00", "b\\u0159e",  "1970 03 01 0:00:00",
156954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 04 01 0:00:00", "dub",  "1970 04 01 0:00:00",
157054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 05 01 0:00:00", "kv\\u011B",  "1970 05 01 0:00:00",
157154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 06 01 0:00:00", "\\u010Dvn",  "1970 06 01 0:00:00",
157254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 07 01 0:00:00", "\\u010Dvc",  "1970 07 01 0:00:00",
157354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 08 01 0:00:00", "srp",  "1970 08 01 0:00:00",
157454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159",  "1970 09 01 0:00:00",
157554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDj", "1970 10 01 0:00:00",
157654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 11 01 0:00:00", "lis", "1970 11 01 0:00:00",
157754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "LLL", "fp", "1970 12 01 0:00:00", "pro", "1970 12 01 0:00:00",
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
157950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneDays()
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "Sunday",    "1970 01 04 0:00:00",
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "Monday",    "1970 01 05 0:00:00",
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "Tuesday",   "1970 01 06 0:00:00",
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "Wednesday", "1970 01 07 0:00:00",
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "Thursday",  "1970 01 01 0:00:00",
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "Friday",    "1970 01 02 0:00:00",
1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "Saturday",  "1970 01 03 0:00:00",
159650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "Sun", "1970 01 04 0:00:00",
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "Mon", "1970 01 05 0:00:00",
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "Tue", "1970 01 06 0:00:00",
1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "Wed", "1970 01 07 0:00:00",
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "Thu", "1970 01 01 0:00:00",
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "Fri", "1970 01 02 0:00:00",
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "Sat", "1970 01 03 0:00:00",
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
160550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "ned\\u011Ble",       "1970 01 04 0:00:00",
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "pond\\u011Bl\\u00ED", "1970 01 05 0:00:00",
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "\\u00FAter\\u00FD",   "1970 01 06 0:00:00",
1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "st\\u0159eda",       "1970 01 07 0:00:00",
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "\\u010Dtvrtek",      "1970 01 01 0:00:00",
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "p\\u00E1tek",        "1970 01 02 0:00:00",
1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "sobota",            "1970 01 03 0:00:00",
161650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "ne",      "1970 01 04 0:00:00",
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "po",      "1970 01 05 0:00:00",
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "\\u00FAt", "1970 01 06 0:00:00",
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "st",      "1970 01 07 0:00:00",
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "\\u010Dt", "1970 01 01 0:00:00",
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "p\\u00E1", "1970 01 02 0:00:00",
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "so",      "1970 01 03 0:00:00",
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
162550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
16308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid DateFormatTest::TestShortDays()
16318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{
16328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    const char *EN_DATA[] = {
16338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "yyyy MM dd HH:mm:ss",
16348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
16358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "EEEEEE, MMM d y", "fp", "2013 01 13 0:00:00", "Su, Jan 13 2013", "2013 01 13 0:00:00",
16368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "EEEEEE, MMM d y", "fp", "2013 01 16 0:00:00", "We, Jan 16 2013", "2013 01 16 0:00:00",
16378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "EEEEEE d",        "fp", "1970 01 17 0:00:00", "Sa 17",           "1970 01 17 0:00:00",
16388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "cccccc d",        "fp", "1970 01 17 0:00:00", "Sa 17",           "1970 01 17 0:00:00",
16398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "cccccc",          "fp", "1970 01 03 0:00:00", "Sa",              "1970 01 03 0:00:00",
16408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    };
16418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    const char *SV_DATA[] = {
16428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "yyyy MM dd HH:mm:ss",
16438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
16448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "EEEEEE d MMM y",  "fp", "2013 01 13 0:00:00", "s\\u00F6 13 jan 2013", "2013 01 13 0:00:00",
16458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "EEEEEE d MMM y",  "fp", "2013 01 16 0:00:00", "on 16 jan 2013",       "2013 01 16 0:00:00",
16468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "EEEEEE d",        "fp", "1970 01 17 0:00:00", "l\\u00F6 17",          "1970 01 17 0:00:00",
16478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "cccccc d",        "fp", "1970 01 17 0:00:00", "L\\u00F6 17",          "1970 01 17 0:00:00",
16488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "cccccc",          "fp", "1970 01 03 0:00:00", "L\\u00F6",             "1970 01 03 0:00:00",
16498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    };
16508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
16518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    expect(SV_DATA, ARRAY_SIZE(SV_DATA), Locale("sv", "", ""));
16528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius}
16538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestNarrowNames()
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MMMMM dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31",
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss",  "2004 03 10 16:36:31", "2004 M 10 16:36:31",
166150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 01 01 0:00:00", "J",
1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 02 01 0:00:00", "F",
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 03 01 0:00:00", "M",
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 04 01 0:00:00", "A",
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 05 01 0:00:00", "M",
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 06 01 0:00:00", "J",
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 07 01 0:00:00", "J",
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 08 01 0:00:00", "A",
1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 09 01 0:00:00", "S",
1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 10 01 0:00:00", "O",
1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 11 01 0:00:00", "N",
1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 12 01 0:00:00", "D",
167450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "J",
1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "F",
1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "M",
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "A",
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "M",
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "J",
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "J",
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "A",
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "S",
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "O",
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "N",
1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "D",
1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "S",
1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "M",
1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "T",
1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "W",
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "T",
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "F",
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
169550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "S",
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "M",
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "T",
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "W",
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "T",
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "F",
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
170450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *CS_DATA[] = {
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31",
1709b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "yyyy MMMMM dd H:mm:ss", "2004 04 10 16:36:31", "2004 4 10 16:36:31",
1710b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1711b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 01 01 0:00:00", "1",
1712b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 02 01 0:00:00", "2",
1713b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 03 01 0:00:00", "3",
1714b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 04 01 0:00:00", "4",
1715b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 05 01 0:00:00", "5",
1716b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 06 01 0:00:00", "6",
1717b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 07 01 0:00:00", "7",
1718b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 08 01 0:00:00", "8",
1719b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 09 01 0:00:00", "9",
1720b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 10 01 0:00:00", "10",
1721b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 11 01 0:00:00", "11",
1722b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 12 01 0:00:00", "12",
172350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "l",
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "\\u00FA",
1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "b",
1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "d",
1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "k",
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "\\u010D",
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "\\u010D",
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "s",
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "z",
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "\\u0159",
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "l",
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "p",
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "N",
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "P",
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "\\u00DA",
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "S",
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "\\u010C",
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "P",
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "N",
1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "P",
1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "\\u00DA",
1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "S",
1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "\\u010C",
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "P",
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
175350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestEras()
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "1951 07 17", "July 17 1951 Anno Domini", "1951 07 17",
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "-438 07 17", "July 17 0439 Before Christ", "-438 07 17",
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
177350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestQuarters()
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Q",    "fp", "1970 01 01", "1",           "1970 01 01",
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQ",   "fp", "1970 04 01", "02",          "1970 04 01",
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQ",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "q",    "fp", "1970 01 01", "1",           "1970 01 01",
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qq",   "fp", "1970 04 01", "02",          "1970 04 01",
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqq",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
179250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test parsing.  Input is an array that starts with the following
1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * header:
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or NULL to reuse prior pattern
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = input string
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = expected parse result (parsed with pattern [0])
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If expect parse failure, then [i+2] should be NULL.
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectParse(const char** data, int32_t data_length,
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 const Locale& loc) {
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UDate FAIL = (UDate) -1;
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString FAIL_STR("parse failure");
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat gotfmt("G yyyy MM dd HH:mm:ss z", loc, ec);
1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
182150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* currentPat = NULL;
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* input    = data[i++];
1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* expected = data[i++];
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ec = U_ZERO_ERROR;
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate got = fmt.parse(input, ec);
1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString gotstr(FAIL_STR);
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(ec)) {
1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            got = FAIL;
1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotstr.remove();
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotfmt.format(got, gotstr);
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec2 = U_ZERO_ERROR;
1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate exp = FAIL;
1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expstr(FAIL_STR);
1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (expected != NULL) {
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expstr = expected;
1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            exp = ref.parse(expstr, ec2);
1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(ec2)) {
1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // This only happens if expected is in wrong format --
1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // should never happen once test is debugged.
1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln("FAIL: Internal test error");
1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return;
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (got == exp) {
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Ok: " + input + " x " +
186150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  currentPat + " => " + gotstr);
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: " + input + " x " +
1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  currentPat + " => " + gotstr + ", expected " +
1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  expstr);
1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
186750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting and parsing.  Input is an array that starts
1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = control string, either "fp", "pf", or "F".
1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2..] = data strings
1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The number of data strings depends on the control string.
1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1. "y/M/d H:mm:ss.SS", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.56", "2004 03 10 16:36:31.560",
1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+2] (as parsed using pattern [0]) and expect string [i+3].
1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+3] and expect date [i+4].
1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 2. "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567"
1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'F': Format date [i+2] and expect string [i+3],
1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      then parse string [i+3] and expect date [i+2].
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 3. "y/M/d H:mm:ss.SSSS", "pf", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.5670",
1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+2] and expect date [i+3].
1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+3] and expect string [i+4].
1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expect(const char** data, int32_t data_length,
1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
190450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
190550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
190650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
190750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* control = data[i++];
1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (uprv_strcmp(control, "fp") == 0) {
1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            datestr = data[i++];
1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            date = ref.parse(ctou(datestr), ec);
1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "pf") == 0) {
1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string = data[i++];
1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "F") == 0) {
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr  = data[i++];
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string   = data[i++];
1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(string, ec);
1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Invalid control string " + control);
1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting.  Input is an array that starts
1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = data string a
1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = data string b
1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format date [i+1] and expect string [i+2].
1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "y/M/d H:mm:ss.SSSS", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567"
1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectFormat(const char** data, int32_t data_length,
2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
200850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
200950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
201050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
201150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* datestr = data[i++];
2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* string = data[i++];
2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = ref.parse(ctou(datestr), ec);
2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!assertSuccess("parse", ec)) return;
2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        ctou(string),
2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        fmt.format(date, str.remove()));
2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTime() {
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const Locale en("en");
2034b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  // Note: We no longer parse strings in different styles.
2035b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*
2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* ZDATA[] = {
2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm zzz",
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // round trip
2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // non-generic timezone string influences dst offset even if wrong for date/time
2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PDT", "2004 01 01 01:00 PDT", "2004/1/1 0:00 PST",
2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 PDT", "2004 01 01 01:00 PDT", "2004/1/1 0:00 Pacific Time",
2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PST", "2004 07 01 02:00 PDT", "2004/7/1 2:00 PDT",
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 PST", "2004 07 01 02:00 PDT", "2004/7/1 2:00 Pacific Time",
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // generic timezone generates dst offset appropriate for local time
2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 Pacific Time",
2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // daylight savings time transition edge cases.
2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse does not really exist, PT interpreted as earlier time
2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PT", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PDT",
2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PST", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PDT",
2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PDT", "2005 04 03 01:30 PST", "2005/4/3 1:30 PST",
2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "pf", "2005/4/3 2:30 PT", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PT",
2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "pf", "2005/4/3 2:30 PST", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PT",
2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "pf", "2005/4/3 2:30 PDT", "2005 04 03 01:30 PST", "2005/4/3 1:30 PT",
2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse is ambiguous, PT interpreted as later time
2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30 PST",
2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "pf", "2005/10/30 1:30 PT", "2005 10 30  01:30 PST", "2005/10/30 1:30 PT",
2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30",
2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PT", "2004 10 31 01:30 PST", "2004/10/31 1:30 PST",
2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PST", "2004 10 31 01:30 PST", "2004/10/31 1:30 PST",
2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PDT", "2004 10 31 01:30 PDT", "2004/10/31 1:30 PDT",
2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "pf", "2004/10/31 1:30 PT", "2004 10 31 01:30 PST", "2004/10/31 1:30 PT",
2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "pf", "2004/10/31 1:30 PST", "2004 10 31 01:30 PST", "2004/10/31 1:30 PT",
2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "pf", "2004/10/31 1:30 PDT", "2004 10 31 01:30 PDT", "2004/10/31 1:30 PT",
2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
2075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho*/
2076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  const char* ZDATA[] = {
2077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "yyyy MM dd HH:mm zzz",
2078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // round trip
2079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
2080b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
2081b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
2082b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
2083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // non-generic timezone string influences dst offset even if wrong for date/time
2084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PDT", "2004 01 01 01:00 PDT", "2004/1/1 0:00 PST",
2085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PST", "2004 07 01 02:00 PDT", "2004/7/1 2:00 PDT",
2086b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // generic timezone generates dst offset appropriate for local time
2087b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PST", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
2088b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 Pacific Time", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
2089b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PDT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
2090b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 Pacific Time", "2004 07 01 01:00 PDT", "2004/7/1 1:00 Pacific Time",
2091b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // daylight savings time transition edge cases.
2092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // time to parse does not really exist, PT interpreted as earlier time
2093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PST", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PDT",
2094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PDT", "2005 04 03 01:30 PST", "2005/4/3 1:30 PST",
2095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm v", "pf", "2005/4/3 2:30 PT", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PT",
2096b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
2097b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // time to parse is ambiguous, PT interpreted as later time
2098b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm v", "pf", "2005/10/30 1:30 PT", "2005 10 30  01:30 PST", "2005/10/30 1:30 PT",
2099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30",
2100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PST", "2004 10 31 01:30 PST", "2004/10/31 1:30 PST",
2102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PDT", "2004 10 31 01:30 PDT", "2004/10/31 1:30 PDT",
2103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm v", "pf", "2004/10/31 1:30 PT", "2004 10 31 01:30 PST", "2004/10/31 1:30 PT",
2104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
2105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  };
2106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t ZDATA_length = sizeof(ZDATA)/ sizeof(ZDATA[0]);
2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(ZDATA, ZDATA_length, en);
2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  logln("cross format/parse tests");    // Note: We no longer support cross format/parse
2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString basepat("yy/MM/dd H:mm ");
211450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  SimpleDateFormat formats[] = {
2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvv", en, status),
2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvvv", en, status),
2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzz", en, status),
2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzzz", en, status)
2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
212050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (U_FAILURE(status)) {
212150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(status));
212250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return;
212350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t formats_length = sizeof(formats)/sizeof(formats[0]);
2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString test;
2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat univ("yyyy MM dd HH:mm zzz", en, status);
2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ASSERT_OK(status);
212950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const UnicodeString times[] = {
213050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "2004 01 02 03:04 PST",
213150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "2004 07 08 09:10 PDT"
2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  int32_t times_length = sizeof(times)/sizeof(times[0]);
2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (int i = 0; i < times_length; ++i) {
2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = univ.parse(times[i], status);
2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("\ntime: ") + d);
2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int j = 0; j < formats_length; ++j) {
2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      test.remove();
2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      formats[j].format(d, test);
2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      logln("\ntest: '" + test + "'");
2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      for (int k = 0; k < formats_length; ++k) {
2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate t = formats[k].parse(test, status);
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(status)) {
2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (d != t) {
214550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln((UnicodeString)"FAIL: format " + k +
214650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  " incorrectly parsed output of format " + j +
2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " (" + test + "), returned " +
2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  dateToString(t) + " instead of " + dateToString(d));
2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          } else {
2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"OK: format " + k + " parsed ok");
2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          }
2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (status == U_PARSE_ERROR) {
215350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          errln((UnicodeString)"FAIL: format " + k +
215450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                " could not parse output of format " + j +
2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                " (" + test + ")");
2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTimeZoneOrder() {
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // generic times should parse the same no matter what the placement of the time zone string
2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2165b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  // Note: We no longer support cross style format/parse
2166b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2167b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //const char* XDATA[] = {
2168b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "yyyy MM dd HH:mm zzz",
2169b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  // standard time, explicit daylight/standard
2170b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
2171b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "y/M/d zzz H:mm", "pf", "2004/1/1 PT 1:00", "2004 01 01 01:00 PST", "2004/1/1 PST 1:00",
2172b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "zzz y/M/d H:mm", "pf", "PT 2004/1/1 1:00", "2004 01 01 01:00 PST", "PST 2004/1/1 1:00",
2173b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2174b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  // standard time, generic
2175b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
2176b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "y/M/d vvvv H:mm", "pf", "2004/1/1 PT 1:00", "2004 01 01 01:00 PST", "2004/1/1 Pacific Time 1:00",
2177b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "vvvv y/M/d H:mm", "pf", "PT 2004/1/1 1:00", "2004 01 01 01:00 PST", "Pacific Time 2004/1/1 1:00",
2178b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2179b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  // dahylight time, explicit daylight/standard
2180b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
2181b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "y/M/d zzz H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PDT 1:00",
2182b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "zzz y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PDT 2004/7/1 1:00",
2183b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2184b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  // daylight time, generic
2185b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 Pacific Time",
2186b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "y/M/d vvvv H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 Pacific Time 1:00",
2187b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "vvvv y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "Pacific Time 2004/7/1 1:00",
2188b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //};
2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* XDATA[] = {
2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy MM dd HH:mm zzz",
2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, explicit daylight/standard
2192b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PST", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
2193b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d zzz H:mm", "pf", "2004/1/1 PST 1:00", "2004 01 01 01:00 PST", "2004/1/1 PST 1:00",
2194b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "zzz y/M/d H:mm", "pf", "PST 2004/1/1 1:00", "2004 01 01 01:00 PST", "PST 2004/1/1 1:00",
2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, generic
2197b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 Pacific Time", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
2198b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d vvvv H:mm", "pf", "2004/1/1 Pacific Time 1:00", "2004 01 01 01:00 PST", "2004/1/1 Pacific Time 1:00",
2199b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "vvvv y/M/d H:mm", "pf", "Pacific Time 2004/1/1 1:00", "2004 01 01 01:00 PST", "Pacific Time 2004/1/1 1:00",
2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // dahylight time, explicit daylight/standard
2202b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PDT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
2203b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d zzz H:mm", "pf", "2004/7/1 PDT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PDT 1:00",
2204b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "zzz y/M/d H:mm", "pf", "PDT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PDT 2004/7/1 1:00",
2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // daylight time, generic
2207b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d H:mm v", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PT",
2208b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d v H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PT 1:00",
2209b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "v y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PT 2004/7/1 1:00",
2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t XDATA_length = sizeof(XDATA)/sizeof(XDATA[0]);
2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  Locale en("en");
2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(XDATA, XDATA_length, en);
2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestZTimeZoneParsing(void) {
2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale en("en");
2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //SimpleDateFormat univ("yyyy-MM-dd'T'HH:mm Z", en, status);
2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("HH:mm Z", en, status);
222250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "construct SimpleDateFormat", TRUE)) return;
2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const TimeZone *t = TimeZone::getGMT();
2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setTimeZone(*t);
222550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setLenient(false);
2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pp(0);
2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    struct {
2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString input;
2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expected_result;
2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } tests[] = {
2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 -0200", "13:00 +0000" },
2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0200", "09:00 +0000" },
2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0400", "07:00 +0000" },
2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0530", "05:30 +0000" }
2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t tests_length = sizeof(tests)/sizeof(tests[0]);
2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i = 0; i < tests_length; ++i) {
2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        pp.setIndex(0);
2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = univ.parse(tests[i].input, pp);
2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(pp.getIndex() != tests[i].input.length()){
2244b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln("Test %i: setZoneString() did not succeed. Consumed: %i instead of %i",
2245b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                  i, pp.getIndex(), tests[i].input.length());
2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
224750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        result.remove();
2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        univ.format(d, result);
2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(result != tests[i].expected_result) {
2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Expected " + tests[i].expected_result
2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  + " got " + result);
2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("SUCCESS: Parsed " + tests[i].input
2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " got " + result
2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " expected " + tests[i].expected_result);
2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHost(void)
2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2263103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_HAS_WIN32_API
2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Win32DateTimeTest::testLocales(this);
2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Relative Date Tests
2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
227050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid DateFormatTest::TestRelative(int daysdelta,
2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const Locale& loc,
2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const char *expectChars) {
2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char banner[25];
2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sprintf(banner, "%d", daysdelta);
2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bannerStr(banner, "");
227650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
227850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos(0);
2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *fullrelative = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fullrelative == NULL) {
228585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("DateFormat::createDateInstance(DateFormat::kFullRelative, %s) returned NULL", loc.getName());
2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full         = DateFormat::createDateInstance(DateFormat::kFull        , loc);
229050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, %s) returned NULL", loc.getName());
2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
229550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_full =         DateFormat::createDateInstance(DateFormat::kFull,         en);
229750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_full == NULL) {
2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, en) returned NULL");
2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
230250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_fulltime =         DateFormat::createDateTimeInstance(DateFormat::kFull,DateFormat::kFull,en);
230450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_fulltime == NULL) {
2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, en) returned NULL");
2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
230950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString normalResult;
2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expect;
2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseResult;
231450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *c = Calendar::createInstance(status);
2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Today = Today
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->setTime(Calendar::getNow(), status);
2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(daysdelta != 0) {
2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->add(Calendar::DATE,daysdelta,status);
2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // calculate the expected string
2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(expectChars != NULL) {
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect = expectChars;
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        full->format(*c, expect, pos); // expected = normal full
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
233050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullrelative   ->format(*c, result, pos);
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full        ->format(*c, normalResult, pos);
233350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(result != expect) {
2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Format ["+bannerStr+"] of "+normalResult+" failed, expected "+expect+" but got " + result);
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Format ["+bannerStr+"] of "+normalResult+" got " + result);
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
233950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
234050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //verify
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fullrelative->parse(result, status);
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
234450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseFormat; // parse rel->format full
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(d, parseFormat, status);
234750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString origFormat;
2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(*c, origFormat, pos);
235050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(parseFormat!=origFormat) {
2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Parse ["+bannerStr+"] of "+result+" failed, expected "+parseFormat+" but got "+origFormat);
2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Parse ["+bannerStr+"] of "+result+" passed, got "+parseFormat);
2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullrelative;
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_fulltime;
2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_full;
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelative(void)
2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 0, en, "Today");
2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative(-1, en, "Yesterday");
2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 1, en, "Tomorrow");
2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 2, en, NULL);
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -2, en, NULL);
2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 3, en, NULL);
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -3, en, NULL);
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 300, en, NULL);
2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -300, en, NULL);
2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeClone(void)
2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en");
2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
239085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: Can't create Relative date instance");
2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHostClone(void)
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This is mainly important on Windows.
2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en_US@compat=host");
2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFull, loc);
2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
242085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: Can't create Relative date instance");
2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestTimeZoneDisplayName()
2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This test data was ported from ICU4J.  Don't know why the 6th column in there because it's not being
2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // used currently.
2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *fallbackTests[][6]  = {
2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2445103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZZ", "-08:00", "-8:00" },
2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Pacific Standard Time", "America/Los_Angeles" },
2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Pacific Daylight Time", "America/Los_Angeles" },
2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Pacific Time", "America/Los_Angeles" },
245454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "Los Angeles Time", "America/Los_Angeles" },
24558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en_GB", "America/Los_Angeles", "2004-01-15T12:00:00Z", "z", "GMT-8", "America/Los_Angeles" },
2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "Z", "-0700", "-7:00" },
2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "v", "MST", "America/Phoenix" },
2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "vvvv", "Mountain Standard Time", "America/Phoenix" },
246654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "VVVV", "Phoenix Time", "America/Phoenix" },
2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
24708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2471103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Standard Time", "-3:00" },
2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
24748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2475103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Standard Time", "-3:00" },
247654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires Time", "America/Buenos_Aires" },
2477103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Standard Time", "America/Buenos_Aires" },
247854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Buenos Aires Time", "America/Buenos_Aires" },
2479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
24828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2483103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Standard Time", "-3:00" },
2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
24868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2487103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Standard Time", "-3:00" },
248854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires Time", "America/Buenos_Aires" },
2489103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Standard Time", "America/Buenos_Aires" },
249054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Buenos Aires Time", "America/Buenos_Aires" },
2491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
24948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
2495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "Cuba Standard Time", "-5:00" },
2496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
24988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
2499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "Cuba Daylight Time", "-4:00" },
2500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "v", "Cuba Time", "America/Havana" },
2501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Cuba Time", "America/Havana" },
2502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "VVVV", "Cuba Time", "America/Havana" },
2503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
25068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
2507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
25108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
2511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
251254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Sydney Time", "Australia/Sydney" },
2513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
251454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "VVVV", "Sydney Time", "Australia/Sydney" },
2515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
25188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
2519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
25228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
252454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Sydney Time", "Australia/Sydney" },
2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
252654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "VVVV", "Sydney Time", "Australia/Sydney" },
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2529b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Greenwich Mean Time", "+0:00" },
2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
25348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "Europe/London" },
2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "British Summer Time", "Europe/London" },
2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu en.txt has exemplar city for this time zone
2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "v", "United Kingdom Time", "Europe/London" },
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "United Kingdom Time", "Europe/London" },
2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "United Kingdom Time", "Europe/London" },
2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
25438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
25478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
25498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
25558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
25598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "India Time", "Asia/Calcutta" },
2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "India Standard Time", "Asia/Calcutta" },
256350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
25648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // Proper CLDR primary zone support #9733
25658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Asia/Shanghai", "2013-01-01T00:00:00Z", "VVVV", "China Time", "Asia/Shanghai" },
25668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en", "Asia/Harbin", "2013-01-01T00:00:00Z", "VVVV", "Harbin Time", "Asia/Harbin" },
25678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
257254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // BEGIN android-change
257354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "-8:00" },
257454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Nordamerikanische Westk\\u00fcsten-Normalzeit", "-8:00" },
2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
257754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "-7:00" },
2578b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Nordamerikanische Westk\\u00fcsten-Sommerzeit", "-7:00" },
257954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
2580b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Nordamerikanische Westk\\u00fcstenzeit", "America/Los_Angeles" },
25818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // END android-change
2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
25858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
258654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentinische Normalzeit", "-3:00" },
2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
25898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
259054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentinische Normalzeit", "-3:00" },
259154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires Zeit", "America/Buenos_Aires" },
259254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinische Normalzeit", "America/Buenos_Aires" },
2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
25968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
259754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentinische Normalzeit", "-3:00" },
2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
26008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
260154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentinische Normalzeit", "-3:00" },
260254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires Zeit", "America/Buenos_Aires" },
260354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinische Normalzeit", "America/Buenos_Aires" },
2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
26078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
260854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "Kubanische Normalzeit", "-5:00" },
2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
26118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
261254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "Kubanische Sommerzeit", "-4:00" },
2613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba Zeit", "America/Havana" },
261454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kubanische Zeit", "America/Havana" },
2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // added to test proper fallback of country name
2616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba Zeit", "America/Havana" },
261754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kubanische Zeit", "America/Havana" },
2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
26218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
2622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Ostaustralische Sommerzeit", "+11:00" },
2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
26258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
262654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Ostaustralische Normalzeit", "+10:00" },
262754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Sydney Zeit", "Australia/Sydney" },
2628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Ostaustralische Zeit", "Australia/Sydney" },
2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
26328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
2633b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Ostaustralische Sommerzeit", "+11:00" },
2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
26368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
263754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Ostaustralische Normalzeit", "+10:00" },
263854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Sydney Zeit", "Australia/Sydney" },
2639b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Ostaustralische Zeit", "Australia/Sydney" },
2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2642b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
2643b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2644b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Mittlere Greenwich-Zeit", "+0:00" },
2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
26478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
264854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "de", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "Britische Sommerzeit", "+1:00" },
2649b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-07-15T00:00:00Z", "v", "Vereinigtes K\\u00f6nigreich Zeit", "Europe/London" },
2650b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "Vereinigtes K\\u00f6nigreich Zeit", "Europe/London" },
2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
26548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
26588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
26608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
2661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
26668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
2667b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "Indische Zeit", "+5:30" },
2668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
26708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
2671b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "Indische Zeit", "+5:30" },
2672b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "Indien Zeit", "Asia/Calcutta" },
2673b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "Indische Zeit", "Asia/Calcutta" },
2674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
26788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0800", "-8:00" },
267954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // BEGIN android-change
26808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
268154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u5317\\u7f8e\\u592a\\u5e73\\u6d0b\\u6807\\u51c6\\u65f6\\u95f4", "America/Los_Angeles" },
2682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
26838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0700", "-7:00" },
26848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
26858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u5317\\u7f8e\\u592a\\u5e73\\u6d0b\\u590f\\u4ee4\\u65f6\\u95f4", "America/Los_Angeles" },
2686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt has exemplar city for this time zone
26878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
268854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u5317\\u7f8e\\u592a\\u5e73\\u6d0b\\u65f6\\u95f4", "America/Los_Angeles" },
26898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // END android-change
2690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
26938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
269485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
26978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
269885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
269954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u5E03\\u5B9C\\u8BFA\\u65AF\\u827E\\u5229\\u65AF\\u65F6\\u95F4", "America/Buenos_Aires" },
270085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
2701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2703103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
27048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
270585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2707103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
27088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
270985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
271054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u5E03\\u5B9C\\u8BFA\\u65AF\\u827E\\u5229\\u65AF\\u65F6\\u95F4", "America/Buenos_Aires" },
271185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
2712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2714103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0500", "-5:00" },
27158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
271685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u6807\\u51c6\\u65f6\\u95f4", "-5:00" },
2717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2718103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0400", "-4:00" },
27198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
272085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u590f\\u4ee4\\u65f6\\u95f4", "-4:00" },
272185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
272285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
2723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2725103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+1100", "+11:00" },
27268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2729103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+1000", "+10:00" },
27308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
273185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
2732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt does not have info for this time zone
273354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u6089\\u5C3C\\u65F6\\u95F4", "Australia/Sydney" },
273485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2737103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+1100", "+11:00" },
27388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
2739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2741103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+1000", "+10:00" },
27428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
274385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
274454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u6089\\u5C3C\\u65F6\\u95F4", "Australia/Sydney" },
274585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2748103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
274954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2750103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
275154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u683C\\u6797\\u5C3C\\u6CBB\\u6807\\u51C6\\u65F6\\u95F4", "+0:00" },
2753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2754103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+0100", "+1:00" },
27558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
275654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u82f1\\u56fd\\u590f\\u4ee4\\u65f6\\u95f4", "+1:00" },
275785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
275885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
275985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
2760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2762103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
27638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2764103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2766103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
27678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2768103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
27698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
2770103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-0300", "-3:00" },
2771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2774103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+0530", "+5:30" },
27758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+530", "+5:30" },
277654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u65f6\\u95f4", "+5:30" },
2777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2778103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+0530", "+5:30" },
27798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+530", "+05:30" },
278054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u65f6\\u95f4", "+5:30" },
278185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u5370\\u5ea6\\u65f6\\u95f4", "Asia/Calcutta" },
278254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u5370\\u5ea6\\u65f6\\u95f4", "Asia/Calcutta" },
2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
27848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // Proper CLDR primary zone support #9733
27858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Asia/Shanghai", "2013-01-01T00:00:00Z", "VVVV", "\\u4e2d\\u56fd\\u65f6\\u95f4", "Asia/Shanghai" },
27868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "zh", "Asia/Harbin", "2013-01-01T00:00:00Z", "VVVV", "\\u54c8\\u5c14\\u6ee8\\u65f6\\u95f4", "Asia/Harbin" },
27878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2791103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
27928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // BEGIN android-change
27938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "-8:00" },
2794b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u092a\\u094d\\u0930\\u0936\\u093e\\u0902\\u0924\\u0020\\u092e\\u093e\\u0928\\u0915\\u0020\\u0938\\u092e\\u092f", "-8:00" },
2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2796103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
27978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "-7:00" },
2798b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u092A\\u094D\\u0930\\u0936\\u093E\\u0902\\u0924 \\u0926\\u093F\\u0935\\u093E\\u0935\\u0932\\u094B\\u0915 \\u0938\\u092E\\u092F", "-7:00" },
27998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
2800b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u092A\\u094D\\u0930\\u0936\\u093E\\u0902\\u0924 \\u0938\\u092E\\u092F", "America/Los_Angeles" },
28018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // END android-change
2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2804103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
28058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2806103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "-3:00" },
2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2808103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
28098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2810103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "-3:00" },
281154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u092C\\u094D\\u092F\\u0942\\u0928\\u0938 \\u0906\\u092F\\u0930\\u0938 \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
2812103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2815103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
28168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2817103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "-3:00" },
2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2819103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
28208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2821103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "-3:00" },
282254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u092C\\u094D\\u092F\\u0942\\u0928\\u0938 \\u0906\\u092F\\u0930\\u0938 \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
2823103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2826103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
28278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
282854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0915\\u093e \\u092e\\u093e\\u0928\\u0915 \\u0938\\u092e\\u092f", "-5:00" },
2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2830103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
28318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
283254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0915\\u093e \\u0921\\u0947\\u0932\\u093e\\u0907\\u091f \\u091f\\u093e\\u0907\\u092e", "-4:00" },
2833b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0938\\u092E\\u092F", "America/Havana" },
283454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0915\\u093e \\u0938\\u092E\\u092F", "America/Havana" },
2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2837103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
28388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
2839b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094D\\u200D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u0926\\u093F\\u0935\\u093E\\u0935\\u0932\\u094B\\u0915 \\u0938\\u092E\\u092F", "+11:00" },
2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2841103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
28428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
2843b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094D\\u200D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "+10:00" },
284454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0938\\u093F\\u0921\\u0928\\u0940 \\u0938\\u092E\\u092F", "Australia/Sydney" },
2845b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u0911\\u0938\\u094D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u0938\\u092E\\u092F", "Australia/Sydney" },
2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2848103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
28498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
2850b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094D\\u200D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u0926\\u093F\\u0935\\u093E\\u0935\\u0932\\u094B\\u0915 \\u0938\\u092E\\u092F", "+11:00" },
2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2852103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
28538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
2854b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094D\\u200D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "+10:00" },
285554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0938\\u093F\\u0921\\u0928\\u0940 \\u0938\\u092E\\u092F", "Australia/Sydney" },
2856b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u0911\\u0938\\u094D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u0938\\u092E\\u092F", "Australia/Sydney" },
2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2859b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
2860b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
286154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u0917\\u094d\\u0930\\u0940\\u0928\\u0935\\u093f\\u091a \\u092e\\u0940\\u0928 \\u091f\\u093e\\u0907\\u092e", "+0:00" },
2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2863103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
28648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
2865103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
28668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u092C\\u094D\\u0930\\u093F\\u091F\\u0947\\u0928 \\u0938\\u092E\\u092F", "Europe/London" },
28678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u092C\\u094D\\u0930\\u093F\\u091F\\u0947\\u0928 \\u0938\\u092E\\u092F", "Europe/London" },
2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2870103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
28718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2872103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2874103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
28758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
2876103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
28778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
2878103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2881103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "IST", "+5:30" },
2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2885103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "IST", "+05:30" },
2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IST", "Asia/Calcutta" },
2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "Asia/Calcutta" },
2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
289485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0800", "-8:00" },
289554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // BEGIN android-change
289654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
28978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "uslax", "America/Los_Angeles" },
2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u0422\\u0438\\u0445\\u043E\\u043E\\u043A\\u0435\\u0430\\u043D\\u0441\\u043A\\u0430 \\u0447\\u0430\\u0441\\u043E\\u0432\\u0430 \\u0437\\u043E\\u043D\\u0430", "America/Los_Angeles" },
2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
290085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0700", "-7:00" },
290154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
29028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "uslax", "America/Los_Angeles" },
2903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u0422\\u0438\\u0445\\u043E\\u043E\\u043A\\u0435\\u0430\\u043D\\u0441\\u043A\\u0430 \\u043B\\u044F\\u0442\\u043D\\u0430 \\u0447\\u0430\\u0441\\u043E\\u0432\\u0430 \\u0437\\u043E\\u043D\\u0430", "America/Los_Angeles" },
2904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt has exemplar city for this time zone
29058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
2906b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0422\\u0438\\u0445\\u043E\\u043E\\u043A\\u0435\\u0430\\u043D\\u0441\\u043A\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Los_Angeles" },
290754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u041B\\u043E\\u0441 \\u0410\\u043D\\u0436\\u0435\\u043B\\u0438\\u0441 \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Los_Angeles" },
29088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // END android-change
2909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
291185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
29128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
291354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430 \\u2013 \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-3:00" },
2914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
291585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
29168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
291754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430 \\u2013 \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-3:00" },
291854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441 \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Buenos_Aires" },
291954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430 \\u2013 \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "America/Buenos_Aires" },
2920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
292285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
29238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
292454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430 \\u2013 \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-3:00" },
2925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
292685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
29278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
292854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430 \\u2013 \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-3:00" },
2929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt does not have info for this time zone
293054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441 \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Buenos_Aires" },
293154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430 \\u2013 \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "America/Buenos_Aires" },
2932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
293485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
29358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-5", "-5:00" },
293654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u041a\\u0443\\u0431\\u0438\\u043d\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-5:00" },
2937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
293885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
29398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-4", "-4:00" },
294054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u041a\\u0443\\u0431\\u0438\\u043d\\u0441\\u043a\\u043e \\u043b\\u044f\\u0442\\u043d\\u043e \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-4:00" },
2941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u041a\\u0443\\u0431\\u0430 \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Havana" },
294254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u041a\\u0443\\u0431\\u0438\\u043d\\u0441\\u043a\\u043e \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Havana" },
2943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
294585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
29468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+11", "+11:00" },
2947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u043B\\u044F\\u0442\\u043D\\u043E \\u0447\\u0430\\u0441\\u043E\\u0432\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+11:00" },
2948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
294985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
29508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+10", "+10:00" },
2951b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+10:00" },
295254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0421\\u0438\\u0434\\u043D\\u0438 \\u0432\\u0440\\u0435\\u043C\\u0435", "Australia/Sydney" },
2953b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "Australia/Sydney" },
2954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
295685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
29578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+11", "+11:00" },
2958b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u043B\\u044F\\u0442\\u043D\\u043E \\u0447\\u0430\\u0441\\u043E\\u0432\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+11:00" },
2959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
296085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
29618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+10", "+10:00" },
2962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+10:00" },
296354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0421\\u0438\\u0434\\u043D\\u0438 \\u0432\\u0440\\u0435\\u043C\\u0435", "Australia/Sydney" },
2964b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "Australia/Sydney" },
2965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2967b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447", "+0:00" },
296854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u0427\\u0430\\u0441\\u043E\\u0432\\u0430 \\u0437\\u043E\\u043D\\u0430 \\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447", "+0:00" },
2970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
297185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
29728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1", "+1:00" },
297385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
2974b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u041e\\u0431\\u0435\\u0434\\u0438\\u043d\\u0435\\u043d\\u043e \\u043a\\u0440\\u0430\\u043b\\u0441\\u0442\\u0432\\u043e \\u0432\\u0440\\u0435\\u043C\\u0435", "Europe/London" },
2975b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u041e\\u0431\\u0435\\u0434\\u0438\\u043d\\u0435\\u043d\\u043e \\u043a\\u0440\\u0430\\u043b\\u0441\\u0442\\u0432\\u043e \\u0432\\u0440\\u0435\\u043C\\u0435", "Europe/London" },
2976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
297885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
29798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
298085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
298285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
29838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
298485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
29858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
298685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
299085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
29918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+530", "+5:30" },
299254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u0418\\u043d\\u0434\\u0438\\u0439\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "+5:30" },
2993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
299485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
29958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+530", "+05:30" },
299654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u0418\\u043d\\u0434\\u0438\\u0439\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "+5:30" },
2997b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u0418\\u043D\\u0434\\u0438\\u044F \\u0432\\u0440\\u0435\\u043C\\u0435", "Asia/Calcutta" },
299854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u0418\\u043d\\u0434\\u0438\\u0439\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "Asia/Calcutta" },
2999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
3000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
300285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
30038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // BEGIN android-change
30048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
300585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u6a19\\u6e96\\u6642", "America/Los_Angeles" },
300685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-700" },
300785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
30088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
300985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u590f\\u6642\\u9593", "America/Los_Angeles" },
3010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt has exemplar city for this time zone
30118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
301285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30E1\\u30EA\\u30AB\\u592A\\u5e73\\u6D0B\\u6642\\u9593", "America/Los_Angeles" },
301354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u30ED\\u30B5\\u30F3\\u30BC\\u30EB\\u30B9\\u6642\\u9593", "America/Los_Angeles" },
30148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // END Android-change
3015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
301785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
30188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3019b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
3020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
302185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
30228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3023b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
3024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
302554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9\\u6642\\u9593", "America/Buenos_Aires" },
3026b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "America/Buenos_Aires" },
3027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
302985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
30308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3031b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
3032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
303385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
30348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3035b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
303654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9\\u6642\\u9593", "America/Buenos_Aires" },
3037b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "America/Buenos_Aires" },
3038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
304085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
30418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
3042b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u30AD\\u30E5\\u30FC\\u30D0\\u6A19\\u6E96\\u6642", "-5:00" },
3043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
304485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
30458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
3046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u30AD\\u30E5\\u30FC\\u30D0\\u590F\\u6642\\u9593", "-4:00" },
3047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
3048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
3049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
305185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
30528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
3053b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u590F\\u6642\\u9593", "+11:00" },
3054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
305585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
30568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
3057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6A19\\u6E96\\u6642", "+10:00" },
3058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
305954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u30B7\\u30C9\\u30CB\\u30FC\\u6642\\u9593", "Australia/Sydney" },
3060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6642\\u9593", "Australia/Sydney" },
3061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
306385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
30648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
3065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u590F\\u6642\\u9593", "+11:00" },
3066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
306785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
30688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
3069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6A19\\u6E96\\u6642", "+10:00" },
307054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u30B7\\u30C9\\u30CB\\u30FC\\u6642\\u9593", "Australia/Sydney" },
3071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6642\\u9593", "Australia/Sydney" },
3072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
3074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
3075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
3076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u30B0\\u30EA\\u30CB\\u30C3\\u30B8\\u6A19\\u6E96\\u6642", "+0:00" },
3077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
307885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
30798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
308054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u82f1\\u56fd\\u590f\\u6642\\u9593", "+1:00" },
3081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
3082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
3083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
3084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
308685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
30878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
308885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
3089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
309085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
30918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
309285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
30938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
309485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
3095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
3097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
309885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
30998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
310054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "+5:30" },
3101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
310285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
31038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
310454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "+5:30" },
3105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
310654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
3107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
3109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
3111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
31128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // BEGIN Android-change
31138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "-8:00" },
3114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
3115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
3116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
31178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "-7:00" },
3118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
31198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
312054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Los Angeles", "America/Los_Angeles" },
31218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // END Android-change
3122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3123b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
3124b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
31258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3126b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
3127b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
3128b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
31298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3130b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
313154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires", "America/Buenos_Aires" },
313254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Buenos Aires", "America/Buenos_Aires" },
3133b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3134b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
3135b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
31368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3137b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
3138b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
3139b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
31408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3141b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
314254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires", "America/Buenos_Aires" },
314354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Buenos Aires", "America/Buenos_Aires" },
3144b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3145b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
3146b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
31478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
3148b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
3149b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
3150b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
31518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
3152b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
315354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "v", "CU", "America/Havana" },
315454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "CU", "America/Havana" },
3155b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3156b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
3157b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
31588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
3159b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
3160b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
3161b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
31628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
3163b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
316454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Sydney", "Australia/Sydney" },
316554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Sydney", "Australia/Sydney" },
3166b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3167b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
3168b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
31698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
3170b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
3171b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
3172b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
31738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
3174b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
317554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Sydney", "Australia/Sydney" },
317654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Sydney", "Australia/Sydney" },
3177b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3178b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
3179b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
3180b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
3181b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT", "+0:00" },
3182b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
3183b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
31848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
3185b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
318654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "v", "GB", "Europe/London" },
318754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "GB", "Europe/London" },
3188b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3189b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
3190b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
31918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3192b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
3193b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
3194b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
31958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
3196b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
31978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
3198b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
3199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
3201b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
3202b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
32038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
3204b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
3205b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
3206b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
32078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
3208b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
320954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IN", "Alna/Calcutta" },
321054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "IN", "Asia/Calcutta" },
3211b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3212b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // Ticket#8589 Partial location name to use country name if the zone is the golden
3213b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // zone for the time zone's country.
3214b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en_MX", "America/Chicago", "1995-07-15T00:00:00Z", "vvvv", "Central Time (United States)", "America/Chicago"},
3215b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3216103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // Tests proper handling of time zones that should have empty sets when inherited from the parent.
3217103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // For example, en_GB understands CET as Central European Time, but en_HK, which inherits from en_GB
3218103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // does not
3219103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_GB", "Europe/Paris", "2004-01-15T00:00:00Z", "zzzz", "Central European Standard Time", "+1:00"},
3220103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_GB", "Europe/Paris", "2004-07-15T00:00:00Z", "zzzz", "Central European Summer Time", "+2:00"},
3221103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_GB", "Europe/Paris", "2004-01-15T00:00:00Z", "z", "CET", "+1:00"},
3222103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_GB", "Europe/Paris", "2004-07-15T00:00:00Z", "z", "CEST", "+2:00"},
3223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_HK", "Europe/Paris", "2004-01-15T00:00:00Z", "zzzz", "Central European Standard Time", "+1:00"},
3224103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_HK", "Europe/Paris", "2004-07-15T00:00:00Z", "zzzz", "Central European Summer Time", "+2:00"},
32258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en_HK", "Europe/Paris", "2004-01-15T00:00:00Z", "z", "GMT+1", "+1:00"},
32268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en_HK", "Europe/Paris", "2004-07-15T00:00:00Z", "z", "GMT+2", "+2:00"},
3227103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
322885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { NULL, NULL, NULL, NULL, NULL, NULL },
3229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
3230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
323185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
323285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Calendar *cal = GregorianCalendar::createInstance(status);
323350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "GregorianCalendar::createInstance", TRUE)) return;
3234b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    SimpleDateFormat testfmt(UnicodeString("yyyy-MM-dd'T'HH:mm:ss'Z'"), status);
3235b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (failure(status, "SimpleDateFormat constructor", TRUE)) return;
3236b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    testfmt.setTimeZone(*TimeZone::getGMT());
3237b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
323885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; fallbackTests[i][0]; i++) {
323985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        const char **testLine = fallbackTests[i];
324085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString info[5];
324185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for ( int j = 0 ; j < 5 ; j++ ) {
324285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            info[j] = UnicodeString(testLine[j], -1, US_INV);
324385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
324485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        info[4] = info[4].unescape();
324585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        logln("%s;%s;%s;%s", testLine[0], testLine[1], testLine[2], testLine[3]);
3246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
324785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TimeZone *tz = TimeZone::createTimeZone(info[1]);
324885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
3249b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UDate d = testfmt.parse(testLine[2], status);
3250b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        cal->setTime(d, status);
3251b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (U_FAILURE(status)) {
3252b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln(UnicodeString("Failed to set date: ") + testLine[2]);
325385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
325485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
325585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        SimpleDateFormat fmt(info[3], Locale(testLine[0]),status);
325685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ASSERT_OK(status);
325785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        cal->adoptTimeZone(tz);
325885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString result;
325985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        FieldPosition pos(0);
326085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fmt.format(*cal,result,pos);
326185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (result != info[4]) {
326250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln(info[0] + ";" + info[1] + ";" + info[2] + ";" + info[3] + " expected: '" +
326385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                  info[4] + "' but got: '" + result + "'");
326485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
326585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
326685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete cal;
326785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
326885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
326985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::TestRoundtripWithCalendar(void) {
327085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
327185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
327285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *tz = TimeZone::createTimeZone("Europe/Paris");
327385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *gmt = TimeZone::createTimeZone("Etc/GMT");
327485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
327585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Calendar *calendars[] = {
327685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=gregorian"), status),
327785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=buddhist"), status),
327885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        Calendar::createInstance(*tz, Locale("und@calendar=hebrew"), status),
327985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=islamic"), status),
328085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=japanese"), status),
328185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        NULL
328285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
328385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
328450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Failed to initialize calendars: %s", u_errorName(status));
328585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int i = 0; calendars[i] != NULL; i++) {
328685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            delete calendars[i];
328785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
328885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
328985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
3290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
329185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //FIXME The formatters commented out below are currently failing because of
329285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // the calendar calculation problem reported by #6691
329385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
329485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // The order of test formatters must match the order of calendars above.
329585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat *formatters[] = {
329685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("en_US")), //calendar=gregorian
329785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("th_TH")), //calendar=buddhist
329885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("he_IL@calendar=hebrew")),
329985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ar_EG@calendar=islamic")),
330085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ja_JP@calendar=japanese")),
330185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        NULL
330285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
330385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
330485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate d = Calendar::getNow();
330585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString buf;
330685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    FieldPosition fpos;
330785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    ParsePosition ppos;
330885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
330985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; formatters[i] != NULL; i++) {
331085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        buf.remove();
331185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fpos.setBeginIndex(0);
331285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fpos.setEndIndex(0);
331385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->setTime(d, status);
331485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
331585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // Normal case output - the given calendar matches the calendar
331685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // used by the formatter
331785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        formatters[i]->format(*calendars[i], buf, fpos);
331885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString refStr(buf);
331985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
332085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int j = 0; calendars[j] != NULL; j++) {
332185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (j == i) {
332285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                continue;
332385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
332485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            buf.remove();
332585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            fpos.setBeginIndex(0);
332685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            fpos.setEndIndex(0);
332785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->setTime(d, status);
332885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
332985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // Even the different calendar type is specified,
333085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // we should get the same result.
333185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            formatters[i]->format(*calendars[j], buf, fpos);
333285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (refStr != buf) {
333385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                errln((UnicodeString)"FAIL: Different format result with a different calendar for the same time -"
333485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Reference calendar type=" + calendars[i]->getType()
333585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Another calendar type=" + calendars[j]->getType()
333685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected result=" + refStr
333785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual result=" + buf);
3338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
333985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
3340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
334185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->setTimeZone(*gmt);
334285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->clear();
334385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ppos.setErrorIndex(-1);
334485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ppos.setIndex(0);
334585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
334685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // Normal case parse result - the given calendar matches the calendar
334785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // used by the formatter
334885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        formatters[i]->parse(refStr, *calendars[i], ppos);
334985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
335085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int j = 0; calendars[j] != NULL; j++) {
335185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (j == i) {
335285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                continue;
335385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
335485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->setTimeZone(*gmt);
335585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->clear();
335685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            ppos.setErrorIndex(-1);
335785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            ppos.setIndex(0);
335885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
335985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // Even the different calendar type is specified,
336085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // we should get the same time and time zone.
336185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            formatters[i]->parse(refStr, *calendars[j], ppos);
336285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (calendars[i]->getTime(status) != calendars[j]->getTime(status)
336385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                || calendars[i]->getTimeZone() != calendars[j]->getTimeZone()) {
336485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                UnicodeString tzid;
336585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                errln((UnicodeString)"FAIL: Different parse result with a different calendar for the same string -"
336685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Reference calendar type=" + calendars[i]->getType()
336785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Another calendar type=" + calendars[j]->getType()
336885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Date string=" + refStr
336985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected time=" + calendars[i]->getTime(status)
337085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected time zone=" + calendars[i]->getTimeZone().getID(tzid)
337185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual time=" + calendars[j]->getTime(status)
337285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual time zone=" + calendars[j]->getTimeZone().getID(tzid));
3373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
3374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
337585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (U_FAILURE(status)) {
337685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            errln((UnicodeString)"FAIL: " + u_errorName(status));
337785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            break;
337885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
337985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
338085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
338185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete tz;
338285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete gmt;
338385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; calendars[i] != NULL; i++) {
338485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete calendars[i];
338585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
338685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; formatters[i] != NULL; i++) {
338785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete formatters[i];
3388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
3389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
3392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeError(void)
3393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
3394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status;
3395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
339650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_reltime_reldate =         DateFormat::createDateTimeInstance(DateFormat::kFullRelative,DateFormat::kFullRelative,en);
3398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(en_reltime_reldate == NULL) {
3399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: rel date/rel time failed");
3400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
3401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: rel date/rel time created, should have failed.");
3402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete en_reltime_reldate;
3403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
3404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeOther(void)
3407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
3408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Nothing in this test. When we get more data from CLDR, put in some tests of -2, +2, etc. ");
3409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
3411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
341285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6338(void)
341385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
341485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
341585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
341685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("ar"), status);
341750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new SimpleDateFormat", TRUE)) return;
341885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
341985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt1 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
342085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str1;
342185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str1 = fmt1->format(dt1, str1);
342285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str1);
342385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
342485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt11 = fmt1->parse(str1, status);
342585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
342685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
342785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str11;
342885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str11 = fmt1->format(dt11, str11);
342985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str11);
343085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
343185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str1 != str11) {
343285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str1
343385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str11);
343485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
343585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt1;
343685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
343785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
343885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
343985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
344085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("y M d"), Locale("ar"), status);
344185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
344285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
344385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt2 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
344485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str2;
344585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str2 = fmt2->format(dt2, str2);
344685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str2);
344785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
344885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt22 = fmt2->parse(str2, status);
344985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
345085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
345185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str22;
345285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str22 = fmt2->format(dt22, str22);
345385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str22);
345485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
345585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str2 != str22) {
345685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str2
345785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str22);
345885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
345985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt2;
346085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
346185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
346285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
346385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
346485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt3 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("en-us"), status);
346585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
346685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
346785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt3 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
346885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str3;
346985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str3 = fmt3->format(dt3, str3);
347085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str3);
347185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
347285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt33 = fmt3->parse(str3, status);
347385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
347485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
347585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str33;
347685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str33 = fmt3->format(dt33, str33);
347785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str33);
347885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
347985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str3 != str33) {
348085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str3
348185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str33);
348285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
348385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt3;
348485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
348585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
348685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
348785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
348885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt4 = new SimpleDateFormat(UnicodeString("y M  d"), Locale("en-us"), status);
348985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
349085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
349185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt4 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
349285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str4;
349385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str4 = fmt4->format(dt4, str4);
349485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str4);
349585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
349685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt44 = fmt4->parse(str4, status);
349785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
349885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
349985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str44;
350085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str44 = fmt4->format(dt44, str44);
350185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str44);
350285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
350385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str4 != str44) {
350485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str4
350585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str44);
350685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
350785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt4;
350885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
350985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
351085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
351185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6726(void)
351285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
351385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // status
351485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//    UErrorCode status = U_ZERO_ERROR;
351585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
351685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // fmtf, fmtl, fmtm, fmts;
351785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString strf, strl, strm, strs;
351885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt = date(2008-1900, UCAL_JUNE, 10, 12, 00);
351985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
352085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Locale loc("ja");
352185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtf = DateFormat::createDateTimeInstance(DateFormat::FULL, DateFormat::FULL, loc);
352285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtl = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::FULL, loc);
352385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtm = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, loc);
352485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmts = DateFormat::createDateTimeInstance(DateFormat::SHORT, DateFormat::FULL, loc);
352585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (fmtf == NULL || fmtl == NULL || fmtm == NULL || fmts == NULL) {
352685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("Unable to create DateFormat. got NULL.");
352785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        /* It may not be true that if one is NULL all is NULL.  Just to be safe. */
352885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtf;
352985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtl;
353085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtm;
353185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmts;
353250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
353385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
353485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
353585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strf = fmtf->format(dt, strf);
353685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strl = fmtl->format(dt, strl);
353785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strm = fmtm->format(dt, strm);
353885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strs = fmts->format(dt, strs);
353985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
354027f654740f2a26ad62a5c155af9199af9e69b889claireho
354127f654740f2a26ad62a5c155af9199af9e69b889claireho    logln("strm.charAt(10)=%04X wanted 0x20\n", strm.charAt(10));
354227f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strm.charAt(10) != UChar(0x0020)) {
354327f654740f2a26ad62a5c155af9199af9e69b889claireho      errln((UnicodeString)"FAIL: Improper formatted date: " + strm );
354485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
354527f654740f2a26ad62a5c155af9199af9e69b889claireho    logln("strs.charAt(10)=%04X wanted 0x20\n", strs.charAt(8));
3546103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (strs.charAt(10)  != UChar(0x0020)) {
354727f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"FAIL: Improper formatted date: " + strs);
354885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
354985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
355085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmtf;
355150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete fmtl;
355250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete fmtm;
355385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmts;
355485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
355585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    return;
355685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
355785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
355885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/**
355985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Test DateFormat's parsing of default GMT variants.  See ticket#6135
356085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */
356185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::TestGMTParsing() {
356285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const char* DATA[] = {
356385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",
356485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
356585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // pattern, input, expected output (in quotes)
356685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 GMT+03:00",   "10:20:30 +0300",
356785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 UT-02:00",    "10:20:30 -0200",
356885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 GMT",         "10:20:30 +0000",
356985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss vvvv",    "10:20:30 UT+10:00",    "10:20:30 +1000",
357085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss zzzz",    "10:20:30 UTC",         "10:20:30 +0000",   // standalone "UTC"
357185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "ZZZZ HH:mm:ss",    "UT 10:20:30",          "10:20:30 +0000",
35728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "z HH:mm:ss",       "UT+0130 10:20:30",     "10:20:30 +0130",
35738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "z HH:mm:ss",       "UTC+0130 10:20:30",    "10:20:30 +0130",
35748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // Note: GMT-1100 no longer works because of the introduction of the short
35758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // localized GMT support. Previous implementation support this level of
35768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // leniency (no separator char in localized GMT format), but the new
35778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // implementation handles GMT-11 as the legitimate short localized GMT format
35788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        // and stop at there. Otherwise, roundtrip would be broken.
35798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        //"HH mm Z ss",       "10 20 GMT-1100 30",    "10:20:30 -1100",
35808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "HH mm Z ss",       "10 20 GMT-11 30",    "10:20:30 -1100",
3581103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "HH:mm:ssZZZZZ",    "14:25:45Z",            "14:25:45 +0000",
3582103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "HH:mm:ssZZZZZ",    "15:00:00-08:00",       "15:00:00 -0800",
358385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
358485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
358585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    expectParse(DATA, DATA_len, Locale("en"));
358685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
358785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
358885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// Test case for localized GMT format parsing
358985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// with no delimitters in offset format (Chinese locale)
359085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6880() {
359185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
359285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate d1, d2, dp1, dp2, dexp1, dexp2;
359385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString s1, s2;
359485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
359585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *tz = TimeZone::createTimeZone("Asia/Shanghai");
359685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    GregorianCalendar gcal(*tz, status);
359750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "construct GregorianCalendar", TRUE)) return;
359850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
359985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
36008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    gcal.set(1910, UCAL_JULY, 1, 12, 00);   // offset 8:05:57
360185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    d1 = gcal.getTime(status);
360285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
360385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
360485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1950, UCAL_JULY, 1, 12, 00);   // offset 8:00
360585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    d2 = gcal.getTime(status);
360685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
360785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
360885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1970, UCAL_JANUARY, 1, 12, 00);
360985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dexp2 = gcal.getTime(status);
36108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    dexp1 = dexp2 - (5*60 + 57)*1000;   // subtract 5m57s
361185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
361285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
361385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Gregorian calendar error");
361485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
361585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
361685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat *fmt = DateFormat::createTimeInstance(DateFormat::kFull, Locale("zh"));
361785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (fmt == NULL) {
361885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("Unable to create DateFormat. Got NULL.");
361985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
362085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
362185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->adoptTimeZone(tz);
362285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
362385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->format(d1, s1);
362485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->format(d2, s2);
362585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
362685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dp1 = fmt->parse(s1, status);
362785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dp2 = fmt->parse(s2, status);
362885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
362985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
363085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Parse failure");
363185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
363285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
363385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (dp1 != dexp1) {
363485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Failed to parse " + s1 + " parsed: " + dp1 + " expected: " + dexp1);
363585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
363685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (dp2 != dexp2) {
363785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Failed to parse " + s2 + " parsed: " + dp2 + " expected: " + dexp2);
363885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
363985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
364085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt;
364185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
3642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3643b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct {
3644b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const char * localeStr;
3645b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UBool        lenient;
3646b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UBool        expectFail;
3647b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UnicodeString datePattern;
3648b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UnicodeString dateString;
3649b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} NumAsStringItem;
3650b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3651b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid DateFormatTest::TestNumberAsStringParsing()
3652b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{
3653b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const NumAsStringItem items[] = {
3654b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // loc lenient fail?  datePattern                                         dateString
36558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "",   FALSE, FALSE,  UnicodeString("y MMMM d HH:mm:ss"),                UnicodeString("2009 7 14 08:43:57") },  // Google Patch. CLDR Ticket 5932.
3656b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "",   TRUE,  FALSE, UnicodeString("y MMMM d HH:mm:ss"),                 UnicodeString("2009 7 14 08:43:57") },
3657b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", FALSE, FALSE, UnicodeString("MMM d, y"),                          UnicodeString("Jul 14, 2009") },
3658b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", TRUE,  FALSE, UnicodeString("MMM d, y"),                          UnicodeString("Jul 14, 2009") },
3659b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", FALSE, TRUE,  UnicodeString("MMM d, y"),                          UnicodeString("7 14, 2009") },
3660b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", TRUE,  FALSE, UnicodeString("MMM d, y"),                          UnicodeString("7 14, 2009") },
3661b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", FALSE, FALSE, UnicodeString("yyyy/MM/dd"),                        UnicodeString("2009/07/14")         },
3662b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", TRUE,  FALSE, UnicodeString("yyyy/MM/dd"),                        UnicodeString("2009/07/14")         },
3663b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      //{ "ja", FALSE, FALSE, UnicodeString("yyyy/MMMMM/d"),                      UnicodeString("2009/7/14")          }, // #8860 covers test failure
3664b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", TRUE,  FALSE, UnicodeString("yyyy/MMMMM/d"),                      UnicodeString("2009/7/14")          },
3665b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", FALSE, FALSE, CharsToUnicodeString("y\\u5E74M\\u6708d\\u65E5"),   CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5")   },
3666b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", TRUE,  FALSE, CharsToUnicodeString("y\\u5E74M\\u6708d\\u65E5"),   CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5")   },
3667b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", FALSE, FALSE, CharsToUnicodeString("y\\u5E74MMMd\\u65E5"),        CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5")   },
3668b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", TRUE,  FALSE, CharsToUnicodeString("y\\u5E74MMMd\\u65E5"),        CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5")   }, // #8820 fixes test failure
3669b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", FALSE, FALSE, UnicodeString("yyyy. M. d."),                       UnicodeString("2009. 7. 14.")       },
3670b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", TRUE,  FALSE, UnicodeString("yyyy. M. d."),                       UnicodeString("2009. 7. 14.")       },
3671b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", FALSE, FALSE, UnicodeString("yyyy. MMMMM d."),                    CharsToUnicodeString("2009. 7\\uC6D4 14.")             },
3672b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", TRUE,  FALSE, UnicodeString("yyyy. MMMMM d."),                    CharsToUnicodeString("2009. 7\\uC6D4 14.")             }, // #8820 fixes test failure
3673b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", FALSE, FALSE, CharsToUnicodeString("y\\uB144 M\\uC6D4 d\\uC77C"), CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
3674b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", TRUE,  FALSE, CharsToUnicodeString("y\\uB144 M\\uC6D4 d\\uC77C"), CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
3675b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", FALSE, FALSE, CharsToUnicodeString("y\\uB144 MMM d\\uC77C"),      CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
3676b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", TRUE,  FALSE, CharsToUnicodeString("y\\uB144 MMM d\\uC77C"),      CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") }, // #8820 fixes test failure
3677b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { NULL, FALSE, FALSE, UnicodeString(""),                                  UnicodeString("")                   }
3678b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
3679b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const NumAsStringItem * itemPtr;
3680b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for (itemPtr = items; itemPtr->localeStr != NULL; itemPtr++ ) {
3681b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        Locale locale = Locale::createFromName(itemPtr->localeStr);
3682b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UErrorCode status = U_ZERO_ERROR;
3683b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        SimpleDateFormat *formatter = new SimpleDateFormat(itemPtr->datePattern, locale, status);
3684b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (formatter == NULL || U_FAILURE(status)) {
3685b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
3686b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            return;
3687b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
3688b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3689b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        formatter->setLenient(itemPtr->lenient);
3690b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UDate date1 = formatter->parse(itemPtr->dateString, status);
3691b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (U_FAILURE(status)) {
3692b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (!itemPtr->expectFail) {
3693b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL, err when expected success: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
3694b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        ": using pattern \"" + itemPtr->datePattern + "\", could not parse \"" + itemPtr->dateString + "\"; err: " + u_errorName(status) );
3695b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
3696b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        } else if (itemPtr->expectFail) {
3697b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL, expected err but got none: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
3698b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        ": using pattern \"" + itemPtr->datePattern + "\", did parse \"" + itemPtr->dateString + "\"." );
3699b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        } else if (!itemPtr->lenient) {
3700b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            UnicodeString formatted;
3701b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            formatter->format(date1, formatted);
3702b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (formatted != itemPtr->dateString) {
3703b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL, mismatch formatting parsed date: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
3704b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        ": using pattern \"" + itemPtr->datePattern + "\", did parse \"" + itemPtr->dateString + "\", formatted result \"" + formatted + "\".");
3705b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
3706b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
3707b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3708b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete formatter;
3709b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
3710b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
3711b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
371227f654740f2a26ad62a5c155af9199af9e69b889clairehovoid DateFormatTest::TestISOEra() {
371327f654740f2a26ad62a5c155af9199af9e69b889claireho
371427f654740f2a26ad62a5c155af9199af9e69b889claireho    const char* data[] = {
371527f654740f2a26ad62a5c155af9199af9e69b889claireho    // input, output
371627f654740f2a26ad62a5c155af9199af9e69b889claireho    "BC 4004-10-23T07:00:00Z", "BC 4004-10-23T07:00:00Z",
371727f654740f2a26ad62a5c155af9199af9e69b889claireho    "AD 4004-10-23T07:00:00Z", "AD 4004-10-23T07:00:00Z",
371827f654740f2a26ad62a5c155af9199af9e69b889claireho    "-4004-10-23T07:00:00Z"  , "BC 4005-10-23T07:00:00Z",
371927f654740f2a26ad62a5c155af9199af9e69b889claireho    "4004-10-23T07:00:00Z"   , "AD 4004-10-23T07:00:00Z",
372027f654740f2a26ad62a5c155af9199af9e69b889claireho    };
372127f654740f2a26ad62a5c155af9199af9e69b889claireho
372227f654740f2a26ad62a5c155af9199af9e69b889claireho    int32_t numData = 8;
372327f654740f2a26ad62a5c155af9199af9e69b889claireho
372427f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
372527f654740f2a26ad62a5c155af9199af9e69b889claireho
372627f654740f2a26ad62a5c155af9199af9e69b889claireho    // create formatter
372727f654740f2a26ad62a5c155af9199af9e69b889claireho    SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("GGG yyyy-MM-dd'T'HH:mm:ss'Z"), status);
372827f654740f2a26ad62a5c155af9199af9e69b889claireho    failure(status, "new SimpleDateFormat", TRUE);
3729b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (status == U_MISSING_RESOURCE_ERROR) {
3730b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (fmt1 != NULL) {
3731b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            delete fmt1;
3732b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
3733b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        return;
3734b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
373527f654740f2a26ad62a5c155af9199af9e69b889claireho    for(int i=0; i < numData; i+=2) {
373627f654740f2a26ad62a5c155af9199af9e69b889claireho        // create input string
373727f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString in = data[i];
373827f654740f2a26ad62a5c155af9199af9e69b889claireho
373927f654740f2a26ad62a5c155af9199af9e69b889claireho        // parse string to date
374027f654740f2a26ad62a5c155af9199af9e69b889claireho        UDate dt1 = fmt1->parse(in, status);
374127f654740f2a26ad62a5c155af9199af9e69b889claireho        failure(status, "fmt->parse", TRUE);
374227f654740f2a26ad62a5c155af9199af9e69b889claireho
374327f654740f2a26ad62a5c155af9199af9e69b889claireho        // format date back to string
374427f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString out;
374527f654740f2a26ad62a5c155af9199af9e69b889claireho        out = fmt1->format(dt1, out);
374627f654740f2a26ad62a5c155af9199af9e69b889claireho        logln(out);
374727f654740f2a26ad62a5c155af9199af9e69b889claireho
374827f654740f2a26ad62a5c155af9199af9e69b889claireho        // check that roundtrip worked as expected
374927f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString expected = data[i+1];
375027f654740f2a26ad62a5c155af9199af9e69b889claireho        if (out != expected) {
375127f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln((UnicodeString)"FAIL: " + in + " -> " + out + " expected -> " + expected);
375227f654740f2a26ad62a5c155af9199af9e69b889claireho        }
375327f654740f2a26ad62a5c155af9199af9e69b889claireho    }
375427f654740f2a26ad62a5c155af9199af9e69b889claireho
3755b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    delete fmt1;
375627f654740f2a26ad62a5c155af9199af9e69b889claireho}
375727f654740f2a26ad62a5c155af9199af9e69b889clairehovoid DateFormatTest::TestFormalChineseDate() {
375827f654740f2a26ad62a5c155af9199af9e69b889claireho
375927f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
376027f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString pattern ("y\\u5e74M\\u6708d\\u65e5", -1, US_INV );
376127f654740f2a26ad62a5c155af9199af9e69b889claireho    pattern = pattern.unescape();
376227f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString override ("y=hanidec;M=hans;d=hans", -1, US_INV );
376327f654740f2a26ad62a5c155af9199af9e69b889claireho
376427f654740f2a26ad62a5c155af9199af9e69b889claireho    // create formatter
376527f654740f2a26ad62a5c155af9199af9e69b889claireho    SimpleDateFormat *sdf = new SimpleDateFormat(pattern,override,Locale::getChina(),status);
376627f654740f2a26ad62a5c155af9199af9e69b889claireho    failure(status, "new SimpleDateFormat with override", TRUE);
376727f654740f2a26ad62a5c155af9199af9e69b889claireho
376827f654740f2a26ad62a5c155af9199af9e69b889claireho    UDate thedate = date(2009-1900, UCAL_JULY, 28);
376927f654740f2a26ad62a5c155af9199af9e69b889claireho    FieldPosition pos(0);
377027f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString result;
377127f654740f2a26ad62a5c155af9199af9e69b889claireho    sdf->format(thedate,result,pos);
377227f654740f2a26ad62a5c155af9199af9e69b889claireho
377327f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString expected = "\\u4e8c\\u3007\\u3007\\u4e5d\\u5e74\\u4e03\\u6708\\u4e8c\\u5341\\u516b\\u65e5";
377427f654740f2a26ad62a5c155af9199af9e69b889claireho    expected = expected.unescape();
377527f654740f2a26ad62a5c155af9199af9e69b889claireho    if (result != expected) {
377627f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln((UnicodeString)"FAIL: -> " + result + " expected -> " + expected);
377727f654740f2a26ad62a5c155af9199af9e69b889claireho    }
377827f654740f2a26ad62a5c155af9199af9e69b889claireho
377927f654740f2a26ad62a5c155af9199af9e69b889claireho    UDate parsedate = sdf->parse(expected,status);
378027f654740f2a26ad62a5c155af9199af9e69b889claireho    if ( parsedate != thedate ) {
378127f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString pat1 ("yyyy-MM-dd'T'HH:mm:ss'Z'", -1, US_INV );
378227f654740f2a26ad62a5c155af9199af9e69b889claireho        SimpleDateFormat *usf = new SimpleDateFormat(pat1,Locale::getEnglish(),status);
378327f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString parsedres,expres;
378427f654740f2a26ad62a5c155af9199af9e69b889claireho        usf->format(parsedate,parsedres,pos);
378527f654740f2a26ad62a5c155af9199af9e69b889claireho        usf->format(thedate,expres,pos);
3786b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln((UnicodeString)"FAIL: parsed -> " + parsedres + " expected -> " + expres);
378727f654740f2a26ad62a5c155af9199af9e69b889claireho        delete usf;
378827f654740f2a26ad62a5c155af9199af9e69b889claireho    }
3789b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    delete sdf;
3790b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
3791b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3792b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// Test case for #8675
3793b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// Incorrect parse offset with stand alone GMT string on 2nd or later iteration.
3794b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid DateFormatTest::TestStandAloneGMTParse() {
3795b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UErrorCode status = U_ZERO_ERROR;
3796b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    SimpleDateFormat *sdf = new SimpleDateFormat("ZZZZ", Locale(""), status);
3797b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3798103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (U_SUCCESS(status)) {
3799b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3800b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UnicodeString inText("GMT$$$");
3801b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t i = 0; i < 10; i++) {
3802b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            ParsePosition pos(0);
3803b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            sdf->parse(inText, pos);
3804b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (pos.getIndex() != 3) {
3805b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln((UnicodeString)"FAIL: Incorrect output parse position: actual=" + pos.getIndex() + " expected=3");
3806b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
3807b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
3808b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3809b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete sdf;
3810103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    } else {
3811103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
3812103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
3813103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
3814103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3815103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid DateFormatTest::TestParsePosition() {
3816103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char* TestData[][4] = {
3817103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // {<pattern>, <lead>, <date string>, <trail>}
3818103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {"yyyy-MM-dd HH:mm:ssZ", "", "2010-01-10 12:30:00+0500", ""},
3819103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {"yyyy-MM-dd HH:mm:ss ZZZZ", "", "2010-01-10 12:30:00 GMT+05:00", ""},
3820103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {"Z HH:mm:ss", "", "-0100 13:20:30", ""},
3821103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {"y-M-d Z", "", "2011-8-25 -0400", " Foo"},
3822103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {"y/M/d H:mm:ss z", "", "2011/7/1 12:34:00 PDT", ""},
3823103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {"y/M/d H:mm:ss z", "+123", "2011/7/1 12:34:00 PDT", " PST"},
3824103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {"vvvv a h:mm:ss", "", "Pacific Time AM 10:21:45", ""},
3825103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {"HH:mm v M/d", "111", "14:15 PT 8/10", " 12345"},
382654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {"'time zone:' VVVV 'date:' yyyy-MM-dd", "xxxx", "time zone: Los Angeles Time date: 2010-02-25", "xxxx"},
382754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {"yG", "", "2012AD", ""},
382854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {"yG", "", "2012", "x"},
3829103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {0, 0, 0, 0},
3830103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
3831103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3832103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (int32_t i = 0; TestData[i][0]; i++) {
3833103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UErrorCode status = U_ZERO_ERROR;
3834103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        SimpleDateFormat *sdf = new SimpleDateFormat(UnicodeString(TestData[i][0]), status);
3835103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (failure(status, "new SimpleDateFormat", TRUE)) return;
3836103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3837103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        int32_t startPos, resPos;
3838103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3839103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // lead text
3840103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString input(TestData[i][1]);
3841103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        startPos = input.length();
3842103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3843103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // date string
3844103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        input += TestData[i][2];
3845103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        resPos = input.length();
3846103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3847103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // trail text
3848103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        input += TestData[i][3];
3849103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3850103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        ParsePosition pos(startPos);
3851103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        //UDate d = sdf->parse(input, pos);
3852103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        (void)sdf->parse(input, pos);
3853103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3854103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (pos.getIndex() != resPos) {
3855103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln(UnicodeString("FAIL: Parsing [") + input + "] with pattern [" + TestData[i][0] + "] returns position - "
3856103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                + pos.getIndex() + ", expected - " + resPos);
3857103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
3858103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3859103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete sdf;
3860103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
3861103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
3862103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3863103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3864103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct {
3865103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t era;
3866103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t year;
3867103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t month; // 1-based
3868103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t isLeapMonth;
3869103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t day;
3870103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} ChineseCalTestDate;
3871103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3872103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define NUM_TEST_DATES 3
3873103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3874103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct {
3875103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char *   locale;
3876103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t        style; // <0 => custom
3877103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UnicodeString  dateString[NUM_TEST_DATES];
3878103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} MonthPatternItem;
3879103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3880103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid DateFormatTest::TestMonthPatterns()
3881103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{
3882103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const ChineseCalTestDate dates[NUM_TEST_DATES] = {
3883103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // era yr mo lp da
3884103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {  78, 29, 4, 0, 2 }, // (in chinese era 78) gregorian 2012-4-22
3885103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {  78, 29, 4, 1, 2 }, // (in chinese era 78) gregorian 2012-5-22
3886103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        {  78, 29, 5, 0, 2 }, // (in chinese era 78) gregorian 2012-6-20
3887103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
3888103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3889103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const MonthPatternItem items[] = {
3890103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // locale                     date style;           expected formats for the 3 dates above
38918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "root@calendar=chinese",    DateFormat::kLong,  { UnicodeString("ren-chen 4 2"),  UnicodeString("ren-chen 4bis 2"),       UnicodeString("ren-chen 5 2") } },  // Google Patch. CLDR Ticket 5932.
38928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "root@calendar=chinese",    DateFormat::kShort, { UnicodeString("29-04-02"),        UnicodeString("29-04bis-02"),             UnicodeString("29-05-02") } },
3893103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "root@calendar=chinese",    -1,                 { UnicodeString("29-4-2"),        UnicodeString("29-4bis-2"),             UnicodeString("29-5-2") } },
3894103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "root@calendar=chinese",    -2,                 { UnicodeString("78x29-4-2"),     UnicodeString("78x29-4bis-2"),          UnicodeString("78x29-5-2") } },
3895103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "root@calendar=chinese",    -3,                 { UnicodeString("ren-chen-4-2"),  UnicodeString("ren-chen-4bis-2"),       UnicodeString("ren-chen-5-2") } },
38968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "root@calendar=chinese",    -4,                 { UnicodeString("ren-chen 4 2"),  UnicodeString("ren-chen 4bis 2"),       UnicodeString("ren-chen 5 2") } },  // Google Patch. CLDR Ticket 5932.
3897103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en@calendar=gregorian",    -3,                 { UnicodeString("2012-4-22"),     UnicodeString("2012-5-22"),             UnicodeString("2012-6-20") } },
38988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en@calendar=chinese",      DateFormat::kLong,  { UnicodeString("4 2, ren-chen"), UnicodeString("4bis 2, ren-chen"),      UnicodeString("5 2, ren-chen") } },  // Google Patch. CLDR Ticket 5932.
3899103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en@calendar=chinese",      DateFormat::kShort, { UnicodeString("4/2/29"),        UnicodeString("4bis/2/29"),             UnicodeString("5/2/29") } },
3900103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh@calendar=chinese",      DateFormat::kLong,  { CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u56DB\\u6708\\u4E8C\\u65E5"),
3901103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u95F0\\u56DB\\u6708\\u4E8C\\u65E5"),
3902103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u4E94\\u6708\\u4E8C\\u65E5") } },
3903103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh@calendar=chinese",      DateFormat::kShort, { CharsToUnicodeString("\\u58EC\\u8FB0-4-2"),
3904103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0-\\u95F04-2"),
3905103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0-5-2") } },
3906103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh@calendar=chinese",      -3,                 { CharsToUnicodeString("\\u58EC\\u8FB0-4-2"),
3907103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0-\\u95F04-2"),
3908103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0-5-2") } },
3909103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh@calendar=chinese",      -4,                 { CharsToUnicodeString("\\u58EC\\u8FB0 \\u56DB\\u6708 2"),
3910103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0 \\u95F0\\u56DB\\u6708 2"),
3911103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0 \\u4E94\\u6708 2") } },
3912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh_Hant@calendar=chinese", DateFormat::kLong,  { CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u56DB\\u6708\\u4E8C\\u65E5"),
3913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u958F\\u56DB\\u6708\\u4E8C\\u65E5"),
3914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u4E94\\u6708\\u4E8C\\u65E5") } },
3915103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh_Hant@calendar=chinese", DateFormat::kShort, { CharsToUnicodeString("\\u58EC\\u8FB0/4/2"),
3916103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0/\\u958F4/2"),
3917103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("\\u58EC\\u8FB0/5/2") } },
3918103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "fr@calendar=chinese",      DateFormat::kLong,  { CharsToUnicodeString("2 s\\u00ECyu\\u00E8 ren-chen"),
3919103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("2 s\\u00ECyu\\u00E8bis ren-chen"),
3920103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                                            CharsToUnicodeString("2 w\\u01D4yu\\u00E8 ren-chen") } },
3921103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "fr@calendar=chinese",      DateFormat::kShort, { UnicodeString("2/4/29"),        UnicodeString("2/4bis/29"),             UnicodeString("2/5/29") } },
39228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en@calendar=dangi",        DateFormat::kLong,  { UnicodeString("3bis 2, 29"), UnicodeString("4 2, 29"),      UnicodeString("5 1, 29") } }, // Google Patch. CLDR ticket #5932
39238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "en@calendar=dangi",        DateFormat::kShort, { UnicodeString("3bis/2/29"),        UnicodeString("4/2/29"),             UnicodeString("5/1/29") } },
39248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ko@calendar=dangi",        DateFormat::kLong,  { CharsToUnicodeString("\\uC784\\uC9C4\\uB144 3bis\\uC6D4 2\\uC77C"),
39258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                                                            CharsToUnicodeString("\\uC784\\uC9C4\\uB144 4\\uC6D4 2\\uC77C"),
39268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                                                            CharsToUnicodeString("\\uC784\\uC9C4\\uB144 5\\uC6D4 1\\uC77C") } },
39278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        { "ko@calendar=dangi",        DateFormat::kShort, { CharsToUnicodeString("29. 3bis. 2."),
39288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                                                            CharsToUnicodeString("29. 4. 2."),
39298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                                                            CharsToUnicodeString("29. 5. 1.") } },
3930103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // terminator
3931103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { NULL,                       0,                  { UnicodeString(""), UnicodeString(""), UnicodeString("") } }
3932103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
3933103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3934103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    //.                               style: -1        -2            -3       -4
3935103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const UnicodeString customPatterns[] = { "y-Ml-d", "G'x'y-Ml-d", "U-M-d", "U MMM d" }; // like old root pattern, using 'l'
3936103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3937103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
3938103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    Locale rootChineseCalLocale = Locale::createFromName("root@calendar=chinese");
3939103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    Calendar * rootChineseCalendar = Calendar::createInstance(rootChineseCalLocale, status);
3940103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (U_SUCCESS(status)) {
3941103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        const MonthPatternItem * itemPtr;
3942103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
3943103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            Locale locale = Locale::createFromName(itemPtr->locale);
3944103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            DateFormat * dmft = (itemPtr->style >= 0)?
3945103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    DateFormat::createDateInstance((DateFormat::EStyle)itemPtr->style, locale):
3946103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    new SimpleDateFormat(customPatterns[-itemPtr->style - 1], locale, status);
3947103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            if ( dmft != NULL ) {
3948103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                if (U_SUCCESS(status)) {
3949103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    const ChineseCalTestDate * datePtr = dates;
3950103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    int32_t idate;
3951103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    for (idate = 0; idate < NUM_TEST_DATES; idate++, datePtr++) {
3952103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        rootChineseCalendar->clear();
3953103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        rootChineseCalendar->set(UCAL_ERA, datePtr->era);
3954103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        rootChineseCalendar->set(datePtr->year, datePtr->month-1, datePtr->day);
3955103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        rootChineseCalendar->set(UCAL_IS_LEAP_MONTH, datePtr->isLeapMonth);
3956103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        UnicodeString result;
3957103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        FieldPosition fpos(0);
3958103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        dmft->format(*rootChineseCalendar, result, fpos);
3959103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        if ( result.compare(itemPtr->dateString[idate]) != 0 ) {
3960103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            errln( UnicodeString("FAIL: Chinese calendar format for locale ") + UnicodeString(itemPtr->locale) + ", style " + itemPtr->style +
3961103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                    ", expected \"" + itemPtr->dateString[idate] + "\", got \"" + result + "\"");
3962103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        } else {
3963103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            // formatted OK, try parse
3964103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            ParsePosition ppos(0);
3965103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            // ensure we are really parsing the fields we should be
3966103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            rootChineseCalendar->set(UCAL_YEAR, 1);
3967103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            rootChineseCalendar->set(UCAL_MONTH, 0);
3968103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            rootChineseCalendar->set(UCAL_IS_LEAP_MONTH, 0);
3969103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            rootChineseCalendar->set(UCAL_DATE, 1);
3970103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            //
3971103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            dmft->parse(result, *rootChineseCalendar, ppos);
3972103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            int32_t year = rootChineseCalendar->get(UCAL_YEAR, status);
3973103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            int32_t month = rootChineseCalendar->get(UCAL_MONTH, status) + 1;
3974103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            int32_t isLeapMonth = rootChineseCalendar->get(UCAL_IS_LEAP_MONTH, status);
3975103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            int32_t day = rootChineseCalendar->get(UCAL_DATE, status);
3976103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            if ( ppos.getIndex() < result.length() || year != datePtr->year || month != datePtr->month || isLeapMonth != datePtr->isLeapMonth || day != datePtr->day ) {
3977103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                errln( UnicodeString("FAIL: Chinese calendar parse for locale ") + UnicodeString(itemPtr->locale) + ", style " + itemPtr->style +
3978103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                    ", string \"" + result + "\", expected " + datePtr->year +"-"+datePtr->month+"("+datePtr->isLeapMonth+")-"+datePtr->day + ", got pos " +
3979103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                    ppos.getIndex() + " " + year +"-"+month+"("+isLeapMonth+")-"+day);
3980103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                            }
3981103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                        }
3982103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    }
3983103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                } else {
3984103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                    dataerrln("Error creating SimpleDateFormat for Chinese calendar- %s", u_errorName(status));
3985103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                }
3986103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                delete dmft;
3987103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            } else {
3988103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                dataerrln("FAIL: Unable to create DateFormat for Chinese calendar- %s", u_errorName(status));
3989103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            }
3990103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
3991103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete rootChineseCalendar;
3992103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    } else {
3993103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln(UnicodeString("FAIL: Unable to create Calendar for root@calendar=chinese"));
3994103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
3995103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
3996103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3997103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct {
3998103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char * locale;
3999103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UnicodeString pattern;
400054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UDisplayContext capitalizationContext;
4001103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UnicodeString expectedFormat;
4002103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TestContextItem;
4003103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
4004103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid DateFormatTest::TestContext()
4005103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{
4006103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const UDate july022008 = 1215000001979.0;
4007103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const TestContextItem items[] = {
400854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //locale              pattern    capitalizationContext                              expected formatted date
400954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_NONE,                      UnicodeString("juillet 2008") },
4010103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if !UCONFIG_NO_BREAK_ITERATION
401154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    UnicodeString("juillet 2008") },
401254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UnicodeString("Juillet 2008") },
401354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       UnicodeString("juillet 2008") },
401454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            UnicodeString("Juillet 2008") },
4015103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
401654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_NONE,                      CharsToUnicodeString("\\u010Dervenec 2008") },
4017103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if !UCONFIG_NO_BREAK_ITERATION
401854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,    CharsToUnicodeString("\\u010Dervenec 2008") },
401954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, CharsToUnicodeString("\\u010Cervenec 2008") },
402054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU,       CharsToUnicodeString("\\u010Cervenec 2008") },
402154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_FOR_STANDALONE,            CharsToUnicodeString("\\u010Dervenec 2008") },
4022103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
4023103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // terminator
402454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { NULL, UnicodeString(""),       (UDisplayContext)0, UnicodeString("") }
4025103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
4026103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
4027103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    Calendar* cal = Calendar::createInstance(status);
4028103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (U_FAILURE(status)) {
4029103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln(UnicodeString("FAIL: Unable to create Calendar for default timezone and locale."));
4030103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    } else {
4031103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        cal->setTime(july022008, status);
4032103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        const TestContextItem * itemPtr;
4033103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
4034103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius           Locale locale = Locale::createFromName(itemPtr->locale);
4035103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius           status = U_ZERO_ERROR;
4036103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius           SimpleDateFormat * sdmft = new SimpleDateFormat(itemPtr->pattern, locale, status);
4037103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius           if (U_FAILURE(status)) {
4038103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                dataerrln(UnicodeString("FAIL: Unable to create SimpleDateFormat for specified pattern with locale ") + UnicodeString(itemPtr->locale));
4039103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius           } else {
404054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius               sdmft->setContext(itemPtr->capitalizationContext, status);
4041103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               UnicodeString result;
4042103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               FieldPosition pos(0);
404354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius               sdmft->format(*cal, result, pos);
4044103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               if (result.compare(itemPtr->expectedFormat) != 0) {
4045103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                   errln(UnicodeString("FAIL: format for locale ") + UnicodeString(itemPtr->locale) +
404654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                           ", status " + (int)status +
4047103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                           ", capitalizationContext " + (int)itemPtr->capitalizationContext +
4048103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                           ", expected " + itemPtr->expectedFormat + ", got " + result);
4049103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               }
4050103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius           }
4051103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius           if (sdmft) {
4052103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               delete sdmft;
4053103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius           }
4054103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
4055103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
4056103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (cal) {
4057103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete cal;
4058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
4059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
406027f654740f2a26ad62a5c155af9199af9e69b889claireho
406154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius// test item for a particular locale + calendar and date format
406254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliustypedef struct {
406354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    int32_t year;
406454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    int32_t month;
406554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    int32_t day;
406654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    int32_t hour;
406754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    int32_t minute;
406854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UnicodeString formattedDate;
406954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} CalAndFmtTestItem;
407054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
407154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius// test item giving locale + calendar, date format, and CalAndFmtTestItems
407254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliustypedef struct {
407354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const char * locale; // with calendar
407454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DateFormat::EStyle style;
407554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const CalAndFmtTestItem *caftItems;
407654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} TestNonGregoItem;
407754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
407854dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid DateFormatTest::TestNonGregoFmtParse()
407954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius{
408054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // test items for he@calendar=hebrew, long date format
408154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const CalAndFmtTestItem cafti_he_hebrew_long[] = {
408254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { 4999, 12, 29, 12, 0, CharsToUnicodeString("\\u05DB\\u05F4\\u05D8 \\u05D1\\u05D0\\u05DC\\u05D5\\u05DC \\u05D3\\u05F3\\u05EA\\u05EA\\u05E7\\u05E6\\u05F4\\u05D8") },
408354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { 5100,  0,  1, 12, 0, CharsToUnicodeString("\\u05D0\\u05F3 \\u05D1\\u05EA\\u05E9\\u05E8\\u05D9 \\u05E7\\u05F3") },
408454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { 5774,  5,  1, 12, 0, CharsToUnicodeString("\\u05D0\\u05F3 \\u05D1\\u05D0\\u05D3\\u05E8 \\u05D0\\u05F3 \\u05EA\\u05E9\\u05E2\\u05F4\\u05D3") },
408554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { 5999, 12, 29, 12, 0, CharsToUnicodeString("\\u05DB\\u05F4\\u05D8 \\u05D1\\u05D0\\u05DC\\u05D5\\u05DC \\u05EA\\u05EA\\u05E7\\u05E6\\u05F4\\u05D8") },
408654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { 6100,  0,  1, 12, 0, CharsToUnicodeString("\\u05D0\\u05F3 \\u05D1\\u05EA\\u05E9\\u05E8\\u05D9 \\u05D5\\u05F3\\u05E7\\u05F3") },
408754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        {    0,  0,  0,  0, 0, UnicodeString("") } // terminator
408854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    };
408954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // overal test items
409054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const TestNonGregoItem items[] = {
409154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "he@calendar=hebrew", DateFormat::kLong, cafti_he_hebrew_long },
409254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { NULL, DateFormat::kNone, NULL } // terminator
409354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    };
409454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    const TestNonGregoItem * itemPtr;
409554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    for (itemPtr = items; itemPtr->locale != NULL; itemPtr++) {
409654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        Locale locale = Locale::createFromName(itemPtr->locale);
409754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DateFormat * dfmt = DateFormat::createDateInstance(itemPtr->style, locale);
409854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if (dfmt == NULL) {
409954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            dataerrln("DateFormat::createDateInstance fails for locale %s", itemPtr->locale);
410054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
410154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            Calendar * cal = (dfmt->getCalendar())->clone();
410254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            if (cal == NULL) {
410354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                dataerrln("(DateFormat::getCalendar)->clone() fails for locale %s", itemPtr->locale);
410454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            } else {
410554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                const CalAndFmtTestItem * caftItemPtr;
410654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                for (caftItemPtr = itemPtr->caftItems; caftItemPtr->year != 0; caftItemPtr++) {
410754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    cal->clear();
410854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    cal->set(UCAL_YEAR,   caftItemPtr->year);
410954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    cal->set(UCAL_MONTH,  caftItemPtr->month);
411054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    cal->set(UCAL_DATE,   caftItemPtr->day);
411154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    cal->set(UCAL_HOUR_OF_DAY, caftItemPtr->hour);
411254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    cal->set(UCAL_MINUTE, caftItemPtr->minute);
411354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    UnicodeString result;
411454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    FieldPosition fpos(0);
411554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    dfmt->format(*cal, result, fpos);
411654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    if ( result.compare(caftItemPtr->formattedDate) != 0 ) {
411754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        errln( UnicodeString("FAIL: date format for locale ") + UnicodeString(itemPtr->locale) + ", style " + itemPtr->style +
411854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                ", expected \"" + caftItemPtr->formattedDate + "\", got \"" + result + "\"");
411954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    } else {
412054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        // formatted OK, try parse
412154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        ParsePosition ppos(0);
412254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        dfmt->parse(result, *cal, ppos);
412354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        UErrorCode status = U_ZERO_ERROR;
412454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        int32_t year = cal->get(UCAL_YEAR, status);
412554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        int32_t month = cal->get(UCAL_MONTH, status);
412654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        int32_t day = cal->get(UCAL_DATE, status);
412754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        if ( U_FAILURE(status) || ppos.getIndex() < result.length() || year != caftItemPtr->year || month != caftItemPtr->month || day != caftItemPtr->day ) {
412854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                            errln( UnicodeString("FAIL: date parse for locale ") + UnicodeString(itemPtr->locale) + ", style " + itemPtr->style +
412954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                ", string \"" + result + "\", expected " + caftItemPtr->year +"-"+caftItemPtr->month+"-"+caftItemPtr->day + ", got pos " +
413054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                                ppos.getIndex() + " " + year +"-"+month+"-"+day + " status " + UnicodeString(u_errorName(status)) );
413154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        }
413254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    }
413354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                }
413454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                delete cal;
413554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            }
413654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            delete dfmt;
413754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
413854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
413954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
414054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
414154dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const UDate TEST_DATE = 1326585600000.;  // 2012-jan-15
414254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
414354dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid DateFormatTest::TestDotAndAtLeniency() {
414454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // Test for date/time parsing regression with CLDR 22.1/ICU 50 pattern strings.
414554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // For details see http://bugs.icu-project.org/trac/ticket/9789
414654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    static const char *locales[] = { "en", "fr" };
414754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    for (int32_t i = 0; i < LENGTHOF(locales); ++i) {
414854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        Locale locale(locales[i]);
414954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
415054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        for (DateFormat::EStyle dateStyle = DateFormat::FULL; dateStyle <= DateFormat::SHORT;
415154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                  dateStyle = static_cast<DateFormat::EStyle>(dateStyle + 1)) {
415254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            LocalPointer<DateFormat> dateFormat(DateFormat::createDateInstance(dateStyle, locale));
415354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
415454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            for (DateFormat::EStyle timeStyle = DateFormat::FULL; timeStyle <= DateFormat::SHORT;
415554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                      timeStyle = static_cast<DateFormat::EStyle>(timeStyle + 1)) {
415654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                LocalPointer<DateFormat> format(DateFormat::createDateTimeInstance(dateStyle, timeStyle, locale));
415754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                LocalPointer<DateFormat> timeFormat(DateFormat::createTimeInstance(timeStyle, locale));
415854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                UnicodeString formattedString;
415954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                if (format.isNull()) {
416054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    dataerrln("Unable to create DateFormat");
416154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    continue;
416254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                }
416354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                format->format(TEST_DATE, formattedString);
416454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
416554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                if (!showParse(*format, formattedString)) {
416654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    errln(UnicodeString("    with date-time: dateStyle=") + dateStyle + " timeStyle=" + timeStyle);
416754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                }
416854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
416954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                UnicodeString ds, ts;
417054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                formattedString = dateFormat->format(TEST_DATE, ds) + "  " + timeFormat->format(TEST_DATE, ts);
417154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                if (!showParse(*format, formattedString)) {
417254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    errln(UnicodeString("    with date sp sp time: dateStyle=") + dateStyle + " timeStyle=" + timeStyle);
417354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                }
417454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                if (formattedString.indexOf("n ") >= 0) { // will add "." after the end of text ending in 'n', like Jan.
417554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    UnicodeString plusDot(formattedString);
417654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    plusDot.findAndReplace("n ", "n. ").append(".");
417754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    if (!showParse(*format, plusDot)) {
417854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        errln(UnicodeString("    with date plus-dot time: dateStyle=") + dateStyle + " timeStyle=" + timeStyle);
417954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    }
418054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                }
418154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                if (formattedString.indexOf(". ") >= 0) { // will subtract "." at the end of strings.
418254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    UnicodeString minusDot(formattedString);
418354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    minusDot.findAndReplace(". ", " ");
418454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    if (!showParse(*format, minusDot)) {
418554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                        errln(UnicodeString("    with date minus-dot time: dateStyle=") + dateStyle + " timeStyle=" + timeStyle);
418654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                    }
418754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius                }
418854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            }
418954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
419054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
419154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
419254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
419354dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUBool DateFormatTest::showParse(DateFormat &format, const UnicodeString &formattedString) {
419454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    ParsePosition parsePosition;
419554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UDate parsed = format.parse(formattedString, parsePosition);
419654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UBool ok = TEST_DATE == parsed && parsePosition.getIndex() == formattedString.length();
419754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UnicodeString pattern;
419854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    static_cast<SimpleDateFormat &>(format).toPattern(pattern);
419954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    if (ok) {
420054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        logln(pattern + "  parsed: " + formattedString);
420154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    } else {
420254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        errln(pattern + "  fails to parse: " + formattedString);
420354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
420454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    return ok;
420554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
420654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
4207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
4208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
4209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof
4210