16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/***********************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT:
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2012, International Business Machines Corporation
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and others. All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ***********************************************************************/
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Test Internationalized Calendars for C++ */
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "string.h"
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/locid.h"
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "japancal.h"
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h>
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "caltest.h"
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK(status, msg) \
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(status)) { \
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      dataerrln((UnicodeString(u_errorName(status)) + UnicodeString(" : " ) )+ msg); \
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return; \
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UnicodeString escape( const UnicodeString&src)
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UnicodeString dst;
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    dst.remove();
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int32_t i = 0; i < src.length(); ++i) {
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UChar c = src[i];
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(c < 0x0080)
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            dst += c;
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        else {
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            dst += UnicodeString("[");
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            char buf [8];
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            sprintf(buf, "%#x", c);
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            dst += UnicodeString(buf);
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            dst += UnicodeString("]");
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return dst;
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "incaltst.h"
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/gregocal.h"
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/smpdtfmt.h"
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/simpletz.h"
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// *****************************************************************************
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// class IntlCalendarTest
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// *****************************************************************************
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//--- move to CalendarTest?
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const double JULIAN_EPOCH = -210866760000000.;
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Turn this on to dump the calendar fields
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define U_DEBUG_DUMPCALS
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (exec) logln("TestSuite IntlCalendarTest");
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    switch (index) {
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(0,TestTypes);
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(1,TestGregorian);
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(2,TestBuddhist);
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(3,TestJapanese);
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(4,TestBuddhistFormat);
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(5,TestJapaneseFormat);
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(6,TestJapanese3860);
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(7,TestPersian);
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(8,TestPersianFormat);
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CASE(9,TestTaiwan);
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    default: name = ""; break;
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#undef CASE
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ---------------------------------------------------------------------------------
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test various API methods for API completeness.
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgIntlCalendarTest::TestTypes()
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  Calendar *c = NULL;
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UErrorCode status = U_ZERO_ERROR;
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int j;
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const char *locs [40] = { "en_US_VALLEYGIRL",
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "en_US_VALLEYGIRL@collation=phonebook;calendar=japanese",
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "en_US_VALLEYGIRL@collation=phonebook;calendar=gregorian",
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "ja_JP@calendar=japanese",
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "th_TH@calendar=buddhist",
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "ja_JP_TRADITIONAL",
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "th_TH_TRADITIONAL",
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "th_TH_TRADITIONAL@calendar=gregorian",
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "en_US",
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "th_TH",    // Default calendar for th_TH is buddhist
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "th",       // th's default region is TH and buddhist is used as default for TH
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "en_TH",    // Default calendar for any locales with region TH is buddhist
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "en-TH-u-ca-gregory",
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            NULL };
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const char *types[40] = { "gregorian",
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "japanese",
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "gregorian",
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "japanese",
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "buddhist",
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "japanese",
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "buddhist",
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "gregorian",
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "gregorian",
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "buddhist",
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "buddhist",
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "buddhist",
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            "gregorian",
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            NULL };
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  for(j=0;locs[j];j++) {
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln(UnicodeString("Creating calendar of locale ")  + locs[j]);
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    c = Calendar::createInstance(locs[j], status);
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "creating '" + UnicodeString(locs[j]) + "' calendar");
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_SUCCESS(status)) {
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      logln(UnicodeString(" type is ") + c->getType());
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(strcmp(c->getType(), types[j])) {
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dataerrln(UnicodeString(locs[j]) + UnicodeString("Calendar type ") + c->getType() + " instead of " + types[j]);
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete c;
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Run a test of a quasi-Gregorian calendar.  This is a calendar
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that behaves like a Gregorian but has different year/era mappings.
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The int[] data array should have the format:
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * { era, year, gregorianYear, month, dayOfMonth, ...  ... , -1 }
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::quasiGregorianTest(Calendar& cal, const Locale& gcl, const int32_t *data) {
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UErrorCode status = U_ZERO_ERROR;
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  // As of JDK 1.4.1_01, using the Sun JDK GregorianCalendar as
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  // a reference throws us off by one hour.  This is most likely
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  // due to the JDK 1.4 incorporation of historical time zones.
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  //java.util.Calendar grego = java.util.Calendar.getInstance();
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  Calendar *grego = Calendar::createInstance(gcl, status);
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if (U_FAILURE(status)) {
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    dataerrln("Error calling Calendar::createInstance");
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return;
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t tz1 = cal.get(UCAL_ZONE_OFFSET,status);
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t tz2 = grego -> get (UCAL_ZONE_OFFSET, status);
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  if(tz1 != tz2) {
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errln((UnicodeString)"cal's tz " + tz1 + " != grego's tz " + tz2);
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  for (int32_t i=0; data[i]!=-1; ) {
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t era = data[i++];
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t year = data[i++];
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t gregorianYear = data[i++];
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t month = data[i++];
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t dayOfMonth = data[i++];
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    grego->clear();
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    grego->set(gregorianYear, month, dayOfMonth);
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate D = grego->getTime(status);
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.clear();
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.set(UCAL_ERA, era);
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.set(year, month, dayOfMonth);
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate d = cal.getTime(status);
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_DUMPCALS
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln((UnicodeString)"cal  : " + CalendarTest::calToStr(cal));
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln((UnicodeString)"grego: " + CalendarTest::calToStr(*grego));
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (d == D) {
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      logln(UnicodeString("OK: ") + era + ":" + year + "/" + (month+1) + "/" + dayOfMonth +
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " => " + d + " (" + UnicodeString(cal.getType()) + ")");
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln(UnicodeString("Fail: (fields to millis)") + era + ":" + year + "/" + (month+1) + "/" + dayOfMonth +
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " => " + d + ", expected " + D + " (" + UnicodeString(cal.getType()) + "Off by: " + (d-D));
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Now, set the gregorian millis on the other calendar
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.clear();
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal.setTime(D, status);
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int e = cal.get(UCAL_ERA, status);
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int y = cal.get(UCAL_YEAR, status);
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_DUMPCALS
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln((UnicodeString)"cal  : " + CalendarTest::calToStr(cal));
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln((UnicodeString)"grego: " + CalendarTest::calToStr(*grego));
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (y == year && e == era) {
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      logln((UnicodeString)"OK: " + D + " => " + cal.get(UCAL_ERA, status) + ":" +
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.get(UCAL_YEAR, status) + "/" +
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            (cal.get(UCAL_MONTH, status)+1) + "/" + cal.get(UCAL_DATE, status) +  " (" + UnicodeString(cal.getType()) + ")");
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln((UnicodeString)"Fail: (millis to fields)" + D + " => " + cal.get(UCAL_ERA, status) + ":" +
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal.get(UCAL_YEAR, status) + "/" +
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            (cal.get(UCAL_MONTH, status)+1) + "/" + cal.get(UCAL_DATE, status) +
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            ", expected " + era + ":" + year + "/" + (month+1) + "/" +
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            dayOfMonth +  " (" + UnicodeString(cal.getType()));
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  }
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  delete grego;
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  CHECK(status, "err during quasiGregorianTest()");
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Verify that Gregorian works like Gregorian
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestGregorian() {
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeA = Calendar::getNow();
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t data[] = {
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        GregorianCalendar::AD, 1868, 1868, UCAL_SEPTEMBER, 8,
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        GregorianCalendar::AD, 1868, 1868, UCAL_SEPTEMBER, 9,
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        GregorianCalendar::AD, 1869, 1869, UCAL_JUNE, 4,
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        GregorianCalendar::AD, 1912, 1912, UCAL_JULY, 29,
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        GregorianCalendar::AD, 1912, 1912, UCAL_JULY, 30,
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        GregorianCalendar::AD, 1912, 1912, UCAL_AUGUST, 1,
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(/*"de_DE", */ status);
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, UnicodeString("Creating de_CH calendar"));
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Sanity check the calendar
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeB = Calendar::getNow();
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeCal = cal->getTime(status);
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!(timeA <= timeCal) || !(timeCal <= timeB)) {
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln((UnicodeString)"Error: Calendar time " + timeCal +
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " is not within sampled times [" + timeA + " to " + timeB + "]!");
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // end sanity check
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Note, the following is a good way to test the sanity of the constructed calendars,
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // using Collation as a delay-loop:
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    //
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // $ intltest  format/IntlCalendarTest  collate/G7CollationTest format/IntlCalendarTest
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    quasiGregorianTest(*cal,Locale("fr_FR"),data);
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that BuddhistCalendar shifts years to Buddhist Era but otherwise
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * behaves like GregorianCalendar.
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestBuddhist() {
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // BE 2542 == 1999 CE
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeA = Calendar::getNow();
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t data[] = {
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        0,           // B. era   [928479600000]
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2542,        // B. year
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1999,        // G. year
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UCAL_JUNE,   // month
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        4,           // day
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        0,           // B. era   [-79204842000000]
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        3,           // B. year
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        -540,        // G. year
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UCAL_FEBRUARY, // month
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        12,          // day
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        0,           // test month calculation:  4795 BE = 4252 AD is a leap year, but 4795 AD is not.
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        4795,        // BE [72018057600000]
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        4252,        // AD
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UCAL_FEBRUARY,
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        29,
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance("th_TH@calendar=buddhist", status);
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, UnicodeString("Creating th_TH@calendar=buddhist calendar"));
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Sanity check the calendar
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeB = Calendar::getNow();
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeCal = cal->getTime(status);
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!(timeA <= timeCal) || !(timeCal <= timeB)) {
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln((UnicodeString)"Error: Calendar time " + timeCal +
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " is not within sampled times [" + timeA + " to " + timeB + "]!");
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // end sanity check
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    quasiGregorianTest(*cal,Locale("th_TH@calendar=gregorian"),data);
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that TaiWanCalendar shifts years to Minguo Era but otherwise
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * behaves like GregorianCalendar.
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestTaiwan() {
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // MG 1 == 1912 AD
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeA = Calendar::getNow();
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // TODO port these to the data items
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t data[] = {
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1,           // B. era   [928479600000]
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1,        // B. year
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1912,        // G. year
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UCAL_JUNE,   // month
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        4,           // day
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1,           // B. era   [-79204842000000]
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        3,           // B. year
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1914,        // G. year
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UCAL_FEBRUARY, // month
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        12,          // day
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1,           // B. era   [-79204842000000]
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        96,           // B. year
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2007,        // G. year
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UCAL_FEBRUARY, // month
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        12,          // day
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance("en_US@calendar=roc", status);
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, UnicodeString("Creating en_US@calendar=roc calendar"));
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Sanity check the calendar
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeB = Calendar::getNow();
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeCal = cal->getTime(status);
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!(timeA <= timeCal) || !(timeCal <= timeB)) {
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln((UnicodeString)"Error: Calendar time " + timeCal +
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " is not within sampled times [" + timeA + " to " + timeB + "]!");
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // end sanity check
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    quasiGregorianTest(*cal,Locale("en_US"),data);
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that JapaneseCalendar shifts years to Japanese Eras but otherwise
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * behaves like GregorianCalendar.
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestJapanese() {
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeA = Calendar::getNow();
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Sorry.. japancal.h is private! */
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define JapaneseCalendar_MEIJI  232
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define JapaneseCalendar_TAISHO 233
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define JapaneseCalendar_SHOWA  234
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define JapaneseCalendar_HEISEI 235
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // BE 2542 == 1999 CE
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t data[] = {
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        //       Jera         Jyr  Gyear   m             d
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_MEIJI, 1, 1868, UCAL_SEPTEMBER, 8,
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_MEIJI, 1, 1868, UCAL_SEPTEMBER, 9,
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_MEIJI, 2, 1869, UCAL_JUNE, 4,
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_MEIJI, 45, 1912, UCAL_JULY, 29,
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_TAISHO, 1, 1912, UCAL_JULY, 30,
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_TAISHO, 1, 1912, UCAL_AUGUST, 1,
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // new tests (not in java)
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_SHOWA,     64,   1989,  UCAL_JANUARY, 7,  // Test current era transition (different code path than others)
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_HEISEI,    1,   1989,  UCAL_JANUARY, 8,
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_HEISEI,    1,   1989,  UCAL_JANUARY, 9,
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_HEISEI,    1,   1989,  UCAL_DECEMBER, 20,
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        JapaneseCalendar_HEISEI,  15,  2003,  UCAL_MAY, 22,
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance("ja_JP@calendar=japanese", status);
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, UnicodeString("Creating ja_JP@calendar=japanese calendar"));
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Sanity check the calendar
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeB = Calendar::getNow();
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeCal = cal->getTime(status);
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!(timeA <= timeCal) || !(timeCal <= timeB)) {
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln((UnicodeString)"Error: Calendar time " + timeCal +
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " is not within sampled times [" + timeA + " to " + timeB + "]!");
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // end sanity check
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    quasiGregorianTest(*cal,Locale("ja_JP"),data);
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestBuddhistFormat() {
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Test simple parse/format with adopt
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // First, a contrived english test..
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate aDate = 999932400000.0;
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=buddhist"), status);
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "creating date format instance");
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status);
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "creating gregorian date format instance");
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!fmt) {
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Coudln't create en_US instance");
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString str;
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt2->format(aDate, str);
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString() + "Test Date: " + str);
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        str.remove();
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt->format(aDate, str);
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString() + "as Buddhist Calendar: " + escape(str));
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expected("September 8, 2544 BE");
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(str != expected) {
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Expected " + escape(expected) + " but got " + escape(str));
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate otherDate = fmt->parse(expected, status);
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(otherDate != aDate) {
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString str3;
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt->format(otherDate, str3);
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Parse incorrect of " + escape(expected) + " - wanted " + aDate + " but got " +  otherDate + ", " + escape(str3));
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("Parsed OK: " + expected);
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fmt;
4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete fmt2;
4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "Error occured testing Buddhist Calendar in English ");
4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Now, try in Thai
4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48"
4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " 8 \\u0E01\\u0E31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19 \\u0e1e.\\u0e28. 2544");
4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate = 999932400000.0;
4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("th_TH_TRADITIONAL"); // legacy
4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48"
4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " 8 \\u0E01\\u0E31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19 \\u0e1e.\\u0e28. 2544");
4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate = 999932400000.0;
4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("th_TH@calendar=buddhist");
4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48"
4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " 8 \\u0E01\\u0E31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19 \\u0e04.\\u0e28. 2001");
4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate = 999932400000.0;
4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("th_TH@calendar=gregorian");
4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48"
4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " 8 \\u0E01\\u0E31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19 \\u0e04.\\u0e28. 2001");
4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate = 999932400000.0;
4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("th_TH_TRADITIONAL@calendar=gregorian");
4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// TaiwanFormat has been moved to testdata/format.txt
4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestJapaneseFormat() {
4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance("ja_JP_TRADITIONAL", status);
4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, UnicodeString("Creating ja_JP_TRADITIONAL calendar"));
4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal2 = cal->clone();
4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = NULL;
5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Test simple parse/format with adopt
5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate aDate = 999932400000.0;
5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yy G"), Locale("en_US@calendar=japanese"), status);
5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status);
5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "creating date format instance");
5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!fmt) {
5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Coudln't create en_US instance");
5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString str;
5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt2->format(aDate, str);
5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString() + "Test Date: " + str);
5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        str.remove();
5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt->format(aDate, str);
5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString() + "as Japanese Calendar: " + str);
5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expected("September 8, 13 Heisei");
5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(str != expected) {
5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Expected " + expected + " but got " + str);
5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate otherDate = fmt->parse(expected, status);
5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(otherDate != aDate) {
5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString str3;
5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            ParsePosition pp;
5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt->parse(expected, *cal2, pp);
5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt->format(otherDate, str3);
5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Parse incorrect of " + expected + " - wanted " + aDate + " but got " +  " = " +   otherDate + ", " + str3 + " = " + CalendarTest::calToStr(*cal2) );
5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("Parsed OK: " + expected);
5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fmt;
5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Test parse with incomplete information
5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fmt = new SimpleDateFormat(UnicodeString("G y"), Locale("en_US@calendar=japanese"), status);
5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    aDate = -3197117222000.0;
5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "creating date format instance");
5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!fmt) {
5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Coudln't create en_US instance");
5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString str;
5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt2->format(aDate, str);
5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString() + "Test Date: " + str);
5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        str.remove();
5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt->format(aDate, str);
5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString() + "as Japanese Calendar: " + str);
5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expected("Meiji 1");
5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(str != expected) {
5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Expected " + expected + " but got " + str);
5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate otherDate = fmt->parse(expected, status);
5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(otherDate != aDate) {
5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString str3;
5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            ParsePosition pp;
5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt->parse(expected, *cal2, pp);
5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt->format(otherDate, str3);
5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Parse incorrect of " + expected + " - wanted " + aDate + " but got " +  " = " +
5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                otherDate + ", " + str3 + " = " + CalendarTest::calToStr(*cal2) );
5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("Parsed OK: " + expected);
5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fmt;
5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal2;
5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete fmt2;
5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "Error occured");
5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Now, try in Japanese
5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u5e73\\u621013\\u5e749\\u67088\\u65e5\\u571f\\u66dc\\u65e5");
5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate = 999932400000.0; // Testing a recent date
5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("ja_JP@calendar=japanese");
5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u5e73\\u621013\\u5e749\\u67088\\u65e5\\u571f\\u66dc\\u65e5");
5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate = 999932400000.0; // Testing a recent date
5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("ja_JP_TRADITIONAL"); // legacy
5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u5b89\\u6c385\\u5e747\\u67084\\u65e5\\u6728\\u66dc\\u65e5");
5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate = -6106032422000.0; // 1776-07-04T00:00:00Z-075258
5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("ja_JP@calendar=japanese");
5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {   // Jitterbug 1869 - this is an ambiguous era. (Showa 64 = Jan 6 1989, but Showa could be 2 other eras) )
5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u662d\\u548c64\\u5e741\\u67086\\u65e5\\u91d1\\u66dc\\u65e5");
5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate = 600076800000.0;
5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("ja_JP@calendar=japanese");
5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {   // This Feb 29th falls on a leap year by gregorian year, but not by Japanese year.
6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expect = CharsToUnicodeString("\\u5EB7\\u6B632\\u5e742\\u670829\\u65e5\\u65e5\\u66dc\\u65e5");
6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate         expectDate =  -16214400422000.0;  // 1456-03-09T00:00Z-075258
6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale        loc("ja_JP@calendar=japanese");
6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        simpleTest(loc, expect, expectDate, status);
6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestJapanese3860()
6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance("ja_JP@calendar=japanese", status);
6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, UnicodeString("Creating ja_JP@calendar=japanese calendar"));
6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal2 = cal->clone();
6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("HH:mm:ss.S MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status);
6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str;
6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test simple parse/format with adopt
6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate aDate = 0;
6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test parse with missing era (should default to current era, heisei)
6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test parse with incomplete information
6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("Testing parse w/ missing era...");
6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y.M.d"), Locale("ja_JP@calendar=japanese"), status);
6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "creating date format instance");
6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(!fmt) {
6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Coudln't create en_US instance");
6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode s2 = U_ZERO_ERROR;
6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal2->clear();
6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString samplestr("1.1.9");
6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(UnicodeString() + "Test Year: " + samplestr);
6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            aDate = fmt->parse(samplestr, s2);
6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            ParsePosition pp=0;
6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt->parse(samplestr, *cal2, pp);
6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            CHECK(s2, "parsing the 1.1.9 string");
6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("*cal2 after 119 parse:");
6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str.remove();
6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt2->format(aDate, str);
6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(UnicodeString() + "as Gregorian Calendar: " + str);
6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal2->setTime(aDate, s2);
6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t gotYear = cal2->get(UCAL_YEAR, s2);
6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t gotEra = cal2->get(UCAL_ERA, s2);
6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t expectYear = 1;
6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t expectEra = JapaneseCalendar::getCurrentEra();
6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if((gotYear!=1) || (gotEra != expectEra)) {
6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln(UnicodeString("parse "+samplestr+" of 'y.m.d' as Japanese Calendar, expected year ") + expectYear +
6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")");
6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else {
6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln(UnicodeString() + " year: " + gotYear + ", era: " + gotEra);
6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            delete fmt;
6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test simple parse/format with adopt
6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate aDate = 0;
6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test parse with missing era (should default to current era, heisei)
6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test parse with incomplete information
6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln("Testing parse w/ just year...");
6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y"), Locale("ja_JP@calendar=japanese"), status);
6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "creating date format instance");
6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(!fmt) {
6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Coudln't create en_US instance");
6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode s2 = U_ZERO_ERROR;
6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal2->clear();
6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString samplestr("1");
6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(UnicodeString() + "Test Year: " + samplestr);
6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            aDate = fmt->parse(samplestr, s2);
6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            ParsePosition pp=0;
6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt->parse(samplestr, *cal2, pp);
6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            CHECK(s2, "parsing the 1 string");
6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("*cal2 after 1 parse:");
6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            str.remove();
6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt2->format(aDate, str);
6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln(UnicodeString() + "as Gregorian Calendar: " + str);
6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            cal2->setTime(aDate, s2);
6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t gotYear = cal2->get(UCAL_YEAR, s2);
6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t gotEra = cal2->get(UCAL_ERA, s2);
6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t expectYear = 1;
6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t expectEra = 235; //JapaneseCalendar::kCurrentEra;
6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if((gotYear!=1) || (gotEra != expectEra)) {
6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                errln(UnicodeString("parse "+samplestr+" of 'y' as Japanese Calendar, expected year ") + expectYear +
6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")");
6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else {
7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                logln(UnicodeString() + " year: " + gotYear + ", era: " + gotEra);
7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            delete fmt;
7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal2;
7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete fmt2;
7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify the Persian Calendar.
7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestPersian() {
7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeA = Calendar::getNow();
7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance("fa_IR@calendar=persian", status);
7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, UnicodeString("Creating fa_IR@calendar=persian calendar"));
7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Sanity check the calendar
7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeB = Calendar::getNow();
7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate timeCal = cal->getTime(status);
7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!(timeA <= timeCal) || !(timeCal <= timeB)) {
7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      errln((UnicodeString)"Error: Calendar time " + timeCal +
7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            " is not within sampled times [" + timeA + " to " + timeB + "]!");
7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // end sanity check
7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Test various dates to be sure of validity
7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t data[] = {
7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1925, 4, 24, 1304, 2, 4,
7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2011, 1, 11, 1389, 10, 21,
7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1986, 2, 25, 1364, 12, 6,
7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1934, 3, 14, 1312, 12, 23,
7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2090, 3, 19, 1468, 12, 29,
7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2007, 2, 22, 1385, 12, 3,
7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1969, 12, 31, 1348, 10, 10,
7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1945, 11, 12, 1324, 8, 21,
7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1925, 3, 31, 1304, 1, 11,
7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1996, 3, 19, 1374, 12, 29,
7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1996, 3, 20, 1375, 1, 1,
7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1997, 3, 20, 1375, 12, 30,
7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        1997, 3, 21, 1376, 1, 1,
7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2008, 3, 19, 1386, 12, 29,
7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2008, 3, 20, 1387, 1, 1,
7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2004, 3, 19, 1382, 12, 29,
7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2004, 3, 20, 1383, 1, 1,
7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2006, 3, 20, 1384, 12, 29,
7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2006, 3, 21, 1385, 1, 1,
7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 4, 20, 1384, 1, 31,
7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 4, 21, 1384, 2, 1,
7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 5, 21, 1384, 2, 31,
7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 5, 22, 1384, 3, 1,
7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 6, 21, 1384, 3, 31,
7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 6, 22, 1384, 4, 1,
7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 7, 22, 1384, 4, 31,
7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 7, 23, 1384, 5, 1,
7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 8, 22, 1384, 5, 31,
7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 8, 23, 1384, 6, 1,
7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 9, 22, 1384, 6, 31,
7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 9, 23, 1384, 7, 1,
7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 10, 22, 1384, 7, 30,
7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 10, 23, 1384, 8, 1,
7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 11, 21, 1384, 8, 30,
7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 11, 22, 1384, 9, 1,
7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 12, 21, 1384, 9, 30,
7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2005, 12, 22, 1384, 10, 1,
7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2006, 1, 20, 1384, 10, 30,
7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2006, 1, 21, 1384, 11, 1,
7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2006, 2, 19, 1384, 11, 30,
7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2006, 2, 20, 1384, 12, 1,
7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2006, 3, 20, 1384, 12, 29,
7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2006, 3, 21, 1385, 1, 1,
7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // The 2820-year cycle arithmetical algorithm would fail this one.
7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        2025, 3, 21, 1404, 1, 1,
7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *grego = Calendar::createInstance("fa_IR@calendar=gregorian", status);
7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int32_t i=0; data[i]!=-1; ) {
7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t gregYear = data[i++];
7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t gregMonth = data[i++]-1;
7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t gregDay = data[i++];
7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t persYear = data[i++];
7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t persMonth = data[i++]-1;
7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t persDay = data[i++];
7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test conversion from Persian dates
8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        grego->clear();
8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        grego->set(gregYear, gregMonth, gregDay);
8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->clear();
8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->set(persYear, persMonth, persDay);
8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate persTime = cal->getTime(status);
8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate gregTime = grego->getTime(status);
8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (persTime != gregTime) {
8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          errln(UnicodeString("Expected ") + gregTime + " but got " + persTime);
8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test conversion to Persian dates
8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->clear();
8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        cal->setTime(gregTime, status);
8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t computedYear = cal->get(UCAL_YEAR, status);
8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t computedMonth = cal->get(UCAL_MONTH, status);
8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t computedDay = cal->get(UCAL_DATE, status);
8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if ((persYear != computedYear) ||
8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            (persMonth != computedMonth) ||
8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            (persDay != computedDay)) {
8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          errln(UnicodeString("Expected ") + persYear + "/" + (persMonth+1) + "/" + persDay +
8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                " but got " +  computedYear + "/" + (computedMonth+1) + "/" + computedDay);
8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete cal;
8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete grego;
8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::TestPersianFormat() {
8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale(" en_US@calendar=persian"), status);
8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "creating date format instance");
8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status);
8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "creating gregorian date format instance");
8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString gregorianDate("January 18, 2007 AD");
8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate aDate = fmt2->parse(gregorianDate, status);
8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!fmt) {
8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln("Coudln't create en_US instance");
8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString str;
8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt->format(aDate, str);
8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(UnicodeString() + "as Persian Calendar: " + escape(str));
8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString expected("Dey 28, 1385 AP");
8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(str != expected) {
8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Expected " + escape(expected) + " but got " + escape(str));
8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UDate otherDate = fmt->parse(expected, status);
8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(otherDate != aDate) {
8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString str3;
8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt->format(otherDate, str3);
8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Parse incorrect of " + escape(expected) + " - wanted " + aDate + " but got " +  otherDate + ", " + escape(str3));
8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("Parsed OK: " + expected);
8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Two digit year parsing problem #4732
8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt->applyPattern("yy-MM-dd");
8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        str.remove();
8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt->format(aDate, str);
8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        expected.setTo("85-10-28");
8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(str != expected) {
8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Expected " + escape(expected) + " but got " + escape(str));
8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        otherDate = fmt->parse(expected, status);
8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (otherDate != aDate) {
8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln("Parse incorrect of " + escape(expected) + " - wanted " + aDate + " but got " + otherDate);
8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } else {
8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln("Parsed OK: " + expected);
8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fmt;
8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete fmt2;
8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    CHECK(status, "Error occured testing Persian Calendar in English ");
8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid IntlCalendarTest::simpleTest(const Locale& loc, const UnicodeString& expect, UDate expectDate, UErrorCode& status)
8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString tmp;
8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate         d;
8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateFormat *fmt0 = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull);
8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    logln("Try format/parse of " + (UnicodeString)loc.getName());
8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateFormat *fmt2 = DateFormat::createDateInstance(DateFormat::kFull, loc);
8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(fmt2) {
8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt2->format(expectDate, tmp);
8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        logln(escape(tmp) + " ( in locale " + loc.getName() + ")");
8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(tmp != expect) {
8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Failed to format " ) + loc.getName() + " expected " + escape(expect) + " got " + escape(tmp) );
8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        d = fmt2->parse(expect,status);
8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CHECK(status, "Error occured parsing " + UnicodeString(loc.getName()));
9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(d != expectDate) {
9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            fmt2->format(d,tmp);
9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            errln(UnicodeString("Failed to parse " ) + escape(expect) + ", " + loc.getName() + " expect " + (double)expectDate + " got " + (double)d  + " " + escape(tmp));
9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            logln( "wanted " + escape(fmt0->format(expectDate,tmp.remove())) + " but got " + escape(fmt0->format(d,tmp.remove())));
9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete fmt2;
9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errln((UnicodeString)"Can't create " + loc.getName() + " date instance");
9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    delete fmt0;
9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#undef CHECK
9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */
9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof
917