16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/************************************************************************ 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2013, International Business Machines Corporation 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ************************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "caltest.h" 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/dtfmtsym.h" 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/gregocal.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/localpointer.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "hebrwcal.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/smpdtfmt.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/simpletz.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "dbgutil.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udat.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/localpointer.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "islamcal.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define mkcstr(U) u_austrcpy(calloc(8, u_strlen(U) + 1), U) 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_CHECK_STATUS { \ 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { \ 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (status == U_MISSING_RESOURCE_ERROR) { \ 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("%s:%d: Test failure. status=%s", __FILE__, __LINE__, u_errorName(status)); \ 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { \ 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("%s:%d: Test failure. status=%s", __FILE__, __LINE__, u_errorName(status)); \ 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } return;}} 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT(expr) {if ((expr)==FALSE) {errln("%s:%d: Test failure \n", __FILE__, __LINE__);};} 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ***************************************************************************** 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// class CalendarTest 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ***************************************************************************** 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString CalendarTest::calToStr(const Calendar & cal) 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString out; 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i; 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d; 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0;i<UCAL_FIELD_COUNT;i++) { 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out += (UnicodeString("") + fieldName((UCalendarDateFields)i) + "=" + cal.get((UCalendarDateFields)i, status) + UnicodeString(" ")); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out += "[" + UnicodeString(cal.getType()) + "]"; 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal.inDaylightTime(status)) { 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out += UnicodeString(" (in DST), zone="); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out += UnicodeString(", zone="); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str2; 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out += cal.getTimeZone().getDisplayName(str2); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d = cal.getTime(status); 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out += UnicodeString(" :","") + d; 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return out; 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) logln("TestSuite TestCalendar"); 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (index) { 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 0: 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestDOW943"; 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestDOW943---"); logln(""); 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestDOW943(); 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 1: 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestClonesUnique908"; 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestClonesUnique908---"); logln(""); 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestClonesUnique908(); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 2: 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestGregorianChange768"; 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestGregorianChange768---"); logln(""); 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestGregorianChange768(); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 3: 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestDisambiguation765"; 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestDisambiguation765---"); logln(""); 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestDisambiguation765(); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 4: 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestGMTvsLocal4064654"; 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestGMTvsLocal4064654---"); logln(""); 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestGMTvsLocal4064654(); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 5: 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestAddSetOrder621"; 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestAddSetOrder621---"); logln(""); 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestAddSetOrder621(); 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 6: 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestAdd520"; 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestAdd520---"); logln(""); 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestAdd520(); 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 7: 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestFieldSet4781"; 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestFieldSet4781---"); logln(""); 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestFieldSet4781(); 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 8: 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestSerialize337"; 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestSerialize337---"); logln(""); 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // TestSerialize337(); 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 9: 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestSecondsZero121"; 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestSecondsZero121---"); logln(""); 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestSecondsZero121(); 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 10: 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestAddSetGet0610"; 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestAddSetGet0610---"); logln(""); 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestAddSetGet0610(); 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 11: 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestFields060"; 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestFields060---"); logln(""); 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestFields060(); 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 12: 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestEpochStartFields"; 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestEpochStartFields---"); logln(""); 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestEpochStartFields(); 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 13: 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestDOWProgression"; 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestDOWProgression---"); logln(""); 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestDOWProgression(); 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 14: 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestGenericAPI"; 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestGenericAPI---"); logln(""); 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestGenericAPI(); 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 15: 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestAddRollExtensive"; 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestAddRollExtensive---"); logln(""); 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestAddRollExtensive(); 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 16: 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestDOW_LOCALandYEAR_WOY"; 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestDOW_LOCALandYEAR_WOY---"); logln(""); 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestDOW_LOCALandYEAR_WOY(); 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 17: 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestWOY"; 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestWOY---"); logln(""); 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestWOY(); 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 18: 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestRog"; 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestRog---"); logln(""); 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestRog(); 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 19: 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestYWOY"; 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestYWOY---"); logln(""); 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestYWOY(); 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 20: 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestJD"; 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestJD---"); logln(""); 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestJD(); 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 21: 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestDebug"; 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestDebug---"); logln(""); 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestDebug(); 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 22: 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "Test6703"; 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Test6703---"); logln(""); 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Test6703(); 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 23: 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "Test3785"; 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Test3785---"); logln(""); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Test3785(); 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 24: 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "Test1624"; 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Test1624---"); logln(""); 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Test1624(); 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 25: 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestTimeStamp"; 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestTimeStamp---"); logln(""); 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestTimeStamp(); 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 26: 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestISO8601"; 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestISO8601---"); logln(""); 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestISO8601(); 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 27: 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestAmbiguousWallTimeAPIs"; 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestAmbiguousWallTimeAPIs---"); logln(""); 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestAmbiguousWallTimeAPIs(); 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 28: 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestRepeatedWallTime"; 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestRepeatedWallTime---"); logln(""); 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestRepeatedWallTime(); 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 29: 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestSkippedWallTime"; 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestSkippedWallTime---"); logln(""); 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestSkippedWallTime(); 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 30: 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestCloneLocale"; 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestCloneLocale---"); logln(""); 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestCloneLocale(); 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 31: 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestIslamicUmAlQura"; 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestIslamicUmAlQura---"); logln(""); 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestIslamicUmAlQura(); 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 32: 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "TestIslamicTabularDates"; 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(exec) { 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestIslamicTabularDates---"); logln(""); 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestIslamicTabularDates(); 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: name = ""; break; 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// --------------------------------------------------------------------------------- 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString CalendarTest::fieldName(UCalendarDateFields f) { 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (f) { 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define FIELD_NAME_STR(x) case x: return (#x+5) 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_ERA ); 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_YEAR ); 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_MONTH ); 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_WEEK_OF_YEAR ); 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_WEEK_OF_MONTH ); 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_DATE ); 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_DAY_OF_YEAR ); 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_DAY_OF_WEEK ); 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_DAY_OF_WEEK_IN_MONTH ); 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_AM_PM ); 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_HOUR ); 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_HOUR_OF_DAY ); 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_MINUTE ); 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_SECOND ); 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_MILLISECOND ); 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_ZONE_OFFSET ); 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_DST_OFFSET ); 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_YEAR_WOY ); 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_DOW_LOCAL ); 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_EXTENDED_YEAR ); 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_JULIAN_DAY ); 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FIELD_NAME_STR( UCAL_MILLISECONDS_IN_DAY ); 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#undef FIELD_NAME_STR 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return UnicodeString("") + ((int32_t)f); 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test various API methods for API completeness. 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestGenericAPI() 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d; 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool eq = FALSE,b4 = FALSE,af = FALSE; 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate when = date(90, UCAL_APRIL, 15); 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString tzid("TestZone"); 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t tzoffset = 123400; 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SimpleTimeZone *zone = new SimpleTimeZone(tzoffset, tzid); 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal = Calendar::createInstance(zone->clone(), status); 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance", TRUE)) return; 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*zone != cal->getTimeZone()) errln("FAIL: Calendar::getTimeZone failed"); 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal2 = Calendar::createInstance(cal->getTimeZone(), status); 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance")) return; 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setTime(when, status); 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal2->setTime(when, status); 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::setTime")) return; 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!(*cal == *cal2)) errln("FAIL: Calendar::operator== failed"); 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((*cal != *cal2)) errln("FAIL: Calendar::operator!= failed"); 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!cal->equals(*cal2, status) || 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->before(*cal2, status) || 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->after(*cal2, status) || 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)) errln("FAIL: equals/before/after failed"); 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("cal2->setTime(when+1000)"); 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal2->setTime(when + 1000, status); 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::setTime")) return; 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->equals(*cal2, status) || 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal2->before(*cal, status) || 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->after(*cal2, status) || 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)) errln("FAIL: equals/before/after failed after setTime(+1000)"); 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("cal->roll(UCAL_SECOND)"); 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->roll(UCAL_SECOND, (UBool) TRUE, status); 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->roll(UCAL_SECOND, (int32_t)0, status); 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::roll")) return; 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!(eq=cal->equals(*cal2, status)) || 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (b4=cal->before(*cal2, status)) || 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (af=cal->after(*cal2, status)) || 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)) { 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: equals[%c]/before[%c]/after[%c] failed after roll 1 second [should be T/F/F]", 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org eq?'T':'F', 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org b4?'T':'F', 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org af?'T':'F'); 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Roll back to January 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->roll(UCAL_MONTH, (int32_t)(1 + UCAL_DECEMBER - cal->get(UCAL_MONTH, status)), status); 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::roll")) return; 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->equals(*cal2, status) || 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal2->before(*cal, status) || 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->after(*cal2, status) || 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)) errln("FAIL: equals/before/after failed after rollback to January"); 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TimeZone *z = cal->orphanTimeZone(); 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (z->getID(str) != tzid || 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org z->getRawOffset() != tzoffset) 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: orphanTimeZone failed"); 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<2; ++i) 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool lenient = ( i > 0 ); 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setLenient(lenient); 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (lenient != cal->isLenient()) errln("FAIL: setLenient/isLenient failed"); 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Later: Check for lenient behavior 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=UCAL_SUNDAY; i<=UCAL_SATURDAY; ++i) 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setFirstDayOfWeek((UCalendarDaysOfWeek)i); 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getFirstDayOfWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed"); 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode aStatus = U_ZERO_ERROR; 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getFirstDayOfWeek(aStatus) != i || U_FAILURE(aStatus)) errln("FAIL: getFirstDayOfWeek(status) failed"); 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=1; i<=7; ++i) 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setMinimalDaysInFirstWeek((uint8_t)i); 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getMinimalDaysInFirstWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed"); 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<UCAL_FIELD_COUNT; ++i) 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getMinimum((UCalendarDateFields)i) > cal->getGreatestMinimum((UCalendarDateFields)i)) 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("FAIL: getMinimum larger than getGreatestMinimum for field ") + i); 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getLeastMaximum((UCalendarDateFields)i) > cal->getMaximum((UCalendarDateFields)i)) 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("FAIL: getLeastMaximum larger than getMaximum for field ") + i); 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getMinimum((UCalendarDateFields)i) >= cal->getMaximum((UCalendarDateFields)i)) 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("FAIL: getMinimum not less than getMaximum for field ") + i); 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->adoptTimeZone(TimeZone::createDefault()); 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear(); 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1984, 5, 24); 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getTime(status) != date(84, 5, 24) || U_FAILURE(status)) 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Calendar::set(3 args) failed"); 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear(); 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1985, 3, 2, 11, 49); 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getTime(status) != date(85, 3, 2, 11, 49) || U_FAILURE(status)) 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Calendar::set(5 args) failed"); 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear(); 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1995, 9, 12, 1, 39, 55); 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getTime(status) != date(95, 9, 12, 1, 39, 55) || U_FAILURE(status)) 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Calendar::set(6 args) failed"); 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->getTime(status); 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::getTime")) return; 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<UCAL_FIELD_COUNT; ++i) 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(i) { 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_YEAR: case UCAL_MONTH: case UCAL_DATE: 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_HOUR_OF_DAY: case UCAL_MINUTE: case UCAL_SECOND: 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_EXTENDED_YEAR: 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet F, should be T " + fieldName((UCalendarDateFields)i)); 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet = T, should be F " + fieldName((UCalendarDateFields)i)); 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear((UCalendarDateFields)i); 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::clear/isSet failed " + fieldName((UCalendarDateFields)i)); 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal->getActualMinimum(Calendar::SECOND, status) != 0){ 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar is suppose to return 0 for getActualMinimum"); 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal3 = Calendar::createInstance(status); 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal3->roll(Calendar::SECOND, (int32_t)0, status); 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::roll(EDateFields, int32_t, UErrorCode)")) return; 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal2; 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal3; 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count; 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const Locale* loc = Calendar::getAvailableLocales(count); 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (count < 1 || loc == 0) 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("FAIL: getAvailableLocales failed"); 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<count; ++i) 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(loc[i], status); 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance")) return; 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(TimeZone::createDefault(), Locale::getEnglish(), status); 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance")) return; 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(*zone, Locale::getEnglish(), status); 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance")) return; 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar *gc = new GregorianCalendar(*zone, status); 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar")) return; 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc = new GregorianCalendar(Locale::getEnglish(), status); 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar")) return; 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc = new GregorianCalendar(Locale::getEnglish(), status); 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc = new GregorianCalendar(*zone, Locale::getEnglish(), status); 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar")) return; 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc = new GregorianCalendar(zone, status); 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar")) return; 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc = new GregorianCalendar(1998, 10, 14, 21, 43, status); 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (gc->getTime(status) != (d =date(98, 10, 14, 21, 43) )|| U_FAILURE(status)) 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: new GregorianCalendar(ymdhm) failed with " + UnicodeString(u_errorName(status)) + ", cal=" + gc->getTime(status) + UnicodeString(calToStr(*gc)) + ", d=" + d); 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("GOOD: cal=") +gc->getTime(status) + UnicodeString(calToStr(*gc)) + ", d=" + d); 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc = new GregorianCalendar(1998, 10, 14, 21, 43, 55, status); 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (gc->getTime(status) != (d=date(98, 10, 14, 21, 43, 55)) || U_FAILURE(status)) 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: new GregorianCalendar(ymdhms) failed with " + UnicodeString(u_errorName(status))); 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar gc2(Locale::getEnglish(), status); 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar")) return; 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc2 = *gc; 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (gc2 != *gc || !(gc2 == *gc)) errln("FAIL: GregorianCalendar assignment/operator==/operator!= failed"); 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete z; 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Code coverage for Calendar class. */ 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(status); 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance")) { 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else { 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((Calendar *)cal)->roll(UCAL_HOUR, (int32_t)100, status); 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((Calendar *)cal)->clear(UCAL_HOUR); 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_SERVICE 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegistryKey key = cal->registerFactory(NULL, status); 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->unregister(key, status); 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(Locale("he_IL@calendar=hebrew"), status); 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance")) { 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->roll(Calendar::MONTH, (int32_t)100, status); 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalPointer<StringEnumeration> values( 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar::getKeywordValuesForLocale("calendar", Locale("he"), FALSE, status)); 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (values.isNull() || U_FAILURE(status)) { 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("FAIL: Calendar::getKeywordValuesForLocale(he): %s", u_errorName(status)); 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool containsHebrew = FALSE; 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *charValue; 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t valueLength; 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while ((charValue = values->next(&valueLength, status)) != NULL) { 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (valueLength == 6 && strcmp(charValue, "hebrew") == 0) { 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org containsHebrew = TRUE; 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!containsHebrew) { 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::getKeywordValuesForLocale(he)->next() does not contain \"hebrew\""); 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org values->reset(status); 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org containsHebrew = FALSE; 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString hebrew = UNICODE_STRING_SIMPLE("hebrew"); 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *ucharValue; 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while ((ucharValue = values->unext(&valueLength, status)) != NULL) { 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString value(FALSE, ucharValue, valueLength); 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (value == hebrew) { 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org containsHebrew = TRUE; 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!containsHebrew) { 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::getKeywordValuesForLocale(he)->unext() does not contain \"hebrew\""); 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org values->reset(status); 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org containsHebrew = FALSE; 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString *stringValue; 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while ((stringValue = values->snext(status)) != NULL) { 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*stringValue == hebrew) { 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org containsHebrew = TRUE; 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!containsHebrew) { 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::getKeywordValuesForLocale(he)->snext() does not contain \"hebrew\""); 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This test confirms the correct behavior of add when incrementing 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * through subsequent days. 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestRog() 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar* gc = new GregorianCalendar(status); 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year = 1997, month = UCAL_APRIL, date = 1; 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->set(year, month, date); 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->set(UCAL_HOUR_OF_DAY, 23); 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->set(UCAL_MINUTE, 0); 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->set(UCAL_SECOND, 0); 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->set(UCAL_MILLISECOND, 0); 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t i = 0; i < 9; i++, gc->add(UCAL_DATE, 1, status)) { 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (gc->get(UCAL_YEAR, status) != year || 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->get(UCAL_MONTH, status) != month || 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->get(UCAL_DATE, status) != (date + i)) errln("FAIL: Date wrong"); 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test the handling of the day of the week, checking for correctness and 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for correct minimum and maximum values. 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestDOW943() 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dowTest(FALSE); 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dowTest(TRUE); 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::dowTest(UBool lenient) 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar* cal = new GregorianCalendar(status); 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("cal - Aug 12, 1997\n"); 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1997, UCAL_AUGUST, 12); 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->getTime(status); 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((lenient?UnicodeString("LENIENT0: "):UnicodeString("nonlenient0: ")) + UnicodeString(calToStr(*cal))); 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setLenient(lenient); 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("cal - Dec 1, 1996\n"); 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1996, UCAL_DECEMBER, 1); 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((lenient?UnicodeString("LENIENT: "):UnicodeString("nonlenient: ")) + UnicodeString(calToStr(*cal))); 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dow = cal->get(UCAL_DAY_OF_WEEK, status); 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed [%s]", u_errorName(status)); return; } 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t min = cal->getMinimum(UCAL_DAY_OF_WEEK); 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t max = cal->getMaximum(UCAL_DAY_OF_WEEK); 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (dow < min || 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dow > max) errln(UnicodeString("FAIL: Day of week ") + (int32_t)dow + " out of range"); 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (dow != UCAL_SUNDAY) errln("FAIL: Day of week should be SUNDAY[%d] not %d", UCAL_SUNDAY, dow); 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (min != UCAL_SUNDAY || 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org max != UCAL_SATURDAY) errln("FAIL: Min/max bad"); 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that cloned Calendar objects do not inadvertently share substructures. 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestClonesUnique908() 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *c = Calendar::createInstance(status); 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance", TRUE)) return; 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *d = (Calendar*) c->clone(); 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_MILLISECOND, 123); 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d->set(UCAL_MILLISECOND, 456); 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (c->get(UCAL_MILLISECOND, status) != 123 || 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d->get(UCAL_MILLISECOND, status) != 456) { 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Clones share fields"); 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete c; 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete d; 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that the Gregorian cutoff value works as advertised. 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestGregorianChange768() 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool b; 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar* c = new GregorianCalendar(status); 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str)); 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org b = c->isLeapYear(1800); 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false")); 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString(" (should be FALSE)")); 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (b) errln("FAIL"); 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->setGregorianChange(date(0, 0, 1), status); 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("GregorianCalendar::setGregorianChange failed"); return; } 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str)); 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org b = c->isLeapYear(1800); 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false")); 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString(" (should be TRUE)")); 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!b) errln("FAIL"); 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete c; 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm the functioning of the field disambiguation algorithm. 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestDisambiguation765() 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *c = Calendar::createInstance("en_US", status); 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance", TRUE)) return; 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->setLenient(FALSE); 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_MONTH, UCAL_JUNE); 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DATE, 3); 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 third day of June = ", c, 1997, UCAL_JUNE, 3); 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_MONTH, UCAL_JUNE); 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 1); 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 first Tuesday in June = ", c, 1997, UCAL_JUNE, 3); 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_MONTH, UCAL_JUNE); 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK_IN_MONTH, - 1); 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 last Tuesday in June = ", c, 1997, UCAL_JUNE, 24); 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_MONTH, UCAL_JUNE); 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 0); 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->getTime(status); 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 zero-th Tuesday in June = ", status); 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_MONTH, UCAL_JUNE); 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_WEEK_OF_MONTH, 1); 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 Tuesday in week 1 of June = ", c, 1997, UCAL_JUNE, 3); 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_MONTH, UCAL_JUNE); 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_WEEK_OF_MONTH, 5); 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 Tuesday in week 5 of June = ", c, 1997, UCAL_JULY, 1); 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_MONTH, UCAL_JUNE); 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_WEEK_OF_MONTH, 0); 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->setMinimalDaysInFirstWeek(1); 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->getTime(status); 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 Tuesday in week 0 of June = ", status); 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Note: The following test used to expect YEAR 1997, WOY 1 to 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * resolve to a date in Dec 1996; that is, to behave as if 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * YEAR_WOY were 1997. With the addition of a new explicit 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * YEAR_WOY field, YEAR_WOY must itself be set if that is what is 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * desired. Using YEAR in combination with WOY is ambiguous, and 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * results in the first WOY/DOW day of the year satisfying the 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * given fields (there may be up to two such days). In this case, 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it propertly resolves to Tue Dec 30 1997, which has a WOY value 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of 1 (for YEAR_WOY 1998) and a DOW of Tuesday, and falls in the 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * _calendar_ year 1997, as specified. - aliu */ 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR_WOY, 1997); // aliu 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_WEEK_OF_YEAR, 1); 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 Tuesday in week 1 of yearWOY = ", c, 1996, UCAL_DECEMBER, 31); 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); // - add test for YEAR 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->setMinimalDaysInFirstWeek(1); 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_WEEK_OF_YEAR, 1); 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 Tuesday in week 1 of year = ", c, 1997, UCAL_DECEMBER, 30); 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->clear(); 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_YEAR, 1997); 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(UCAL_WEEK_OF_YEAR, 10); 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 Tuesday in week 10 of year = ", c, 1997, UCAL_MARCH, 4); 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // {sfb} week 0 is no longer a valid week of year 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*c->clear(); 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(Calendar::YEAR, 1997); 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(Calendar::DAY_OF_WEEK, Calendar::TUESDAY); 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //c->set(Calendar::WEEK_OF_YEAR, 0); 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->set(Calendar::WEEK_OF_YEAR, 1); 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verify765("1997 Tuesday in week 0 of year = ", c, 1996, Calendar::DECEMBER, 24);*/ 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //catch(IllegalArgumentException ex) { 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // errln("FAIL: Exception seen:"); 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // ex.printStackTrace(log); 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete c; 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::verify765(const UnicodeString& msg, Calendar* c, int32_t year, int32_t month, int32_t day) 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t y = c->get(UCAL_YEAR, status); 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t m = c->get(UCAL_MONTH, status); 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t d = c->get(UCAL_DATE, status); 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( y == year && 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org m == month && 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d == day) { 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("FAIL: Calendar::get failed"); return; } 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("PASS: " + msg + dateToString(c->getTime(status), str)); 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: " + msg + dateToString(c->getTime(status), str) + "; expected " + (int32_t)year + "/" + (int32_t)(month + 1) + "/" + (int32_t)day + 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "; got " + (int32_t)y + "/" + (int32_t)(m + 1) + "/" + (int32_t)d + " for Locale: " + c->getLocaleID(ULOC_ACTUAL_LOCALE,status)); 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::verify765(const UnicodeString& msg/*, IllegalArgumentException e*/, UErrorCode status) 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (status != U_ILLEGAL_ARGUMENT_ERROR) errln("FAIL: No IllegalArgumentException for " + msg); 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else logln("PASS: " + msg + "IllegalArgument as expected"); 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that the offset between local time and GMT behaves as expected. 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestGMTvsLocal4064654() 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org test4064654(1997, 1, 1, 12, 0, 0); 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org test4064654(1997, 4, 16, 18, 30, 0); 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::test4064654(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn, int32_t sc) 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate date; 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *gmtcal = Calendar::createInstance(status); 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance", TRUE)) return; 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gmtcal->adoptTimeZone(TimeZone::createTimeZone("Africa/Casablanca")); 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gmtcal->set(yr, mo - 1, dt, hr, mn, sc); 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gmtcal->set(UCAL_MILLISECOND, 0); 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org date = gmtcal->getTime(status); 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("date = " + dateToString(date, str)); 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal = Calendar::createInstance(status); 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::createInstance failed"); return; } 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setTime(date, status); 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t offset = cal->getTimeZone().getOffset((uint8_t)cal->get(UCAL_ERA, status), 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->get(UCAL_YEAR, status), 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->get(UCAL_MONTH, status), 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->get(UCAL_DATE, status), 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (uint8_t)cal->get(UCAL_DAY_OF_WEEK, status), 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->get(UCAL_MILLISECOND, status), status); 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("offset for " + dateToString(date, str) + "= " + (offset / 1000 / 60 / 60.0) + "hr"); 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t utc = ((cal->get(UCAL_HOUR_OF_DAY, status) * 60 + 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->get(UCAL_MINUTE, status)) * 60 + 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->get(UCAL_SECOND, status)) * 1000 + 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->get(UCAL_MILLISECOND, status) - offset; 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t expected = ((hr * 60 + mn) * 60 + sc) * 1000; 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (utc != expected) errln(UnicodeString("FAIL: Discrepancy of ") + (utc - expected) + 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " millis = " + ((utc - expected) / 1000 / 60 / 60.0) + " hr"); 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gmtcal; 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The operations of adding and setting should not exhibit pathological 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * dependence on the order of operations. This test checks for this. 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAddSetOrder621() 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d = date(97, 4, 14, 13, 23, 45); 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal = Calendar::createInstance(status); 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance", TRUE)) return; 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setTime(d, status); 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::setTime failed"); 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->add(UCAL_DATE, - 5, status); 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::add failed"); 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(UCAL_HOUR_OF_DAY, 0); 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(UCAL_MINUTE, 0); 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(UCAL_SECOND, 0); 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString s; 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dateToString(cal->getTime(status), s); 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::getTime failed"); 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(status); 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::createInstance failed"); 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setTime(d, status); 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::setTime failed"); 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(UCAL_HOUR_OF_DAY, 0); 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(UCAL_MINUTE, 0); 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(UCAL_SECOND, 0); 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->add(UCAL_DATE, - 5, status); 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::add failed"); 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString s2; 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dateToString(cal->getTime(status), s2); 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Calendar::getTime failed"); 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (s == s2) 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Pass: " + s + " == " + s2); 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: " + s + " != " + s2); 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that adding to various fields works. 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAdd520() 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t y = 1997, m = UCAL_FEBRUARY, d = 1; 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar *temp = new GregorianCalendar(y, m, d, status); 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check520(temp, y, m, d); 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->add(UCAL_YEAR, 1, status); 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org y++; 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check520(temp, y, m, d); 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->add(UCAL_MONTH, 1, status); 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org m++; 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check520(temp, y, m, d); 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->add(UCAL_DATE, 1, status); 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d++; 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check520(temp, y, m, d); 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->add(UCAL_DATE, 2, status); 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d += 2; 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check520(temp, y, m, d); 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->add(UCAL_DATE, 28, status); 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d = 1;++m; 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check520(temp, y, m, d); 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete temp; 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Execute adding and rolling in GregorianCalendar extensively, 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAddRollExtensive() 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t maxlimit = 40; 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t y = 1997, m = UCAL_FEBRUARY, d = 1, hr = 1, min = 1, sec = 0, ms = 0; 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar *temp = new GregorianCalendar(y, m, d, status); 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->set(UCAL_HOUR, hr); 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->set(UCAL_MINUTE, min); 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->set(UCAL_SECOND, sec); 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->set(UCAL_MILLISECOND, ms); 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->setMinimalDaysInFirstWeek(1); 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendarDateFields e; 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Testing GregorianCalendar add..."); 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org e = UCAL_YEAR; 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (e < UCAL_FIELD_COUNT) { 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit = maxlimit; 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i < limit; i++) { 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->add(e, 1, status); 10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { limit = i; status = U_ZERO_ERROR; } 10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i < limit; i++) { 10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->add(e, -1, status); 10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("GregorianCalendar::add -1 failed"); return; } 10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check520(temp, y, m, d, hr, min, sec, ms, e); 10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org e = (UCalendarDateFields) ((int32_t) e + 1); 10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Testing GregorianCalendar roll..."); 10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org e = UCAL_YEAR; 10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (e < UCAL_FIELD_COUNT) { 10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit = maxlimit; 10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i < limit; i++) { 10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(*temp) + UnicodeString(" " ) + fieldName(e) + UnicodeString("++") ); 10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->roll(e, 1, status); 10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("caltest.cpp:%d e=%d, i=%d - roll(+) err %s\n", __LINE__, (int) e, (int) i, u_errorName(status)); 10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(*temp)); 10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org limit = i; status = U_ZERO_ERROR; 10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i < limit; i++) { 10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("caltest.cpp:%d e=%d, i=%d\n", __LINE__, (int) e, (int) i); 11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(*temp) + UnicodeString(" " ) + fieldName(e) + UnicodeString("--") ); 11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp->roll(e, -1, status); 11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln(UnicodeString("GregorianCalendar::roll ") + CalendarTest::fieldName(e) + " count=" + UnicodeString('@'+i) + " by -1 failed with " + u_errorName(status) ); return; } 11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check520(temp, y, m, d, hr, min, sec, ms, e); 11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org e = (UCalendarDateFields) ((int32_t) e + 1); 11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete temp; 11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::check520(Calendar* c, 11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t y, int32_t m, int32_t d, 11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t hr, int32_t min, int32_t sec, 11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t ms, UCalendarDateFields field) 11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (c->get(UCAL_YEAR, status) != y || 11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_MONTH, status) != m || 11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_DATE, status) != d || 11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_HOUR, status) != hr || 11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_MINUTE, status) != min || 11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_SECOND, status) != sec || 11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_MILLISECOND, status) != ms) { 11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("U_FAILURE for field ") + (int32_t)field + 11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ": Expected y/m/d h:m:s:ms of " + 11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org y + "/" + (m + 1) + "/" + d + " " + 11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org hr + ":" + min + ":" + sec + ":" + ms + 11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "; got " + c->get(UCAL_YEAR, status) + 11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "/" + (c->get(UCAL_MONTH, status) + 1) + 11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "/" + c->get(UCAL_DATE, status) + 11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " " + c->get(UCAL_HOUR, status) + ":" + 11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_MINUTE, status) + ":" + 11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_SECOND, status) + ":" + 11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_MILLISECOND, status) 11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ); 11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("Confirmed: ") + y + "/" + 11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (m + 1) + "/" + d + " " + 11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org hr + ":" + min + ":" + sec + ":" + ms); 11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::check520(Calendar* c, 11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t y, int32_t m, int32_t d) 11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (c->get(UCAL_YEAR, status) != y || 11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_MONTH, status) != m || 11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->get(UCAL_DATE, status) != d) { 11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("FAILURE: Expected y/m/d of ") + 11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org y + "/" + (m + 1) + "/" + d + " " + 11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "; got " + c->get(UCAL_YEAR, status) + 11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "/" + (c->get(UCAL_MONTH, status) + 1) + 11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "/" + c->get(UCAL_DATE, status) 11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ); 11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("Confirmed: ") + y + "/" + 11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (m + 1) + "/" + d); 11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test that setting of fields works. In particular, make sure that all instances 11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * of GregorianCalendar don't share a static instance of the fields array. 11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestFieldSet4781() 11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // try { 11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar *g = new GregorianCalendar(status); 11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar *g2 = new GregorianCalendar(status); 11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org g2->set(UCAL_HOUR, 12, status); 11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org g2->set(UCAL_MINUTE, 0, status); 11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org g2->set(UCAL_SECOND, 0, status); 11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::set failed"); return; } 11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*g == *g2) logln("Same"); 11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else logln("Different"); 11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} 11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //catch(IllegalArgumentException e) { 11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //errln("Unexpected exception seen: " + e); 11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} 11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete g; 11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete g2; 12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* We don't support serialization on C++ 12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestSerialize337() 12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar cal = Calendar::getInstance(); 12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool ok = FALSE; 12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org try { 12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FileOutputStream f = new FileOutputStream(FILENAME); 12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ObjectOutput s = new ObjectOutputStream(f); 12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org s.writeObject(PREFIX); 12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org s.writeObject(cal); 12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org s.writeObject(POSTFIX); 12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org f.close(); 12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FileInputStream in = new FileInputStream(FILENAME); 12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ObjectInputStream t = new ObjectInputStream(in); 12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& pre = (UnicodeString&) t.readObject(); 12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar c = (Calendar) t.readObject(); 12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& post = (UnicodeString&) t.readObject(); 12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org in.close(); 12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ok = pre.equals(PREFIX) && 12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org post.equals(POSTFIX) && 12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->equals(c); 12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org File fl = new File(FILENAME); 12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fl.delete(); 12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org catch(IOException e) { 12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Exception received:"); 12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org e.printStackTrace(log); 12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org catch(ClassNotFoundException e) { 12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Exception received:"); 12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org e.printStackTrace(log); 12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!ok) errln("Serialization of Calendar object failed."); 12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString& CalendarTest::PREFIX = "abc"; 12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString& CalendarTest::POSTFIX = "def"; 12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString& CalendarTest::FILENAME = "tmp337.bin"; 12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that the seconds of a Calendar can be zeroed out through the 12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * expected sequence of operations. 12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestSecondsZero121() 12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal = new GregorianCalendar(status); 12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setTime(Calendar::getNow(), status); 12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(UCAL_SECOND, 0); 12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::set failed"); return; } 12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d = cal->getTime(status); 12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString s; 12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dateToString(d, s); 12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (s.indexOf("DATE_FORMAT_FAILURE") >= 0) { 12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Got: \"DATE_FORMAT_FAILURE\"."); 12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (s.indexOf(":00 ") < 0) { 12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Expected to see :00 in " + s); 12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that a specific sequence of adding and setting works as expected; 12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it should not vary depending on when and whether the get method is 12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * called. 12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAddSetGet0610() 12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString EXPECTED_0610("1993/0/5", ""); 12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *calendar = new GregorianCalendar(status); 12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calendar->set(1993, UCAL_JANUARY, 4); 12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("1A) " + value(calendar)); 12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calendar->add(UCAL_DATE, 1, status); 12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString v = value(calendar); 12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("1B) " + v); 12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("--) 1993/0/5"); 12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete calendar; 12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status); 13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("2A) " + value(calendar)); 13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calendar->add(UCAL_DATE, 1, status); 13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString v = value(calendar); 13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("2B) " + v); 13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("--) 1993/0/5"); 13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete calendar; 13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status); 13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("3A) " + value(calendar)); 13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calendar->getTime(status); 13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calendar->add(UCAL_DATE, 1, status); 13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString v = value(calendar); 13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("3B) " + v); 13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("--) 1993/0/5"); 13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete calendar; 13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString 13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::value(Calendar* calendar) 13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return UnicodeString("") + (int32_t)calendar->get(UCAL_YEAR, status) + 13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "/" + (int32_t)calendar->get(UCAL_MONTH, status) + 13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "/" + (int32_t)calendar->get(UCAL_DATE, status) + 13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (U_FAILURE(status) ? " FAIL: Calendar::get failed" : ""); 13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that various fields on a known date are set correctly. 13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestFields060() 13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year = 1997; 13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t month = UCAL_OCTOBER; 13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dDate = 22; 13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar *calendar = 0; 13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calendar = new GregorianCalendar(year, month, dDate, status); 13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t i = 0; i < EXPECTED_FIELDS_length;) { 13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendarDateFields field = (UCalendarDateFields)EXPECTED_FIELDS[i++]; 13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t expected = EXPECTED_FIELDS[i++]; 13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (calendar->get(field, status) != expected) { 13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Expected field ") + (int32_t)field + " to have value " + (int32_t)expected + 13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "; received " + (int32_t)calendar->get(field, status) + " instead"); 13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete calendar; 13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t CalendarTest::EXPECTED_FIELDS[] = { 13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_YEAR, 1997, 13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_MONTH, UCAL_OCTOBER, 13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DATE, 22, 13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DAY_OF_WEEK, UCAL_WEDNESDAY, 13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DAY_OF_WEEK_IN_MONTH, 4, 13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DAY_OF_YEAR, 295 13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst int32_t CalendarTest::EXPECTED_FIELDS_length = (int32_t)(sizeof(CalendarTest::EXPECTED_FIELDS) / 13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sizeof(CalendarTest::EXPECTED_FIELDS[0])); 13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that various fields on a known date are set correctly. In this 13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * case, the start of the epoch (January 1 1970). 13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestEpochStartFields() 13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TimeZone *z = TimeZone::createDefault(); 13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *c = Calendar::createInstance(status); 13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance", TRUE)) return; 13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d = - z->getRawOffset(); 13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar *gc = new GregorianCalendar(status); 13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->setTimeZone(*z); 13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gc->setTime(d, status); 13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool idt = gc->inDaylightTime(status); 14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("GregorianCalendar::inDaylightTime failed"); return; } 14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (idt) { 14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Warning: Skipping test because " + dateToString(d, str) + " is in DST."); 14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c->setTime(d, status); 14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t i = 0; i < UCAL_ZONE_OFFSET;++i) { 14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (c->get((UCalendarDateFields)i, status) != EPOCH_FIELDS[i]) 14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Expected field ") + i + " to have value " + EPOCH_FIELDS[i] + 14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "; saw " + c->get((UCalendarDateFields)i, status) + " instead"); 14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (c->get(UCAL_ZONE_OFFSET, status) != z->getRawOffset()) 14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Expected field ZONE_OFFSET to have value ") + z->getRawOffset() + 14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "; saw " + c->get(UCAL_ZONE_OFFSET, status) + " instead"); 14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (c->get(UCAL_DST_OFFSET, status) != 0) 14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Expected field DST_OFFSET to have value 0") + 14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "; saw " + c->get(UCAL_DST_OFFSET, status) + " instead"); 14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete c; 14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete z; 14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete gc; 14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t CalendarTest::EPOCH_FIELDS[] = { 14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, - 28800000, 0 14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test that the days of the week progress properly when add is called repeatedly 14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for increments of 24 days. 14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestDOWProgression() 14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal = new GregorianCalendar(1972, UCAL_OCTOBER, 26, status); 14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "new GregorianCalendar", TRUE)) return; 14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org marchByDelta(cal, 24); 14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 14506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 14516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 14536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 14556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestDOW_LOCALandYEAR_WOY() 14566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 14576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Note: I've commented out the loop_addroll tests for YEAR and 14586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * YEAR_WOY below because these two fields should NOT behave 14596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * identically when adding. YEAR should keep the month/dom 14606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * invariant. YEAR_WOY should keep the woy/dow invariant. I've 14616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * added a new test that checks for this in place of the old call 14626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to loop_addroll. - aliu */ 14636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 14646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t times = 20; 14656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal=Calendar::createInstance(Locale::getGermany(), status); 14666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance", TRUE)) return; 14676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SimpleDateFormat *sdf=new SimpleDateFormat(UnicodeString("YYYY'-W'ww-ee"), Locale::getGermany(), status); 14686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { dataerrln("Couldn't create SimpleDateFormat - %s", u_errorName(status)); return; } 14696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // ICU no longer use localized date-time pattern characters by default. 14716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // So we set pattern chars using 'J' instead of 'Y'. 14726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbols *dfs = new DateFormatSymbols(Locale::getGermany(), status); 14736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dfs->setLocalPatternChars(UnicodeString("GyMdkHmsSEDFwWahKzJeugAZvcLQq")); 14746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sdf->adoptDateFormatSymbols(dfs); 14756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sdf->applyLocalizedPattern(UnicodeString("JJJJ'-W'ww-ee"), status); 14766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Couldn't apply localized pattern"); return; } 14776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear(); 14796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1997, UCAL_DECEMBER, 25); 14806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doYEAR_WOYLoop(cal, sdf, times, status); 14816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR, status); 14826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org yearAddTest(*cal, status); // aliu 14836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 14846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1997"); return; } 14856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear(); 14876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1998, UCAL_DECEMBER, 25); 14886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doYEAR_WOYLoop(cal, sdf, times, status); 14896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR, status); 14906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org yearAddTest(*cal, status); // aliu 14916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 14926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1998"); return; } 14936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear(); 14956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1582, UCAL_OCTOBER, 1); 14966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doYEAR_WOYLoop(cal, sdf, times, status); 14976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //loop_addroll(cal, /*sdf,*/ times, Calendar::YEAR_WOY, Calendar::YEAR, status); 14986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org yearAddTest(*cal, status); // aliu 14996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 15006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1582"); return; } 15016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete sdf; 15026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 15036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 15056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 15086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Confirm that adding a YEAR and adding a YEAR_WOY work properly for 15096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the given Calendar at its current setting. 15106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 15116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::yearAddTest(Calendar& cal, UErrorCode& status) { 15126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 15136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When adding the YEAR, the month and day should remain constant. 15146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When adding the YEAR_WOY, the WOY and DOW should remain constant. - aliu 15156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Examples: 15166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Wed Jan 14 1998 / 1998-W03-03 Add(YEAR_WOY, 1) -> Wed Jan 20 1999 / 1999-W03-03 15176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Add(YEAR, 1) -> Thu Jan 14 1999 / 1999-W02-04 15186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Thu Jan 14 1999 / 1999-W02-04 Add(YEAR_WOY, 1) -> Thu Jan 13 2000 / 2000-W02-04 15196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Add(YEAR, 1) -> Fri Jan 14 2000 / 2000-W02-05 15206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sun Oct 31 1582 / 1582-W42-07 Add(YEAR_WOY, 1) -> Sun Oct 23 1583 / 1583-W42-07 15216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Add(YEAR, 1) -> Mon Oct 31 1583 / 1583-W44-01 15226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 15236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t y = cal.get(UCAL_YEAR, status); 15246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t mon = cal.get(UCAL_MONTH, status); 15256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t day = cal.get(UCAL_DATE, status); 15266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t ywy = cal.get(UCAL_YEAR_WOY, status); 15276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status); 15286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dow = cal.get(UCAL_DOW_LOCAL, status); 15296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate t = cal.getTime(status); 15306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 15326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Failed to create Calendar for locale. Error: ") + UnicodeString(u_errorName(status))); 15336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 15346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str, str2; 15366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), status); 15376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.setCalendar(cal); 15386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t, str.remove()); 15406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str += ".add(YEAR, 1) =>"; 15416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.add(UCAL_YEAR, 1, status); 15426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t y2 = cal.get(UCAL_YEAR, status); 15436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t mon2 = cal.get(UCAL_MONTH, status); 15446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t day2 = cal.get(UCAL_DATE, status); 15456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(cal.getTime(status), str); 15466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (y2 != (y+1) || mon2 != mon || day2 != day) { 15476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str += (UnicodeString)", expected year " + 15486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (y+1) + ", month " + (mon+1) + ", day " + day; 15496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"FAIL: " + str); 15506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) ); 15516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 15526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(str); 15536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t, str.remove()); 15566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str += ".add(YEAR_WOY, 1)=>"; 15576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setTime(t, status); 15586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln( UnicodeString(" <- ") + CalendarTest::calToStr(cal) ); 15596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.add(UCAL_YEAR_WOY, 1, status); 15606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t ywy2 = cal.get(UCAL_YEAR_WOY, status); 15616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t woy2 = cal.get(UCAL_WEEK_OF_YEAR, status); 15626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dow2 = cal.get(UCAL_DOW_LOCAL, status); 15636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(cal.getTime(status), str); 15646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ywy2 != (ywy+1) || woy2 != woy || dow2 != dow) { 15656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str += (UnicodeString)", expected yearWOY " + 15666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (ywy+1) + ", woy " + woy + ", dowLocal " + dow; 15676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"FAIL: " + str); 15686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) ); 15696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 15706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(str); 15716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 15756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::loop_addroll(Calendar *cal, /*SimpleDateFormat *sdf,*/ int times, UCalendarDateFields field, UCalendarDateFields field2, UErrorCode& errorCode) { 15776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *calclone; 15786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), errorCode); 15796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.setCalendar(*cal); 15806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i; 15816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i<times; i++) { 15836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calclone = cal->clone(); 15846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate start = cal->getTime(errorCode); 15856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->add(field,1,errorCode); 15866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; } 15876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calclone->add(field2,1,errorCode); 15886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; } 15896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal->getTime(errorCode) != calclone->getTime(errorCode)) { 15906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str("FAIL: Results of add differ. "), str2; 15916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str += fmt.format(start, str2) + " "; 15926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str += UnicodeString("Add(") + fieldName(field) + ", 1) -> " + 15936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(cal->getTime(errorCode), str2.remove()) + "; "; 15946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str += UnicodeString("Add(") + fieldName(field2) + ", 1) -> " + 15956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(calclone->getTime(errorCode), str2.remove()); 15966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 15976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete calclone; 15986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 15996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete calclone; 16016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i<times; i++) { 16046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calclone = cal->clone(); 16056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->roll(field,(int32_t)1,errorCode); 16066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; } 16076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calclone->roll(field2,(int32_t)1,errorCode); 16086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; } 16096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal->getTime(errorCode) != calclone->getTime(errorCode)) { 16106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete calclone; 16116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Results of roll differ!"); 16126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 16136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete calclone; 16156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 16176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 16196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 16216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::doYEAR_WOYLoop(Calendar *cal, SimpleDateFormat *sdf, 16226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t times, UErrorCode& errorCode) { 16236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString us; 16256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate tst, original; 16266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *tstres = new GregorianCalendar(Locale::getGermany(), errorCode); 16276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int i=0; i<times; ++i) { 16286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sdf->format(Formattable(cal->getTime(errorCode),Formattable::kIsDate), us, errorCode); 16296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //logln("expected: "+us); 16306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Format error"); return; } 16316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tst=sdf->parse(us,errorCode); 16326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Parse error"); return; } 16336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstres->clear(); 16346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstres->setTime(tst, errorCode); 16356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //logln((UnicodeString)"Parsed week of year is "+tstres->get(UCAL_WEEK_OF_YEAR, errorCode)); 16366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Set time error"); return; } 16376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org original = cal->getTime(errorCode); 16386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org us.remove(); 16396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sdf->format(Formattable(tst,Formattable::kIsDate), us, errorCode); 16406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //logln("got: "+us); 16416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Get time error"); return; } 16426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(original!=tst) { 16436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org us.remove(); 16446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sdf->format(Formattable(original, Formattable::kIsDate), us, errorCode); 16456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Parsed time doesn't match with regular"); 16466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("expected "+us + " " + calToStr(*cal)); 16476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org us.remove(); 16486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sdf->format(Formattable(tst, Formattable::kIsDate), us, errorCode); 16496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("got "+us + " " + calToStr(*tstres)); 16506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstres->clear(); 16526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstres->set(UCAL_YEAR_WOY, cal->get(UCAL_YEAR_WOY, errorCode)); 16536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstres->set(UCAL_WEEK_OF_YEAR, cal->get(UCAL_WEEK_OF_YEAR, errorCode)); 16546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstres->set(UCAL_DOW_LOCAL, cal->get(UCAL_DOW_LOCAL, errorCode)); 16556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal->get(UCAL_YEAR, errorCode) != tstres->get(UCAL_YEAR, errorCode)) { 16566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Different Year!"); 16576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Expected "+cal->get(UCAL_YEAR, errorCode)); 16586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Got "+tstres->get(UCAL_YEAR, errorCode)); 16596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 16606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal->get(UCAL_DAY_OF_YEAR, errorCode) != tstres->get(UCAL_DAY_OF_YEAR, errorCode)) { 16626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: Different Day Of Year!"); 16636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Expected "+cal->get(UCAL_DAY_OF_YEAR, errorCode)); 16646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Got "+tstres->get(UCAL_DAY_OF_YEAR, errorCode)); 16656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 16666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //logln(calToStr(*cal)); 16686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->add(UCAL_DATE, 1, errorCode); 16696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { errln("Add error"); return; } 16706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org us.remove(); 16716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete (tstres); 16736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 16746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ------------------------------------- 16756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 16776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::marchByDelta(Calendar* cal, int32_t delta) 16786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 16796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 16806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cur = (Calendar*) cal->clone(); 16816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t initialDOW = cur->get(UCAL_DAY_OF_WEEK, status); 16826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 16836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t DOW, newDOW = initialDOW; 16846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org do { 16856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 16866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DOW = newDOW; 16876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("DOW = ") + DOW + " " + dateToString(cur->getTime(status), str)); 16886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 16896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cur->add(UCAL_DAY_OF_WEEK, delta, status); 16906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 16916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org newDOW = cur->get(UCAL_DAY_OF_WEEK, status); 16926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 16936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t expectedDOW = 1 + (DOW + delta - 1) % 7; 16946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (newDOW != expectedDOW) { 16956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Day of week should be ") + expectedDOW + " instead of " + newDOW + 16966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " on " + dateToString(cur->getTime(status), str)); 16976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 16986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 16996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (newDOW != initialDOW); 17026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cur; 17036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 17046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK(status, msg) \ 17066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { \ 17076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, msg); \ 17086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; \ 17096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestWOY(void) { 17126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 17136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FDW = Mon, MDFW = 4: 17146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sun Dec 26 1999, WOY 51 17156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Mon Dec 27 1999, WOY 52 17166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Tue Dec 28 1999, WOY 52 17176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Wed Dec 29 1999, WOY 52 17186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Thu Dec 30 1999, WOY 52 17196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Fri Dec 31 1999, WOY 52 17206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sat Jan 01 2000, WOY 52 *** 17216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sun Jan 02 2000, WOY 52 *** 17226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Mon Jan 03 2000, WOY 1 17236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Tue Jan 04 2000, WOY 1 17246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Wed Jan 05 2000, WOY 1 17256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Thu Jan 06 2000, WOY 1 17266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Fri Jan 07 2000, WOY 1 17276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sat Jan 08 2000, WOY 1 17286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sun Jan 09 2000, WOY 1 17296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Mon Jan 10 2000, WOY 2 17306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FDW = Mon, MDFW = 2: 17326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sun Dec 26 1999, WOY 52 17336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Mon Dec 27 1999, WOY 1 *** 17346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Tue Dec 28 1999, WOY 1 *** 17356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Wed Dec 29 1999, WOY 1 *** 17366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Thu Dec 30 1999, WOY 1 *** 17376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Fri Dec 31 1999, WOY 1 *** 17386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sat Jan 01 2000, WOY 1 17396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sun Jan 02 2000, WOY 1 17406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Mon Jan 03 2000, WOY 2 17416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Tue Jan 04 2000, WOY 2 17426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Wed Jan 05 2000, WOY 2 17436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Thu Jan 06 2000, WOY 2 17446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Fri Jan 07 2000, WOY 2 17456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sat Jan 08 2000, WOY 2 17466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sun Jan 09 2000, WOY 2 17476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Mon Jan 10 2000, WOY 3 17486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 17516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 17526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 17536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar cal(status); 17556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy', WOY' w"), status); 17566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Cannot construct calendar/format", TRUE)) return; 17576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendarDaysOfWeek fdw = (UCalendarDaysOfWeek) 0; 17596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //for (int8_t pass=2; pass<=2; ++pass) { 17616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int8_t pass=1; pass<=2; ++pass) { 17626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (pass) { 17636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 1: 17646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fdw = UCAL_MONDAY; 17656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setFirstDayOfWeek(fdw); 17666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setMinimalDaysInFirstWeek(4); 17676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.adoptCalendar(cal.clone()); 17686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 17696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 2: 17706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fdw = UCAL_MONDAY; 17716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setFirstDayOfWeek(fdw); 17726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setMinimalDaysInFirstWeek(2); 17736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.adoptCalendar(cal.clone()); 17746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 17756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //for (i=2; i<=6; ++i) { 17786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<16; ++i) { 17796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate t, t2; 17806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t t_y, t_woy, t_dow; 17816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 17826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(1999, UCAL_DECEMBER, 26 + i); 17836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t = cal.getTime(status), str.remove()); 17846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: getTime failed"); 17856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("* ") + str); 17866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dow = cal.get(UCAL_DAY_OF_WEEK, status); 17876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status); 17886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year = cal.get(UCAL_YEAR, status); 17896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t mon = cal.get(UCAL_MONTH, status); 17906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(cal)); 17916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: get failed"); 17926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dowLocal = dow - fdw; 17936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (dowLocal < 0) dowLocal += 7; 17946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dowLocal++; 17956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t yearWoy = year; 17966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (mon == UCAL_JANUARY) { 17976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (woy >= 52) --yearWoy; 17986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 17996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (woy == 1) ++yearWoy; 18006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Basic fields->time check y/woy/dow 18036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Since Y/WOY is ambiguous, we do a check of the fields, 18046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // not of the specific time. 18056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 18066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR, year); 18076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_WEEK_OF_YEAR, woy); 18086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DAY_OF_WEEK, dow); 18096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t_y = cal.get(UCAL_YEAR, status); 18106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t_woy = cal.get(UCAL_WEEK_OF_YEAR, status); 18116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t_dow = cal.get(UCAL_DAY_OF_WEEK, status); 18126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: get failed"); 18136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t_y != year || t_woy != woy || t_dow != dow) { 18146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "Fail: y/woy/dow fields->time => "; 18156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(cal.getTime(status), str); 18166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 18176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(cal)); 18186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("[get!=set] Y%d!=%d || woy%d!=%d || dow%d!=%d\n", 18196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t_y, year, t_woy, woy, t_dow, dow); 18206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 18216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("y/woy/dow fields->time OK"); 18226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Basic fields->time check y/woy/dow_local 18256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Since Y/WOY is ambiguous, we do a check of the fields, 18266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // not of the specific time. 18276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 18286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR, year); 18296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_WEEK_OF_YEAR, woy); 18306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DOW_LOCAL, dowLocal); 18316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t_y = cal.get(UCAL_YEAR, status); 18326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t_woy = cal.get(UCAL_WEEK_OF_YEAR, status); 18336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t_dow = cal.get(UCAL_DOW_LOCAL, status); 18346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: get failed"); 18356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t_y != year || t_woy != woy || t_dow != dowLocal) { 18366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "Fail: y/woy/dow_local fields->time => "; 18376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(cal.getTime(status), str); 18386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 18396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Basic fields->time check y_woy/woy/dow 18426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 18436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR_WOY, yearWoy); 18446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_WEEK_OF_YEAR, woy); 18456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DAY_OF_WEEK, dow); 18466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t2 = cal.getTime(status); 18476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: getTime failed"); 18486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t != t2) { 18496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "Fail: y_woy/woy/dow fields->time => "; 18506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t2, str); 18516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 18526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(cal)); 18536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("%.f != %.f\n", t, t2); 18546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 18556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("y_woy/woy/dow OK"); 18566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Basic fields->time check y_woy/woy/dow_local 18596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 18606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR_WOY, yearWoy); 18616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_WEEK_OF_YEAR, woy); 18626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DOW_LOCAL, dowLocal); 18636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t2 = cal.getTime(status); 18646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: getTime failed"); 18656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t != t2) { 18666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "Fail: y_woy/woy/dow_local fields->time => "; 18676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t2, str); 18686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 18696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Testing DOW_LOCAL.. dow%d\n", dow); 18726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Make sure DOW_LOCAL disambiguates over DOW 18736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t wrongDow = dow - 3; 18746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (wrongDow < 1) wrongDow += 7; 18756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setTime(t, status); 18766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DAY_OF_WEEK, wrongDow); 18776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DOW_LOCAL, dowLocal); 18786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t2 = cal.getTime(status); 18796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: set/getTime failed"); 18806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t != t2) { 18816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "Fail: DOW_LOCAL fields->time => "; 18826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t2, str); 18836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 18846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(cal)); 18856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("%.f : DOW%d, DOW_LOCAL%d -> %.f\n", 18866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t, wrongDow, dowLocal, t2); 18876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Make sure DOW disambiguates over DOW_LOCAL 18906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t wrongDowLocal = dowLocal - 3; 18916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (wrongDowLocal < 1) wrongDowLocal += 7; 18926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setTime(t, status); 18936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DOW_LOCAL, wrongDowLocal); 18946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DAY_OF_WEEK, dow); 18956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t2 = cal.getTime(status); 18966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: set/getTime failed"); 18976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t != t2) { 18986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "Fail: DOW fields->time => "; 18996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t2, str); 19006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 19016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Make sure YEAR_WOY disambiguates over YEAR 19046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setTime(t, status); 19056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR, year - 2); 19066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR_WOY, yearWoy); 19076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t2 = cal.getTime(status); 19086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: set/getTime failed"); 19096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t != t2) { 19106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "Fail: YEAR_WOY fields->time => "; 19116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t2, str); 19126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 19136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Make sure YEAR disambiguates over YEAR_WOY 19166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setTime(t, status); 19176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR_WOY, yearWoy - 2); 19186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR, year); 19196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t2 = cal.getTime(status); 19206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: set/getTime failed"); 19216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t != t2) { 19226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "Fail: YEAR fields->time => "; 19236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t2, str); 19246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 19256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 19306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FDW = Mon, MDFW = 4: 19316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sun Dec 26 1999, WOY 51 19326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Mon Dec 27 1999, WOY 52 19336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Tue Dec 28 1999, WOY 52 19346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Wed Dec 29 1999, WOY 52 19356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Thu Dec 30 1999, WOY 52 19366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Fri Dec 31 1999, WOY 52 19376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sat Jan 01 2000, WOY 52 19386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Sun Jan 02 2000, WOY 52 19396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Roll the DOW_LOCAL within week 52 19426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=27; i<=33; ++i) { 19436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t amount; 19446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (amount=-7; amount<=7; ++amount) { 19456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = "roll("; 19466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(1999, UCAL_DECEMBER, i); 19476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate t, t2; 19486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(cal.getTime(status), str); 19496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: getTime failed"); 19506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str += UnicodeString(", ") + amount + ") = "; 19516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.roll(UCAL_DOW_LOCAL, amount, status); 19536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: roll failed"); 19546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t = cal.getTime(status); 19566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t newDom = i + amount; 19576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (newDom < 27) newDom += 7; 19586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (newDom > 33) newDom -= 7; 19596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(1999, UCAL_DECEMBER, newDom); 19606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t2 = cal.getTime(status); 19616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK(status, "Fail: getTime failed"); 19626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t, str); 19636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (t != t2) { 19656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.append(", exp "); 19666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt.format(t2, str); 19676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(str); 19686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 19696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(str); 19706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 19746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestYWOY() 19766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 19776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 19786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 19796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar cal(status); 19816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "construct GregorianCalendar", TRUE)) return; 19826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setFirstDayOfWeek(UCAL_SUNDAY); 19846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setMinimalDaysInFirstWeek(1); 19856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Setting: ywoy=2004, woy=1, dow=MONDAY"); 19876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 19886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR_WOY,2004); 19896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_WEEK_OF_YEAR,1); 19906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DAY_OF_WEEK, UCAL_MONDAY); 19916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(cal)); 19936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal.get(UCAL_YEAR, status) != 2003) { 19946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("year not 2003"); 19956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("+ setting DOW to THURSDAY"); 19986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 19996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR_WOY,2004); 20006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_WEEK_OF_YEAR,1); 20016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY); 20026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(cal)); 20046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal.get(UCAL_YEAR, status) != 2004) { 20056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("year not 2004"); 20066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("+ setting DOW_LOCAL to 1"); 20096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 20106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_YEAR_WOY,2004); 20116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_WEEK_OF_YEAR,1); 20126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY); 20136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DOW_LOCAL, 1); 20146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(cal)); 20166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal.get(UCAL_YEAR, status) != 2003) { 20176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("year not 2003"); 20186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setFirstDayOfWeek(UCAL_MONDAY); 20216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setMinimalDaysInFirstWeek(4); 20226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate t = 946713600000.; 20236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setTime(t, status); 20246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DAY_OF_WEEK, 4); 20256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_DOW_LOCAL, 6); 20266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(cal.getTime(status) != t) { 20276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(calToStr(cal)); 20286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: DOW_LOCAL did not take precedence"); 20296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 20326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestJD() 20346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 20356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t jd; 20366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t kEpochStartAsJulianDay = 2440588; 20376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 20386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar cal(status); 20396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "construct GregorianCalendar", TRUE)) return; 20406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setTimeZone(*TimeZone::getGMT()); 20416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 20426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org jd = cal.get(UCAL_JULIAN_DAY, status); 20436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(jd != kEpochStartAsJulianDay) { 20446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Wanted JD of %d at time=0, [epoch 1970] but got %d\n", kEpochStartAsJulianDay, jd); 20456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 20466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Wanted JD of %d at time=0, [epoch 1970], got %d\n", kEpochStartAsJulianDay, jd); 20476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.setTime(Calendar::getNow(), status); 20506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 20516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(UCAL_JULIAN_DAY, kEpochStartAsJulianDay); 20526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate epochTime = cal.getTime(status); 20536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(epochTime != 0) { 20546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime); 20556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 20566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime); 20576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 20606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// make sure the ctestfw utilities are in sync with the Calendar 20626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestDebug() 20636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 20646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int32_t t=0;t<=UDBG_ENUM_COUNT;t++) { 20656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count = udbg_enumCount((UDebugEnumType)t); 20666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(count == -1) { 20676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("enumCount(%d) returned -1", count); 20686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 20696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int32_t i=0;i<=count;i++) { 20716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(t<=UDBG_HIGHEST_CONTIGUOUS_ENUM && i<count) { 20726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( i!=udbg_enumArrayValue((UDebugEnumType)t, i)) { 20736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: udbg_enumArrayValue(%d,%d) returned %d, expected %d", t, i, udbg_enumArrayValue((UDebugEnumType)t,i), i); 20746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 20766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Testing count+1:"); 20776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *name = udbg_enumName((UDebugEnumType)t,i); 20796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(name==NULL) { 20806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i==count || t>UDBG_HIGHEST_CONTIGUOUS_ENUM ) { 20816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(" null name - expected.\n"); 20826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 20836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: udbg_enumName(%d,%d) returned NULL", t, i); 20846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "(null)"; 20866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("udbg_enumArrayValue(%d,%d) = %s, returned %d", t, i, 20886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name, udbg_enumArrayValue((UDebugEnumType)t,i)); 20896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("udbg_enumString = " + udbg_enumString((UDebugEnumType)t,i)); 20906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(udbg_enumExpectedCount((UDebugEnumType)t) != count && t<=UDBG_HIGHEST_CONTIGUOUS_ENUM) { 20926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: udbg_enumExpectedCount(%d): %d, != UCAL_FIELD_COUNT=%d ", t, udbg_enumExpectedCount((UDebugEnumType)t), count); 20936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 20946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("udbg_ucal_fieldCount: %d, UCAL_FIELD_COUNT=udbg_enumCount %d ", udbg_enumExpectedCount((UDebugEnumType)t), count); 20956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 20986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#undef CHECK 21016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// List of interesting locales 21036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst char *CalendarTest::testLocaleID(int32_t i) 21046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 21056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(i) { 21066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 0: return "he_IL@calendar=hebrew"; 21076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 1: return "en_US@calendar=hebrew"; 21086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 2: return "fr_FR@calendar=hebrew"; 21096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 3: return "fi_FI@calendar=hebrew"; 21106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 4: return "nl_NL@calendar=hebrew"; 21116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 5: return "hu_HU@calendar=hebrew"; 21126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 6: return "nl_BE@currency=MTL;calendar=islamic"; 21136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 7: return "th_TH_TRADITIONAL@calendar=gregorian"; 21146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 8: return "ar_JO@calendar=islamic-civil"; 21156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 9: return "fi_FI@calendar=islamic"; 21166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 10: return "fr_CH@calendar=islamic-civil"; 21176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 11: return "he_IL@calendar=islamic-civil"; 21186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 12: return "hu_HU@calendar=buddhist"; 21196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 13: return "hu_HU@calendar=islamic"; 21206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 14: return "en_US@calendar=japanese"; 21216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: return NULL; 21226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 21246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t CalendarTest::testLocaleCount() 21266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 21276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static int32_t gLocaleCount = -1; 21286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(gLocaleCount < 0) { 21296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 21306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0;testLocaleID(i) != NULL;i++) { 21316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ; 21326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gLocaleCount = i; 21346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return gLocaleCount; 21366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 21376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UDate doMinDateOfCalendar(Calendar* adopt, UBool &isGregorian, UErrorCode& status) { 21396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) return 0.0; 21406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org adopt->clear(); 21426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org adopt->set(UCAL_EXTENDED_YEAR, adopt->getActualMinimum(UCAL_EXTENDED_YEAR, status)); 21436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate ret = adopt->getTime(status); 21446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org isGregorian = dynamic_cast<GregorianCalendar*>(adopt) != NULL; 21456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete adopt; 21466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ret; 21476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 21486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUDate CalendarTest::minDateOfCalendar(const Locale& locale, UBool &isGregorian, UErrorCode& status) { 21506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) return 0.0; 21516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doMinDateOfCalendar(Calendar::createInstance(locale, status), isGregorian, status); 21526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 21536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUDate CalendarTest::minDateOfCalendar(const Calendar& cal, UBool &isGregorian, UErrorCode& status) { 21556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) return 0.0; 21566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return doMinDateOfCalendar(cal.clone(), isGregorian, status); 21576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 21586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::Test6703() 21606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 21616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 21626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal; 21636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale loc1("en@calendar=fubar"); 21656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(loc1, status); 21666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance", TRUE)) return; 21676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 21686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 21706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale loc2("en"); 21716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(loc2, status); 21726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance")) return; 21736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 21746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 21766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale loc3("en@calendar=roc"); 21776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(loc3, status); 21786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "Calendar::createInstance")) return; 21796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 21806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 21826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 21836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::Test3785() 21856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 21866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 21876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString uzone = UNICODE_STRING_SIMPLE("Europe/Paris"); 21886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString exp1 = UNICODE_STRING_SIMPLE("Mon 30 Jumada II 1433 AH, 01:47:03"); 21896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString exp2 = UNICODE_STRING_SIMPLE("Mon 1 Rajab 1433 AH, 01:47:04"); 21906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalUDateFormatPointer df(udat_open(UDAT_NONE, UDAT_NONE, "en@calendar=islamic", uzone.getTerminatedBuffer(), 21926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uzone.length(), NULL, 0, &status)); 21936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (df.isNull() || U_FAILURE(status)) return; 21946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar upattern[64]; 21966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(upattern, "EEE d MMMM y G, HH:mm:ss"); 21976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPattern(df.getAlias(), FALSE, upattern, u_strlen(upattern)); 21986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar ubuffer[1024]; 22006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate ud0 = 1337557623000.0; 22016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 22036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status); 22046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 22056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Error formatting date 1\n"); 22066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 22076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //printf("formatted: '%s'\n", mkcstr(ubuffer)); 22096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString act1(ubuffer); 22116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( act1 != exp1 ) { 22126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Unexpected result from date 1 format\n"); 22136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ud0 += 1000.0; // add one second 22156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 22176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status); 22186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 22196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Error formatting date 2\n"); 22206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 22216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //printf("formatted: '%s'\n", mkcstr(ubuffer)); 22236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString act2(ubuffer); 22246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( act2 != exp2 ) { 22256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Unexpected result from date 2 format\n"); 22266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 22296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 22306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::Test1624() { 22326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 22336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale loc("he_IL@calendar=hebrew"); 22346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HebrewCalendar hc(loc,status); 22356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t year = 5600; year < 5800; year++ ) { 22376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t month = HebrewCalendar::TISHRI; month <= HebrewCalendar::ELUL; month++) { 22396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // skip the adar 1 month if year is not a leap year 22406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (HebrewCalendar::isLeapYear(year) == FALSE && month == HebrewCalendar::ADAR_1) { 22416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 22426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t day = 15; 22446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org hc.set(year,month,day); 22456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dayHC = hc.get(UCAL_DATE,status); 22466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t monthHC = hc.get(UCAL_MONTH,status); 22476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t yearHC = hc.get(UCAL_YEAR,status); 22486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (failure(status, "HebrewCalendar.get()", TRUE)) continue; 22506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (dayHC != day) { 22526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(" ==> day %d incorrect, should be: %d\n",dayHC,day); 22536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 22546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (monthHC != month) { 22566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(" ==> month %d incorrect, should be: %d\n",monthHC,month); 22576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 22586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (yearHC != year) { 22606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(" ==> day %d incorrect, should be: %d\n",yearHC,year); 22616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 22626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 22666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 22676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestTimeStamp() { 22696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 22706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate start = 0.0, time; 22716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal; 22726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Create a new Gregorian Calendar. 22746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance("en_US@calender=gregorian", status); 22756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 22766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Error creating Gregorian calendar."); 22776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 22786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i = 0; i < 20000; i++) { 22816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Set the Gregorian Calendar to a specific date for testing. 22826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(2009, UCAL_JULY, 3, 0, 49, 46); 22836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org time = cal->getTime(status); 22856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 22866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Error calling getTime()"); 22876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 22886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i == 0) { 22916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start = time; 22926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 22936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (start != time) { 22946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("start and time not equal."); 22956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 22966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 23016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 23026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestISO8601() { 23046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* TEST_LOCALES[] = { 23056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "en_US@calendar=iso8601", 23066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "en_US@calendar=Iso8601", 23076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "th_TH@calendar=iso8601", 23086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ar_EG@calendar=iso8601", 23096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL 23106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 23116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t TEST_DATA[][3] = { 23136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {2008, 1, 2008}, 23146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {2009, 1, 2009}, 23156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {2010, 53, 2009}, 23166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {2011, 52, 2010}, 23176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {2012, 52, 2011}, 23186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {2013, 1, 2013}, 23196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {2014, 1, 2014}, 23206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0, 0, 0}, 23216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 23226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i = 0; TEST_LOCALES[i] != NULL; i++) { 23246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 23256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal = Calendar::createInstance(TEST_LOCALES[i], status); 23266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 23276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Error: Failed to create a calendar for locale: %s", TEST_LOCALES[i]); 23286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 23296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (uprv_strcmp(cal->getType(), "gregorian") != 0) { 23316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Error: Gregorian calendar is not used for locale: %s", TEST_LOCALES[i]); 23326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 23336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int j = 0; TEST_DATA[j][0] != 0; j++) { 23356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(TEST_DATA[j][0], UCAL_JANUARY, 1); 23366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t weekNum = cal->get(UCAL_WEEK_OF_YEAR, status); 23376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t weekYear = cal->get(UCAL_YEAR_WOY, status); 23386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 23396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Error: Failed to get week of year"); 23406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 23416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (weekNum != TEST_DATA[j][1] || weekYear != TEST_DATA[j][2]) { 23436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Error: Incorrect week of year on January 1st, %d for locale %s: Returned [weekNum=%d, weekYear=%d], Expected [weekNum=%d, weekYear=%d]", 23446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_DATA[j][0], TEST_LOCALES[i], weekNum, weekYear, TEST_DATA[j][1], TEST_DATA[j][2]); 23456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 23486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 23516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 23536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendarTest::TestAmbiguousWallTimeAPIs(void) { 23546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 23556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar* cal = Calendar::createInstance(status); 23566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 23576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Error creating a calendar instance."); 23586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 23596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getRepeatedWallTimeOption() != UCAL_WALLTIME_LAST) { 23626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Default repeted time option is not UCAL_WALLTIME_LAST"); 23636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal->getSkippedWallTimeOption() != UCAL_WALLTIME_LAST) { 23656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Default skipped time option is not UCAL_WALLTIME_LAST"); 23666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar* cal2 = cal->clone(); 23696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*cal != *cal2) { 23716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Cloned calendar != the original"); 23726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!cal->equals(*cal2, status)) { 23746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: The time of cloned calendar is not equal to the original"); 23756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (U_FAILURE(status)) { 23766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Error equals"); 23776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 23796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal2->setRepeatedWallTimeOption(UCAL_WALLTIME_FIRST); 23816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal2->setSkippedWallTimeOption(UCAL_WALLTIME_FIRST); 23826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*cal == *cal2) { 23846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Cloned and modified calendar == the original"); 23856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!cal->equals(*cal2, status)) { 23876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: The time of cloned calendar is not equal to the original after changing wall time options"); 23886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (U_FAILURE(status)) { 23896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Error equals after changing wall time options"); 23906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 23926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal2->getRepeatedWallTimeOption() != UCAL_WALLTIME_FIRST) { 23946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Repeted time option is not UCAL_WALLTIME_FIRST"); 23956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal2->getSkippedWallTimeOption() != UCAL_WALLTIME_FIRST) { 23976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Skipped time option is not UCAL_WALLTIME_FIRST"); 23986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal2->setRepeatedWallTimeOption(UCAL_WALLTIME_NEXT_VALID); 24016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (cal2->getRepeatedWallTimeOption() != UCAL_WALLTIME_FIRST) { 24026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Repeated wall time option was updated other than UCAL_WALLTIME_FIRST"); 24036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 24066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal2; 24076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass CalFields { 24106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 24116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields(int32_t year, int32_t month, int32_t day, int32_t hour, int32_t min, int32_t sec); 24126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields(const Calendar& cal, UErrorCode& status); 24136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void setTo(Calendar& cal) const; 24146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char* toString(char* buf, int32_t len) const; 24156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool operator==(const CalFields& rhs) const; 24166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool operator!=(const CalFields& rhs) const; 24176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 24196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year; 24206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t month; 24216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t day; 24226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t hour; 24236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t min; 24246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t sec; 24256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 24266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::CalFields(int32_t year, int32_t month, int32_t day, int32_t hour, int32_t min, int32_t sec) 24286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : year(year), month(month), day(day), hour(hour), min(min), sec(sec) { 24296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::CalFields(const Calendar& cal, UErrorCode& status) { 24326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org year = cal.get(UCAL_YEAR, status); 24336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org month = cal.get(UCAL_MONTH, status) + 1; 24346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org day = cal.get(UCAL_DAY_OF_MONTH, status); 24356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org hour = cal.get(UCAL_HOUR_OF_DAY, status); 24366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org min = cal.get(UCAL_MINUTE, status); 24376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sec = cal.get(UCAL_SECOND, status); 24386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 24416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::setTo(Calendar& cal) const { 24426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.clear(); 24436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal.set(year, month - 1, day, hour, min, sec); 24446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgchar* 24476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::toString(char* buf, int32_t len) const { 24486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char local[32]; 24496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sprintf(local, "%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, min, sec); 24506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_strncpy(buf, local, len - 1); 24516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org buf[len - 1] = 0; 24526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return buf; 24536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool 24566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::operator==(const CalFields& rhs) const { 24576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return year == rhs.year 24586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && month == rhs.month 24596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && day == rhs.day 24606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && hour == rhs.hour 24616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && min == rhs.min 24626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org && sec == rhs.sec; 24636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool 24666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalFields::operator!=(const CalFields& rhs) const { 24676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return !(*this == rhs); 24686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct { 24716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* tzid; 24726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CalFields in; 24736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CalFields expLastGMT; 24746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CalFields expFirstGMT; 24756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} RepeatedWallTimeTestData; 24766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const RepeatedWallTimeTestData RPDATA[] = 24786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 24796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Time zone Input wall time WALLTIME_LAST in GMT WALLTIME_FIRST in GMT 24806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,11,6,0,59,59), CalFields(2011,11,6,4,59,59), CalFields(2011,11,6,4,59,59)}, 24816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,11,6,1,0,0), CalFields(2011,11,6,6,0,0), CalFields(2011,11,6,5,0,0)}, 24826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,11,6,1,0,1), CalFields(2011,11,6,6,0,1), CalFields(2011,11,6,5,0,1)}, 24836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,11,6,1,30,0), CalFields(2011,11,6,6,30,0), CalFields(2011,11,6,5,30,0)}, 24846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,11,6,1,59,59), CalFields(2011,11,6,6,59,59), CalFields(2011,11,6,5,59,59)}, 24856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,11,6,2,0,0), CalFields(2011,11,6,7,0,0), CalFields(2011,11,6,7,0,0)}, 24866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,11,6,2,0,1), CalFields(2011,11,6,7,0,1), CalFields(2011,11,6,7,0,1)}, 24876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Australia/Lord_Howe", CalFields(2011,4,3,1,29,59), CalFields(2011,4,2,14,29,59), CalFields(2011,4,2,14,29,59)}, 24896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Australia/Lord_Howe", CalFields(2011,4,3,1,30,0), CalFields(2011,4,2,15,0,0), CalFields(2011,4,2,14,30,0)}, 24906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Australia/Lord_Howe", CalFields(2011,4,3,1,45,0), CalFields(2011,4,2,15,15,0), CalFields(2011,4,2,14,45,0)}, 24916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Australia/Lord_Howe", CalFields(2011,4,3,1,59,59), CalFields(2011,4,2,15,29,59), CalFields(2011,4,2,14,59,59)}, 24926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Australia/Lord_Howe", CalFields(2011,4,3,2,0,0), CalFields(2011,4,2,15,30,0), CalFields(2011,4,2,15,30,0)}, 24936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Australia/Lord_Howe", CalFields(2011,4,3,2,0,1), CalFields(2011,4,2,15,30,1), CalFields(2011,4,2,15,30,1)}, 24946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {NULL, CalFields(0,0,0,0,0,0), CalFields(0,0,0,0,0,0), CalFields(0,0,0,0,0,0)} 24966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 24976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestRepeatedWallTime(void) { 24996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 25006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calGMT((const TimeZone&)*TimeZone::getGMT(), status); 25016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calDefault(status); 25026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calLast(status); 25036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calFirst(status); 25046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 25066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Failed to create a calendar object."); 25076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 25086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calLast.setRepeatedWallTimeOption(UCAL_WALLTIME_LAST); 25116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calFirst.setRepeatedWallTimeOption(UCAL_WALLTIME_FIRST); 25126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t i = 0; RPDATA[i].tzid != NULL; i++) { 25146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char buf[32]; 25156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TimeZone *tz = TimeZone::createTimeZone(RPDATA[i].tzid); 25166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UCAL_WALLTIME_LAST 25186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 25196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calLast.setTimeZone(*tz); 25206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RPDATA[i].in.setTo(calLast); 25216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calGMT.setTime(calLast.getTime(status), status); 25226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields outLastGMT(calGMT, status); 25236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 25246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_LAST) - ") 25256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]"); 25266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 25276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (outLastGMT != RPDATA[i].expLastGMT) { 25286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: UCAL_WALLTIME_LAST ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as " 25296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + outLastGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]"); 25306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // default 25346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 25356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calDefault.setTimeZone(*tz); 25366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RPDATA[i].in.setTo(calDefault); 25376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calGMT.setTime(calDefault.getTime(status), status); 25386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields outDefGMT(calGMT, status); 25396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 25406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (default) - ") 25416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]"); 25426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 25436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (outDefGMT != RPDATA[i].expLastGMT) { 25446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: (default) ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as " 25456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + outDefGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]"); 25466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UCAL_WALLTIME_FIRST 25506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 25516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calFirst.setTimeZone(*tz); 25526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RPDATA[i].in.setTo(calFirst); 25536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calGMT.setTime(calFirst.getTime(status), status); 25546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields outFirstGMT(calGMT, status); 25556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 25566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_FIRST) - ") 25576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]"); 25586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 25596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (outFirstGMT != RPDATA[i].expFirstGMT) { 25606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: UCAL_WALLTIME_FIRST ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as " 25616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + outFirstGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expFirstGMT.toString(buf, sizeof(buf)) + "[GMT]"); 25626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete tz; 25656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 25676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct { 25696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* tzid; 25706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CalFields in; 25716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isValid; 25726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CalFields expLastGMT; 25736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CalFields expFirstGMT; 25746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const CalFields expNextAvailGMT; 25756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} SkippedWallTimeTestData; 25766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic SkippedWallTimeTestData SKDATA[] = 25786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 25796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Time zone Input wall time valid? WALLTIME_LAST in GMT WALLTIME_FIRST in GMT WALLTIME_NEXT_VALID in GMT 25806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,3,13,1,59,59), TRUE, CalFields(2011,3,13,6,59,59), CalFields(2011,3,13,6,59,59), CalFields(2011,3,13,6,59,59)}, 25816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,3,13,2,0,0), FALSE, CalFields(2011,3,13,7,0,0), CalFields(2011,3,13,6,0,0), CalFields(2011,3,13,7,0,0)}, 25826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,3,13,2,1,0), FALSE, CalFields(2011,3,13,7,1,0), CalFields(2011,3,13,6,1,0), CalFields(2011,3,13,7,0,0)}, 25836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,3,13,2,30,0), FALSE, CalFields(2011,3,13,7,30,0), CalFields(2011,3,13,6,30,0), CalFields(2011,3,13,7,0,0)}, 25846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,3,13,2,59,59), FALSE, CalFields(2011,3,13,7,59,59), CalFields(2011,3,13,6,59,59), CalFields(2011,3,13,7,0,0)}, 25856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"America/New_York", CalFields(2011,3,13,3,0,0), TRUE, CalFields(2011,3,13,7,0,0), CalFields(2011,3,13,7,0,0), CalFields(2011,3,13,7,0,0)}, 25866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Pacific/Apia", CalFields(2011,12,29,23,59,59), TRUE, CalFields(2011,12,30,9,59,59), CalFields(2011,12,30,9,59,59), CalFields(2011,12,30,9,59,59)}, 25886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Pacific/Apia", CalFields(2011,12,30,0,0,0), FALSE, CalFields(2011,12,30,10,0,0), CalFields(2011,12,29,10,0,0), CalFields(2011,12,30,10,0,0)}, 25896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Pacific/Apia", CalFields(2011,12,30,12,0,0), FALSE, CalFields(2011,12,30,22,0,0), CalFields(2011,12,29,22,0,0), CalFields(2011,12,30,10,0,0)}, 25906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Pacific/Apia", CalFields(2011,12,30,23,59,59), FALSE, CalFields(2011,12,31,9,59,59), CalFields(2011,12,30,9,59,59), CalFields(2011,12,30,10,0,0)}, 25916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"Pacific/Apia", CalFields(2011,12,31,0,0,0), TRUE, CalFields(2011,12,30,10,0,0), CalFields(2011,12,30,10,0,0), CalFields(2011,12,30,10,0,0)}, 25926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {NULL, CalFields(0,0,0,0,0,0), TRUE, CalFields(0,0,0,0,0,0), CalFields(0,0,0,0,0,0), CalFields(0,0,0,0,0,0)} 25946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 25956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestSkippedWallTime(void) { 25986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 25996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calGMT((const TimeZone&)*TimeZone::getGMT(), status); 26006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calDefault(status); 26016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calLast(status); 26026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calFirst(status); 26036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar calNextAvail(status); 26046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 26066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Failed to create a calendar object."); 26076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 26086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calLast.setSkippedWallTimeOption(UCAL_WALLTIME_LAST); 26116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calFirst.setSkippedWallTimeOption(UCAL_WALLTIME_FIRST); 26126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calNextAvail.setSkippedWallTimeOption(UCAL_WALLTIME_NEXT_VALID); 26136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t i = 0; SKDATA[i].tzid != NULL; i++) { 26156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d; 26166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char buf[32]; 26176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TimeZone *tz = TimeZone::createTimeZone(SKDATA[i].tzid); 26186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t j = 0; j < 2; j++) { 26206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool bLenient = (j == 0); 26216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UCAL_WALLTIME_LAST 26236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 26246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calLast.setLenient(bLenient); 26256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calLast.setTimeZone(*tz); 26266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SKDATA[i].in.setTo(calLast); 26276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d = calLast.getTime(status); 26286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (bLenient || SKDATA[i].isValid) { 26296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calGMT.setTime(d, status); 26306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields outLastGMT(calGMT, status); 26316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 26326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_LAST) - ") 26336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 26346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 26356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (outLastGMT != SKDATA[i].expLastGMT) { 26366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: UCAL_WALLTIME_LAST ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as " 26376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + outLastGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]"); 26386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (U_SUCCESS(status)) { 26416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // strict, invalid wall time - must report an error 26426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_LAST)") + 26436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 26446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // default 26476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 26486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calDefault.setLenient(bLenient); 26496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calDefault.setTimeZone(*tz); 26506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SKDATA[i].in.setTo(calDefault); 26516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d = calDefault.getTime(status); 26526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (bLenient || SKDATA[i].isValid) { 26536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calGMT.setTime(d, status); 26546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields outDefGMT(calGMT, status); 26556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 26566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Fail: Failed to get/set time calDefault/calGMT (default) - ") 26576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 26586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 26596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (outDefGMT != SKDATA[i].expLastGMT) { 26606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: (default) ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as " 26616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + outDefGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]"); 26626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (U_SUCCESS(status)) { 26656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // strict, invalid wall time - must report an error 26666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: An error expected (default)") + 26676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 26686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UCAL_WALLTIME_FIRST 26716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 26726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calFirst.setLenient(bLenient); 26736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calFirst.setTimeZone(*tz); 26746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SKDATA[i].in.setTo(calFirst); 26756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d = calFirst.getTime(status); 26766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (bLenient || SKDATA[i].isValid) { 26776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calGMT.setTime(d, status); 26786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields outFirstGMT(calGMT, status); 26796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 26806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Fail: Failed to get/set time calFirst/calGMT (UCAL_WALLTIME_FIRST) - ") 26816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 26826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 26836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (outFirstGMT != SKDATA[i].expFirstGMT) { 26846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: UCAL_WALLTIME_FIRST ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as " 26856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + outFirstGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expFirstGMT.toString(buf, sizeof(buf)) + "[GMT]"); 26866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (U_SUCCESS(status)) { 26896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // strict, invalid wall time - must report an error 26906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_FIRST)") + 26916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 26926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UCAL_WALLTIME_NEXT_VALID 26956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 26966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calNextAvail.setLenient(bLenient); 26976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calNextAvail.setTimeZone(*tz); 26986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SKDATA[i].in.setTo(calNextAvail); 26996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d = calNextAvail.getTime(status); 27006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (bLenient || SKDATA[i].isValid) { 27016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calGMT.setTime(d, status); 27026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CalFields outNextAvailGMT(calGMT, status); 27036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 27046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Fail: Failed to get/set time calNextAvail/calGMT (UCAL_WALLTIME_NEXT_VALID) - ") 27056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 27066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 27076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (outNextAvailGMT != SKDATA[i].expNextAvailGMT) { 27086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: UCAL_WALLTIME_NEXT_VALID ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as " 27096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + outNextAvailGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expNextAvailGMT.toString(buf, sizeof(buf)) + "[GMT]"); 27106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (U_SUCCESS(status)) { 27136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // strict, invalid wall time - must report an error 27146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_NEXT_VALID)") + 27156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 27166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete tz; 27206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 27226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestCloneLocale(void) { 27246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 27256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalPointer<Calendar> cal(Calendar::createInstance(TimeZone::getGMT()->clone(), 27266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale::createFromName("en"), status)); 27276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 27286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale l0 = cal->getLocale(ULOC_VALID_LOCALE, status); 27296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 27306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalPointer<Calendar> cal2(cal->clone()); 27316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale l = cal2->getLocale(ULOC_VALID_LOCALE, status); 27326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(l0!=l) { 27336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Error: cloned locale %s != original locale %s, status %s\n", l0.getName(), l.getName(), u_errorName(status)); 27346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 27366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 27376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::setAndTestCalendar(Calendar* cal, int32_t initMonth, int32_t initDay, int32_t initYear, UErrorCode& status) { 27396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear(); 27406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->setLenient(FALSE); 27416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(initYear, initMonth, initDay); 27426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t day = cal->get(UCAL_DAY_OF_MONTH, status); 27436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t month = cal->get(UCAL_MONTH, status); 27446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year = cal->get(UCAL_YEAR, status); 27456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 27466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 27476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(initDay != day || initMonth != month || initYear != year) 27496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 27506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(" year init values:\tmonth %i\tday %i\tyear %i", initMonth, initDay, initYear); 27516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("values post set():\tmonth %i\tday %i\tyear %i",month, day, year); 27526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 27546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::setAndTestWholeYear(Calendar* cal, int32_t startYear, UErrorCode& status) { 27566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int32_t startMonth = 0; startMonth < 12; startMonth++) { 27576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int32_t startDay = 1; startDay < 31; startDay++ ) { 27586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setAndTestCalendar(cal, startMonth, startDay, startYear, status); 27596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status) && startDay == 30) { 27606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 27616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 27626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 27646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 27676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestIslamicUmAlQura() { 27706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 27726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale islamicLoc("ar_SA@calendar=islamic-umalqura"); 27736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar* tstCal = Calendar::createInstance(islamicLoc, status); 27746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IslamicCalendar* iCal = (IslamicCalendar*)tstCal; 27766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(strcmp(iCal->getType(), "islamic-umalqura") != 0) { 27776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("wrong type of calendar created - %s", iCal->getType()); 27786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t firstYear = 1318; 27826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lastYear = 1368; // just enough to be pretty sure 27836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //int32_t lastYear = 1480; // the whole shootin' match 27846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal->clear(); 27866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal->setLenient(FALSE); 27876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t day=0, month=0, year=0, initDay = 27, initMonth = IslamicCalendar::RAJAB, initYear = 1434; 27896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for( int32_t startYear = firstYear; startYear <= lastYear; startYear++) { 27916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setAndTestWholeYear(tstCal, startYear, status); 27926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 27936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initMonth = IslamicCalendar::RABI_2; 27966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initDay = 5; 27976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t loopCnt = 25; 27986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal->clear(); 27996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setAndTestCalendar( tstCal, initMonth, initDay, initYear, status); 28006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 28016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(int x=1; x<=loopCnt; x++) { 28036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org day = tstCal->get(UCAL_DAY_OF_MONTH,status); 28046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org month = tstCal->get(UCAL_MONTH,status); 28056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org year = tstCal->get(UCAL_YEAR,status); 28066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 28076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal->roll(UCAL_DAY_OF_MONTH, (UBool)TRUE, status); 28086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 28096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(day != (initDay + loopCnt - 1) || month != IslamicCalendar::RABI_2 || year != 1434) 28126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("invalid values for RABI_2 date after roll of %d", loopCnt); 28136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 28156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal->clear(); 28166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initMonth = 2; 28176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initDay = 30; 28186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setAndTestCalendar( tstCal, initMonth, initDay, initYear, status); 28196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 28206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("error NOT detected status %i",status); 28216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(" init values:\tmonth %i\tday %i\tyear %i", initMonth, initDay, initYear); 28226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t day = tstCal->get(UCAL_DAY_OF_MONTH, status); 28236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t month = tstCal->get(UCAL_MONTH, status); 28246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year = tstCal->get(UCAL_YEAR, status); 28256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("values post set():\tmonth %i\tday %i\tyear %i",month, day, year); 28266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 28296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal->clear(); 28306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initMonth = 3; 28316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org initDay = 30; 28326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setAndTestCalendar( tstCal, initMonth, initDay, initYear, status); 28336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 28346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SimpleDateFormat* formatter = new SimpleDateFormat("yyyy-MM-dd", Locale::getUS(), status); 28366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate date = formatter->parse("1975-05-06", status); 28376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar* is_cal = Calendar::createInstance(islamicLoc, status); 28386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org is_cal->setTime(date, status); 28396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t is_day = is_cal->get(UCAL_DAY_OF_MONTH,status); 28406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t is_month = is_cal->get(UCAL_MONTH,status); 28416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t is_year = is_cal->get(UCAL_YEAR,status); 28426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 28436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(is_day != 29 || is_month != IslamicCalendar::RABI_2 || is_year != 1395) 28446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("unexpected conversion date month %i not %i or day %i not 20 or year %i not 1395", is_month, IslamicCalendar::RABI_2, is_day, is_year); 28456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate date2 = is_cal->getTime(status); 28476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 28486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(date2 != date) { 28496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("before(%f) and after(%f) dates don't match up!",date, date2); 28506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete is_cal; 28536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete formatter; 28546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete tstCal; 28556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 28566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid CalendarTest::TestIslamicTabularDates() { 28586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 28596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale islamicLoc("ar_SA@calendar=islamic-civil"); 28606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale tblaLoc("ar_SA@calendar=islamic-tbla"); 28616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SimpleDateFormat* formatter = new SimpleDateFormat("yyyy-MM-dd", Locale::getUS(), status); 28626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate date = formatter->parse("1975-05-06", status); 28636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar* tstCal = Calendar::createInstance(islamicLoc, status); 28656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal->setTime(date, status); 28666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t is_day = tstCal->get(UCAL_DAY_OF_MONTH,status); 28676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t is_month = tstCal->get(UCAL_MONTH,status); 28686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t is_year = tstCal->get(UCAL_YEAR,status); 28696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 28706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete tstCal; 28716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal = Calendar::createInstance(tblaLoc, status); 28736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tstCal->setTime(date, status); 28746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t tbla_day = tstCal->get(UCAL_DAY_OF_MONTH,status); 28756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t tbla_month = tstCal->get(UCAL_MONTH,status); 28766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t tbla_year = tstCal->get(UCAL_YEAR,status); 28776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_CHECK_STATUS; 28786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(tbla_month != is_month || tbla_year != is_year) 28806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("unexpected difference between islamic and tbla month %d : %d and/or year %d : %d",tbla_month,is_month,tbla_year,is_year); 28816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(tbla_day - is_day != 1) 28836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("unexpected day difference between islamic and tbla: %d : %d ",tbla_day,is_day); 28846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete tstCal; 28856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete formatter; 28866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 28876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 28906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof 2892