1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*********************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, International Business Machines Corporation 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ***********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test Internationalized Calendars for C++ */ 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "string.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/locid.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "japancal.h" 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "caltest.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CHECK(status, msg) \ 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { \ 2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln((UnicodeString(u_errorName(status)) + UnicodeString(" : " ) )+ msg); \ 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; \ 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UnicodeString escape( const UnicodeString&src) 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dst; 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dst.remove(); 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < src.length(); ++i) { 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar c = src[i]; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(c < 0x0080) 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dst += c; 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dst += UnicodeString("["); 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buf [8]; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(buf, "%#x", c); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dst += UnicodeString(buf); 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dst += UnicodeString("]"); 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return dst; 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "incaltst.h" 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h" 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/simpletz.h" 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class IntlCalendarTest 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--- move to CalendarTest? 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Turn this on to dump the calendar fields 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define U_DEBUG_DUMPCALS 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite IntlCalendarTest"); 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(0,TestTypes); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(1,TestGregorian); 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(2,TestBuddhist); 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(3,TestJapanese); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(4,TestBuddhistFormat); 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(5,TestJapaneseFormat); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(6,TestJapanese3860); 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(7,TestPersian); 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(8,TestPersianFormat); 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(9,TestTaiwan); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef CASE 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --------------------------------------------------------------------------------- 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test various API methods for API completeness. 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlCalendarTest::TestTypes() 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *c = NULL; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int j; 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *locs [40] = { "en_US_VALLEYGIRL", 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_US_VALLEYGIRL@collation=phonebook;calendar=japanese", 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "en_US_VALLEYGIRL@collation=phonebook;calendar=gregorian", 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ja_JP@calendar=japanese", 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "th_TH@calendar=buddhist", 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ja_JP_TRADITIONAL", 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "th_TH_TRADITIONAL", 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "th_TH_TRADITIONAL@calendar=gregorian", 104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "en_US", 105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "th_TH", // Default calendar for th_TH is buddhist 106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "th", // th's default region is TH and buddhist is used as default for TH 107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "en_TH", // Default calendar for any locales with region TH is buddhist 10827f654740f2a26ad62a5c155af9199af9e69b889claireho "en-TH-u-ca-gregory", 109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NULL }; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *types[40] = { "gregorian", 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "japanese", 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "gregorian", 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "japanese", 114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "buddhist", 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "japanese", 116fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "buddhist", 117fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "gregorian", 118fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "gregorian", 11959d709d503bab6e2b61931737e662dd293b40578ccornelius "gregorian", // android-changed. "buddhist", 12059d709d503bab6e2b61931737e662dd293b40578ccornelius "gregorian", // android-changed. "buddhist", 12159d709d503bab6e2b61931737e662dd293b40578ccornelius "gregorian", // android-changed. "buddhist", 12227f654740f2a26ad62a5c155af9199af9e69b889claireho "gregorian", 123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NULL }; 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(j=0;locs[j];j++) { 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Creating calendar of locale ") + locs[j]); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c = Calendar::createInstance(locs[j], status); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating '" + UnicodeString(locs[j]) + "' calendar"); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" type is ") + c->getType()); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(c->getType(), types[j])) { 1336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln(UnicodeString(locs[j]) + UnicodeString("Calendar type ") + c->getType() + " instead of " + types[j]); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Run a test of a quasi-Gregorian calendar. This is a calendar 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * that behaves like a Gregorian but has different year/era mappings. 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The int[] data array should have the format: 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * { era, year, gregorianYear, month, dayOfMonth, ... ... , -1 } 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::quasiGregorianTest(Calendar& cal, const Locale& gcl, const int32_t *data) { 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // As of JDK 1.4.1_01, using the Sun JDK GregorianCalendar as 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // a reference throws us off by one hour. This is most likely 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // due to the JDK 1.4 incorporation of historical time zones. 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //java.util.Calendar grego = java.util.Calendar.getInstance(); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *grego = Calendar::createInstance(gcl, status); 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling Calendar::createInstance"); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tz1 = cal.get(UCAL_ZONE_OFFSET,status); 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tz2 = grego -> get (UCAL_ZONE_OFFSET, status); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(tz1 != tz2) { 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"cal's tz " + tz1 + " != grego's tz " + tz2); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; data[i]!=-1; ) { 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t era = data[i++]; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t year = data[i++]; 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t gregorianYear = data[i++]; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t month = data[i++]; 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dayOfMonth = data[i++]; 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru grego->clear(); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru grego->set(gregorianYear, month, dayOfMonth); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate D = grego->getTime(status); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_ERA, era); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(year, month, dayOfMonth); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = cal.getTime(status); 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_DEBUG_DUMPCALS 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"cal : " + CalendarTest::calToStr(cal)); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"grego: " + CalendarTest::calToStr(*grego)); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (d == D) { 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("OK: ") + era + ":" + year + "/" + (month+1) + "/" + dayOfMonth + 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " => " + d + " (" + UnicodeString(cal.getType()) + ")"); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Fail: (fields to millis)") + era + ":" + year + "/" + (month+1) + "/" + dayOfMonth + 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " => " + d + ", expected " + D + " (" + UnicodeString(cal.getType()) + "Off by: " + (d-D)); 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Now, set the gregorian millis on the other calendar 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(D, status); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int e = cal.get(UCAL_ERA, status); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int y = cal.get(UCAL_YEAR, status); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_DEBUG_DUMPCALS 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"cal : " + CalendarTest::calToStr(cal)); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"grego: " + CalendarTest::calToStr(*grego)); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (y == year && e == era) { 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"OK: " + D + " => " + cal.get(UCAL_ERA, status) + ":" + 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.get(UCAL_YEAR, status) + "/" + 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (cal.get(UCAL_MONTH, status)+1) + "/" + cal.get(UCAL_DATE, status) + " (" + UnicodeString(cal.getType()) + ")"); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Fail: (millis to fields)" + D + " => " + cal.get(UCAL_ERA, status) + ":" + 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.get(UCAL_YEAR, status) + "/" + 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (cal.get(UCAL_MONTH, status)+1) + "/" + cal.get(UCAL_DATE, status) + 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ", expected " + era + ":" + year + "/" + (month+1) + "/" + 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dayOfMonth + " (" + UnicodeString(cal.getType())); 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete grego; 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "err during quasiGregorianTest()"); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Verify that Gregorian works like Gregorian 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestGregorian() { 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeA = Calendar::getNow(); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t data[] = { 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar::AD, 1868, 1868, UCAL_SEPTEMBER, 8, 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar::AD, 1868, 1868, UCAL_SEPTEMBER, 9, 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar::AD, 1869, 1869, UCAL_JUNE, 4, 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar::AD, 1912, 1912, UCAL_JULY, 29, 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar::AD, 1912, 1912, UCAL_JULY, 30, 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar::AD, 1912, 1912, UCAL_AUGUST, 1, 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal; 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(/*"de_DE", */ status); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, UnicodeString("Creating de_CH calendar")); 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sanity check the calendar 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeB = Calendar::getNow(); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeCal = cal->getTime(status); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(timeA <= timeCal) || !(timeCal <= timeB)) { 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Error: Calendar time " + timeCal + 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " is not within sampled times [" + timeA + " to " + timeB + "]!"); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // end sanity check 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Note, the following is a good way to test the sanity of the constructed calendars, 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // using Collation as a delay-loop: 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // $ intltest format/IntlCalendarTest collate/G7CollationTest format/IntlCalendarTest 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru quasiGregorianTest(*cal,Locale("fr_FR"),data); 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that BuddhistCalendar shifts years to Buddhist Era but otherwise 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behaves like GregorianCalendar. 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestBuddhist() { 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // BE 2542 == 1999 CE 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeA = Calendar::getNow(); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t data[] = { 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, // B. era [928479600000] 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2542, // B. year 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1999, // G. year 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_JUNE, // month 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 4, // day 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, // B. era [-79204842000000] 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3, // B. year 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -540, // G. year 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_FEBRUARY, // month 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12, // day 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, // test month calculation: 4795 BE = 4252 AD is a leap year, but 4795 AD is not. 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 4795, // BE [72018057600000] 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 4252, // AD 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_FEBRUARY, 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29, 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1,-1,-1,-1,-1,-1,-1,-1,-1,-1 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance("th_TH@calendar=buddhist", status); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, UnicodeString("Creating th_TH@calendar=buddhist calendar")); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sanity check the calendar 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeB = Calendar::getNow(); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeCal = cal->getTime(status); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(timeA <= timeCal) || !(timeCal <= timeB)) { 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Error: Calendar time " + timeCal + 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " is not within sampled times [" + timeA + " to " + timeB + "]!"); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // end sanity check 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru quasiGregorianTest(*cal,Locale("th_TH@calendar=gregorian"),data); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that TaiWanCalendar shifts years to Minguo Era but otherwise 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behaves like GregorianCalendar. 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestTaiwan() { 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // MG 1 == 1912 AD 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeA = Calendar::getNow(); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO port these to the data items 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t data[] = { 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, // B. era [928479600000] 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, // B. year 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1912, // G. year 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_JUNE, // month 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 4, // day 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, // B. era [-79204842000000] 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3, // B. year 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1914, // G. year 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_FEBRUARY, // month 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12, // day 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, // B. era [-79204842000000] 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 96, // B. year 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2007, // G. year 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_FEBRUARY, // month 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12, // day 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1,-1,-1,-1,-1,-1,-1,-1,-1,-1 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal; 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 337c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru cal = Calendar::createInstance("en_US@calendar=roc", status); 338c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru CHECK(status, UnicodeString("Creating en_US@calendar=roc calendar")); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sanity check the calendar 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeB = Calendar::getNow(); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeCal = cal->getTime(status); 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(timeA <= timeCal) || !(timeCal <= timeB)) { 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Error: Calendar time " + timeCal + 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " is not within sampled times [" + timeA + " to " + timeB + "]!"); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // end sanity check 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru quasiGregorianTest(*cal,Locale("en_US"),data); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that JapaneseCalendar shifts years to Japanese Eras but otherwise 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behaves like GregorianCalendar. 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestJapanese() { 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeA = Calendar::getNow(); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Sorry.. japancal.h is private! */ 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define JapaneseCalendar_MEIJI 232 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define JapaneseCalendar_TAISHO 233 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define JapaneseCalendar_SHOWA 234 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define JapaneseCalendar_HEISEI 235 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // BE 2542 == 1999 CE 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t data[] = { 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Jera Jyr Gyear m d 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_MEIJI, 1, 1868, UCAL_SEPTEMBER, 8, 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_MEIJI, 1, 1868, UCAL_SEPTEMBER, 9, 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_MEIJI, 2, 1869, UCAL_JUNE, 4, 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_MEIJI, 45, 1912, UCAL_JULY, 29, 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_TAISHO, 1, 1912, UCAL_JULY, 30, 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_TAISHO, 1, 1912, UCAL_AUGUST, 1, 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // new tests (not in java) 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_SHOWA, 64, 1989, UCAL_JANUARY, 7, // Test current era transition (different code path than others) 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_HEISEI, 1, 1989, UCAL_JANUARY, 8, 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_HEISEI, 1, 1989, UCAL_JANUARY, 9, 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_HEISEI, 1, 1989, UCAL_DECEMBER, 20, 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru JapaneseCalendar_HEISEI, 15, 2003, UCAL_MAY, 22, 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1,-1,-1,-1,-1,-1,-1,-1,-1,-1 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal; 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance("ja_JP@calendar=japanese", status); 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, UnicodeString("Creating ja_JP@calendar=japanese calendar")); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sanity check the calendar 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeB = Calendar::getNow(); 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeCal = cal->getTime(status); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(timeA <= timeCal) || !(timeCal <= timeB)) { 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Error: Calendar time " + timeCal + 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " is not within sampled times [" + timeA + " to " + timeB + "]!"); 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // end sanity check 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru quasiGregorianTest(*cal,Locale("ja_JP"),data); 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestBuddhistFormat() { 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test simple parse/format with adopt 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // First, a contrived english test.. 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate aDate = 999932400000.0; 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=buddhist"), status); 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating date format instance"); 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status); 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating gregorian date format instance"); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!fmt) { 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Coudln't create en_US instance"); 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2->format(aDate, str); 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "Test Date: " + str); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.remove(); 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(aDate, str); 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "as Buddhist Calendar: " + escape(str)); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expected("September 8, 2544 BE"); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(str != expected) { 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Expected " + escape(expected) + " but got " + escape(str)); 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate otherDate = fmt->parse(expected, status); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(otherDate != aDate) { 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str3; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(otherDate, str3); 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Parse incorrect of " + escape(expected) + " - wanted " + aDate + " but got " + otherDate + ", " + escape(str3)); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Parsed OK: " + expected); 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt2; 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Error occured testing Buddhist Calendar in English "); 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Now, try in Thai 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48" 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " 8 \\u0E01\\u0E31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19 \\u0e1e.\\u0e28. 2544"); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate expectDate = 999932400000.0; 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("th_TH_TRADITIONAL"); // legacy 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48" 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " 8 \\u0E01\\u0E31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19 \\u0e1e.\\u0e28. 2544"); 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate expectDate = 999932400000.0; 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("th_TH@calendar=buddhist"); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48" 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " 8 \\u0E01\\u0E31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19 \\u0e04.\\u0e28. 2001"); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate expectDate = 999932400000.0; 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("th_TH@calendar=gregorian"); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u0E27\\u0E31\\u0E19\\u0E40\\u0E2A\\u0E32\\u0E23\\u0E4C\\u0E17\\u0E35\\u0E48" 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " 8 \\u0E01\\u0E31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19 \\u0e04.\\u0e28. 2001"); 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate expectDate = 999932400000.0; 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("th_TH_TRADITIONAL@calendar=gregorian"); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TaiwanFormat has been moved to testdata/format.txt 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestJapaneseFormat() { 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal; 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance("ja_JP_TRADITIONAL", status); 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, UnicodeString("Creating ja_JP_TRADITIONAL calendar")); 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal2 = cal->clone(); 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = NULL; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test simple parse/format with adopt 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate aDate = 999932400000.0; 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yy G"), Locale("en_US@calendar=japanese"), status); 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status); 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating date format instance"); 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!fmt) { 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Coudln't create en_US instance"); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2->format(aDate, str); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "Test Date: " + str); 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.remove(); 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(aDate, str); 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "as Japanese Calendar: " + str); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expected("September 8, 13 Heisei"); 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(str != expected) { 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Expected " + expected + " but got " + str); 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate otherDate = fmt->parse(expected, status); 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(otherDate != aDate) { 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str3; 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pp; 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(expected, *cal2, pp); 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(otherDate, str3); 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Parse incorrect of " + expected + " - wanted " + aDate + " but got " + " = " + otherDate + ", " + str3 + " = " + CalendarTest::calToStr(*cal2) ); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Parsed OK: " + expected); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test parse with incomplete information 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new SimpleDateFormat(UnicodeString("G y"), Locale("en_US@calendar=japanese"), status); 53350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho aDate = -3197117222000.0; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating date format instance"); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!fmt) { 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Coudln't create en_US instance"); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2->format(aDate, str); 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "Test Date: " + str); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.remove(); 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(aDate, str); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "as Japanese Calendar: " + str); 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expected("Meiji 1"); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(str != expected) { 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Expected " + expected + " but got " + str); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate otherDate = fmt->parse(expected, status); 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(otherDate != aDate) { 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str3; 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pp; 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(expected, *cal2, pp); 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(otherDate, str3); 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Parse incorrect of " + expected + " - wanted " + aDate + " but got " + " = " + 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru otherDate + ", " + str3 + " = " + CalendarTest::calToStr(*cal2) ); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Parsed OK: " + expected); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal2; 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt2; 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Error occured"); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Now, try in Japanese 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u5e73\\u621013\\u5e749\\u67088\\u65e5\\u571f\\u66dc\\u65e5"); 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate expectDate = 999932400000.0; // Testing a recent date 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("ja_JP@calendar=japanese"); 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u5e73\\u621013\\u5e749\\u67088\\u65e5\\u571f\\u66dc\\u65e5"); 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate expectDate = 999932400000.0; // Testing a recent date 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("ja_JP_TRADITIONAL"); // legacy 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u5b89\\u6c385\\u5e747\\u67084\\u65e5\\u6728\\u66dc\\u65e5"); 58550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDate expectDate = -6106032422000.0; // 1776-07-04T00:00:00Z-075258 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("ja_JP@calendar=japanese"); 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { // Jitterbug 1869 - this is an ambiguous era. (Showa 64 = Jan 6 1989, but Showa could be 2 other eras) ) 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u662d\\u548c64\\u5e741\\u67086\\u65e5\\u91d1\\u66dc\\u65e5"); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate expectDate = 600076800000.0; 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("ja_JP@calendar=japanese"); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { // This Feb 29th falls on a leap year by gregorian year, but not by Japanese year. 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expect = CharsToUnicodeString("\\u5EB7\\u6B632\\u5e742\\u670829\\u65e5\\u65e5\\u66dc\\u65e5"); 60350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDate expectDate = -16214400422000.0; // 1456-03-09T00:00Z-075258 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("ja_JP@calendar=japanese"); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simpleTest(loc, expect, expectDate, status); 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestJapanese3860() 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal; 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance("ja_JP@calendar=japanese", status); 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, UnicodeString("Creating ja_JP@calendar=japanese calendar")); 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal2 = cal->clone(); 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("HH:mm:ss.S MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status); 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test simple parse/format with adopt 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate aDate = 0; 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test parse with missing era (should default to current era, heisei) 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test parse with incomplete information 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing parse w/ missing era..."); 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y.M.d"), Locale("ja_JP@calendar=japanese"), status); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating date format instance"); 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!fmt) { 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Coudln't create en_US instance"); 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode s2 = U_ZERO_ERROR; 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->clear(); 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString samplestr("1.1.9"); 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "Test Year: " + samplestr); 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aDate = fmt->parse(samplestr, s2); 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pp=0; 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(samplestr, *cal2, pp); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(s2, "parsing the 1.1.9 string"); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("*cal2 after 119 parse:"); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.remove(); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2->format(aDate, str); 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "as Gregorian Calendar: " + str); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->setTime(aDate, s2); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t gotYear = cal2->get(UCAL_YEAR, s2); 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t gotEra = cal2->get(UCAL_ERA, s2); 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectYear = 1; 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectEra = JapaneseCalendar::getCurrentEra(); 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((gotYear!=1) || (gotEra != expectEra)) { 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("parse "+samplestr+" of 'y.m.d' as Japanese Calendar, expected year ") + expectYear + 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + " year: " + gotYear + ", era: " + gotEra); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test simple parse/format with adopt 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate aDate = 0; 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test parse with missing era (should default to current era, heisei) 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test parse with incomplete information 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing parse w/ just year..."); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("y"), Locale("ja_JP@calendar=japanese"), status); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating date format instance"); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!fmt) { 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Coudln't create en_US instance"); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode s2 = U_ZERO_ERROR; 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->clear(); 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString samplestr("1"); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "Test Year: " + samplestr); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aDate = fmt->parse(samplestr, s2); 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pp=0; 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(samplestr, *cal2, pp); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(s2, "parsing the 1 string"); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("*cal2 after 1 parse:"); 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.remove(); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2->format(aDate, str); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + "as Gregorian Calendar: " + str); 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->setTime(aDate, s2); 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t gotYear = cal2->get(UCAL_YEAR, s2); 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t gotEra = cal2->get(UCAL_ERA, s2); 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectYear = 1; 692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t expectEra = 235; //JapaneseCalendar::kCurrentEra; 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((gotYear!=1) || (gotEra != expectEra)) { 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("parse "+samplestr+" of 'y' as Japanese Calendar, expected year ") + expectYear + 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(" and era ") + expectEra +", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString() + " year: " + gotYear + ", era: " + gotEra); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal2; 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt2; 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the Persian Calendar. 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestPersian() { 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeA = Calendar::getNow(); 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal; 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance("fa_IR@calendar=persian", status); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, UnicodeString("Creating fa_IR@calendar=persian calendar")); 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Sanity check the calendar 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeB = Calendar::getNow(); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate timeCal = cal->getTime(status); 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!(timeA <= timeCal) || !(timeCal <= timeB)) { 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Error: Calendar time " + timeCal + 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " is not within sampled times [" + timeA + " to " + timeB + "]!"); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // end sanity check 73054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 73154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // Test various dates to be sure of validity 73254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t data[] = { 73354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1925, 4, 24, 1304, 2, 4, 73454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2011, 1, 11, 1389, 10, 21, 73554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1986, 2, 25, 1364, 12, 6, 73654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1934, 3, 14, 1312, 12, 23, 73754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 73854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2090, 3, 19, 1468, 12, 29, 73954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2007, 2, 22, 1385, 12, 3, 74054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1969, 12, 31, 1348, 10, 10, 74154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1945, 11, 12, 1324, 8, 21, 74254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1925, 3, 31, 1304, 1, 11, 74354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 74454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1996, 3, 19, 1374, 12, 29, 74554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1996, 3, 20, 1375, 1, 1, 74654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1997, 3, 20, 1375, 12, 30, 74754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1997, 3, 21, 1376, 1, 1, 74854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 74954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2008, 3, 19, 1386, 12, 29, 75054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2008, 3, 20, 1387, 1, 1, 75154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2004, 3, 19, 1382, 12, 29, 75254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2004, 3, 20, 1383, 1, 1, 75354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 75454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2006, 3, 20, 1384, 12, 29, 75554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2006, 3, 21, 1385, 1, 1, 75654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 75754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 4, 20, 1384, 1, 31, 75854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 4, 21, 1384, 2, 1, 75954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 5, 21, 1384, 2, 31, 76054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 5, 22, 1384, 3, 1, 76154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 6, 21, 1384, 3, 31, 76254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 6, 22, 1384, 4, 1, 76354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 7, 22, 1384, 4, 31, 76454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 7, 23, 1384, 5, 1, 76554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 8, 22, 1384, 5, 31, 76654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 8, 23, 1384, 6, 1, 76754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 9, 22, 1384, 6, 31, 76854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 9, 23, 1384, 7, 1, 76954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 10, 22, 1384, 7, 30, 77054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 10, 23, 1384, 8, 1, 77154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 11, 21, 1384, 8, 30, 77254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 11, 22, 1384, 9, 1, 77354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 12, 21, 1384, 9, 30, 77454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2005, 12, 22, 1384, 10, 1, 77554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2006, 1, 20, 1384, 10, 30, 77654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2006, 1, 21, 1384, 11, 1, 77754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2006, 2, 19, 1384, 11, 30, 77854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2006, 2, 20, 1384, 12, 1, 77954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2006, 3, 20, 1384, 12, 29, 78054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2006, 3, 21, 1385, 1, 1, 78154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 78254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // The 2820-year cycle arithmetical algorithm would fail this one. 78354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2025, 3, 21, 1404, 1, 1, 78454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 78554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius -1,-1,-1,-1,-1,-1,-1,-1,-1,-1 78654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius }; 78754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 78854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius Calendar *grego = Calendar::createInstance("fa_IR@calendar=gregorian", status); 78954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius for (int32_t i=0; data[i]!=-1; ) { 79054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t gregYear = data[i++]; 79154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t gregMonth = data[i++]-1; 79254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t gregDay = data[i++]; 79354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t persYear = data[i++]; 79454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t persMonth = data[i++]-1; 79554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t persDay = data[i++]; 79654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 79754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // Test conversion from Persian dates 79854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius grego->clear(); 79954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius grego->set(gregYear, gregMonth, gregDay); 80054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 80154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius cal->clear(); 80254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius cal->set(persYear, persMonth, persDay); 80354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 80454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDate persTime = cal->getTime(status); 80554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDate gregTime = grego->getTime(status); 80654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 80754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (persTime != gregTime) { 80854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln(UnicodeString("Expected ") + gregTime + " but got " + persTime); 80954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 81054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 81154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // Test conversion to Persian dates 81254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius cal->clear(); 81354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius cal->setTime(gregTime, status); 81454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 81554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t computedYear = cal->get(UCAL_YEAR, status); 81654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t computedMonth = cal->get(UCAL_MONTH, status); 81754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t computedDay = cal->get(UCAL_DATE, status); 81854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 81954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ((persYear != computedYear) || 82054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (persMonth != computedMonth) || 82154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (persDay != computedDay)) { 82254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln(UnicodeString("Expected ") + persYear + "/" + (persMonth+1) + "/" + persDay + 82354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius " but got " + computedYear + "/" + (computedMonth+1) + "/" + computedDay); 82454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 82554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 82654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 82754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 82954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius delete grego; 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::TestPersianFormat() { 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale(" en_US@calendar=persian"), status); 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating date format instance"); 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("MMMM d, yyyy G"), Locale("en_US@calendar=gregorian"), status); 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "creating gregorian date format instance"); 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString gregorianDate("January 18, 2007 AD"); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate aDate = fmt2->parse(gregorianDate, status); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!fmt) { 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Coudln't create en_US instance"); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(aDate, str); 845c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln(UnicodeString() + "as Persian Calendar: " + escape(str)); 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expected("Dey 28, 1385 AP"); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(str != expected) { 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Expected " + escape(expected) + " but got " + escape(str)); 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate otherDate = fmt->parse(expected, status); 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(otherDate != aDate) { 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str3; 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(otherDate, str3); 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Parse incorrect of " + escape(expected) + " - wanted " + aDate + " but got " + otherDate + ", " + escape(str3)); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Parsed OK: " + expected); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 858c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // Two digit year parsing problem #4732 859c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru fmt->applyPattern("yy-MM-dd"); 860c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru str.remove(); 861c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru fmt->format(aDate, str); 862c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expected.setTo("85-10-28"); 863c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(str != expected) { 864c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("Expected " + escape(expected) + " but got " + escape(str)); 865c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 866c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru otherDate = fmt->parse(expected, status); 867c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (otherDate != aDate) { 868c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("Parse incorrect of " + escape(expected) + " - wanted " + aDate + " but got " + otherDate); 869c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } else { 870c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru logln("Parsed OK: " + expected); 871c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt2; 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Error occured testing Persian Calendar in English "); 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlCalendarTest::simpleTest(const Locale& loc, const UnicodeString& expect, UDate expectDate, UErrorCode& status) 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString tmp; 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d; 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *fmt0 = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull); 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Try format/parse of " + (UnicodeString)loc.getName()); 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *fmt2 = DateFormat::createDateInstance(DateFormat::kFull, loc); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fmt2) { 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2->format(expectDate, tmp); 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(escape(tmp) + " ( in locale " + loc.getName() + ")"); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(tmp != expect) { 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Failed to format " ) + loc.getName() + " expected " + escape(expect) + " got " + escape(tmp) ); 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = fmt2->parse(expect,status); 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Error occured parsing " + UnicodeString(loc.getName())); 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(d != expectDate) { 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2->format(d,tmp); 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Failed to parse " ) + escape(expect) + ", " + loc.getName() + " expect " + (double)expectDate + " got " + (double)d + " " + escape(tmp)); 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( "wanted " + escape(fmt0->format(expectDate,tmp.remove())) + " but got " + escape(fmt0->format(d,tmp.remove()))); 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt2; 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Can't create " + loc.getName() + " date instance"); 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt0; 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef CHECK 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 914