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