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