1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/************************************************************************ 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (c) 1997-2010, International Business Machines Corporation 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ************************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "caltest.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h" 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h" 1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "hebrwcal.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/simpletz.h" 1727f654740f2a26ad62a5c155af9199af9e69b889claireho#include "dbgutil.h" 18b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/udat.h" 19b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/ustring.h" 20b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 21b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define mkcstr(U) u_austrcpy(calloc(8, u_strlen(U) + 1), U) 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class CalendarTest 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString CalendarTest::calToStr(const Calendar & cal) 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d; 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0;i<UCAL_FIELD_COUNT;i++) { 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += (UnicodeString("") + fieldName((UCalendarDateFields)i) + "=" + cal.get((UCalendarDateFields)i, status) + UnicodeString(" ")); 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += "[" + UnicodeString(cal.getType()) + "]"; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.inDaylightTime(status)) { 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += UnicodeString(" (in DST), zone="); 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += UnicodeString(", zone="); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str2; 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += cal.getTimeZone().getDisplayName(str2); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = cal.getTime(status); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += UnicodeString(" :","") + d; 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return out; 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite TestCalendar"); 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDOW943"; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDOW943---"); logln(""); 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDOW943(); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestClonesUnique908"; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestClonesUnique908---"); logln(""); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestClonesUnique908(); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestGregorianChange768"; 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestGregorianChange768---"); logln(""); 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestGregorianChange768(); 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDisambiguation765"; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDisambiguation765---"); logln(""); 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDisambiguation765(); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestGMTvsLocal4064654"; 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestGMTvsLocal4064654---"); logln(""); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestGMTvsLocal4064654(); 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestAddSetOrder621"; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestAddSetOrder621---"); logln(""); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestAddSetOrder621(); 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestAdd520"; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestAdd520---"); logln(""); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestAdd520(); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestFieldSet4781"; 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestFieldSet4781---"); logln(""); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFieldSet4781(); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestSerialize337"; 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestSerialize337---"); logln(""); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TestSerialize337(); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 9: 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestSecondsZero121"; 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestSecondsZero121---"); logln(""); 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestSecondsZero121(); 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestAddSetGet0610"; 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestAddSetGet0610---"); logln(""); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestAddSetGet0610(); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 11: 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestFields060"; 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestFields060---"); logln(""); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFields060(); 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 12: 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestEpochStartFields"; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestEpochStartFields---"); logln(""); 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestEpochStartFields(); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 13: 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDOWProgression"; 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDOWProgression---"); logln(""); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDOWProgression(); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 14: 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestGenericAPI"; 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestGenericAPI---"); logln(""); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestGenericAPI(); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 15: 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestAddRollExtensive"; 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestAddRollExtensive---"); logln(""); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestAddRollExtensive(); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 16: 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDOW_LOCALandYEAR_WOY"; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDOW_LOCALandYEAR_WOY---"); logln(""); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDOW_LOCALandYEAR_WOY(); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 17: 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestWOY"; 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestWOY---"); logln(""); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestWOY(); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 18: 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestRog"; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestRog---"); logln(""); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestRog(); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 19: 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestYWOY"; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestYWOY---"); logln(""); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestYWOY(); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 20: 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestJD"; 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(exec) { 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestJD---"); logln(""); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestJD(); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 21: 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDebug"; 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(exec) { 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDebug---"); logln(""); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDebug(); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 22: 212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru name = "Test6703"; 213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(exec) { 214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln("Test6703---"); logln(""); 215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Test6703(); 216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 23: 219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru name = "Test3785"; 220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(exec) { 221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln("Test3785---"); logln(""); 222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Test3785(); 223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 24: 22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho name = "Test1624"; 22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(exec) { 22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln("Test1624---"); logln(""); 22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Test1624(); 23050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 23150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --------------------------------------------------------------------------------- 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString CalendarTest::fieldName(UCalendarDateFields f) { 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (f) { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define FIELD_NAME_STR(x) case x: return (#x+5) 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_ERA ); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_YEAR ); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_MONTH ); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_WEEK_OF_YEAR ); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_WEEK_OF_MONTH ); 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DATE ); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DAY_OF_YEAR ); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DAY_OF_WEEK ); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DAY_OF_WEEK_IN_MONTH ); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_AM_PM ); 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_HOUR ); 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_HOUR_OF_DAY ); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_MINUTE ); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_SECOND ); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_MILLISECOND ); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_ZONE_OFFSET ); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DST_OFFSET ); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_YEAR_WOY ); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DOW_LOCAL ); 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_EXTENDED_YEAR ); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_JULIAN_DAY ); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_MILLISECONDS_IN_DAY ); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef FIELD_NAME_STR 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return UnicodeString("") + ((int32_t)f); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test various API methods for API completeness. 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGenericAPI() 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d; 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool eq = FALSE,b4 = FALSE,af = FALSE; 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate when = date(90, UCAL_APRIL, 15); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString tzid("TestZone"); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tzoffset = 123400; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleTimeZone *zone = new SimpleTimeZone(tzoffset, tzid); 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(zone->clone(), status); 28750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*zone != cal->getTimeZone()) errln("FAIL: Calendar::getTimeZone failed"); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal2 = Calendar::createInstance(cal->getTimeZone(), status); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::createInstance")) return; 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(when, status); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->setTime(when, status); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::setTime")) return; 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*cal == *cal2)) errln("FAIL: Calendar::operator== failed"); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((*cal != *cal2)) errln("FAIL: Calendar::operator!= failed"); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!cal->equals(*cal2, status) || 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->before(*cal2, status) || 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->after(*cal2, status) || 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) errln("FAIL: equals/before/after failed"); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("cal2->setTime(when+1000)"); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->setTime(when + 1000, status); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::setTime")) return; 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->equals(*cal2, status) || 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->before(*cal, status) || 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->after(*cal2, status) || 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) errln("FAIL: equals/before/after failed after setTime(+1000)"); 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln("cal->roll(UCAL_SECOND)"); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->roll(UCAL_SECOND, (UBool) TRUE, status); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal->roll(UCAL_SECOND, (int32_t)0, status); 32050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::roll")) return; 32250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(eq=cal->equals(*cal2, status)) || 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (b4=cal->before(*cal2, status)) || 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (af=cal->after(*cal2, status)) || 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) { 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: equals[%c]/before[%c]/after[%c] failed after roll 1 second [should be T/F/F]", 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru eq?'T':'F', 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b4?'T':'F', 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru af?'T':'F'); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Roll back to January 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->roll(UCAL_MONTH, (int32_t)(1 + UCAL_DECEMBER - cal->get(UCAL_MONTH, status)), status); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::roll")) return; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->equals(*cal2, status) || 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->before(*cal, status) || 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->after(*cal2, status) || 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) errln("FAIL: equals/before/after failed after rollback to January"); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *z = cal->orphanTimeZone(); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (z->getID(str) != tzid || 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru z->getRawOffset() != tzoffset) 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: orphanTimeZone failed"); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<2; ++i) 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool lenient = ( i > 0 ); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setLenient(lenient); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lenient != cal->isLenient()) errln("FAIL: setLenient/isLenient failed"); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Later: Check for lenient behavior 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=UCAL_SUNDAY; i<=UCAL_SATURDAY; ++i) 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setFirstDayOfWeek((UCalendarDaysOfWeek)i); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getFirstDayOfWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed"); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode aStatus = U_ZERO_ERROR; 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getFirstDayOfWeek(aStatus) != i || U_FAILURE(aStatus)) errln("FAIL: getFirstDayOfWeek(status) failed"); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=1; i<=7; ++i) 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setMinimalDaysInFirstWeek((uint8_t)i); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getMinimalDaysInFirstWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed"); 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<UCAL_FIELD_COUNT; ++i) 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (cal->getMinimum((UCalendarDateFields)i) > cal->getGreatestMinimum((UCalendarDateFields)i)) 374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("FAIL: getMinimum larger than getGreatestMinimum for field " + i); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getLeastMaximum((UCalendarDateFields)i) > cal->getMaximum((UCalendarDateFields)i)) 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getLeastMaximum larger than getMaximum for field " + i); 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getMinimum((UCalendarDateFields)i) >= cal->getMaximum((UCalendarDateFields)i)) 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getMinimum not less than getMaximum for field " + i); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->adoptTimeZone(TimeZone::createDefault()); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1984, 5, 24); 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getTime(status) != date(84, 5, 24) || U_FAILURE(status)) 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Calendar::set(3 args) failed"); 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1985, 3, 2, 11, 49); 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getTime(status) != date(85, 3, 2, 11, 49) || U_FAILURE(status)) 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Calendar::set(5 args) failed"); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1995, 9, 12, 1, 39, 55); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getTime(status) != date(95, 9, 12, 1, 39, 55) || U_FAILURE(status)) 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Calendar::set(6 args) failed"); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->getTime(status); 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::getTime")) return; 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<UCAL_FIELD_COUNT; ++i) 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(i) { 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCAL_YEAR: case UCAL_MONTH: case UCAL_DATE: 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCAL_HOUR_OF_DAY: case UCAL_MINUTE: case UCAL_SECOND: 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCAL_EXTENDED_YEAR: 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet F, should be T " + fieldName((UCalendarDateFields)i)); 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet = T, should be F " + fieldName((UCalendarDateFields)i)); 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear((UCalendarDateFields)i); 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::clear/isSet failed " + fieldName((UCalendarDateFields)i)); 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(cal->getActualMinimum(Calendar::SECOND, status) != 0){ 41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Calendar is suppose to return 0 for getActualMinimum"); 41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Calendar *cal3 = Calendar::createInstance(status); 41950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal3->roll(Calendar::SECOND, (int32_t)0, status); 42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::roll(EDateFields, int32_t, UErrorCode)")) return; 42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal2; 42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete cal3; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count; 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale* loc = Calendar::getAvailableLocales(count); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (count < 1 || loc == 0) 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 4306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: getAvailableLocales failed"); 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<count; ++i) 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(loc[i], status); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::createInstance")) return; 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(TimeZone::createDefault(), Locale::getEnglish(), status); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::createInstance")) return; 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(*zone, Locale::getEnglish(), status); 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::createInstance")) return; 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *gc = new GregorianCalendar(*zone, status); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(Locale::getEnglish(), status); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(Locale::getEnglish(), status); 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(*zone, Locale::getEnglish(), status); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(zone, status); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(1998, 10, 14, 21, 43, status); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gc->getTime(status) != (d =date(98, 10, 14, 21, 43) )|| U_FAILURE(status)) 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: new GregorianCalendar(ymdhm) failed with " + UnicodeString(u_errorName(status)) + ", cal=" + gc->getTime(status) + UnicodeString(calToStr(*gc)) + ", d=" + d); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("GOOD: cal=") +gc->getTime(status) + UnicodeString(calToStr(*gc)) + ", d=" + d); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(1998, 10, 14, 21, 43, 55, status); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gc->getTime(status) != (d=date(98, 10, 14, 21, 43, 55)) || U_FAILURE(status)) 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: new GregorianCalendar(ymdhms) failed with " + UnicodeString(u_errorName(status))); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar gc2(Locale::getEnglish(), status); 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc2 = *gc; 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gc2 != *gc || !(gc2 == *gc)) errln("FAIL: GregorianCalendar assignment/operator==/operator!= failed"); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete z; 48650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 48750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Code coverage for Calendar class. */ 48850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal = Calendar::createInstance(status); 48950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance")) { 49050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 49150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }else { 49250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((Calendar *)cal)->roll(UCAL_HOUR, (int32_t)100, status); 49350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((Calendar *)cal)->clear(UCAL_HOUR); 49450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_SERVICE 49550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho URegistryKey key = cal->registerFactory(NULL, status); 49650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal->unregister(key, status); 49750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 49850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 49950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete cal; 50050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 50150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 50250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal = Calendar::createInstance(Locale("he_IL@calendar=hebrew"), status); 50350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance")) { 50450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 50550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 50650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal->roll(Calendar::MONTH, (int32_t)100, status); 50750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 50850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 50950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho StringEnumeration *en = Calendar::getKeywordValuesForLocale(NULL, Locale::getDefault(),FALSE, status); 51050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (en == NULL || U_FAILURE(status)) { 51150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("FAIL: getKeywordValuesForLocale for Calendar. : %s", u_errorName(status)); 51250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 51350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete en; 51450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete cal; 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This test confirms the correct behavior of add when incrementing 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * through subsequent days. 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestRog() 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar* gc = new GregorianCalendar(status); 52850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t year = 1997, month = UCAL_APRIL, date = 1; 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(year, month, date); 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(UCAL_HOUR_OF_DAY, 23); 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(UCAL_MINUTE, 0); 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(UCAL_SECOND, 0); 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(UCAL_MILLISECOND, 0); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 9; i++, gc->add(UCAL_DATE, 1, status)) { 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gc->get(UCAL_YEAR, status) != year || 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->get(UCAL_MONTH, status) != month || 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->get(UCAL_DATE, status) != (date + i)) errln("FAIL: Date wrong"); 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the day of the week, checking for correctness and 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for correct minimum and maximum values. 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOW943() 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dowTest(FALSE); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dowTest(TRUE); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::dowTest(UBool lenient) 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar* cal = new GregorianCalendar(status); 56250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("cal - Aug 12, 1997\n"); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1997, UCAL_AUGUST, 12); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->getTime(status); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((lenient?UnicodeString("LENIENT0: "):UnicodeString("nonlenient0: ")) + UnicodeString(calToStr(*cal))); 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setLenient(lenient); 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("cal - Dec 1, 1996\n"); 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1996, UCAL_DECEMBER, 1); 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((lenient?UnicodeString("LENIENT: "):UnicodeString("nonlenient: ")) + UnicodeString(calToStr(*cal))); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow = cal->get(UCAL_DAY_OF_WEEK, status); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed [%s]", u_errorName(status)); return; } 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t min = cal->getMinimum(UCAL_DAY_OF_WEEK); 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t max = cal->getMaximum(UCAL_DAY_OF_WEEK); 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dow < min || 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dow > max) errln(UnicodeString("FAIL: Day of week ") + (int32_t)dow + " out of range"); 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dow != UCAL_SUNDAY) errln("FAIL: Day of week should be SUNDAY[%d] not %d", UCAL_SUNDAY, dow); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (min != UCAL_SUNDAY || 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max != UCAL_SATURDAY) errln("FAIL: Min/max bad"); 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that cloned Calendar objects do not inadvertently share substructures. 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestClonesUnique908() 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *c = Calendar::createInstance(status); 59450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *d = (Calendar*) c->clone(); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MILLISECOND, 123); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d->set(UCAL_MILLISECOND, 456); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_MILLISECOND, status) != 123 || 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d->get(UCAL_MILLISECOND, status) != 456) { 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Clones share fields"); 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete d; 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that the Gregorian cutoff value works as advertised. 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGregorianChange768() 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool b; 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar* c = new GregorianCalendar(status); 61950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str)); 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b = c->isLeapYear(1800); 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false")); 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" (should be FALSE)")); 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b) errln("FAIL"); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->setGregorianChange(date(0, 0, 1), status); 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("GregorianCalendar::setGregorianChange failed"); return; } 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str)); 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b = c->isLeapYear(1800); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false")); 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" (should be TRUE)")); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!b) errln("FAIL"); 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm the functioning of the field disambiguation algorithm. 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDisambiguation765() 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *c = Calendar::createInstance("en_US", status); 64550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->setLenient(FALSE); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DATE, 3); 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 third day of June = ", c, 1997, UCAL_JUNE, 3); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 1); 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 first Tuesday in June = ", c, 1997, UCAL_JUNE, 3); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK_IN_MONTH, - 1); 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 last Tuesday in June = ", c, 1997, UCAL_JUNE, 24); 664c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 666c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->clear(); 667c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 668c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 0); 671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->getTime(status); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 zero-th Tuesday in June = ", status); 673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_MONTH, 1); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 1 of June = ", c, 1997, UCAL_JUNE, 3); 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_MONTH, 5); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 5 of June = ", c, 1997, UCAL_JULY, 1); 686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 688c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->clear(); 689c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 690c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 691c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 692c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_WEEK_OF_MONTH, 0); 693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru c->setMinimalDaysInFirstWeek(1); 694c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->getTime(status); 695c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru verify765("1997 Tuesday in week 0 of June = ", status); 696c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Note: The following test used to expect YEAR 1997, WOY 1 to 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * resolve to a date in Dec 1996; that is, to behave as if 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * YEAR_WOY were 1997. With the addition of a new explicit 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * YEAR_WOY field, YEAR_WOY must itself be set if that is what is 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * desired. Using YEAR in combination with WOY is ambiguous, and 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * results in the first WOY/DOW day of the year satisfying the 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * given fields (there may be up to two such days). In this case, 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * it propertly resolves to Tue Dec 30 1997, which has a WOY value 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of 1 (for YEAR_WOY 1998) and a DOW of Tuesday, and falls in the 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * _calendar_ year 1997, as specified. - aliu */ 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR_WOY, 1997); // aliu 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_YEAR, 1); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 1 of yearWOY = ", c, 1996, UCAL_DECEMBER, 31); 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); // - add test for YEAR 713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru c->setMinimalDaysInFirstWeek(1); 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_YEAR, 1); 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 1 of year = ", c, 1997, UCAL_DECEMBER, 30); 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_YEAR, 10); 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 10 of year = ", c, 1997, UCAL_MARCH, 4); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} week 0 is no longer a valid week of year 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*c->clear(); 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(Calendar::YEAR, 1997); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(Calendar::DAY_OF_WEEK, Calendar::TUESDAY); 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //c->set(Calendar::WEEK_OF_YEAR, 0); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(Calendar::WEEK_OF_YEAR, 1); 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 0 of year = ", c, 1996, Calendar::DECEMBER, 24);*/ 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //catch(IllegalArgumentException ex) { 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln("FAIL: Exception seen:"); 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ex.printStackTrace(log); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::verify765(const UnicodeString& msg, Calendar* c, int32_t year, int32_t month, int32_t day) 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y = c->get(UCAL_YEAR, status); 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t m = c->get(UCAL_MONTH, status); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t d = c->get(UCAL_DATE, status); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( y == year && 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m == month && 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d == day) { 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("FAIL: Calendar::get failed"); return; } 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: " + msg + dateToString(c->getTime(status), str)); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + msg + dateToString(c->getTime(status), str) + "; expected " + (int32_t)year + "/" + (int32_t)(month + 1) + "/" + (int32_t)day + 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; got " + (int32_t)y + "/" + (int32_t)(m + 1) + "/" + (int32_t)d + " for Locale: " + c->getLocaleID(ULOC_ACTUAL_LOCALE,status)); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::verify765(const UnicodeString& msg/*, IllegalArgumentException e*/, UErrorCode status) 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR) errln("FAIL: No IllegalArgumentException for " + msg); 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else logln("PASS: " + msg + "IllegalArgument as expected"); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that the offset between local time and GMT behaves as expected. 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGMTvsLocal4064654() 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4064654(1997, 1, 1, 12, 0, 0); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4064654(1997, 4, 16, 18, 30, 0); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::test4064654(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn, int32_t sc) 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date; 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *gmtcal = Calendar::createInstance(status); 79550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gmtcal->adoptTimeZone(TimeZone::createTimeZone("Africa/Casablanca")); 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gmtcal->set(yr, mo - 1, dt, hr, mn, sc); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gmtcal->set(UCAL_MILLISECOND, 0); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = gmtcal->getTime(status); 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("date = " + dateToString(date, str)); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(status); 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::createInstance failed"); return; } 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(date, status); 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t offset = cal->getTimeZone().getOffset((uint8_t)cal->get(UCAL_ERA, status), 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_YEAR, status), 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_MONTH, status), 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_DATE, status), 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (uint8_t)cal->get(UCAL_DAY_OF_WEEK, status), 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_MILLISECOND, status), status); 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("offset for " + dateToString(date, str) + "= " + (offset / 1000 / 60 / 60.0) + "hr"); 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t utc = ((cal->get(UCAL_HOUR_OF_DAY, status) * 60 + 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_MINUTE, status)) * 60 + 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_SECOND, status)) * 1000 + 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_MILLISECOND, status) - offset; 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expected = ((hr * 60 + mn) * 60 + sc) * 1000; 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (utc != expected) errln(UnicodeString("FAIL: Discrepancy of ") + (utc - expected) + 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " millis = " + ((utc - expected) / 1000 / 60 / 60.0) + " hr"); 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gmtcal; 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The operations of adding and setting should not exhibit pathological 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * dependence on the order of operations. This test checks for this. 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddSetOrder621() 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = date(97, 4, 14, 13, 23, 45); 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(status); 83850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 83950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(d, status); 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::setTime failed"); 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->add(UCAL_DATE, - 5, status); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::add failed"); 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_HOUR_OF_DAY, 0); 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_MINUTE, 0); 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_SECOND, 0); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateToString(cal->getTime(status), s); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::getTime failed"); 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(status); 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::createInstance failed"); 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(d, status); 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::setTime failed"); 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_HOUR_OF_DAY, 0); 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_MINUTE, 0); 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_SECOND, 0); 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->add(UCAL_DATE, - 5, status); 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::add failed"); 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s2; 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateToString(cal->getTime(status), s2); 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::getTime failed"); 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s == s2) 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Pass: " + s + " == " + s2); 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + s + " != " + s2); 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that adding to various fields works. 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAdd520() 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y = 1997, m = UCAL_FEBRUARY, d = 1; 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *temp = new GregorianCalendar(y, m, d, status); 91050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_YEAR, 1, status); 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y++; 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_MONTH, 1, status); 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m++; 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_DATE, 1, status); 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d++; 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_DATE, 2, status); 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d += 2; 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_DATE, 28, status); 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = 1;++m; 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete temp; 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Execute adding and rolling in GregorianCalendar extensively, 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddRollExtensive() 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t maxlimit = 40; 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y = 1997, m = UCAL_FEBRUARY, d = 1, hr = 1, min = 1, sec = 0, ms = 0; 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *temp = new GregorianCalendar(y, m, d, status); 94750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->set(UCAL_HOUR, hr); 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->set(UCAL_MINUTE, min); 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->set(UCAL_SECOND, sec); 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->set(UCAL_MILLISECOND, ms); 953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru temp->setMinimalDaysInFirstWeek(1); 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendarDateFields e; 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing GregorianCalendar add..."); 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e = UCAL_YEAR; 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (e < UCAL_FIELD_COUNT) { 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t limit = maxlimit; 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(e, 1, status); 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { limit = i; status = U_ZERO_ERROR; } 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(e, -1, status); 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("GregorianCalendar::add -1 failed"); return; } 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d, hr, min, sec, ms, e); 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e = (UCalendarDateFields) ((int32_t) e + 1); 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing GregorianCalendar roll..."); 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e = UCAL_YEAR; 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (e < UCAL_FIELD_COUNT) { 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t limit = maxlimit; 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(*temp) + UnicodeString(" " ) + fieldName(e) + UnicodeString("++") ); 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->roll(e, 1, status); 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("caltest.cpp:%d e=%d, i=%d - roll(+) err %s\n", __LINE__, (int) e, (int) i, u_errorName(status)); 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(*temp)); 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru limit = i; status = U_ZERO_ERROR; 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("caltest.cpp:%d e=%d, i=%d\n", __LINE__, (int) e, (int) i); 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(*temp) + UnicodeString(" " ) + fieldName(e) + UnicodeString("--") ); 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->roll(e, -1, status); 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln(UnicodeString("GregorianCalendar::roll ") + CalendarTest::fieldName(e) + " count=" + UnicodeString('@'+i) + " by -1 failed with " + u_errorName(status) ); return; } 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d, hr, min, sec, ms, e); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e = (UCalendarDateFields) ((int32_t) e + 1); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete temp; 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::check520(Calendar* c, 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y, int32_t m, int32_t d, 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hr, int32_t min, int32_t sec, 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ms, UCalendarDateFields field) 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_YEAR, status) != y || 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MONTH, status) != m || 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_DATE, status) != d || 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_HOUR, status) != hr || 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MINUTE, status) != min || 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_SECOND, status) != sec || 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MILLISECOND, status) != ms) { 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("U_FAILURE for field ") + (int32_t)field + 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ": Expected y/m/d h:m:s:ms of " + 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y + "/" + (m + 1) + "/" + d + " " + 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hr + ":" + min + ":" + sec + ":" + ms + 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; got " + c->get(UCAL_YEAR, status) + 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + (c->get(UCAL_MONTH, status) + 1) + 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + c->get(UCAL_DATE, status) + 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " " + c->get(UCAL_HOUR, status) + ":" + 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MINUTE, status) + ":" + 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_SECOND, status) + ":" + 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MILLISECOND, status) 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Confirmed: ") + y + "/" + 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (m + 1) + "/" + d + " " + 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hr + ":" + min + ":" + sec + ":" + ms); 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::check520(Calendar* c, 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y, int32_t m, int32_t d) 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_YEAR, status) != y || 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MONTH, status) != m || 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_DATE, status) != d) { 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAILURE: Expected y/m/d of ") + 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y + "/" + (m + 1) + "/" + d + " " + 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; got " + c->get(UCAL_YEAR, status) + 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + (c->get(UCAL_MONTH, status) + 1) + 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + c->get(UCAL_DATE, status) 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Confirmed: ") + y + "/" + 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (m + 1) + "/" + d); 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that setting of fields works. In particular, make sure that all instances 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of GregorianCalendar don't share a static instance of the fields array. 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestFieldSet4781() 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // try { 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *g = new GregorianCalendar(status); 107850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *g2 = new GregorianCalendar(status); 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g2->set(UCAL_HOUR, 12, status); 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g2->set(UCAL_MINUTE, 0, status); 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g2->set(UCAL_SECOND, 0, status); 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::set failed"); return; } 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*g == *g2) logln("Same"); 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else logln("Different"); 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //catch(IllegalArgumentException e) { 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //errln("Unexpected exception seen: " + e); 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete g; 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete g2; 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* We don't support serialization on C++ 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestSerialize337() 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar cal = Calendar::getInstance(); 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool ok = FALSE; 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru try { 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FileOutputStream f = new FileOutputStream(FILENAME); 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ObjectOutput s = new ObjectOutputStream(f); 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.writeObject(PREFIX); 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.writeObject(cal); 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.writeObject(POSTFIX); 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.close(); 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FileInputStream in = new FileInputStream(FILENAME); 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ObjectInputStream t = new ObjectInputStream(in); 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& pre = (UnicodeString&) t.readObject(); 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar c = (Calendar) t.readObject(); 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& post = (UnicodeString&) t.readObject(); 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru in.close(); 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = pre.equals(PREFIX) && 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru post.equals(POSTFIX) && 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->equals(c); 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru File fl = new File(FILENAME); 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fl.delete(); 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch(IOException e) { 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Exception received:"); 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(log); 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch(ClassNotFoundException e) { 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Exception received:"); 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(log); 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ok) errln("Serialization of Calendar object failed."); 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::PREFIX = "abc"; 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::POSTFIX = "def"; 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::FILENAME = "tmp337.bin"; 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that the seconds of a Calendar can be zeroed out through the 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * expected sequence of operations. 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestSecondsZero121() 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = new GregorianCalendar(status); 115150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(Calendar::getNow(), status); 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_SECOND, 0); 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::set failed"); return; } 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = cal->getTime(status); 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateToString(d, s); 11606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (s.indexOf("DATE_FORMAT_FAILURE") >= 0) { 11616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Got: \"DATE_FORMAT_FAILURE\"."); 11626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else if (s.indexOf(":00 ") < 0) { 11636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errln("Expected to see :00 in " + s); 11646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that a specific sequence of adding and setting works as expected; 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * it should not vary depending on when and whether the get method is 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * called. 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddSetGet0610() 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString EXPECTED_0610("1993/0/5", ""); 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calendar = new GregorianCalendar(status); 118250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->set(1993, UCAL_JANUARY, 4); 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("1A) " + value(calendar)); 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->add(UCAL_DATE, 1, status); 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v = value(calendar); 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("1B) " + v); 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("--) 1993/0/5"); 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calendar; 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status); 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("2A) " + value(calendar)); 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->add(UCAL_DATE, 1, status); 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v = value(calendar); 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("2B) " + v); 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("--) 1993/0/5"); 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calendar; 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status); 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("3A) " + value(calendar)); 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->getTime(status); 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->add(UCAL_DATE, 1, status); 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v = value(calendar); 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("3B) " + v); 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("--) 1993/0/5"); 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calendar; 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::value(Calendar* calendar) 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return UnicodeString("") + (int32_t)calendar->get(UCAL_YEAR, status) + 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + (int32_t)calendar->get(UCAL_MONTH, status) + 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + (int32_t)calendar->get(UCAL_DATE, status) + 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (U_FAILURE(status) ? " FAIL: Calendar::get failed" : ""); 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that various fields on a known date are set correctly. 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestFields060() 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t year = 1997; 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t month = UCAL_OCTOBER; 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dDate = 22; 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *calendar = 0; 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar = new GregorianCalendar(year, month, dDate, status); 124850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < EXPECTED_FIELDS_length;) { 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendarDateFields field = (UCalendarDateFields)EXPECTED_FIELDS[i++]; 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expected = EXPECTED_FIELDS[i++]; 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (calendar->get(field, status) != expected) { 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Expected field ") + (int32_t)field + " to have value " + (int32_t)expected + 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; received " + (int32_t)calendar->get(field, status) + " instead"); 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calendar; 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::EXPECTED_FIELDS[] = { 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_YEAR, 1997, 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_MONTH, UCAL_OCTOBER, 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_DATE, 22, 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_DAY_OF_WEEK, UCAL_WEDNESDAY, 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_DAY_OF_WEEK_IN_MONTH, 4, 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_DAY_OF_YEAR, 295 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst int32_t CalendarTest::EXPECTED_FIELDS_length = (int32_t)(sizeof(CalendarTest::EXPECTED_FIELDS) / 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sizeof(CalendarTest::EXPECTED_FIELDS[0])); 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that various fields on a known date are set correctly. In this 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * case, the start of the epoch (January 1 1970). 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestEpochStartFields() 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *z = TimeZone::createDefault(); 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *c = Calendar::createInstance(status); 128550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = - z->getRawOffset(); 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *gc = new GregorianCalendar(status); 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->setTimeZone(*z); 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->setTime(d, status); 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool idt = gc->inDaylightTime(status); 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("GregorianCalendar::inDaylightTime failed"); return; } 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (idt) { 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Warning: Skipping test because " + dateToString(d, str) + " is in DST."); 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->setTime(d, status); 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < UCAL_ZONE_OFFSET;++i) { 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get((UCalendarDateFields)i, status) != EPOCH_FIELDS[i]) 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Expected field ") + i + " to have value " + EPOCH_FIELDS[i] + 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; saw " + c->get((UCalendarDateFields)i, status) + " instead"); 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_ZONE_OFFSET, status) != z->getRawOffset()) 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Expected field ZONE_OFFSET to have value ") + z->getRawOffset() + 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; saw " + c->get(UCAL_ZONE_OFFSET, status) + " instead"); 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_DST_OFFSET, status) != 0) 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Expected field DST_OFFSET to have value 0") + 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; saw " + c->get(UCAL_DST_OFFSET, status) + " instead"); 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete z; 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::EPOCH_FIELDS[] = { 132627f654740f2a26ad62a5c155af9199af9e69b889claireho 1, 1970, 0, 53, 0, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, - 28800000, 0 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that the days of the week progress properly when add is called repeatedly 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for increments of 24 days. 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOWProgression() 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = new GregorianCalendar(1972, UCAL_OCTOBER, 26, status); 134050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru marchByDelta(cal, 24); 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOW_LOCALandYEAR_WOY() 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Note: I've commented out the loop_addroll tests for YEAR and 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * YEAR_WOY below because these two fields should NOT behave 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * identically when adding. YEAR should keep the month/dom 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * invariant. YEAR_WOY should keep the woy/dow invariant. I've 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * added a new test that checks for this in place of the old call 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to loop_addroll. - aliu */ 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t times = 20; 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal=Calendar::createInstance(Locale::getGermany(), status); 135950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdf=new SimpleDateFormat(UnicodeString("YYYY'-W'ww-ee"), Locale::getGermany(), status); 13616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { errcheckln(status, "Couldn't create SimpleDateFormat - %s", u_errorName(status)); return; } 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ICU no longer use localized date-time pattern characters by default. 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // So we set pattern chars using 'J' instead of 'Y'. 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols *dfs = new DateFormatSymbols(Locale::getGermany(), status); 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dfs->setLocalPatternChars(UnicodeString("GyMdkHmsSEDFwWahKzJeugAZvcLQq")); 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->adoptDateFormatSymbols(dfs); 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->applyLocalizedPattern(UnicodeString("JJJJ'-W'ww-ee"), status); 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't apply localized pattern"); return; } 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1997, UCAL_DECEMBER, 25); 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doYEAR_WOYLoop(cal, sdf, times, status); 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR, status); 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru yearAddTest(*cal, status); // aliu 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1997"); return; } 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1998, UCAL_DECEMBER, 25); 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doYEAR_WOYLoop(cal, sdf, times, status); 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR, status); 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru yearAddTest(*cal, status); // aliu 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1998"); return; } 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1582, UCAL_OCTOBER, 1); 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doYEAR_WOYLoop(cal, sdf, times, status); 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //loop_addroll(cal, /*sdf,*/ times, Calendar::YEAR_WOY, Calendar::YEAR, status); 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru yearAddTest(*cal, status); // aliu 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1582"); return; } 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that adding a YEAR and adding a YEAR_WOY work properly for 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the given Calendar at its current setting. 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::yearAddTest(Calendar& cal, UErrorCode& status) { 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When adding the YEAR, the month and day should remain constant. 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When adding the YEAR_WOY, the WOY and DOW should remain constant. - aliu 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples: 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Wed Jan 14 1998 / 1998-W03-03 Add(YEAR_WOY, 1) -> Wed Jan 20 1999 / 1999-W03-03 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add(YEAR, 1) -> Thu Jan 14 1999 / 1999-W02-04 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Thu Jan 14 1999 / 1999-W02-04 Add(YEAR_WOY, 1) -> Thu Jan 13 2000 / 2000-W02-04 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add(YEAR, 1) -> Fri Jan 14 2000 / 2000-W02-05 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Sun Oct 31 1582 / 1582-W42-07 Add(YEAR_WOY, 1) -> Sun Oct 23 1583 / 1583-W42-07 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add(YEAR, 1) -> Mon Oct 31 1583 / 1583-W44-01 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y = cal.get(UCAL_YEAR, status); 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mon = cal.get(UCAL_MONTH, status); 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t day = cal.get(UCAL_DATE, status); 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ywy = cal.get(UCAL_YEAR_WOY, status); 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status); 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow = cal.get(UCAL_DOW_LOCAL, status); 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate t = cal.getTime(status); 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Failed to create Calendar for locale. Error: ") + UnicodeString(u_errorName(status))); 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str, str2; 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), status); 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCalendar(cal); 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t, str.remove()); 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += ".add(YEAR, 1) =>"; 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.add(UCAL_YEAR, 1, status); 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y2 = cal.get(UCAL_YEAR, status); 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mon2 = cal.get(UCAL_MONTH, status); 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t day2 = cal.get(UCAL_DATE, status); 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (y2 != (y+1) || mon2 != mon || day2 != day) { 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += (UnicodeString)", expected year " + 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (y+1) + ", month " + (mon+1) + ", day " + day; 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + str); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) ); 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t, str.remove()); 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += ".add(YEAR_WOY, 1)=>"; 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( UnicodeString(" <- ") + CalendarTest::calToStr(cal) ); 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.add(UCAL_YEAR_WOY, 1, status); 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ywy2 = cal.get(UCAL_YEAR_WOY, status); 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t woy2 = cal.get(UCAL_WEEK_OF_YEAR, status); 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow2 = cal.get(UCAL_DOW_LOCAL, status); 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ywy2 != (ywy+1) || woy2 != woy || dow2 != dow) { 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += (UnicodeString)", expected yearWOY " + 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (ywy+1) + ", woy " + woy + ", dowLocal " + dow; 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + str); 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) ); 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::loop_addroll(Calendar *cal, /*SimpleDateFormat *sdf,*/ int times, UCalendarDateFields field, UCalendarDateFields field2, UErrorCode& errorCode) { 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calclone; 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), errorCode); 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCalendar(*cal); 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i<times; i++) { 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calclone = cal->clone(); 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate start = cal->getTime(errorCode); 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->add(field,1,errorCode); 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; } 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calclone->add(field2,1,errorCode); 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; } 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal->getTime(errorCode) != calclone->getTime(errorCode)) { 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str("FAIL: Results of add differ. "), str2; 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += fmt.format(start, str2) + " "; 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += UnicodeString("Add(") + fieldName(field) + ", 1) -> " + 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal->getTime(errorCode), str2.remove()) + "; "; 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += UnicodeString("Add(") + fieldName(field2) + ", 1) -> " + 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(calclone->getTime(errorCode), str2.remove()); 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calclone; 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calclone; 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i<times; i++) { 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calclone = cal->clone(); 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->roll(field,(int32_t)1,errorCode); 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; } 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calclone->roll(field2,(int32_t)1,errorCode); 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; } 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal->getTime(errorCode) != calclone->getTime(errorCode)) { 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calclone; 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Results of roll differ!"); 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calclone; 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::doYEAR_WOYLoop(Calendar *cal, SimpleDateFormat *sdf, 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t times, UErrorCode& errorCode) { 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString us; 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate tst, original; 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *tstres = new GregorianCalendar(Locale::getGermany(), errorCode); 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i=0; i<times; ++i) { 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(Formattable(cal->getTime(errorCode),Formattable::kIsDate), us, errorCode); 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln("expected: "+us); 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Format error"); return; } 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tst=sdf->parse(us,errorCode); 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Parse error"); return; } 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->clear(); 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->setTime(tst, errorCode); 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln((UnicodeString)"Parsed week of year is "+tstres->get(UCAL_WEEK_OF_YEAR, errorCode)); 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Set time error"); return; } 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru original = cal->getTime(errorCode); 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru us.remove(); 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(Formattable(tst,Formattable::kIsDate), us, errorCode); 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln("got: "+us); 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Get time error"); return; } 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(original!=tst) { 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru us.remove(); 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(Formattable(original, Formattable::kIsDate), us, errorCode); 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Parsed time doesn't match with regular"); 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("expected "+us + " " + calToStr(*cal)); 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru us.remove(); 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(Formattable(tst, Formattable::kIsDate), us, errorCode); 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("got "+us + " " + calToStr(*tstres)); 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->clear(); 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->set(UCAL_YEAR_WOY, cal->get(UCAL_YEAR_WOY, errorCode)); 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->set(UCAL_WEEK_OF_YEAR, cal->get(UCAL_WEEK_OF_YEAR, errorCode)); 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->set(UCAL_DOW_LOCAL, cal->get(UCAL_DOW_LOCAL, errorCode)); 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal->get(UCAL_YEAR, errorCode) != tstres->get(UCAL_YEAR, errorCode)) { 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Different Year!"); 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Expected "+cal->get(UCAL_YEAR, errorCode)); 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Got "+tstres->get(UCAL_YEAR, errorCode)); 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal->get(UCAL_DAY_OF_YEAR, errorCode) != tstres->get(UCAL_DAY_OF_YEAR, errorCode)) { 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Different Day Of Year!"); 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Expected "+cal->get(UCAL_DAY_OF_YEAR, errorCode)); 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Got "+tstres->get(UCAL_DAY_OF_YEAR, errorCode)); 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln(calToStr(*cal)); 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->add(UCAL_DATE, 1, errorCode); 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Add error"); return; } 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru us.remove(); 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete (tstres); 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::marchByDelta(Calendar* cal, int32_t delta) 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cur = (Calendar*) cal->clone(); 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t initialDOW = cur->get(UCAL_DAY_OF_WEEK, status); 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t DOW, newDOW = initialDOW; 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru do { 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DOW = newDOW; 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("DOW = ") + DOW + " " + dateToString(cur->getTime(status), str)); 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cur->add(UCAL_DAY_OF_WEEK, delta, status); 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru newDOW = cur->get(UCAL_DAY_OF_WEEK, status); 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectedDOW = 1 + (DOW + delta - 1) % 7; 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newDOW != expectedDOW) { 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Day of week should be ") + expectedDOW + " instead of " + newDOW + 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " on " + dateToString(cur->getTime(status), str)); 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (newDOW != initialDOW); 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cur; 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CHECK(status, msg) \ 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { \ 16006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, msg); \ 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; \ 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestWOY(void) { 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FDW = Mon, MDFW = 4: 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Dec 26 1999, WOY 51 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Dec 27 1999, WOY 52 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Dec 28 1999, WOY 52 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Dec 29 1999, WOY 52 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Dec 30 1999, WOY 52 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Dec 31 1999, WOY 52 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 01 2000, WOY 52 *** 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 02 2000, WOY 52 *** 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Jan 03 2000, WOY 1 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Jan 04 2000, WOY 1 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Jan 05 2000, WOY 1 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Jan 06 2000, WOY 1 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Jan 07 2000, WOY 1 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 08 2000, WOY 1 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 09 2000, WOY 1 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Jan 10 2000, WOY 2 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FDW = Mon, MDFW = 2: 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Dec 26 1999, WOY 52 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Dec 27 1999, WOY 1 *** 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Dec 28 1999, WOY 1 *** 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Dec 29 1999, WOY 1 *** 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Dec 30 1999, WOY 1 *** 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Dec 31 1999, WOY 1 *** 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 01 2000, WOY 1 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 02 2000, WOY 1 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Jan 03 2000, WOY 2 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Jan 04 2000, WOY 2 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Jan 05 2000, WOY 2 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Jan 06 2000, WOY 2 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Jan 07 2000, WOY 2 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 08 2000, WOY 2 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 09 2000, WOY 2 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Jan 10 2000, WOY 3 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar cal(status); 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy', WOY' w"), status); 164950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Cannot construct calendar/format", TRUE)) return; 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendarDaysOfWeek fdw = (UCalendarDaysOfWeek) 0; 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //for (int8_t pass=2; pass<=2; ++pass) { 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int8_t pass=1; pass<=2; ++pass) { 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (pass) { 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fdw = UCAL_MONDAY; 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setFirstDayOfWeek(fdw); 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setMinimalDaysInFirstWeek(4); 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.adoptCalendar(cal.clone()); 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fdw = UCAL_MONDAY; 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setFirstDayOfWeek(fdw); 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setMinimalDaysInFirstWeek(2); 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.adoptCalendar(cal.clone()); 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //for (i=2; i<=6; ++i) { 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<16; ++i) { 1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate t, t2; 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t t_y, t_woy, t_dow; 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(1999, UCAL_DECEMBER, 26 + i); 1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t = cal.getTime(status), str.remove()); 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("* ") + str); 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow = cal.get(UCAL_DAY_OF_WEEK, status); 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status); 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t year = cal.get(UCAL_YEAR, status); 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mon = cal.get(UCAL_MONTH, status); 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: get failed"); 1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dowLocal = dow - fdw; 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dowLocal < 0) dowLocal += 7; 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dowLocal++; 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t yearWoy = year; 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (mon == UCAL_JANUARY) { 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (woy >= 52) --yearWoy; 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (woy == 1) ++yearWoy; 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Basic fields->time check y/woy/dow 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Since Y/WOY is ambiguous, we do a check of the fields, 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // not of the specific time. 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR, year); 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR, woy); 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, dow); 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_y = cal.get(UCAL_YEAR, status); 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_woy = cal.get(UCAL_WEEK_OF_YEAR, status); 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_dow = cal.get(UCAL_DAY_OF_WEEK, status); 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: get failed"); 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t_y != year || t_woy != woy || t_dow != dow) { 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: y/woy/dow fields->time => "; 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("[get!=set] Y%d!=%d || woy%d!=%d || dow%d!=%d\n", 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_y, year, t_woy, woy, t_dow, dow); 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("y/woy/dow fields->time OK"); 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Basic fields->time check y/woy/dow_local 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Since Y/WOY is ambiguous, we do a check of the fields, 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // not of the specific time. 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR, year); 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR, woy); 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, dowLocal); 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_y = cal.get(UCAL_YEAR, status); 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_woy = cal.get(UCAL_WEEK_OF_YEAR, status); 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_dow = cal.get(UCAL_DOW_LOCAL, status); 1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: get failed"); 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t_y != year || t_woy != woy || t_dow != dowLocal) { 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: y/woy/dow_local fields->time => "; 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Basic fields->time check y_woy/woy/dow 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY, yearWoy); 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR, woy); 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, dow); 1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: y_woy/woy/dow fields->time => "; 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("%.f != %.f\n", t, t2); 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("y_woy/woy/dow OK"); 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Basic fields->time check y_woy/woy/dow_local 1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY, yearWoy); 1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR, woy); 1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, dowLocal); 1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: y_woy/woy/dow_local fields->time => "; 1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DOW_LOCAL.. dow%d\n", dow); 1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure DOW_LOCAL disambiguates over DOW 1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t wrongDow = dow - 3; 1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (wrongDow < 1) wrongDow += 7; 1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, wrongDow); 1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, dowLocal); 1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: set/getTime failed"); 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: DOW_LOCAL fields->time => "; 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("%.f : DOW%d, DOW_LOCAL%d -> %.f\n", 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t, wrongDow, dowLocal, t2); 1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure DOW disambiguates over DOW_LOCAL 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t wrongDowLocal = dowLocal - 3; 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (wrongDowLocal < 1) wrongDowLocal += 7; 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, wrongDowLocal); 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, dow); 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: set/getTime failed"); 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: DOW fields->time => "; 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure YEAR_WOY disambiguates over YEAR 1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR, year - 2); 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY, yearWoy); 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: set/getTime failed"); 1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: YEAR_WOY fields->time => "; 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure YEAR disambiguates over YEAR_WOY 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY, yearWoy - 2); 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR, year); 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: set/getTime failed"); 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: YEAR fields->time => "; 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FDW = Mon, MDFW = 4: 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Dec 26 1999, WOY 51 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Dec 27 1999, WOY 52 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Dec 28 1999, WOY 52 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Dec 29 1999, WOY 52 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Dec 30 1999, WOY 52 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Dec 31 1999, WOY 52 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 01 2000, WOY 52 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 02 2000, WOY 52 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Roll the DOW_LOCAL within week 52 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=27; i<=33; ++i) { 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t amount; 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (amount=-7; amount<=7; ++amount) { 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "roll("; 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(1999, UCAL_DECEMBER, i); 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate t, t2; 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += UnicodeString(", ") + amount + ") = "; 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.roll(UCAL_DOW_LOCAL, amount, status); 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: roll failed"); 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t = cal.getTime(status); 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t newDom = i + amount; 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (newDom < 27) newDom += 7; 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (newDom > 33) newDom -= 7; 1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(1999, UCAL_DECEMBER, newDom); 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t, str); 1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.append(", exp "); 1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestYWOY() 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar cal(status); 187450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "construct GregorianCalendar", TRUE)) return; 1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setFirstDayOfWeek(UCAL_SUNDAY); 1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setMinimalDaysInFirstWeek(1); 1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Setting: ywoy=2004, woy=1, dow=MONDAY"); 1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY,2004); 1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR,1); 1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, UCAL_MONDAY); 1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.get(UCAL_YEAR, status) != 2003) { 1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("year not 2003"); 1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("+ setting DOW to THURSDAY"); 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY,2004); 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR,1); 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY); 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.get(UCAL_YEAR, status) != 2004) { 1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("year not 2004"); 1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("+ setting DOW_LOCAL to 1"); 1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY,2004); 1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR,1); 1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY); 1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, 1); 1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.get(UCAL_YEAR, status) != 2003) { 1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("year not 2003"); 1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setFirstDayOfWeek(UCAL_MONDAY); 1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setMinimalDaysInFirstWeek(4); 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate t = 946713600000.; 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, 4); 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, 6); 1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.getTime(status) != t) { 1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: DOW_LOCAL did not take precedence"); 1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestJD() 1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t jd; 1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const int32_t kEpochStartAsJulianDay = 2440588; 1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar cal(status); 193250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "construct GregorianCalendar", TRUE)) return; 1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTimeZone(*TimeZone::getGMT()); 1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru jd = cal.get(UCAL_JULIAN_DAY, status); 1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(jd != kEpochStartAsJulianDay) { 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted JD of %d at time=0, [epoch 1970] but got %d\n", kEpochStartAsJulianDay, jd); 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Wanted JD of %d at time=0, [epoch 1970], got %d\n", kEpochStartAsJulianDay, jd); 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(Calendar::getNow(), status); 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_JULIAN_DAY, kEpochStartAsJulianDay); 1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate epochTime = cal.getTime(status); 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(epochTime != 0) { 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime); 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime); 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// make sure the ctestfw utilities are in sync with the Calendar 1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestDebug() 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t t=0;t<=UDBG_ENUM_COUNT;t++) { 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count = udbg_enumCount((UDebugEnumType)t); 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(count == -1) { 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("enumCount(%d) returned -1", count); 1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i=0;i<=count;i++) { 1964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(t<=UDBG_HIGHEST_CONTIGUOUS_ENUM && i<count) { 1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( i!=udbg_enumArrayValue((UDebugEnumType)t, i)) { 1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: udbg_enumArrayValue(%d,%d) returned %d, expected %d", t, i, udbg_enumArrayValue((UDebugEnumType)t,i), i); 1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing count+1:"); 1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *name = udbg_enumName((UDebugEnumType)t,i); 1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(name==NULL) { 1973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(i==count || t>UDBG_HIGHEST_CONTIGUOUS_ENUM ) { 1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" null name - expected.\n"); 1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: udbg_enumName(%d,%d) returned NULL", t, i); 1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "(null)"; 1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("udbg_enumArrayValue(%d,%d) = %s, returned %d", t, i, 1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name, udbg_enumArrayValue((UDebugEnumType)t,i)); 1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("udbg_enumString = " + udbg_enumString((UDebugEnumType)t,i)); 1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(udbg_enumExpectedCount((UDebugEnumType)t) != count && t<=UDBG_HIGHEST_CONTIGUOUS_ENUM) { 1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: udbg_enumExpectedCount(%d): %d, != UCAL_FIELD_COUNT=%d ", t, udbg_enumExpectedCount((UDebugEnumType)t), count); 1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("udbg_ucal_fieldCount: %d, UCAL_FIELD_COUNT=udbg_enumCount %d ", udbg_enumExpectedCount((UDebugEnumType)t), count); 1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef CHECK 1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// List of interesting locales 1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char *CalendarTest::testLocaleID(int32_t i) 1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(i) { 1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: return "he_IL@calendar=hebrew"; 2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: return "en_US@calendar=hebrew"; 2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: return "fr_FR@calendar=hebrew"; 2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: return "fi_FI@calendar=hebrew"; 2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: return "nl_NL@calendar=hebrew"; 2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: return "hu_HU@calendar=hebrew"; 2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: return "nl_BE@currency=MTL;calendar=islamic"; 2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: return "th_TH_TRADITIONAL@calendar=gregorian"; 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: return "ar_JO@calendar=islamic-civil"; 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 9: return "fi_FI@calendar=islamic"; 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: return "fr_CH@calendar=islamic-civil"; 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 11: return "he_IL@calendar=islamic-civil"; 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 12: return "hu_HU@calendar=buddhist"; 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 13: return "hu_HU@calendar=islamic"; 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 14: return "en_US@calendar=japanese"; 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: return NULL; 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::testLocaleCount() 2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static int32_t gLocaleCount = -1; 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(gLocaleCount < 0) { 2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;testLocaleID(i) != NULL;i++) { 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ; 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gLocaleCount = i; 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return gLocaleCount; 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UDate doMinDateOfCalendar(Calendar* adopt, UBool &isGregorian, UErrorCode& status) { 2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) return 0.0; 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru adopt->clear(); 2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru adopt->set(UCAL_EXTENDED_YEAR, adopt->getActualMinimum(UCAL_EXTENDED_YEAR, status)); 2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate ret = adopt->getTime(status); 203727f654740f2a26ad62a5c155af9199af9e69b889claireho isGregorian = dynamic_cast<GregorianCalendar*>(adopt) != NULL; 2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete adopt; 2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ret; 2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate CalendarTest::minDateOfCalendar(const Locale& locale, UBool &isGregorian, UErrorCode& status) { 2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) return 0.0; 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return doMinDateOfCalendar(Calendar::createInstance(locale, status), isGregorian, status); 2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate CalendarTest::minDateOfCalendar(const Calendar& cal, UBool &isGregorian, UErrorCode& status) { 2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) return 0.0; 2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return doMinDateOfCalendar(cal.clone(), isGregorian, status); 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid CalendarTest::Test6703() 2053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 2054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Calendar *cal; 2056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale loc1("en@calendar=fubar"); 2058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru cal = Calendar::createInstance(loc1, status); 205950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 2060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete cal; 2061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 2063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale loc2("en"); 2064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru cal = Calendar::createInstance(loc2, status); 2065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (failure(status, "Calendar::createInstance")) return; 2066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete cal; 2067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 2069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale loc3("en@calendar=roc"); 2070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru cal = Calendar::createInstance(loc3, status); 2071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (failure(status, "Calendar::createInstance")) return; 2072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete cal; 2073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid CalendarTest::Test3785() 2078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 2079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 208050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString uzone = UNICODE_STRING_SIMPLE("Europe/Paris"); 208150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString exp1 = UNICODE_STRING_SIMPLE("Mon 30 Jumada II 1433 AH, 01:47:03"); 208250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString exp2 = UNICODE_STRING_SIMPLE("Mon 1 Rajab 1433 AH, 01:47:04"); 2083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 208450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDateFormatPointer df(udat_open(UDAT_NONE, UDAT_NONE, "en@calendar=islamic", uzone.getTerminatedBuffer(), 208550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uzone.length(), NULL, 0, &status)); 208650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (df.isNull() || U_FAILURE(status)) return; 2087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar upattern[64]; 2089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_uastrcpy(upattern, "EEE d MMMM y G, HH:mm:ss"); 209050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho udat_applyPattern(df.getAlias(), FALSE, upattern, u_strlen(upattern)); 2091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar ubuffer[1024]; 2093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDate ud0 = 1337557623000.0; 2094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 209650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status); 209750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 209850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Error formatting date 1\n"); 209950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 210050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru //printf("formatted: '%s'\n", mkcstr(ubuffer)); 2102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 210350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString act1(ubuffer); 210450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if ( act1 != exp1 ) { 210550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Unexpected result from date 1 format\n"); 210650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ud0 += 1000.0; // add one second 2108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 211050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status); 211150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 211250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Error formatting date 2\n"); 211350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 211450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru //printf("formatted: '%s'\n", mkcstr(ubuffer)); 211650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString act2(ubuffer); 211750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if ( act2 != exp2 ) { 211850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Unexpected result from date 2 format\n"); 211950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 212450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid CalendarTest::Test1624() { 212550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 212650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale loc("he_IL@calendar=hebrew"); 212750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho HebrewCalendar hc(loc,status); 212850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 212950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int32_t year = 5600; year < 5800; year++ ) { 213050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 213150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int32_t month = HebrewCalendar::TISHRI; month <= HebrewCalendar::ELUL; month++) { 213250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // skip the adar 1 month if year is not a leap year 213350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (HebrewCalendar::isLeapYear(year) == FALSE && month == HebrewCalendar::ADAR_1) { 213450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho continue; 213550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 213650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t day = 15; 213750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho hc.set(year,month,day); 213850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t dayHC = hc.get(UCAL_DATE,status); 213950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t monthHC = hc.get(UCAL_MONTH,status); 214050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t yearHC = hc.get(UCAL_YEAR,status); 214150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 214250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "HebrewCalendar.get()", TRUE)) continue; 2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 214450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (dayHC != day) { 214550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(" ==> day %d incorrect, should be: %d\n",dayHC,day); 214650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 214750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 214850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (monthHC != month) { 214950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(" ==> month %d incorrect, should be: %d\n",monthHC,month); 215050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 215150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 215250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (yearHC != year) { 215350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(" ==> day %d incorrect, should be: %d\n",yearHC,year); 215450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 215550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 215650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 215750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 215850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 215950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 2164