16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/********************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT:
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2012, International Business Machines Corporation and
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "sdtfmtts.h"
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/smpdtfmt.h"
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/dtfmtsym.h"
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This is an API test, not a unit test.  It doesn't test very many cases, and doesn't
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// try to test the full functionality.  It just calls each function in the class and
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// verifies that it works on a basic level.
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlTestSimpleDateFormatAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (exec) logln("TestSuite SimpleDateFormatAPI");
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    switch (index) {
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case 0: name = "SimpleDateFormat API test";
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if (exec) {
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    logln("SimpleDateFormat API test---"); logln("");
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    UErrorCode status = U_ZERO_ERROR;
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    Locale saveLocale;
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    Locale::setDefault(Locale::getEnglish(), status);
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    if(U_FAILURE(status)) {
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        errln("ERROR: Could not set default locale, test may not give correct results");
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    }
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    testAPI(/*par*/);
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    Locale::setDefault(saveLocale, status);
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        default: name = ""; break;
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test various generic API methods of SimpleDateFormat for API coverage.
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlTestSimpleDateFormatAPI::testAPI(/*char *par*/)
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test constructors
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing SimpleDateFormat constructors");
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat def(status);
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln("ERROR: Could not create SimpleDateFormat (default) - exitting");
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UnicodeString pattern("yyyy.MM.dd G 'at' hh:mm:ss z", "");
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UnicodeString override("y=hebr;d=thai;s=arab", ""); /* use invariant converter */
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UnicodeString override_bogus("y=hebr;d=thai;s=bogus", "");
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat pat(pattern, status);
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org       errln("ERROR: Could not create SimpleDateFormat (pattern) - %s", u_errorName(status));
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat pat_fr(pattern, Locale::getFrench(), status);
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Could not create SimpleDateFormat (pattern French)");
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getFrench(), status);
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Could not create DateFormatSymbols (French)");
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat cust1(pattern, symbols, status);
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln("ERROR: Could not create SimpleDateFormat (pattern, symbols*) - exitting");
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat cust2(pattern, *symbols, status);
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Could not create SimpleDateFormat (pattern, symbols)");
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("Override with: ") + override);
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat ovr1(pattern, override, status);
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln("ERROR: Could not create SimpleDateFormat (pattern, override) - %s", u_errorName(status));
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat ovr2(pattern, override, Locale::getGerman(), status);
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Could not create SimpleDateFormat (pattern, override, locale) - %s", u_errorName(status));
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("Override with: ") + override_bogus);
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat ovr3(pattern, override_bogus, Locale::getGerman(), status);
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_SUCCESS(status)) {
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Should not have been able to create SimpleDateFormat (pattern, override, locale) with a bogus override");
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat copy(pat);
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test clone(), assignment, and equality
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing clone(), assignment and equality operators");
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if( ! (copy == pat) || copy != pat) {
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Copy constructor (or ==) failed");
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    copy = cust1;
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(copy != cust1) {
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Assignment (or !=) failed");
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Format *clone = def.clone();
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if( ! (*clone == def) ) {
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Clone() (or ==) failed");
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete clone;
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test various format() methods
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing various format() methods");
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate d = 837039928046.0;
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Formattable fD(d, Formattable::kIsDate);
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString res1, res2;
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FieldPosition pos1(0), pos2(0);
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    res1 = def.format(d, res1, pos1);
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln( (UnicodeString) "" + d + " formatted to " + res1);
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    res2 = cust1.format(fD, res2, pos2, status);
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: format(Formattable [Date]) failed");
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln((UnicodeString) "" + fD.getDate() + " formatted to " + res2);
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test parse()
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing parse()");
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString text("02/03/76 2:50 AM, CST");
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate result1, result2;
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ParsePosition pos(0);
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    result1 = def.parse(text, pos);
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(text + " parsed into " + result1);
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    result2 = def.parse(text, status);
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: parse() failed");
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(text + " parsed into " + result2);
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test getters and setters
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing getters and setters");
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const DateFormatSymbols *syms = pat.getDateFormatSymbols();
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!syms) {
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln("Couldn't obtain DateFormatSymbols. Quitting test!");
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      return;
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(syms->getDynamicClassID() != DateFormatSymbols::getStaticClassID()) {
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: format->getDateFormatSymbols()->getDynamicClassID() != DateFormatSymbols::getStaticClassID()");
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateFormatSymbols *newSyms = new DateFormatSymbols(*syms);
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    def.adoptDateFormatSymbols(newSyms);
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    pat_fr.setDateFormatSymbols(*newSyms);
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if( *(pat.getDateFormatSymbols()) != *(def.getDateFormatSymbols())) {
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: adopt or set DateFormatSymbols() failed");
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate startDate = pat.get2DigitYearStart(status);
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: getTwoDigitStartDate() failed");
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    pat_fr.set2DigitYearStart(startDate, status);
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: setTwoDigitStartDate() failed");
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test DateFormatSymbols constructor
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    newSyms  =new DateFormatSymbols("gregorian", status);
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: new DateFormatSymbols() failed");
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    def.adoptDateFormatSymbols(newSyms);
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test applyPattern()
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing applyPattern()");
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString p1("yyyy.MM.dd G 'at' hh:mm:ss z");
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Applying pattern " + p1);
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    pat.applyPattern(p1);
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString s2;
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    s2 = pat.toPattern(s2);
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Extracted pattern is " + s2);
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(s2 != p1) {
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: toPattern() result did not match pattern applied");
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Applying pattern " + p1);
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    pat.applyLocalizedPattern(p1, status);
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: applyPattern() failed with %s", u_errorName(status));
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString s3;
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    s3 = pat.toLocalizedPattern(s3, status);
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: toLocalizedPattern() failed");
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Extracted pattern is " + s3);
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(s3 != p1) {
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: toLocalizedPattern() result did not match pattern applied");
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test getStaticClassID()
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Testing getStaticClassID()");
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateFormat *test = new SimpleDateFormat(status);
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Couldn't create a SimpleDateFormat");
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(test->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) {
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: getDynamicClassID() didn't return the expected value");
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete test;
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ======= Test Ticket 5684 (Parsing with 'e' and 'Y')
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat object(UNICODE_STRING_SIMPLE("YYYY'W'wwe"), status);
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Couldn't create a SimpleDateFormat");
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    object.setLenient(false);
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ParsePosition pp(0);
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate udDate = object.parse("2007W014", pp);
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if ((double)udDate == 0.0) {
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("ERROR: Parsing failed using 'Y' and 'e'");
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */
275