1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/************************************************************************ 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 31b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * Copyright (c) 1997-2015, International Business Machines Corporation 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ************************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "caltest.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h" 1354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/localpointer.h" 1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "hebrwcal.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/simpletz.h" 1727f654740f2a26ad62a5c155af9199af9e69b889claireho#include "dbgutil.h" 18b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/udat.h" 19b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/ustring.h" 20b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "cstring.h" 21103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/localpointer.h" 2259d709d503bab6e2b61931737e662dd293b40578ccornelius#include "islamcal.h" 23b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 24b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define mkcstr(U) u_austrcpy(calloc(8, u_strlen(U) + 1), U) 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2659d709d503bab6e2b61931737e662dd293b40578ccornelius#define TEST_CHECK_STATUS { \ 2759d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { \ 2859d709d503bab6e2b61931737e662dd293b40578ccornelius if (status == U_MISSING_RESOURCE_ERROR) { \ 2959d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("%s:%d: Test failure. status=%s", __FILE__, __LINE__, u_errorName(status)); \ 3059d709d503bab6e2b61931737e662dd293b40578ccornelius } else { \ 3159d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: Test failure. status=%s", __FILE__, __LINE__, u_errorName(status)); \ 3259d709d503bab6e2b61931737e662dd293b40578ccornelius } return;}} 33103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 34f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#define TEST_CHECK_STATUS_LOCALE(testlocale) { \ 35f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (U_FAILURE(status)) { \ 36f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (status == U_MISSING_RESOURCE_ERROR) { \ 37f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius dataerrln("%s:%d: Test failure, locale %s. status=%s", __FILE__, __LINE__, testlocale, u_errorName(status)); \ 38f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else { \ 39f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln("%s:%d: Test failure, locale %s. status=%s", __FILE__, __LINE__, testlocale, u_errorName(status)); \ 40f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } return;}} 41f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 42103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define TEST_ASSERT(expr) {if ((expr)==FALSE) {errln("%s:%d: Test failure \n", __FILE__, __LINE__);};} 43103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class CalendarTest 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString CalendarTest::calToStr(const Calendar & cal) 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d; 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0;i<UCAL_FIELD_COUNT;i++) { 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += (UnicodeString("") + fieldName((UCalendarDateFields)i) + "=" + cal.get((UCalendarDateFields)i, status) + UnicodeString(" ")); 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += "[" + UnicodeString(cal.getType()) + "]"; 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.inDaylightTime(status)) { 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += UnicodeString(" (in DST), zone="); 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += UnicodeString(", zone="); 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str2; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += cal.getTimeZone().getDisplayName(str2); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = cal.getTime(status); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out += UnicodeString(" :","") + d; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return out; 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite TestCalendar"); 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDOW943"; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDOW943---"); logln(""); 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDOW943(); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestClonesUnique908"; 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestClonesUnique908---"); logln(""); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestClonesUnique908(); 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestGregorianChange768"; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestGregorianChange768---"); logln(""); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestGregorianChange768(); 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDisambiguation765"; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDisambiguation765---"); logln(""); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDisambiguation765(); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestGMTvsLocal4064654"; 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestGMTvsLocal4064654---"); logln(""); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestGMTvsLocal4064654(); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestAddSetOrder621"; 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestAddSetOrder621---"); logln(""); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestAddSetOrder621(); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestAdd520"; 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestAdd520---"); logln(""); 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestAdd520(); 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestFieldSet4781"; 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestFieldSet4781---"); logln(""); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFieldSet4781(); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestSerialize337"; 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestSerialize337---"); logln(""); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TestSerialize337(); 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 9: 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestSecondsZero121"; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestSecondsZero121---"); logln(""); 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestSecondsZero121(); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestAddSetGet0610"; 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestAddSetGet0610---"); logln(""); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestAddSetGet0610(); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 11: 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestFields060"; 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestFields060---"); logln(""); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFields060(); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 12: 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestEpochStartFields"; 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestEpochStartFields---"); logln(""); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestEpochStartFields(); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 13: 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDOWProgression"; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDOWProgression---"); logln(""); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDOWProgression(); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 14: 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestGenericAPI"; 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestGenericAPI---"); logln(""); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestGenericAPI(); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 15: 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestAddRollExtensive"; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestAddRollExtensive---"); logln(""); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestAddRollExtensive(); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 16: 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDOW_LOCALandYEAR_WOY"; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDOW_LOCALandYEAR_WOY---"); logln(""); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDOW_LOCALandYEAR_WOY(); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 17: 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestWOY"; 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestWOY---"); logln(""); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestWOY(); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 18: 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestRog"; 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestRog---"); logln(""); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestRog(); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 19: 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestYWOY"; 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestYWOY---"); logln(""); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestYWOY(); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 20: 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestJD"; 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(exec) { 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestJD---"); logln(""); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestJD(); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 21: 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestDebug"; 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(exec) { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestDebug---"); logln(""); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestDebug(); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 22: 233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru name = "Test6703"; 234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(exec) { 235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln("Test6703---"); logln(""); 236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Test6703(); 237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 23: 240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru name = "Test3785"; 241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(exec) { 242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln("Test3785---"); logln(""); 243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Test3785(); 244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 24: 24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho name = "Test1624"; 24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(exec) { 24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln("Test1624---"); logln(""); 25050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Test1624(); 25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 253b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 25: 254b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho name = "TestTimeStamp"; 255b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(exec) { 256b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("TestTimeStamp---"); logln(""); 257b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TestTimeStamp(); 258b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 259b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 260b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 26: 261b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho name = "TestISO8601"; 262b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(exec) { 263b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("TestISO8601---"); logln(""); 264b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TestISO8601(); 265b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 266b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 267103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case 27: 268103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius name = "TestAmbiguousWallTimeAPIs"; 269103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(exec) { 270103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("TestAmbiguousWallTimeAPIs---"); logln(""); 271103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TestAmbiguousWallTimeAPIs(); 272103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 273103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius break; 274103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case 28: 275103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius name = "TestRepeatedWallTime"; 276103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(exec) { 277103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("TestRepeatedWallTime---"); logln(""); 278103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TestRepeatedWallTime(); 279103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 280103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius break; 281103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case 29: 282103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius name = "TestSkippedWallTime"; 283103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(exec) { 284103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("TestSkippedWallTime---"); logln(""); 285103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TestSkippedWallTime(); 286103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 287103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius break; 288103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case 30: 289103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius name = "TestCloneLocale"; 290103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(exec) { 291103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("TestCloneLocale---"); logln(""); 292103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TestCloneLocale(); 293103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius break; 29559d709d503bab6e2b61931737e662dd293b40578ccornelius case 31: 29659d709d503bab6e2b61931737e662dd293b40578ccornelius name = "TestIslamicUmAlQura"; 29759d709d503bab6e2b61931737e662dd293b40578ccornelius if(exec) { 29859d709d503bab6e2b61931737e662dd293b40578ccornelius logln("TestIslamicUmAlQura---"); logln(""); 29959d709d503bab6e2b61931737e662dd293b40578ccornelius TestIslamicUmAlQura(); 30059d709d503bab6e2b61931737e662dd293b40578ccornelius } 30159d709d503bab6e2b61931737e662dd293b40578ccornelius break; 30259d709d503bab6e2b61931737e662dd293b40578ccornelius case 32: 30359d709d503bab6e2b61931737e662dd293b40578ccornelius name = "TestIslamicTabularDates"; 30459d709d503bab6e2b61931737e662dd293b40578ccornelius if(exec) { 30559d709d503bab6e2b61931737e662dd293b40578ccornelius logln("TestIslamicTabularDates---"); logln(""); 30659d709d503bab6e2b61931737e662dd293b40578ccornelius TestIslamicTabularDates(); 30759d709d503bab6e2b61931737e662dd293b40578ccornelius } 30859d709d503bab6e2b61931737e662dd293b40578ccornelius break; 309fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case 33: 310fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius name = "TestHebrewMonthValidation"; 311fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(exec) { 312fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("TestHebrewMonthValidation---"); logln(""); 313fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TestHebrewMonthValidation(); 314fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 315fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius break; 316fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case 34: 317fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius name = "TestWeekData"; 318fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(exec) { 319fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("TestWeekData---"); logln(""); 320fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TestWeekData(); 321fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 322fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius break; 323fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case 35: 324fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius name = "TestAddAcrossZoneTransition"; 325fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(exec) { 326fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("TestAddAcrossZoneTransition---"); logln(""); 327fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TestAddAcrossZoneTransition(); 328fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 329fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius break; 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --------------------------------------------------------------------------------- 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString CalendarTest::fieldName(UCalendarDateFields f) { 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (f) { 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define FIELD_NAME_STR(x) case x: return (#x+5) 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_ERA ); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_YEAR ); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_MONTH ); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_WEEK_OF_YEAR ); 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_WEEK_OF_MONTH ); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DATE ); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DAY_OF_YEAR ); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DAY_OF_WEEK ); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DAY_OF_WEEK_IN_MONTH ); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_AM_PM ); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_HOUR ); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_HOUR_OF_DAY ); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_MINUTE ); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_SECOND ); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_MILLISECOND ); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_ZONE_OFFSET ); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DST_OFFSET ); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_YEAR_WOY ); 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_DOW_LOCAL ); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_EXTENDED_YEAR ); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_JULIAN_DAY ); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FIELD_NAME_STR( UCAL_MILLISECONDS_IN_DAY ); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef FIELD_NAME_STR 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return UnicodeString("") + ((int32_t)f); 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test various API methods for API completeness. 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGenericAPI() 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d; 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool eq = FALSE,b4 = FALSE,af = FALSE; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate when = date(90, UCAL_APRIL, 15); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString tzid("TestZone"); 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tzoffset = 123400; 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleTimeZone *zone = new SimpleTimeZone(tzoffset, tzid); 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(zone->clone(), status); 385f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (failure(status, "Calendar::createInstance #1", TRUE)) return; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*zone != cal->getTimeZone()) errln("FAIL: Calendar::getTimeZone failed"); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal2 = Calendar::createInstance(cal->getTimeZone(), status); 390f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (failure(status, "Calendar::createInstance #2")) return; 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(when, status); 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->setTime(when, status); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::setTime")) return; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*cal == *cal2)) errln("FAIL: Calendar::operator== failed"); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((*cal != *cal2)) errln("FAIL: Calendar::operator!= failed"); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!cal->equals(*cal2, status) || 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->before(*cal2, status) || 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->after(*cal2, status) || 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) errln("FAIL: equals/before/after failed"); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("cal2->setTime(when+1000)"); 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->setTime(when + 1000, status); 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::setTime")) return; 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->equals(*cal2, status) || 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->before(*cal, status) || 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->after(*cal2, status) || 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) errln("FAIL: equals/before/after failed after setTime(+1000)"); 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln("cal->roll(UCAL_SECOND)"); 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->roll(UCAL_SECOND, (UBool) TRUE, status); 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal->roll(UCAL_SECOND, (int32_t)0, status); 41850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::roll")) return; 42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(eq=cal->equals(*cal2, status)) || 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (b4=cal->before(*cal2, status)) || 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (af=cal->after(*cal2, status)) || 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) { 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: equals[%c]/before[%c]/after[%c] failed after roll 1 second [should be T/F/F]", 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru eq?'T':'F', 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b4?'T':'F', 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru af?'T':'F'); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal=") +cal->getTime(status) + UnicodeString(calToStr(*cal))); 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("cal2=") +cal2->getTime(status) + UnicodeString(calToStr(*cal2))); 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Roll back to January 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->roll(UCAL_MONTH, (int32_t)(1 + UCAL_DECEMBER - cal->get(UCAL_MONTH, status)), status); 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::roll")) return; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->equals(*cal2, status) || 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal2->before(*cal, status) || 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->after(*cal2, status) || 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) errln("FAIL: equals/before/after failed after rollback to January"); 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *z = cal->orphanTimeZone(); 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (z->getID(str) != tzid || 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru z->getRawOffset() != tzoffset) 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: orphanTimeZone failed"); 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<2; ++i) 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool lenient = ( i > 0 ); 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setLenient(lenient); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lenient != cal->isLenient()) errln("FAIL: setLenient/isLenient failed"); 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Later: Check for lenient behavior 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=UCAL_SUNDAY; i<=UCAL_SATURDAY; ++i) 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setFirstDayOfWeek((UCalendarDaysOfWeek)i); 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getFirstDayOfWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed"); 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode aStatus = U_ZERO_ERROR; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getFirstDayOfWeek(aStatus) != i || U_FAILURE(aStatus)) errln("FAIL: getFirstDayOfWeek(status) failed"); 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=1; i<=7; ++i) 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setMinimalDaysInFirstWeek((uint8_t)i); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getMinimalDaysInFirstWeek() != i) errln("FAIL: set/getFirstDayOfWeek failed"); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<UCAL_FIELD_COUNT; ++i) 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (cal->getMinimum((UCalendarDateFields)i) > cal->getGreatestMinimum((UCalendarDateFields)i)) 4728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln(UnicodeString("FAIL: getMinimum larger than getGreatestMinimum for field ") + i); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getLeastMaximum((UCalendarDateFields)i) > cal->getMaximum((UCalendarDateFields)i)) 4748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln(UnicodeString("FAIL: getLeastMaximum larger than getMaximum for field ") + i); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getMinimum((UCalendarDateFields)i) >= cal->getMaximum((UCalendarDateFields)i)) 4768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln(UnicodeString("FAIL: getMinimum not less than getMaximum for field ") + i); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->adoptTimeZone(TimeZone::createDefault()); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1984, 5, 24); 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getTime(status) != date(84, 5, 24) || U_FAILURE(status)) 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Calendar::set(3 args) failed"); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1985, 3, 2, 11, 49); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getTime(status) != date(85, 3, 2, 11, 49) || U_FAILURE(status)) 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Calendar::set(5 args) failed"); 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1995, 9, 12, 1, 39, 55); 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->getTime(status) != date(95, 9, 12, 1, 39, 55) || U_FAILURE(status)) 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Calendar::set(6 args) failed"); 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->getTime(status); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "Calendar::getTime")) return; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<UCAL_FIELD_COUNT; ++i) 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(i) { 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCAL_YEAR: case UCAL_MONTH: case UCAL_DATE: 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCAL_HOUR_OF_DAY: case UCAL_MINUTE: case UCAL_SECOND: 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCAL_EXTENDED_YEAR: 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet F, should be T " + fieldName((UCalendarDateFields)i)); 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::isSet = T, should be F " + fieldName((UCalendarDateFields)i)); 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear((UCalendarDateFields)i); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cal->isSet((UCalendarDateFields)i)) errln("FAIL: Calendar::clear/isSet failed " + fieldName((UCalendarDateFields)i)); 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(cal->getActualMinimum(Calendar::SECOND, status) != 0){ 51350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Calendar is suppose to return 0 for getActualMinimum"); 51450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 51550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 51650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Calendar *cal3 = Calendar::createInstance(status); 51750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal3->roll(Calendar::SECOND, (int32_t)0, status); 51850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::roll(EDateFields, int32_t, UErrorCode)")) return; 51950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal2; 52250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete cal3; 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count; 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale* loc = Calendar::getAvailableLocales(count); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (count < 1 || loc == 0) 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 5286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: getAvailableLocales failed"); 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<count; ++i) 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(loc[i], status); 535f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (U_FAILURE(status)) { 536f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errcheckln(status, UnicodeString("FAIL: Calendar::createInstance #3, locale ") + loc[i].getName() + " , error " + u_errorName(status)); 537f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius return; 538f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(TimeZone::createDefault(), Locale::getEnglish(), status); 544f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (failure(status, "Calendar::createInstance #4")) return; 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(*zone, Locale::getEnglish(), status); 548f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (failure(status, "Calendar::createInstance #5")) return; 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *gc = new GregorianCalendar(*zone, status); 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(Locale::getEnglish(), status); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(Locale::getEnglish(), status); 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(*zone, Locale::getEnglish(), status); 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(zone, status); 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(1998, 10, 14, 21, 43, status); 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gc->getTime(status) != (d =date(98, 10, 14, 21, 43) )|| U_FAILURE(status)) 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: new GregorianCalendar(ymdhm) failed with " + UnicodeString(u_errorName(status)) + ", cal=" + gc->getTime(status) + UnicodeString(calToStr(*gc)) + ", d=" + d); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("GOOD: cal=") +gc->getTime(status) + UnicodeString(calToStr(*gc)) + ", d=" + d); 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc = new GregorianCalendar(1998, 10, 14, 21, 43, 55, status); 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gc->getTime(status) != (d=date(98, 10, 14, 21, 43, 55)) || U_FAILURE(status)) 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: new GregorianCalendar(ymdhms) failed with " + UnicodeString(u_errorName(status))); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar gc2(Locale::getEnglish(), status); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "new GregorianCalendar")) return; 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc2 = *gc; 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gc2 != *gc || !(gc2 == *gc)) errln("FAIL: GregorianCalendar assignment/operator==/operator!= failed"); 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete z; 58750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 58850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Code coverage for Calendar class. */ 58950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal = Calendar::createInstance(status); 590f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (failure(status, "Calendar::createInstance #6")) { 59150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 59250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }else { 59350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((Calendar *)cal)->roll(UCAL_HOUR, (int32_t)100, status); 59450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ((Calendar *)cal)->clear(UCAL_HOUR); 59550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_SERVICE 59650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho URegistryKey key = cal->registerFactory(NULL, status); 59750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal->unregister(key, status); 59850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 59950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 60050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete cal; 60150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 60250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 60350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal = Calendar::createInstance(Locale("he_IL@calendar=hebrew"), status); 604f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (failure(status, "Calendar::createInstance #7")) { 60550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 60650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 60750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cal->roll(Calendar::MONTH, (int32_t)100, status); 60850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 60950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 61054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius LocalPointer<StringEnumeration> values( 61154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius Calendar::getKeywordValuesForLocale("calendar", Locale("he"), FALSE, status)); 61254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (values.isNull() || U_FAILURE(status)) { 61354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dataerrln("FAIL: Calendar::getKeywordValuesForLocale(he): %s", u_errorName(status)); 61454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 61554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool containsHebrew = FALSE; 61654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char *charValue; 61754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t valueLength; 61854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius while ((charValue = values->next(&valueLength, status)) != NULL) { 61954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (valueLength == 6 && strcmp(charValue, "hebrew") == 0) { 62054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius containsHebrew = TRUE; 62154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 62254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 62354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (!containsHebrew) { 62454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Calendar::getKeywordValuesForLocale(he)->next() does not contain \"hebrew\""); 62554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 62654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 62754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius values->reset(status); 62854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius containsHebrew = FALSE; 62954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString hebrew = UNICODE_STRING_SIMPLE("hebrew"); 63054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const UChar *ucharValue; 63154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius while ((ucharValue = values->unext(&valueLength, status)) != NULL) { 63254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString value(FALSE, ucharValue, valueLength); 63354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (value == hebrew) { 63454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius containsHebrew = TRUE; 63554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 63654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 63754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (!containsHebrew) { 63854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Calendar::getKeywordValuesForLocale(he)->unext() does not contain \"hebrew\""); 63954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 64054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 64154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius values->reset(status); 64254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius containsHebrew = FALSE; 64354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const UnicodeString *stringValue; 64454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius while ((stringValue = values->snext(status)) != NULL) { 64554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (*stringValue == hebrew) { 64654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius containsHebrew = TRUE; 64754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 64854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 64954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (!containsHebrew) { 65054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Calendar::getKeywordValuesForLocale(he)->snext() does not contain \"hebrew\""); 65154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 65250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 65350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete cal; 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This test confirms the correct behavior of add when incrementing 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * through subsequent days. 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestRog() 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar* gc = new GregorianCalendar(status); 66750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t year = 1997, month = UCAL_APRIL, date = 1; 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(year, month, date); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(UCAL_HOUR_OF_DAY, 23); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(UCAL_MINUTE, 0); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(UCAL_SECOND, 0); 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->set(UCAL_MILLISECOND, 0); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < 9; i++, gc->add(UCAL_DATE, 1, status)) { 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gc->get(UCAL_YEAR, status) != year || 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->get(UCAL_MONTH, status) != month || 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->get(UCAL_DATE, status) != (date + i)) errln("FAIL: Date wrong"); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the day of the week, checking for correctness and 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for correct minimum and maximum values. 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOW943() 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dowTest(FALSE); 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dowTest(TRUE); 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::dowTest(UBool lenient) 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar* cal = new GregorianCalendar(status); 70150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("cal - Aug 12, 1997\n"); 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1997, UCAL_AUGUST, 12); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->getTime(status); 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((lenient?UnicodeString("LENIENT0: "):UnicodeString("nonlenient0: ")) + UnicodeString(calToStr(*cal))); 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setLenient(lenient); 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("cal - Dec 1, 1996\n"); 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1996, UCAL_DECEMBER, 1); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((lenient?UnicodeString("LENIENT: "):UnicodeString("nonlenient: ")) + UnicodeString(calToStr(*cal))); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow = cal->get(UCAL_DAY_OF_WEEK, status); 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed [%s]", u_errorName(status)); return; } 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t min = cal->getMinimum(UCAL_DAY_OF_WEEK); 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t max = cal->getMaximum(UCAL_DAY_OF_WEEK); 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dow < min || 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dow > max) errln(UnicodeString("FAIL: Day of week ") + (int32_t)dow + " out of range"); 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dow != UCAL_SUNDAY) errln("FAIL: Day of week should be SUNDAY[%d] not %d", UCAL_SUNDAY, dow); 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (min != UCAL_SUNDAY || 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max != UCAL_SATURDAY) errln("FAIL: Min/max bad"); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that cloned Calendar objects do not inadvertently share substructures. 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestClonesUnique908() 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *c = Calendar::createInstance(status); 73350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *d = (Calendar*) c->clone(); 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MILLISECOND, 123); 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d->set(UCAL_MILLISECOND, 456); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_MILLISECOND, status) != 123 || 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d->get(UCAL_MILLISECOND, status) != 456) { 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Clones share fields"); 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete d; 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that the Gregorian cutoff value works as advertised. 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGregorianChange768() 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool b; 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar* c = new GregorianCalendar(status); 75850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str)); 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b = c->isLeapYear(1800); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false")); 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" (should be FALSE)")); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b) errln("FAIL"); 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->setGregorianChange(date(0, 0, 1), status); 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("GregorianCalendar::setGregorianChange failed"); return; } 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("With cutoff ") + dateToString(c->getGregorianChange(), str)); 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b = c->isLeapYear(1800); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" isLeapYear(1800) = ") + (b ? "true" : "false")); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString(" (should be TRUE)")); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!b) errln("FAIL"); 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm the functioning of the field disambiguation algorithm. 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDisambiguation765() 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *c = Calendar::createInstance("en_US", status); 78450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->setLenient(FALSE); 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DATE, 3); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 third day of June = ", c, 1997, UCAL_JUNE, 3); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 1); 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 first Tuesday in June = ", c, 1997, UCAL_JUNE, 3); 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK_IN_MONTH, - 1); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 last Tuesday in June = ", c, 1997, UCAL_JUNE, 24); 803c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 805c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->clear(); 806c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 807c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 808c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 809c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK_IN_MONTH, 0); 810c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->getTime(status); 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 zero-th Tuesday in June = ", status); 812c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_MONTH, 1); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 1 of June = ", c, 1997, UCAL_JUNE, 3); 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_MONTH, 5); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 5 of June = ", c, 1997, UCAL_JULY, 1); 825c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 827c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->clear(); 828c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 829c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 830c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_MONTH, UCAL_JUNE); 831c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->set(UCAL_WEEK_OF_MONTH, 0); 832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru c->setMinimalDaysInFirstWeek(1); 833c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru c->getTime(status); 834c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru verify765("1997 Tuesday in week 0 of June = ", status); 835c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Note: The following test used to expect YEAR 1997, WOY 1 to 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * resolve to a date in Dec 1996; that is, to behave as if 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * YEAR_WOY were 1997. With the addition of a new explicit 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * YEAR_WOY field, YEAR_WOY must itself be set if that is what is 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * desired. Using YEAR in combination with WOY is ambiguous, and 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * results in the first WOY/DOW day of the year satisfying the 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * given fields (there may be up to two such days). In this case, 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * it propertly resolves to Tue Dec 30 1997, which has a WOY value 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of 1 (for YEAR_WOY 1998) and a DOW of Tuesday, and falls in the 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * _calendar_ year 1997, as specified. - aliu */ 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR_WOY, 1997); // aliu 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_YEAR, 1); 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 1 of yearWOY = ", c, 1996, UCAL_DECEMBER, 31); 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); // - add test for YEAR 852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru c->setMinimalDaysInFirstWeek(1); 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_YEAR, 1); 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 1 of year = ", c, 1997, UCAL_DECEMBER, 30); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->clear(); 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_YEAR, 1997); 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(UCAL_WEEK_OF_YEAR, 10); 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 10 of year = ", c, 1997, UCAL_MARCH, 4); 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} week 0 is no longer a valid week of year 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*c->clear(); 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(Calendar::YEAR, 1997); 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(Calendar::DAY_OF_WEEK, Calendar::TUESDAY); 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //c->set(Calendar::WEEK_OF_YEAR, 0); 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->set(Calendar::WEEK_OF_YEAR, 1); 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify765("1997 Tuesday in week 0 of year = ", c, 1996, Calendar::DECEMBER, 24);*/ 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //catch(IllegalArgumentException ex) { 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln("FAIL: Exception seen:"); 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ex.printStackTrace(log); 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::verify765(const UnicodeString& msg, Calendar* c, int32_t year, int32_t month, int32_t day) 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y = c->get(UCAL_YEAR, status); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t m = c->get(UCAL_MONTH, status); 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t d = c->get(UCAL_DATE, status); 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( y == year && 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m == month && 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d == day) { 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("FAIL: Calendar::get failed"); return; } 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: " + msg + dateToString(c->getTime(status), str)); 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + msg + dateToString(c->getTime(status), str) + "; expected " + (int32_t)year + "/" + (int32_t)(month + 1) + "/" + (int32_t)day + 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; got " + (int32_t)y + "/" + (int32_t)(m + 1) + "/" + (int32_t)d + " for Locale: " + c->getLocaleID(ULOC_ACTUAL_LOCALE,status)); 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::verify765(const UnicodeString& msg/*, IllegalArgumentException e*/, UErrorCode status) 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR) errln("FAIL: No IllegalArgumentException for " + msg); 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else logln("PASS: " + msg + "IllegalArgument as expected"); 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that the offset between local time and GMT behaves as expected. 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestGMTvsLocal4064654() 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4064654(1997, 1, 1, 12, 0, 0); 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test4064654(1997, 4, 16, 18, 30, 0); 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::test4064654(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn, int32_t sc) 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date; 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *gmtcal = Calendar::createInstance(status); 93450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gmtcal->adoptTimeZone(TimeZone::createTimeZone("Africa/Casablanca")); 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gmtcal->set(yr, mo - 1, dt, hr, mn, sc); 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gmtcal->set(UCAL_MILLISECOND, 0); 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = gmtcal->getTime(status); 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("date = " + dateToString(date, str)); 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(status); 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::createInstance failed"); return; } 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(date, status); 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t offset = cal->getTimeZone().getOffset((uint8_t)cal->get(UCAL_ERA, status), 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_YEAR, status), 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_MONTH, status), 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_DATE, status), 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (uint8_t)cal->get(UCAL_DAY_OF_WEEK, status), 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_MILLISECOND, status), status); 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("offset for " + dateToString(date, str) + "= " + (offset / 1000 / 60 / 60.0) + "hr"); 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t utc = ((cal->get(UCAL_HOUR_OF_DAY, status) * 60 + 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_MINUTE, status)) * 60 + 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_SECOND, status)) * 1000 + 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->get(UCAL_MILLISECOND, status) - offset; 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expected = ((hr * 60 + mn) * 60 + sc) * 1000; 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (utc != expected) errln(UnicodeString("FAIL: Discrepancy of ") + (utc - expected) + 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " millis = " + ((utc - expected) / 1000 / 60 / 60.0) + " hr"); 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gmtcal; 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The operations of adding and setting should not exhibit pathological 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * dependence on the order of operations. This test checks for this. 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddSetOrder621() 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = date(97, 4, 14, 13, 23, 45); 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = Calendar::createInstance(status); 97750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 97850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(d, status); 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::setTime failed"); 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->add(UCAL_DATE, - 5, status); 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::add failed"); 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_HOUR_OF_DAY, 0); 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_MINUTE, 0); 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_SECOND, 0); 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateToString(cal->getTime(status), s); 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::getTime failed"); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = Calendar::createInstance(status); 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::createInstance failed"); 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(d, status); 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::setTime failed"); 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_HOUR_OF_DAY, 0); 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_MINUTE, 0); 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_SECOND, 0); 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->add(UCAL_DATE, - 5, status); 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::add failed"); 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s2; 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateToString(cal->getTime(status), s2); 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Calendar::getTime failed"); 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s == s2) 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Pass: " + s + " == " + s2); 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + s + " != " + s2); 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that adding to various fields works. 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAdd520() 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y = 1997, m = UCAL_FEBRUARY, d = 1; 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *temp = new GregorianCalendar(y, m, d, status); 104950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_YEAR, 1, status); 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y++; 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_MONTH, 1, status); 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m++; 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_DATE, 1, status); 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d++; 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_DATE, 2, status); 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d += 2; 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(UCAL_DATE, 28, status); 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = 1;++m; 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d); 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete temp; 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Execute adding and rolling in GregorianCalendar extensively, 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddRollExtensive() 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t maxlimit = 40; 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y = 1997, m = UCAL_FEBRUARY, d = 1, hr = 1, min = 1, sec = 0, ms = 0; 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *temp = new GregorianCalendar(y, m, d, status); 108650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->set(UCAL_HOUR, hr); 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->set(UCAL_MINUTE, min); 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->set(UCAL_SECOND, sec); 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->set(UCAL_MILLISECOND, ms); 1092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru temp->setMinimalDaysInFirstWeek(1); 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendarDateFields e; 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing GregorianCalendar add..."); 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e = UCAL_YEAR; 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (e < UCAL_FIELD_COUNT) { 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t limit = maxlimit; 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(e, 1, status); 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { limit = i; status = U_ZERO_ERROR; } 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->add(e, -1, status); 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("GregorianCalendar::add -1 failed"); return; } 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d, hr, min, sec, ms, e); 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e = (UCalendarDateFields) ((int32_t) e + 1); 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing GregorianCalendar roll..."); 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e = UCAL_YEAR; 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (e < UCAL_FIELD_COUNT) { 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t limit = maxlimit; 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(*temp) + UnicodeString(" " ) + fieldName(e) + UnicodeString("++") ); 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->roll(e, 1, status); 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("caltest.cpp:%d e=%d, i=%d - roll(+) err %s\n", __LINE__, (int) e, (int) i, u_errorName(status)); 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(*temp)); 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru limit = i; status = U_ZERO_ERROR; 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("caltest.cpp:%d e=%d, i=%d\n", __LINE__, (int) e, (int) i); 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(*temp) + UnicodeString(" " ) + fieldName(e) + UnicodeString("--") ); 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp->roll(e, -1, status); 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln(UnicodeString("GregorianCalendar::roll ") + CalendarTest::fieldName(e) + " count=" + UnicodeString('@'+i) + " by -1 failed with " + u_errorName(status) ); return; } 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru check520(temp, y, m, d, hr, min, sec, ms, e); 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e = (UCalendarDateFields) ((int32_t) e + 1); 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete temp; 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::check520(Calendar* c, 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y, int32_t m, int32_t d, 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hr, int32_t min, int32_t sec, 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ms, UCalendarDateFields field) 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_YEAR, status) != y || 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MONTH, status) != m || 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_DATE, status) != d || 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_HOUR, status) != hr || 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MINUTE, status) != min || 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_SECOND, status) != sec || 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MILLISECOND, status) != ms) { 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("U_FAILURE for field ") + (int32_t)field + 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ": Expected y/m/d h:m:s:ms of " + 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y + "/" + (m + 1) + "/" + d + " " + 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hr + ":" + min + ":" + sec + ":" + ms + 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; got " + c->get(UCAL_YEAR, status) + 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + (c->get(UCAL_MONTH, status) + 1) + 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + c->get(UCAL_DATE, status) + 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " " + c->get(UCAL_HOUR, status) + ":" + 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MINUTE, status) + ":" + 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_SECOND, status) + ":" + 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MILLISECOND, status) 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Confirmed: ") + y + "/" + 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (m + 1) + "/" + d + " " + 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hr + ":" + min + ":" + sec + ":" + ms); 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::check520(Calendar* c, 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y, int32_t m, int32_t d) 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_YEAR, status) != y || 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_MONTH, status) != m || 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->get(UCAL_DATE, status) != d) { 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAILURE: Expected y/m/d of ") + 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y + "/" + (m + 1) + "/" + d + " " + 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; got " + c->get(UCAL_YEAR, status) + 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + (c->get(UCAL_MONTH, status) + 1) + 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + c->get(UCAL_DATE, status) 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Confirmed: ") + y + "/" + 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (m + 1) + "/" + d); 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that setting of fields works. In particular, make sure that all instances 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of GregorianCalendar don't share a static instance of the fields array. 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestFieldSet4781() 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // try { 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *g = new GregorianCalendar(status); 121750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *g2 = new GregorianCalendar(status); 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g2->set(UCAL_HOUR, 12, status); 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g2->set(UCAL_MINUTE, 0, status); 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g2->set(UCAL_SECOND, 0, status); 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::set failed"); return; } 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*g == *g2) logln("Same"); 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else logln("Different"); 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //catch(IllegalArgumentException e) { 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //errln("Unexpected exception seen: " + e); 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete g; 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete g2; 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* We don't support serialization on C++ 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestSerialize337() 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar cal = Calendar::getInstance(); 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool ok = FALSE; 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru try { 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FileOutputStream f = new FileOutputStream(FILENAME); 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ObjectOutput s = new ObjectOutputStream(f); 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.writeObject(PREFIX); 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.writeObject(cal); 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.writeObject(POSTFIX); 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.close(); 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FileInputStream in = new FileInputStream(FILENAME); 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ObjectInputStream t = new ObjectInputStream(in); 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& pre = (UnicodeString&) t.readObject(); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar c = (Calendar) t.readObject(); 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& post = (UnicodeString&) t.readObject(); 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru in.close(); 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = pre.equals(PREFIX) && 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru post.equals(POSTFIX) && 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->equals(c); 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru File fl = new File(FILENAME); 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fl.delete(); 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch(IOException e) { 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Exception received:"); 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(log); 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch(ClassNotFoundException e) { 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Exception received:"); 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(log); 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ok) errln("Serialization of Calendar object failed."); 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::PREFIX = "abc"; 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::POSTFIX = "def"; 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& CalendarTest::FILENAME = "tmp337.bin"; 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that the seconds of a Calendar can be zeroed out through the 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * expected sequence of operations. 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestSecondsZero121() 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = new GregorianCalendar(status); 129050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(Calendar::getNow(), status); 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_SECOND, 0); 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::set failed"); return; } 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = cal->getTime(status); 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateToString(d, s); 12996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (s.indexOf("DATE_FORMAT_FAILURE") >= 0) { 13006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Got: \"DATE_FORMAT_FAILURE\"."); 13016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else if (s.indexOf(":00 ") < 0) { 13026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errln("Expected to see :00 in " + s); 13036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that a specific sequence of adding and setting works as expected; 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * it should not vary depending on when and whether the get method is 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * called. 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestAddSetGet0610() 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString EXPECTED_0610("1993/0/5", ""); 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calendar = new GregorianCalendar(status); 132150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->set(1993, UCAL_JANUARY, 4); 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("1A) " + value(calendar)); 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->add(UCAL_DATE, 1, status); 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v = value(calendar); 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("1B) " + v); 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("--) 1993/0/5"); 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calendar; 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status); 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("2A) " + value(calendar)); 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->add(UCAL_DATE, 1, status); 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v = value(calendar); 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("2B) " + v); 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("--) 1993/0/5"); 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calendar; 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calendar = new GregorianCalendar(1993, UCAL_JANUARY, 4, status); 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("3A) " + value(calendar)); 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->getTime(status); 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar->add(UCAL_DATE, 1, status); 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v = value(calendar); 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("3B) " + v); 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("--) 1993/0/5"); 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(v == EXPECTED_0610)) errln("Expected " + EXPECTED_0610 + "; saw " + v); 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calendar; 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::value(Calendar* calendar) 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return UnicodeString("") + (int32_t)calendar->get(UCAL_YEAR, status) + 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + (int32_t)calendar->get(UCAL_MONTH, status) + 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "/" + (int32_t)calendar->get(UCAL_DATE, status) + 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (U_FAILURE(status) ? " FAIL: Calendar::get failed" : ""); 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that various fields on a known date are set correctly. 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestFields060() 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t year = 1997; 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t month = UCAL_OCTOBER; 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dDate = 22; 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *calendar = 0; 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calendar = new GregorianCalendar(year, month, dDate, status); 138750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < EXPECTED_FIELDS_length;) { 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendarDateFields field = (UCalendarDateFields)EXPECTED_FIELDS[i++]; 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expected = EXPECTED_FIELDS[i++]; 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (calendar->get(field, status) != expected) { 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Expected field ") + (int32_t)field + " to have value " + (int32_t)expected + 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; received " + (int32_t)calendar->get(field, status) + " instead"); 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calendar; 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::EXPECTED_FIELDS[] = { 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_YEAR, 1997, 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_MONTH, UCAL_OCTOBER, 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_DATE, 22, 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_DAY_OF_WEEK, UCAL_WEDNESDAY, 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_DAY_OF_WEEK_IN_MONTH, 4, 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCAL_DAY_OF_YEAR, 295 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst int32_t CalendarTest::EXPECTED_FIELDS_length = (int32_t)(sizeof(CalendarTest::EXPECTED_FIELDS) / 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sizeof(CalendarTest::EXPECTED_FIELDS[0])); 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that various fields on a known date are set correctly. In this 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * case, the start of the epoch (January 1 1970). 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestEpochStartFields() 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *z = TimeZone::createDefault(); 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *c = Calendar::createInstance(status); 142450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = - z->getRawOffset(); 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *gc = new GregorianCalendar(status); 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't create GregorianCalendar"); return; } 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->setTimeZone(*z); 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->setTime(d, status); 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool idt = gc->inDaylightTime(status); 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("GregorianCalendar::inDaylightTime failed"); return; } 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (idt) { 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Warning: Skipping test because " + dateToString(d, str) + " is in DST."); 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c->setTime(d, status); 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::setTime failed"); return; } 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < UCAL_ZONE_OFFSET;++i) { 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get((UCalendarDateFields)i, status) != EPOCH_FIELDS[i]) 1442b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln(UnicodeString("Expected field ") + i + " to have value " + EPOCH_FIELDS[i] + 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; saw " + c->get((UCalendarDateFields)i, status) + " instead"); 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_ZONE_OFFSET, status) != z->getRawOffset()) 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Expected field ZONE_OFFSET to have value ") + z->getRawOffset() + 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; saw " + c->get(UCAL_ZONE_OFFSET, status) + " instead"); 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c->get(UCAL_DST_OFFSET, status) != 0) 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Expected field DST_OFFSET to have value 0") + 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; saw " + c->get(UCAL_DST_OFFSET, status) + " instead"); 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete z; 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::EPOCH_FIELDS[] = { 1465b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1970, 0, 1, 1, 1, 1, 5, 1, 0, 0, 0, 0, 0, 0, - 28800000, 0 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that the days of the week progress properly when add is called repeatedly 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for increments of 24 days. 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOWProgression() 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = new GregorianCalendar(1972, UCAL_OCTOBER, 26, status); 147950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new GregorianCalendar", TRUE)) return; 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru marchByDelta(cal, 24); 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::TestDOW_LOCALandYEAR_WOY() 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Note: I've commented out the loop_addroll tests for YEAR and 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * YEAR_WOY below because these two fields should NOT behave 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * identically when adding. YEAR should keep the month/dom 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * invariant. YEAR_WOY should keep the woy/dow invariant. I've 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * added a new test that checks for this in place of the old call 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to loop_addroll. - aliu */ 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t times = 20; 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal=Calendar::createInstance(Locale::getGermany(), status); 149850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdf=new SimpleDateFormat(UnicodeString("YYYY'-W'ww-ee"), Locale::getGermany(), status); 1500103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { dataerrln("Couldn't create SimpleDateFormat - %s", u_errorName(status)); return; } 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ICU no longer use localized date-time pattern characters by default. 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // So we set pattern chars using 'J' instead of 'Y'. 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols *dfs = new DateFormatSymbols(Locale::getGermany(), status); 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dfs->setLocalPatternChars(UnicodeString("GyMdkHmsSEDFwWahKzJeugAZvcLQq")); 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->adoptDateFormatSymbols(dfs); 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->applyLocalizedPattern(UnicodeString("JJJJ'-W'ww-ee"), status); 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Couldn't apply localized pattern"); return; } 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1510b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cal->clear(); 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1997, UCAL_DECEMBER, 25); 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doYEAR_WOYLoop(cal, sdf, times, status); 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR, status); 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru yearAddTest(*cal, status); // aliu 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1997"); return; } 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1998, UCAL_DECEMBER, 25); 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doYEAR_WOYLoop(cal, sdf, times, status); 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //loop_addroll(cal, /*sdf,*/ times, UCAL_YEAR_WOY, UCAL_YEAR, status); 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru yearAddTest(*cal, status); // aliu 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1998"); return; } 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(1582, UCAL_OCTOBER, 1); 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doYEAR_WOYLoop(cal, sdf, times, status); 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //loop_addroll(cal, /*sdf,*/ times, Calendar::YEAR_WOY, Calendar::YEAR, status); 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru yearAddTest(*cal, status); // aliu 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru loop_addroll(cal, /*sdf,*/ times, UCAL_DOW_LOCAL, UCAL_DAY_OF_WEEK, status); 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Error in parse/calculate test for 1582"); return; } 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that adding a YEAR and adding a YEAR_WOY work properly for 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the given Calendar at its current setting. 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::yearAddTest(Calendar& cal, UErrorCode& status) { 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When adding the YEAR, the month and day should remain constant. 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When adding the YEAR_WOY, the WOY and DOW should remain constant. - aliu 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples: 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Wed Jan 14 1998 / 1998-W03-03 Add(YEAR_WOY, 1) -> Wed Jan 20 1999 / 1999-W03-03 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add(YEAR, 1) -> Thu Jan 14 1999 / 1999-W02-04 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Thu Jan 14 1999 / 1999-W02-04 Add(YEAR_WOY, 1) -> Thu Jan 13 2000 / 2000-W02-04 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add(YEAR, 1) -> Fri Jan 14 2000 / 2000-W02-05 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Sun Oct 31 1582 / 1582-W42-07 Add(YEAR_WOY, 1) -> Sun Oct 23 1583 / 1583-W42-07 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Add(YEAR, 1) -> Mon Oct 31 1583 / 1583-W44-01 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y = cal.get(UCAL_YEAR, status); 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mon = cal.get(UCAL_MONTH, status); 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t day = cal.get(UCAL_DATE, status); 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ywy = cal.get(UCAL_YEAR_WOY, status); 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status); 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow = cal.get(UCAL_DOW_LOCAL, status); 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate t = cal.getTime(status); 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Failed to create Calendar for locale. Error: ") + UnicodeString(u_errorName(status))); 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str, str2; 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), status); 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCalendar(cal); 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t, str.remove()); 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += ".add(YEAR, 1) =>"; 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.add(UCAL_YEAR, 1, status); 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y2 = cal.get(UCAL_YEAR, status); 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mon2 = cal.get(UCAL_MONTH, status); 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t day2 = cal.get(UCAL_DATE, status); 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (y2 != (y+1) || mon2 != mon || day2 != day) { 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += (UnicodeString)", expected year " + 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (y+1) + ", month " + (mon+1) + ", day " + day; 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + str); 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) ); 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t, str.remove()); 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += ".add(YEAR_WOY, 1)=>"; 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( UnicodeString(" <- ") + CalendarTest::calToStr(cal) ); 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.add(UCAL_YEAR_WOY, 1, status); 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ywy2 = cal.get(UCAL_YEAR_WOY, status); 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t woy2 = cal.get(UCAL_WEEK_OF_YEAR, status); 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow2 = cal.get(UCAL_DOW_LOCAL, status); 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ywy2 != (ywy+1) || woy2 != woy || dow2 != dow) { 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += (UnicodeString)", expected yearWOY " + 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (ywy+1) + ", woy " + woy + ", dowLocal " + dow; 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + str); 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( UnicodeString(" -> ") + CalendarTest::calToStr(cal) ); 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::loop_addroll(Calendar *cal, /*SimpleDateFormat *sdf,*/ int times, UCalendarDateFields field, UCalendarDateFields field2, UErrorCode& errorCode) { 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calclone; 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), errorCode); 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCalendar(*cal); 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i<times; i++) { 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calclone = cal->clone(); 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate start = cal->getTime(errorCode); 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->add(field,1,errorCode); 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; } 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calclone->add(field2,1,errorCode); 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Error in add"); delete calclone; return; } 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal->getTime(errorCode) != calclone->getTime(errorCode)) { 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str("FAIL: Results of add differ. "), str2; 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += fmt.format(start, str2) + " "; 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += UnicodeString("Add(") + fieldName(field) + ", 1) -> " + 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal->getTime(errorCode), str2.remove()) + "; "; 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += UnicodeString("Add(") + fieldName(field2) + ", 1) -> " + 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(calclone->getTime(errorCode), str2.remove()); 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calclone; 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calclone; 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i<times; i++) { 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calclone = cal->clone(); 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->roll(field,(int32_t)1,errorCode); 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; } 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calclone->roll(field2,(int32_t)1,errorCode); 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Error in roll"); delete calclone; return; } 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal->getTime(errorCode) != calclone->getTime(errorCode)) { 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calclone; 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Results of roll differ!"); 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete calclone; 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::doYEAR_WOYLoop(Calendar *cal, SimpleDateFormat *sdf, 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t times, UErrorCode& errorCode) { 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString us; 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate tst, original; 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *tstres = new GregorianCalendar(Locale::getGermany(), errorCode); 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i=0; i<times; ++i) { 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(Formattable(cal->getTime(errorCode),Formattable::kIsDate), us, errorCode); 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln("expected: "+us); 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Format error"); return; } 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tst=sdf->parse(us,errorCode); 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Parse error"); return; } 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->clear(); 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->setTime(tst, errorCode); 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln((UnicodeString)"Parsed week of year is "+tstres->get(UCAL_WEEK_OF_YEAR, errorCode)); 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Set time error"); return; } 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru original = cal->getTime(errorCode); 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru us.remove(); 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(Formattable(tst,Formattable::kIsDate), us, errorCode); 1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln("got: "+us); 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Get time error"); return; } 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(original!=tst) { 1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru us.remove(); 1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(Formattable(original, Formattable::kIsDate), us, errorCode); 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Parsed time doesn't match with regular"); 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("expected "+us + " " + calToStr(*cal)); 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru us.remove(); 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(Formattable(tst, Formattable::kIsDate), us, errorCode); 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("got "+us + " " + calToStr(*tstres)); 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->clear(); 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->set(UCAL_YEAR_WOY, cal->get(UCAL_YEAR_WOY, errorCode)); 1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->set(UCAL_WEEK_OF_YEAR, cal->get(UCAL_WEEK_OF_YEAR, errorCode)); 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tstres->set(UCAL_DOW_LOCAL, cal->get(UCAL_DOW_LOCAL, errorCode)); 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal->get(UCAL_YEAR, errorCode) != tstres->get(UCAL_YEAR, errorCode)) { 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Different Year!"); 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Expected "+cal->get(UCAL_YEAR, errorCode)); 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Got "+tstres->get(UCAL_YEAR, errorCode)); 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal->get(UCAL_DAY_OF_YEAR, errorCode) != tstres->get(UCAL_DAY_OF_YEAR, errorCode)) { 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Different Day Of Year!"); 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Expected "+cal->get(UCAL_DAY_OF_YEAR, errorCode)); 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Got "+tstres->get(UCAL_DAY_OF_YEAR, errorCode)); 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln(calToStr(*cal)); 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->add(UCAL_DATE, 1, errorCode); 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(errorCode)) { errln("Add error"); return; } 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru us.remove(); 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete (tstres); 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCalendarTest::marchByDelta(Calendar* cal, int32_t delta) 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cur = (Calendar*) cal->clone(); 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t initialDOW = cur->get(UCAL_DAY_OF_WEEK, status); 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t DOW, newDOW = initialDOW; 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru do { 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DOW = newDOW; 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("DOW = ") + DOW + " " + dateToString(cur->getTime(status), str)); 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cur->add(UCAL_DAY_OF_WEEK, delta, status); 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::add failed"); return; } 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru newDOW = cur->get(UCAL_DAY_OF_WEEK, status); 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::get failed"); return; } 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectedDOW = 1 + (DOW + delta - 1) % 7; 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newDOW != expectedDOW) { 1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Day of week should be ") + expectedDOW + " instead of " + newDOW + 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " on " + dateToString(cur->getTime(status), str)); 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("Calendar::getTime failed"); return; } 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (newDOW != initialDOW); 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cur; 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CHECK(status, msg) \ 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { \ 17396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, msg); \ 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; \ 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestWOY(void) { 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FDW = Mon, MDFW = 4: 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Dec 26 1999, WOY 51 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Dec 27 1999, WOY 52 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Dec 28 1999, WOY 52 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Dec 29 1999, WOY 52 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Dec 30 1999, WOY 52 1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Dec 31 1999, WOY 52 1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 01 2000, WOY 52 *** 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 02 2000, WOY 52 *** 1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Jan 03 2000, WOY 1 1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Jan 04 2000, WOY 1 1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Jan 05 2000, WOY 1 1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Jan 06 2000, WOY 1 1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Jan 07 2000, WOY 1 1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 08 2000, WOY 1 1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 09 2000, WOY 1 1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Jan 10 2000, WOY 2 1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FDW = Mon, MDFW = 2: 1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Dec 26 1999, WOY 52 1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Dec 27 1999, WOY 1 *** 1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Dec 28 1999, WOY 1 *** 1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Dec 29 1999, WOY 1 *** 1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Dec 30 1999, WOY 1 *** 1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Dec 31 1999, WOY 1 *** 1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 01 2000, WOY 1 1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 02 2000, WOY 1 1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Jan 03 2000, WOY 2 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Jan 04 2000, WOY 2 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Jan 05 2000, WOY 2 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Jan 06 2000, WOY 2 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Jan 07 2000, WOY 2 1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 08 2000, WOY 2 1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 09 2000, WOY 2 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Jan 10 2000, WOY 3 1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar cal(status); 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy', WOY' w"), status); 178850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Cannot construct calendar/format", TRUE)) return; 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendarDaysOfWeek fdw = (UCalendarDaysOfWeek) 0; 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //for (int8_t pass=2; pass<=2; ++pass) { 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int8_t pass=1; pass<=2; ++pass) { 1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (pass) { 1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fdw = UCAL_MONDAY; 1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setFirstDayOfWeek(fdw); 1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setMinimalDaysInFirstWeek(4); 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.adoptCalendar(cal.clone()); 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fdw = UCAL_MONDAY; 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setFirstDayOfWeek(fdw); 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setMinimalDaysInFirstWeek(2); 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.adoptCalendar(cal.clone()); 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //for (i=2; i<=6; ++i) { 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<16; ++i) { 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate t, t2; 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t t_y, t_woy, t_dow; 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(1999, UCAL_DECEMBER, 26 + i); 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t = cal.getTime(status), str.remove()); 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("* ") + str); 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow = cal.get(UCAL_DAY_OF_WEEK, status); 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t woy = cal.get(UCAL_WEEK_OF_YEAR, status); 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t year = cal.get(UCAL_YEAR, status); 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t mon = cal.get(UCAL_MONTH, status); 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: get failed"); 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dowLocal = dow - fdw; 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dowLocal < 0) dowLocal += 7; 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dowLocal++; 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t yearWoy = year; 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (mon == UCAL_JANUARY) { 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (woy >= 52) --yearWoy; 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (woy == 1) ++yearWoy; 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Basic fields->time check y/woy/dow 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Since Y/WOY is ambiguous, we do a check of the fields, 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // not of the specific time. 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR, year); 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR, woy); 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, dow); 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_y = cal.get(UCAL_YEAR, status); 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_woy = cal.get(UCAL_WEEK_OF_YEAR, status); 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_dow = cal.get(UCAL_DAY_OF_WEEK, status); 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: get failed"); 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t_y != year || t_woy != woy || t_dow != dow) { 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: y/woy/dow fields->time => "; 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("[get!=set] Y%d!=%d || woy%d!=%d || dow%d!=%d\n", 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_y, year, t_woy, woy, t_dow, dow); 1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("y/woy/dow fields->time OK"); 1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Basic fields->time check y/woy/dow_local 1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Since Y/WOY is ambiguous, we do a check of the fields, 1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // not of the specific time. 1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR, year); 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR, woy); 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, dowLocal); 1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_y = cal.get(UCAL_YEAR, status); 1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_woy = cal.get(UCAL_WEEK_OF_YEAR, status); 1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t_dow = cal.get(UCAL_DOW_LOCAL, status); 1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: get failed"); 1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t_y != year || t_woy != woy || t_dow != dowLocal) { 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: y/woy/dow_local fields->time => "; 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Basic fields->time check y_woy/woy/dow 1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY, yearWoy); 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR, woy); 1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, dow); 1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: y_woy/woy/dow fields->time => "; 1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("%.f != %.f\n", t, t2); 1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("y_woy/woy/dow OK"); 1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Basic fields->time check y_woy/woy/dow_local 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY, yearWoy); 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR, woy); 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, dowLocal); 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: y_woy/woy/dow_local fields->time => "; 1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DOW_LOCAL.. dow%d\n", dow); 1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure DOW_LOCAL disambiguates over DOW 1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t wrongDow = dow - 3; 1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (wrongDow < 1) wrongDow += 7; 1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, wrongDow); 1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, dowLocal); 1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: set/getTime failed"); 1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: DOW_LOCAL fields->time => "; 1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("%.f : DOW%d, DOW_LOCAL%d -> %.f\n", 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t, wrongDow, dowLocal, t2); 1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure DOW disambiguates over DOW_LOCAL 1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t wrongDowLocal = dowLocal - 3; 1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (wrongDowLocal < 1) wrongDowLocal += 7; 1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, wrongDowLocal); 1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, dow); 1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: set/getTime failed"); 1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: DOW fields->time => "; 1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure YEAR_WOY disambiguates over YEAR 1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR, year - 2); 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY, yearWoy); 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: set/getTime failed"); 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: YEAR_WOY fields->time => "; 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure YEAR disambiguates over YEAR_WOY 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY, yearWoy - 2); 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR, year); 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: set/getTime failed"); 1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "Fail: YEAR fields->time => "; 1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FDW = Mon, MDFW = 4: 1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Dec 26 1999, WOY 51 1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mon Dec 27 1999, WOY 52 1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Tue Dec 28 1999, WOY 52 1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Wed Dec 29 1999, WOY 52 1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Thu Dec 30 1999, WOY 52 1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Fri Dec 31 1999, WOY 52 1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sat Jan 01 2000, WOY 52 1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Sun Jan 02 2000, WOY 52 1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Roll the DOW_LOCAL within week 52 1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=27; i<=33; ++i) { 1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t amount; 1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (amount=-7; amount<=7; ++amount) { 1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = "roll("; 1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(1999, UCAL_DECEMBER, i); 1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate t, t2; 1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(cal.getTime(status), str); 1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str += UnicodeString(", ") + amount + ") = "; 1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.roll(UCAL_DOW_LOCAL, amount, status); 1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: roll failed"); 1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t = cal.getTime(status); 1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t newDom = i + amount; 1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (newDom < 27) newDom += 7; 1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (newDom > 33) newDom -= 7; 1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(1999, UCAL_DECEMBER, newDom); 1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru t2 = cal.getTime(status); 1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "Fail: getTime failed"); 1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t, str); 1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (t != t2) { 1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.append(", exp "); 1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(t2, str); 1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(str); 2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestYWOY() 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar cal(status); 201350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "construct GregorianCalendar", TRUE)) return; 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setFirstDayOfWeek(UCAL_SUNDAY); 2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setMinimalDaysInFirstWeek(1); 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Setting: ywoy=2004, woy=1, dow=MONDAY"); 2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY,2004); 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR,1); 2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, UCAL_MONDAY); 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.get(UCAL_YEAR, status) != 2003) { 2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("year not 2003"); 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("+ setting DOW to THURSDAY"); 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY,2004); 2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR,1); 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY); 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.get(UCAL_YEAR, status) != 2004) { 2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("year not 2004"); 2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("+ setting DOW_LOCAL to 1"); 2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_YEAR_WOY,2004); 2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_WEEK_OF_YEAR,1); 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, UCAL_THURSDAY); 2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, 1); 2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.get(UCAL_YEAR, status) != 2003) { 2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("year not 2003"); 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setFirstDayOfWeek(UCAL_MONDAY); 2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setMinimalDaysInFirstWeek(4); 2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate t = 946713600000.; 2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(t, status); 2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DAY_OF_WEEK, 4); 2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_DOW_LOCAL, 6); 2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(cal.getTime(status) != t) { 2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(calToStr(cal)); 2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: DOW_LOCAL did not take precedence"); 2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestJD() 2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t jd; 2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const int32_t kEpochStartAsJulianDay = 2440588; 2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar cal(status); 207150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "construct GregorianCalendar", TRUE)) return; 2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTimeZone(*TimeZone::getGMT()); 2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru jd = cal.get(UCAL_JULIAN_DAY, status); 2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(jd != kEpochStartAsJulianDay) { 2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted JD of %d at time=0, [epoch 1970] but got %d\n", kEpochStartAsJulianDay, jd); 2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Wanted JD of %d at time=0, [epoch 1970], got %d\n", kEpochStartAsJulianDay, jd); 2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setTime(Calendar::getNow(), status); 2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(UCAL_JULIAN_DAY, kEpochStartAsJulianDay); 2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate epochTime = cal.getTime(status); 2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(epochTime != 0) { 2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime); 2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Wanted time of 0 at jd=%d, got %.1lf\n", kEpochStartAsJulianDay, epochTime); 2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// make sure the ctestfw utilities are in sync with the Calendar 2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid CalendarTest::TestDebug() 2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2096b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(int32_t t=0;t<=UDBG_ENUM_COUNT;t++) { 2097b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t count = udbg_enumCount((UDebugEnumType)t); 2098b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(count == -1) { 2099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("enumCount(%d) returned -1", count); 2100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 2101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(int32_t i=0;i<=count;i++) { 2103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(t<=UDBG_HIGHEST_CONTIGUOUS_ENUM && i<count) { 2104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if( i!=udbg_enumArrayValue((UDebugEnumType)t, i)) { 2105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("FAIL: udbg_enumArrayValue(%d,%d) returned %d, expected %d", t, i, udbg_enumArrayValue((UDebugEnumType)t,i), i); 2106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("Testing count+1:"); 2109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *name = udbg_enumName((UDebugEnumType)t,i); 2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(name==NULL) { 2112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(i==count || t>UDBG_HIGHEST_CONTIGUOUS_ENUM ) { 2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" null name - expected.\n"); 2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: udbg_enumName(%d,%d) returned NULL", t, i); 2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "(null)"; 2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("udbg_enumArrayValue(%d,%d) = %s, returned %d", t, i, 2120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho name, udbg_enumArrayValue((UDebugEnumType)t,i)); 2121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("udbg_enumString = " + udbg_enumString((UDebugEnumType)t,i)); 2122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2123b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(udbg_enumExpectedCount((UDebugEnumType)t) != count && t<=UDBG_HIGHEST_CONTIGUOUS_ENUM) { 2124b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("FAIL: udbg_enumExpectedCount(%d): %d, != UCAL_FIELD_COUNT=%d ", t, udbg_enumExpectedCount((UDebugEnumType)t), count); 2125b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2126b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln("udbg_ucal_fieldCount: %d, UCAL_FIELD_COUNT=udbg_enumCount %d ", udbg_enumExpectedCount((UDebugEnumType)t), count); 2127b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2128b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef CHECK 2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// List of interesting locales 2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char *CalendarTest::testLocaleID(int32_t i) 2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(i) { 2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: return "he_IL@calendar=hebrew"; 2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: return "en_US@calendar=hebrew"; 2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: return "fr_FR@calendar=hebrew"; 2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: return "fi_FI@calendar=hebrew"; 2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: return "nl_NL@calendar=hebrew"; 2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: return "hu_HU@calendar=hebrew"; 2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: return "nl_BE@currency=MTL;calendar=islamic"; 2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: return "th_TH_TRADITIONAL@calendar=gregorian"; 2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: return "ar_JO@calendar=islamic-civil"; 2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 9: return "fi_FI@calendar=islamic"; 2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: return "fr_CH@calendar=islamic-civil"; 2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 11: return "he_IL@calendar=islamic-civil"; 2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 12: return "hu_HU@calendar=buddhist"; 2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 13: return "hu_HU@calendar=islamic"; 2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 14: return "en_US@calendar=japanese"; 2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: return NULL; 2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t CalendarTest::testLocaleCount() 2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static int32_t gLocaleCount = -1; 2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(gLocaleCount < 0) { 2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;testLocaleID(i) != NULL;i++) { 2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ; 2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gLocaleCount = i; 2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return gLocaleCount; 2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UDate doMinDateOfCalendar(Calendar* adopt, UBool &isGregorian, UErrorCode& status) { 2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) return 0.0; 2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru adopt->clear(); 2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru adopt->set(UCAL_EXTENDED_YEAR, adopt->getActualMinimum(UCAL_EXTENDED_YEAR, status)); 2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate ret = adopt->getTime(status); 217627f654740f2a26ad62a5c155af9199af9e69b889claireho isGregorian = dynamic_cast<GregorianCalendar*>(adopt) != NULL; 2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete adopt; 2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ret; 2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate CalendarTest::minDateOfCalendar(const Locale& locale, UBool &isGregorian, UErrorCode& status) { 2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) return 0.0; 2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return doMinDateOfCalendar(Calendar::createInstance(locale, status), isGregorian, status); 2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUDate CalendarTest::minDateOfCalendar(const Calendar& cal, UBool &isGregorian, UErrorCode& status) { 2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) return 0.0; 2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return doMinDateOfCalendar(cal.clone(), isGregorian, status); 2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid CalendarTest::Test6703() 2192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 2193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Calendar *cal; 2195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale loc1("en@calendar=fubar"); 2197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru cal = Calendar::createInstance(loc1, status); 219850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "Calendar::createInstance", TRUE)) return; 2199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete cal; 2200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 2202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale loc2("en"); 2203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru cal = Calendar::createInstance(loc2, status); 2204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (failure(status, "Calendar::createInstance")) return; 2205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete cal; 2206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 2208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale loc3("en@calendar=roc"); 2209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru cal = Calendar::createInstance(loc3, status); 2210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (failure(status, "Calendar::createInstance")) return; 2211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete cal; 2212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid CalendarTest::Test3785() 2217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 2218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 221950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString uzone = UNICODE_STRING_SIMPLE("Europe/Paris"); 222050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString exp1 = UNICODE_STRING_SIMPLE("Mon 30 Jumada II 1433 AH, 01:47:03"); 222150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString exp2 = UNICODE_STRING_SIMPLE("Mon 1 Rajab 1433 AH, 01:47:04"); 2222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 222350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDateFormatPointer df(udat_open(UDAT_NONE, UDAT_NONE, "en@calendar=islamic", uzone.getTerminatedBuffer(), 222450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uzone.length(), NULL, 0, &status)); 222550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (df.isNull() || U_FAILURE(status)) return; 2226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar upattern[64]; 2228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_uastrcpy(upattern, "EEE d MMMM y G, HH:mm:ss"); 222950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho udat_applyPattern(df.getAlias(), FALSE, upattern, u_strlen(upattern)); 2230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar ubuffer[1024]; 2232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDate ud0 = 1337557623000.0; 2233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 223550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status); 223650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 223750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Error formatting date 1\n"); 223850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 223950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru //printf("formatted: '%s'\n", mkcstr(ubuffer)); 2241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 224250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString act1(ubuffer); 224350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if ( act1 != exp1 ) { 224450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Unexpected result from date 1 format\n"); 224550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ud0 += 1000.0; // add one second 2247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 224950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho udat_format(df.getAlias(), ud0, ubuffer, 1024, NULL, &status); 225050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 225150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Error formatting date 2\n"); 225250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 225350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru //printf("formatted: '%s'\n", mkcstr(ubuffer)); 225550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString act2(ubuffer); 225650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if ( act2 != exp2 ) { 225750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Unexpected result from date 2 format\n"); 225850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 226350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid CalendarTest::Test1624() { 226450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 226550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale loc("he_IL@calendar=hebrew"); 226650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho HebrewCalendar hc(loc,status); 226750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 226850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int32_t year = 5600; year < 5800; year++ ) { 226950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 227050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int32_t month = HebrewCalendar::TISHRI; month <= HebrewCalendar::ELUL; month++) { 227150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // skip the adar 1 month if year is not a leap year 227250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (HebrewCalendar::isLeapYear(year) == FALSE && month == HebrewCalendar::ADAR_1) { 227350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho continue; 227450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 227550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t day = 15; 227650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho hc.set(year,month,day); 227750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t dayHC = hc.get(UCAL_DATE,status); 227850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t monthHC = hc.get(UCAL_MONTH,status); 227950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t yearHC = hc.get(UCAL_YEAR,status); 228050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 228150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "HebrewCalendar.get()", TRUE)) continue; 2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 228350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (dayHC != day) { 228450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(" ==> day %d incorrect, should be: %d\n",dayHC,day); 228550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 228650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 228750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (monthHC != month) { 228850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(" ==> month %d incorrect, should be: %d\n",monthHC,month); 228950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 229050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 229150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (yearHC != year) { 229250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(" ==> day %d incorrect, should be: %d\n",yearHC,year); 229350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 229450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 229550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 229650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 229750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 229850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2300b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid CalendarTest::TestTimeStamp() { 2301b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 2302b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UDate start = 0.0, time; 2303b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Calendar *cal; 2304b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2305b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Create a new Gregorian Calendar. 2306b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cal = Calendar::createInstance("en_US@calender=gregorian", status); 2307b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 2308b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Error creating Gregorian calendar."); 2309b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return; 2310b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2311b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2312b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int i = 0; i < 20000; i++) { 2313b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Set the Gregorian Calendar to a specific date for testing. 2314b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cal->set(2009, UCAL_JULY, 3, 0, 49, 46); 2315b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2316b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho time = cal->getTime(status); 2317b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 2318b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error calling getTime()"); 2319b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 2320b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2321b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2322b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (i == 0) { 2323b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho start = time; 2324b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2325b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (start != time) { 2326b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("start and time not equal."); 2327b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 2328b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2329b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2330b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2331b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2332b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete cal; 2333b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 2334b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2335b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid CalendarTest::TestISO8601() { 2336b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char* TEST_LOCALES[] = { 2337b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "en_US@calendar=iso8601", 2338b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "en_US@calendar=Iso8601", 2339b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "th_TH@calendar=iso8601", 2340b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "ar_EG@calendar=iso8601", 2341b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NULL 2342b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 2343b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2344b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t TEST_DATA[][3] = { 2345b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {2008, 1, 2008}, 2346b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {2009, 1, 2009}, 2347b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {2010, 53, 2009}, 2348b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {2011, 52, 2010}, 2349b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {2012, 52, 2011}, 2350b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {2013, 1, 2013}, 2351b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {2014, 1, 2014}, 2352b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {0, 0, 0}, 2353b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 2354b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2355b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int i = 0; TEST_LOCALES[i] != NULL; i++) { 2356b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 2357b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Calendar *cal = Calendar::createInstance(TEST_LOCALES[i], status); 2358b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 2359b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error: Failed to create a calendar for locale: %s", TEST_LOCALES[i]); 2360b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 2361b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2362b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (uprv_strcmp(cal->getType(), "gregorian") != 0) { 2363b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error: Gregorian calendar is not used for locale: %s", TEST_LOCALES[i]); 2364b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 2365b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2366b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int j = 0; TEST_DATA[j][0] != 0; j++) { 2367b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cal->set(TEST_DATA[j][0], UCAL_JANUARY, 1); 2368b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t weekNum = cal->get(UCAL_WEEK_OF_YEAR, status); 2369b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t weekYear = cal->get(UCAL_YEAR_WOY, status); 2370b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 2371b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error: Failed to get week of year"); 2372b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 2373b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2374b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (weekNum != TEST_DATA[j][1] || weekYear != TEST_DATA[j][2]) { 2375b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error: Incorrect week of year on January 1st, %d for locale %s: Returned [weekNum=%d, weekYear=%d], Expected [weekNum=%d, weekYear=%d]", 2376b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_DATA[j][0], TEST_LOCALES[i], weekNum, weekYear, TEST_DATA[j][1], TEST_DATA[j][2]); 2377b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2378b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete cal; 2380b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2381b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2382b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 2383b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2384103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid 2385103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusCalendarTest::TestAmbiguousWallTimeAPIs(void) { 2386103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 2387103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Calendar* cal = Calendar::createInstance(status); 2388103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2389103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Error creating a calendar instance."); 2390103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 2391103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2392103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2393103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (cal->getRepeatedWallTimeOption() != UCAL_WALLTIME_LAST) { 2394103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Default repeted time option is not UCAL_WALLTIME_LAST"); 2395103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2396103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (cal->getSkippedWallTimeOption() != UCAL_WALLTIME_LAST) { 2397103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Default skipped time option is not UCAL_WALLTIME_LAST"); 2398103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2399103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2400103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Calendar* cal2 = cal->clone(); 2401103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2402103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (*cal != *cal2) { 2403103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Cloned calendar != the original"); 2404103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2405103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (!cal->equals(*cal2, status)) { 2406103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: The time of cloned calendar is not equal to the original"); 2407103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (U_FAILURE(status)) { 2408103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Error equals"); 2409103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2410103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2411103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2412103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius cal2->setRepeatedWallTimeOption(UCAL_WALLTIME_FIRST); 2413103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius cal2->setSkippedWallTimeOption(UCAL_WALLTIME_FIRST); 2414103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2415103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (*cal == *cal2) { 2416103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Cloned and modified calendar == the original"); 2417103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2418103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (!cal->equals(*cal2, status)) { 2419103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: The time of cloned calendar is not equal to the original after changing wall time options"); 2420103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (U_FAILURE(status)) { 2421103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Error equals after changing wall time options"); 2422103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2423103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2424103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2425103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (cal2->getRepeatedWallTimeOption() != UCAL_WALLTIME_FIRST) { 2426103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Repeted time option is not UCAL_WALLTIME_FIRST"); 2427103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2428103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (cal2->getSkippedWallTimeOption() != UCAL_WALLTIME_FIRST) { 2429103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Skipped time option is not UCAL_WALLTIME_FIRST"); 2430103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2431103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2432103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius cal2->setRepeatedWallTimeOption(UCAL_WALLTIME_NEXT_VALID); 2433103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (cal2->getRepeatedWallTimeOption() != UCAL_WALLTIME_FIRST) { 2434103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Repeated wall time option was updated other than UCAL_WALLTIME_FIRST"); 2435103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2436103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2437103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete cal; 2438103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete cal2; 2439103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2440103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2441103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass CalFields { 2442103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 2443fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(int32_t year, int32_t month, int32_t day, int32_t hour, int32_t min, int32_t sec, int32_t ms = 0); 2444103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CalFields(const Calendar& cal, UErrorCode& status); 2445103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius void setTo(Calendar& cal) const; 2446103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char* toString(char* buf, int32_t len) const; 2447103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UBool operator==(const CalFields& rhs) const; 2448103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UBool operator!=(const CalFields& rhs) const; 2449fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UBool isEquivalentTo(const Calendar& cal, UErrorCode& status) const; 2450103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2451103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate: 2452103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t year; 2453103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t month; 2454103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t day; 2455103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t hour; 2456103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t min; 2457103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t sec; 2458fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t ms; 2459103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 2460103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2461fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusCalFields::CalFields(int32_t year, int32_t month, int32_t day, int32_t hour, int32_t min, int32_t sec, int32_t ms) 2462fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius : year(year), month(month), day(day), hour(hour), min(min), sec(sec), ms(ms) { 2463103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2464103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2465103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusCalFields::CalFields(const Calendar& cal, UErrorCode& status) { 2466103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius year = cal.get(UCAL_YEAR, status); 2467103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius month = cal.get(UCAL_MONTH, status) + 1; 2468103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius day = cal.get(UCAL_DAY_OF_MONTH, status); 2469103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius hour = cal.get(UCAL_HOUR_OF_DAY, status); 2470103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius min = cal.get(UCAL_MINUTE, status); 2471103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sec = cal.get(UCAL_SECOND, status); 2472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ms = cal.get(UCAL_MILLISECOND, status); 2473103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2474103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2475103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid 2476103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusCalFields::setTo(Calendar& cal) const { 2477103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius cal.clear(); 2478103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius cal.set(year, month - 1, day, hour, min, sec); 2479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius cal.set(UCAL_MILLISECOND, ms); 2480103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2481103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2482103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuschar* 2483103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusCalFields::toString(char* buf, int32_t len) const { 2484103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char local[32]; 2485fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius sprintf(local, "%04d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, min, sec, ms); 2486103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius uprv_strncpy(buf, local, len - 1); 2487103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius buf[len - 1] = 0; 2488103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return buf; 2489103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2490103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2491103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusUBool 2492103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusCalFields::operator==(const CalFields& rhs) const { 2493103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return year == rhs.year 2494103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && month == rhs.month 2495103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && day == rhs.day 2496103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && hour == rhs.hour 2497103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && min == rhs.min 2498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && sec == rhs.sec 2499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && ms == rhs.ms; 2500103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2501103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2502103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusUBool 2503103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusCalFields::operator!=(const CalFields& rhs) const { 2504103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return !(*this == rhs); 2505103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2506103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusUBool 2508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusCalFields::isEquivalentTo(const Calendar& cal, UErrorCode& status) const { 2509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return year == cal.get(UCAL_YEAR, status) 2510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && month == cal.get(UCAL_MONTH, status) + 1 2511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && day == cal.get(UCAL_DAY_OF_MONTH, status) 2512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && hour == cal.get(UCAL_HOUR_OF_DAY, status) 2513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && min == cal.get(UCAL_MINUTE, status) 2514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && sec == cal.get(UCAL_SECOND, status) 2515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius && ms == cal.get(UCAL_MILLISECOND, status); 2516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 2517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 2518103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct { 2519103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char* tzid; 2520103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const CalFields in; 2521103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const CalFields expLastGMT; 2522103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const CalFields expFirstGMT; 2523103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} RepeatedWallTimeTestData; 2524103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2525103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic const RepeatedWallTimeTestData RPDATA[] = 2526103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{ 2527103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // Time zone Input wall time WALLTIME_LAST in GMT WALLTIME_FIRST in GMT 2528103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,11,6,0,59,59), CalFields(2011,11,6,4,59,59), CalFields(2011,11,6,4,59,59)}, 2529103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,11,6,1,0,0), CalFields(2011,11,6,6,0,0), CalFields(2011,11,6,5,0,0)}, 2530103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,11,6,1,0,1), CalFields(2011,11,6,6,0,1), CalFields(2011,11,6,5,0,1)}, 2531103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,11,6,1,30,0), CalFields(2011,11,6,6,30,0), CalFields(2011,11,6,5,30,0)}, 2532103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,11,6,1,59,59), CalFields(2011,11,6,6,59,59), CalFields(2011,11,6,5,59,59)}, 2533103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,11,6,2,0,0), CalFields(2011,11,6,7,0,0), CalFields(2011,11,6,7,0,0)}, 2534103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,11,6,2,0,1), CalFields(2011,11,6,7,0,1), CalFields(2011,11,6,7,0,1)}, 2535103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2536103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Australia/Lord_Howe", CalFields(2011,4,3,1,29,59), CalFields(2011,4,2,14,29,59), CalFields(2011,4,2,14,29,59)}, 2537103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Australia/Lord_Howe", CalFields(2011,4,3,1,30,0), CalFields(2011,4,2,15,0,0), CalFields(2011,4,2,14,30,0)}, 2538103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Australia/Lord_Howe", CalFields(2011,4,3,1,45,0), CalFields(2011,4,2,15,15,0), CalFields(2011,4,2,14,45,0)}, 2539103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Australia/Lord_Howe", CalFields(2011,4,3,1,59,59), CalFields(2011,4,2,15,29,59), CalFields(2011,4,2,14,59,59)}, 2540103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Australia/Lord_Howe", CalFields(2011,4,3,2,0,0), CalFields(2011,4,2,15,30,0), CalFields(2011,4,2,15,30,0)}, 2541103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Australia/Lord_Howe", CalFields(2011,4,3,2,0,1), CalFields(2011,4,2,15,30,1), CalFields(2011,4,2,15,30,1)}, 2542103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2543103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {NULL, CalFields(0,0,0,0,0,0), CalFields(0,0,0,0,0,0), CalFields(0,0,0,0,0,0)} 2544103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 2545103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2546103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid CalendarTest::TestRepeatedWallTime(void) { 2547103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 2548103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calGMT((const TimeZone&)*TimeZone::getGMT(), status); 2549103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calDefault(status); 2550103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calLast(status); 2551103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calFirst(status); 2552103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2553103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2554103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Failed to create a calendar object."); 2555103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 2556103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2557103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2558103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calLast.setRepeatedWallTimeOption(UCAL_WALLTIME_LAST); 2559103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calFirst.setRepeatedWallTimeOption(UCAL_WALLTIME_FIRST); 2560103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2561103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (int32_t i = 0; RPDATA[i].tzid != NULL; i++) { 2562103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char buf[32]; 2563103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TimeZone *tz = TimeZone::createTimeZone(RPDATA[i].tzid); 2564103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2565103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // UCAL_WALLTIME_LAST 2566103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2567103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calLast.setTimeZone(*tz); 2568103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius RPDATA[i].in.setTo(calLast); 2569103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calGMT.setTime(calLast.getTime(status), status); 2570103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CalFields outLastGMT(calGMT, status); 2571103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2572103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_LAST) - ") 2573103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]"); 2574103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 2575103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (outLastGMT != RPDATA[i].expLastGMT) { 2576103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: UCAL_WALLTIME_LAST ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as " 2577103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + outLastGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]"); 2578103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2579103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2580103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2581103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // default 2582103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2583103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calDefault.setTimeZone(*tz); 2584103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius RPDATA[i].in.setTo(calDefault); 2585103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calGMT.setTime(calDefault.getTime(status), status); 2586103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CalFields outDefGMT(calGMT, status); 2587103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2588103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (default) - ") 2589103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]"); 2590103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 2591103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (outDefGMT != RPDATA[i].expLastGMT) { 2592103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: (default) ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as " 2593103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + outDefGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]"); 2594103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2595103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2596103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2597103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // UCAL_WALLTIME_FIRST 2598103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2599103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calFirst.setTimeZone(*tz); 2600103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius RPDATA[i].in.setTo(calFirst); 2601103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calGMT.setTime(calFirst.getTime(status), status); 2602103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CalFields outFirstGMT(calGMT, status); 2603103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2604103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_FIRST) - ") 2605103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "]"); 2606103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 2607103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (outFirstGMT != RPDATA[i].expFirstGMT) { 2608103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: UCAL_WALLTIME_FIRST ") + RPDATA[i].in.toString(buf, sizeof(buf)) + "[" + RPDATA[i].tzid + "] is parsed as " 2609103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + outFirstGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + RPDATA[i].expFirstGMT.toString(buf, sizeof(buf)) + "[GMT]"); 2610103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2611103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2612103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete tz; 2613103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2614103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2615103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2616103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct { 2617103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char* tzid; 2618103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const CalFields in; 2619103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UBool isValid; 2620103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const CalFields expLastGMT; 2621103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const CalFields expFirstGMT; 2622103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const CalFields expNextAvailGMT; 2623103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} SkippedWallTimeTestData; 2624103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2625103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic SkippedWallTimeTestData SKDATA[] = 2626103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{ 2627103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // Time zone Input wall time valid? WALLTIME_LAST in GMT WALLTIME_FIRST in GMT WALLTIME_NEXT_VALID in GMT 2628103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,3,13,1,59,59), TRUE, CalFields(2011,3,13,6,59,59), CalFields(2011,3,13,6,59,59), CalFields(2011,3,13,6,59,59)}, 2629103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,3,13,2,0,0), FALSE, CalFields(2011,3,13,7,0,0), CalFields(2011,3,13,6,0,0), CalFields(2011,3,13,7,0,0)}, 2630103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,3,13,2,1,0), FALSE, CalFields(2011,3,13,7,1,0), CalFields(2011,3,13,6,1,0), CalFields(2011,3,13,7,0,0)}, 2631103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,3,13,2,30,0), FALSE, CalFields(2011,3,13,7,30,0), CalFields(2011,3,13,6,30,0), CalFields(2011,3,13,7,0,0)}, 2632103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,3,13,2,59,59), FALSE, CalFields(2011,3,13,7,59,59), CalFields(2011,3,13,6,59,59), CalFields(2011,3,13,7,0,0)}, 2633103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"America/New_York", CalFields(2011,3,13,3,0,0), TRUE, CalFields(2011,3,13,7,0,0), CalFields(2011,3,13,7,0,0), CalFields(2011,3,13,7,0,0)}, 2634103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Pacific/Apia", CalFields(2011,12,29,23,59,59), TRUE, CalFields(2011,12,30,9,59,59), CalFields(2011,12,30,9,59,59), CalFields(2011,12,30,9,59,59)}, 2636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Pacific/Apia", CalFields(2011,12,30,0,0,0), FALSE, CalFields(2011,12,30,10,0,0), CalFields(2011,12,29,10,0,0), CalFields(2011,12,30,10,0,0)}, 2637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Pacific/Apia", CalFields(2011,12,30,12,0,0), FALSE, CalFields(2011,12,30,22,0,0), CalFields(2011,12,29,22,0,0), CalFields(2011,12,30,10,0,0)}, 2638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Pacific/Apia", CalFields(2011,12,30,23,59,59), FALSE, CalFields(2011,12,31,9,59,59), CalFields(2011,12,30,9,59,59), CalFields(2011,12,30,10,0,0)}, 2639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {"Pacific/Apia", CalFields(2011,12,31,0,0,0), TRUE, CalFields(2011,12,30,10,0,0), CalFields(2011,12,30,10,0,0), CalFields(2011,12,30,10,0,0)}, 2640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius {NULL, CalFields(0,0,0,0,0,0), TRUE, CalFields(0,0,0,0,0,0), CalFields(0,0,0,0,0,0), CalFields(0,0,0,0,0,0)} 2642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 2643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid CalendarTest::TestSkippedWallTime(void) { 2646103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 2647103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calGMT((const TimeZone&)*TimeZone::getGMT(), status); 2648103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calDefault(status); 2649103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calLast(status); 2650103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calFirst(status); 2651103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GregorianCalendar calNextAvail(status); 2652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2654103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Fail: Failed to create a calendar object."); 2655103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 2656103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2657103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2658103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calLast.setSkippedWallTimeOption(UCAL_WALLTIME_LAST); 2659103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calFirst.setSkippedWallTimeOption(UCAL_WALLTIME_FIRST); 2660103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calNextAvail.setSkippedWallTimeOption(UCAL_WALLTIME_NEXT_VALID); 2661103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (int32_t i = 0; SKDATA[i].tzid != NULL; i++) { 2663103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UDate d; 2664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char buf[32]; 2665103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TimeZone *tz = TimeZone::createTimeZone(SKDATA[i].tzid); 2666103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2667103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (int32_t j = 0; j < 2; j++) { 2668103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UBool bLenient = (j == 0); 2669103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2670103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // UCAL_WALLTIME_LAST 2671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calLast.setLenient(bLenient); 2673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calLast.setTimeZone(*tz); 2674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SKDATA[i].in.setTo(calLast); 2675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius d = calLast.getTime(status); 2676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (bLenient || SKDATA[i].isValid) { 2677103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calGMT.setTime(d, status); 2678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CalFields outLastGMT(calGMT, status); 2679103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2680103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Fail: Failed to get/set time calLast/calGMT (UCAL_WALLTIME_LAST) - ") 2681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 2682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 2683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (outLastGMT != SKDATA[i].expLastGMT) { 2684103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: UCAL_WALLTIME_LAST ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as " 2685103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + outLastGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]"); 2686103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2687103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2688103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (U_SUCCESS(status)) { 2689103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // strict, invalid wall time - must report an error 2690103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_LAST)") + 2691103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 2692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2694103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // default 2695103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calDefault.setLenient(bLenient); 2697103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calDefault.setTimeZone(*tz); 2698103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SKDATA[i].in.setTo(calDefault); 2699103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius d = calDefault.getTime(status); 2700103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (bLenient || SKDATA[i].isValid) { 2701103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calGMT.setTime(d, status); 2702103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CalFields outDefGMT(calGMT, status); 2703103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2704103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Fail: Failed to get/set time calDefault/calGMT (default) - ") 2705103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 2706103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 2707103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (outDefGMT != SKDATA[i].expLastGMT) { 2708103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: (default) ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as " 2709103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + outDefGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expLastGMT.toString(buf, sizeof(buf)) + "[GMT]"); 2710103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2711103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2712103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (U_SUCCESS(status)) { 2713103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // strict, invalid wall time - must report an error 2714103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: An error expected (default)") + 2715103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 2716103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2717103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2718103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // UCAL_WALLTIME_FIRST 2719103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2720103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calFirst.setLenient(bLenient); 2721103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calFirst.setTimeZone(*tz); 2722103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SKDATA[i].in.setTo(calFirst); 2723103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius d = calFirst.getTime(status); 2724103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (bLenient || SKDATA[i].isValid) { 2725103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calGMT.setTime(d, status); 2726103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CalFields outFirstGMT(calGMT, status); 2727103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2728103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Fail: Failed to get/set time calFirst/calGMT (UCAL_WALLTIME_FIRST) - ") 2729103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 2730103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 2731103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (outFirstGMT != SKDATA[i].expFirstGMT) { 2732103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: UCAL_WALLTIME_FIRST ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as " 2733103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + outFirstGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expFirstGMT.toString(buf, sizeof(buf)) + "[GMT]"); 2734103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2735103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2736103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (U_SUCCESS(status)) { 2737103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // strict, invalid wall time - must report an error 2738103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_FIRST)") + 2739103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 2740103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2741103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2742103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // UCAL_WALLTIME_NEXT_VALID 2743103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2744103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calNextAvail.setLenient(bLenient); 2745103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calNextAvail.setTimeZone(*tz); 2746103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SKDATA[i].in.setTo(calNextAvail); 2747103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius d = calNextAvail.getTime(status); 2748103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (bLenient || SKDATA[i].isValid) { 2749103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius calGMT.setTime(d, status); 2750103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CalFields outNextAvailGMT(calGMT, status); 2751103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2752103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Fail: Failed to get/set time calNextAvail/calGMT (UCAL_WALLTIME_NEXT_VALID) - ") 2753103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 2754103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 2755103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (outNextAvailGMT != SKDATA[i].expNextAvailGMT) { 2756103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: UCAL_WALLTIME_NEXT_VALID ") + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "] is parsed as " 2757103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + outNextAvailGMT.toString(buf, sizeof(buf)) + "[GMT]. Expected: " + SKDATA[i].expNextAvailGMT.toString(buf, sizeof(buf)) + "[GMT]"); 2758103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2759103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2760103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (U_SUCCESS(status)) { 2761103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // strict, invalid wall time - must report an error 2762103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln(UnicodeString("Fail: An error expected (UCAL_WALLTIME_NEXT_VALID)") + 2763103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius + SKDATA[i].in.toString(buf, sizeof(buf)) + "[" + SKDATA[i].tzid + "]"); 2764103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2765103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2766103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2767103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete tz; 2768103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2769103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2770103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2771103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid CalendarTest::TestCloneLocale(void) { 2772103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 2773103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<Calendar> cal(Calendar::createInstance(TimeZone::getGMT()->clone(), 2774103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale::createFromName("en"), status)); 2775103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_CHECK_STATUS; 2776103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale l0 = cal->getLocale(ULOC_VALID_LOCALE, status); 2777103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_CHECK_STATUS; 2778103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<Calendar> cal2(cal->clone()); 2779103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale l = cal2->getLocale(ULOC_VALID_LOCALE, status); 2780103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(l0!=l) { 2781103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Error: cloned locale %s != original locale %s, status %s\n", l0.getName(), l.getName(), u_errorName(status)); 2782103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2783103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_CHECK_STATUS; 2784103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2785103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 278659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid CalendarTest::setAndTestCalendar(Calendar* cal, int32_t initMonth, int32_t initDay, int32_t initYear, UErrorCode& status) { 278759d709d503bab6e2b61931737e662dd293b40578ccornelius cal->clear(); 278859d709d503bab6e2b61931737e662dd293b40578ccornelius cal->setLenient(FALSE); 278959d709d503bab6e2b61931737e662dd293b40578ccornelius cal->set(initYear, initMonth, initDay); 279059d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t day = cal->get(UCAL_DAY_OF_MONTH, status); 279159d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t month = cal->get(UCAL_MONTH, status); 279259d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t year = cal->get(UCAL_YEAR, status); 279359d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_FAILURE(status)) 279459d709d503bab6e2b61931737e662dd293b40578ccornelius return; 279559d709d503bab6e2b61931737e662dd293b40578ccornelius 279659d709d503bab6e2b61931737e662dd293b40578ccornelius if(initDay != day || initMonth != month || initYear != year) 279759d709d503bab6e2b61931737e662dd293b40578ccornelius { 279859d709d503bab6e2b61931737e662dd293b40578ccornelius errln(" year init values:\tmonth %i\tday %i\tyear %i", initMonth, initDay, initYear); 279959d709d503bab6e2b61931737e662dd293b40578ccornelius errln("values post set():\tmonth %i\tday %i\tyear %i",month, day, year); 280059d709d503bab6e2b61931737e662dd293b40578ccornelius } 280159d709d503bab6e2b61931737e662dd293b40578ccornelius} 280259d709d503bab6e2b61931737e662dd293b40578ccornelius 280359d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid CalendarTest::setAndTestWholeYear(Calendar* cal, int32_t startYear, UErrorCode& status) { 280459d709d503bab6e2b61931737e662dd293b40578ccornelius for(int32_t startMonth = 0; startMonth < 12; startMonth++) { 280559d709d503bab6e2b61931737e662dd293b40578ccornelius for(int32_t startDay = 1; startDay < 31; startDay++ ) { 280659d709d503bab6e2b61931737e662dd293b40578ccornelius setAndTestCalendar(cal, startMonth, startDay, startYear, status); 280759d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_FAILURE(status) && startDay == 30) { 280859d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 280959d709d503bab6e2b61931737e662dd293b40578ccornelius continue; 281059d709d503bab6e2b61931737e662dd293b40578ccornelius } 281159d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 281259d709d503bab6e2b61931737e662dd293b40578ccornelius } 281359d709d503bab6e2b61931737e662dd293b40578ccornelius } 281459d709d503bab6e2b61931737e662dd293b40578ccornelius} 28151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 28161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// ===================================================================== 281759d709d503bab6e2b61931737e662dd293b40578ccornelius 28181b7d32f919554dda9c193b32188251337bc756f1Fredrik Rouberttypedef struct { 28191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int16_t gYear; 28201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int8_t gMon; 28211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int8_t gDay; 28221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int16_t uYear; 28231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int8_t uMon; 28241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int8_t uDay; 28251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} GregoUmmAlQuraMap; 28261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 28271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// data from 28281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// Official Umm-al-Qura calendar of SA: 28291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// home, http://www.ummulqura.org.sa/default.aspx 28301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// converter, http://www.ummulqura.org.sa/Index.aspx 28311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertstatic const GregoUmmAlQuraMap guMappings[] = { 28321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// gregorian, ummAlQura 28331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// year mo da, year mo da 28341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// (using 1-based months here) 28351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1882,11,12, 1300, 1, 1 }, 28361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1892, 7,25, 1310, 1, 1 }, 28371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1896, 6,12, 1314, 1, 1 }, 28381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1898, 5,22, 1316, 1, 1 }, 28391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1900, 4,30, 1318, 1, 1 }, 28401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1901, 4,20, 1319, 1, 1 }, 28411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1902, 4,10, 1320, 1, 1 }, 28421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1903, 3,30, 1321, 1, 1 }, 28431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1904, 3,19, 1322, 1, 1 }, 28441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1905, 3, 8, 1323, 1, 1 }, 28451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1906, 2,25, 1324, 1, 1 }, 28461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1907, 2,14, 1325, 1, 1 }, 28471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1908, 2, 4, 1326, 1, 1 }, 28481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1909, 1,23, 1327, 1, 1 }, 28491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1910, 1,13, 1328, 1, 1 }, 28501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1911, 1, 2, 1329, 1, 1 }, 28511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1911,12,22, 1330, 1, 1 }, 28521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1912,12,10, 1331, 1, 1 }, 28531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1913,11,30, 1332, 1, 1 }, 28541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1914,11,19, 1333, 1, 1 }, 28551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1915,11, 9, 1334, 1, 1 }, 28561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1916,10,28, 1335, 1, 1 }, 28571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1917,10,18, 1336, 1, 1 }, 28581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1918,10, 7, 1337, 1, 1 }, 28591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1919, 9,26, 1338, 1, 1 }, 28601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1920, 9,14, 1339, 1, 1 }, 28611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1921, 9, 4, 1340, 1, 1 }, 28621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1922, 8,24, 1341, 1, 1 }, 28631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1923, 8,14, 1342, 1, 1 }, 28641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1924, 8, 2, 1343, 1, 1 }, 28651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1925, 7,22, 1344, 1, 1 }, 28661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1926, 7,11, 1345, 1, 1 }, 28671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1927, 6,30, 1346, 1, 1 }, 28681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1928, 6,19, 1347, 1, 1 }, 28691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1929, 6, 9, 1348, 1, 1 }, 28701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1930, 5,29, 1349, 1, 1 }, 28711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1931, 5,19, 1350, 1, 1 }, 28721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1932, 5, 7, 1351, 1, 1 }, 28731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1933, 4,26, 1352, 1, 1 }, 28741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1934, 4,15, 1353, 1, 1 }, 28751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1935, 4, 5, 1354, 1, 1 }, 28761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1936, 3,24, 1355, 1, 1 }, 28771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1937, 3,14, 1356, 1, 1 }, 28781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1938, 3, 4, 1357, 1, 1 }, 28791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1939, 2,21, 1358, 1, 1 }, 28801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1940, 2,10, 1359, 1, 1 }, 28811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1941, 1,29, 1360, 1, 1 }, 28821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1942, 1,18, 1361, 1, 1 }, 28831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1943, 1, 8, 1362, 1, 1 }, 28841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1943,12,28, 1363, 1, 1 }, 28851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1944,12,17, 1364, 1, 1 }, 28861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1945,12, 6, 1365, 1, 1 }, 28871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1946,11,25, 1366, 1, 1 }, 28881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1947,11,14, 1367, 1, 1 }, 28891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1948,11, 3, 1368, 1, 1 }, 28901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1949,10,23, 1369, 1, 1 }, 28911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1950,10,13, 1370, 1, 1 }, 28921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1951,10, 3, 1371, 1, 1 }, 28931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1952, 9,21, 1372, 1, 1 }, 28941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1953, 9,10, 1373, 1, 1 }, 28951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1954, 8,30, 1374, 1, 1 }, 28961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1955, 8,19, 1375, 1, 1 }, 28971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1956, 8, 8, 1376, 1, 1 }, 28981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1957, 7,29, 1377, 1, 1 }, 28991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1958, 7,18, 1378, 1, 1 }, 29001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1959, 7, 8, 1379, 1, 1 }, 29011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1960, 6,26, 1380, 1, 1 }, 29021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1961, 6,15, 1381, 1, 1 }, 29031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1962, 6, 4, 1382, 1, 1 }, 29041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1963, 5,24, 1383, 1, 1 }, 29051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1964, 5,13, 1384, 1, 1 }, 29061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1965, 5, 3, 1385, 1, 1 }, 29071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1966, 4,22, 1386, 1, 1 }, 29081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1967, 4,11, 1387, 1, 1 }, 29091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1968, 3,30, 1388, 1, 1 }, 29101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1969, 3,19, 1389, 1, 1 }, 29111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1970, 3, 9, 1390, 1, 1 }, 29121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1971, 2,27, 1391, 1, 1 }, 29131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1972, 2,16, 1392, 1, 1 }, 29141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1973, 2, 5, 1393, 1, 1 }, 29151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1974, 1,25, 1394, 1, 1 }, 29161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1975, 1,14, 1395, 1, 1 }, 29171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1976, 1, 3, 1396, 1, 1 }, 29181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1976,12,22, 1397, 1, 1 }, 29191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1977,12,12, 1398, 1, 1 }, 29201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1978,12, 1, 1399, 1, 1 }, 29211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1979,11,21, 1400, 1, 1 }, 29221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1980,11, 9, 1401, 1, 1 }, 29231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1981,10,29, 1402, 1, 1 }, 29241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1982,10,18, 1403, 1, 1 }, 29251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1983,10, 8, 1404, 1, 1 }, 29261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1984, 9,26, 1405, 1, 1 }, 29271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1985, 9,16, 1406, 1, 1 }, 29281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1986, 9, 6, 1407, 1, 1 }, 29291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1987, 8,26, 1408, 1, 1 }, 29301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1988, 8,14, 1409, 1, 1 }, 29311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1989, 8, 3, 1410, 1, 1 }, 29321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1990, 7,23, 1411, 1, 1 }, 29331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1991, 7,13, 1412, 1, 1 }, 29341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1992, 7, 2, 1413, 1, 1 }, 29351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1993, 6,21, 1414, 1, 1 }, 29361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1994, 6,11, 1415, 1, 1 }, 29371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1995, 5,31, 1416, 1, 1 }, 29381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1996, 5,19, 1417, 1, 1 }, 29391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1997, 5, 8, 1418, 1, 1 }, 29401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1998, 4,28, 1419, 1, 1 }, 29411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999, 4,17, 1420, 1, 1 }, 29421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999, 5,16, 1420, 2, 1 }, 29431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999, 6,15, 1420, 3, 1 }, 29441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999, 7,14, 1420, 4, 1 }, 29451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999, 8,12, 1420, 5, 1 }, 29461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999, 9,11, 1420, 6, 1 }, 29471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999,10,10, 1420, 7, 1 }, 29481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999,11, 9, 1420, 8, 1 }, 29491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 1999,12, 9, 1420, 9, 1 }, 29501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 1, 8, 1420,10, 1 }, 29511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 2, 7, 1420,11, 1 }, 29521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 3, 7, 1420,12, 1 }, 29531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 4, 6, 1421, 1, 1 }, 29541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 5, 5, 1421, 2, 1 }, 29551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 6, 3, 1421, 3, 1 }, 29561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 7, 3, 1421, 4, 1 }, 29571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 8, 1, 1421, 5, 1 }, 29581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 8,30, 1421, 6, 1 }, 29591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000, 9,28, 1421, 7, 1 }, 29601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000,10,28, 1421, 8, 1 }, 29611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000,11,27, 1421, 9, 1 }, 29621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2000,12,27, 1421,10, 1 }, 29631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 1,26, 1421,11, 1 }, 29641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 2,24, 1421,12, 1 }, 29651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 3,26, 1422, 1, 1 }, 29661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 4,25, 1422, 2, 1 }, 29671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 5,24, 1422, 3, 1 }, 29681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 6,22, 1422, 4, 1 }, 29691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 7,22, 1422, 5, 1 }, 29701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 8,20, 1422, 6, 1 }, 29711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001, 9,18, 1422, 7, 1 }, 29721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001,10,17, 1422, 8, 1 }, 29731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001,11,16, 1422, 9, 1 }, 29741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2001,12,16, 1422,10, 1 }, 29751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 1,15, 1422,11, 1 }, 29761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 2,13, 1422,12, 1 }, 29771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 3,15, 1423, 1, 1 }, 29781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 4,14, 1423, 2, 1 }, 29791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 5,13, 1423, 3, 1 }, 29801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 6,12, 1423, 4, 1 }, 29811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 7,11, 1423, 5, 1 }, 29821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 8,10, 1423, 6, 1 }, 29831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002, 9, 8, 1423, 7, 1 }, 29841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002,10, 7, 1423, 8, 1 }, 29851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002,11, 6, 1423, 9, 1 }, 29861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2002,12, 5, 1423,10, 1 }, 29871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 1, 4, 1423,11, 1 }, 29881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 2, 2, 1423,12, 1 }, 29891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 3, 4, 1424, 1, 1 }, 29901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 4, 3, 1424, 2, 1 }, 29911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 5, 2, 1424, 3, 1 }, 29921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 6, 1, 1424, 4, 1 }, 29931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 7, 1, 1424, 5, 1 }, 29941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 7,30, 1424, 6, 1 }, 29951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 8,29, 1424, 7, 1 }, 29961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003, 9,27, 1424, 8, 1 }, 29971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003,10,26, 1424, 9, 1 }, 29981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003,11,25, 1424,10, 1 }, 29991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2003,12,24, 1424,11, 1 }, 30001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 1,23, 1424,12, 1 }, 30011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 2,21, 1425, 1, 1 }, 30021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 3,22, 1425, 2, 1 }, 30031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 4,20, 1425, 3, 1 }, 30041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 5,20, 1425, 4, 1 }, 30051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 6,19, 1425, 5, 1 }, 30061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 7,18, 1425, 6, 1 }, 30071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 8,17, 1425, 7, 1 }, 30081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004, 9,15, 1425, 8, 1 }, 30091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004,10,15, 1425, 9, 1 }, 30101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004,11,14, 1425,10, 1 }, 30111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2004,12,13, 1425,11, 1 }, 30121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 1,12, 1425,12, 1 }, 30131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 2,10, 1426, 1, 1 }, 30141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 3,11, 1426, 2, 1 }, 30151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 4,10, 1426, 3, 1 }, 30161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 5, 9, 1426, 4, 1 }, 30171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 6, 8, 1426, 5, 1 }, 30181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 7, 7, 1426, 6, 1 }, 30191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 8, 6, 1426, 7, 1 }, 30201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005, 9, 5, 1426, 8, 1 }, 30211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005,10, 4, 1426, 9, 1 }, 30221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005,11, 3, 1426,10, 1 }, 30231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2005,12, 3, 1426,11, 1 }, 30241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 1, 1, 1426,12, 1 }, 30251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 1,31, 1427, 1, 1 }, 30261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 3, 1, 1427, 2, 1 }, 30271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 3,30, 1427, 3, 1 }, 30281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 4,29, 1427, 4, 1 }, 30291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 5,28, 1427, 5, 1 }, 30301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 6,27, 1427, 6, 1 }, 30311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 7,26, 1427, 7, 1 }, 30321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 8,25, 1427, 8, 1 }, 30331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006, 9,24, 1427, 9, 1 }, 30341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006,10,23, 1427,10, 1 }, 30351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006,11,22, 1427,11, 1 }, 30361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2006,12,22, 1427,12, 1 }, 30371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 1,20, 1428, 1, 1 }, 30381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 2,19, 1428, 2, 1 }, 30391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 3,20, 1428, 3, 1 }, 30401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 4,18, 1428, 4, 1 }, 30411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 5,18, 1428, 5, 1 }, 30421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 6,16, 1428, 6, 1 }, 30431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 7,15, 1428, 7, 1 }, 30441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 8,14, 1428, 8, 1 }, 30451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007, 9,13, 1428, 9, 1 }, 30461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007,10,13, 1428,10, 1 }, 30471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007,11,11, 1428,11, 1 }, 30481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2007,12,11, 1428,12, 1 }, 30491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 1,10, 1429, 1, 1 }, 30501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 2, 8, 1429, 2, 1 }, 30511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 3, 9, 1429, 3, 1 }, 30521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 4, 7, 1429, 4, 1 }, 30531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 5, 6, 1429, 5, 1 }, 30541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 6, 5, 1429, 6, 1 }, 30551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 7, 4, 1429, 7, 1 }, 30561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 8, 2, 1429, 8, 1 }, 30571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008, 9, 1, 1429, 9, 1 }, 30581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008,10, 1, 1429,10, 1 }, 30591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008,10,30, 1429,11, 1 }, 30601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008,11,29, 1429,12, 1 }, 30611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2008,12,29, 1430, 1, 1 }, 30621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 1,27, 1430, 2, 1 }, 30631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 2,26, 1430, 3, 1 }, 30641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 3,28, 1430, 4, 1 }, 30651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 4,26, 1430, 5, 1 }, 30661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 5,25, 1430, 6, 1 }, 30671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 6,24, 1430, 7, 1 }, 30681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 7,23, 1430, 8, 1 }, 30691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 8,22, 1430, 9, 1 }, 30701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009, 9,20, 1430,10, 1 }, 30711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009,10,20, 1430,11, 1 }, 30721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009,11,18, 1430,12, 1 }, 30731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2009,12,18, 1431, 1, 1 }, 30741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 1,16, 1431, 2, 1 }, 30751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 2,15, 1431, 3, 1 }, 30761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 3,17, 1431, 4, 1 }, 30771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 4,15, 1431, 5, 1 }, 30781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 5,15, 1431, 6, 1 }, 30791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 6,13, 1431, 7, 1 }, 30801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 7,13, 1431, 8, 1 }, 30811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 8,11, 1431, 9, 1 }, 30821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010, 9,10, 1431,10, 1 }, 30831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010,10, 9, 1431,11, 1 }, 30841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010,11, 7, 1431,12, 1 }, 30851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2010,12, 7, 1432, 1, 1 }, 30861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 1, 5, 1432, 2, 1 }, 30871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 2, 4, 1432, 3, 1 }, 30881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 3, 6, 1432, 4, 1 }, 30891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 4, 5, 1432, 5, 1 }, 30901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 5, 4, 1432, 6, 1 }, 30911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 6, 3, 1432, 7, 1 }, 30921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 7, 2, 1432, 8, 1 }, 30931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 8, 1, 1432, 9, 1 }, 30941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 8,30, 1432,10, 1 }, 30951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011, 9,29, 1432,11, 1 }, 30961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011,10,28, 1432,12, 1 }, 30971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011,11,26, 1433, 1, 1 }, 30981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2011,12,26, 1433, 2, 1 }, 30991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 1,24, 1433, 3, 1 }, 31001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 2,23, 1433, 4, 1 }, 31011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 3,24, 1433, 5, 1 }, 31021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 4,22, 1433, 6, 1 }, 31031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 5,22, 1433, 7, 1 }, 31041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 6,21, 1433, 8, 1 }, 31051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 7,20, 1433, 9, 1 }, 31061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 8,19, 1433,10, 1 }, 31071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012, 9,17, 1433,11, 1 }, 31081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012,10,17, 1433,12, 1 }, 31091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012,11,15, 1434, 1, 1 }, 31101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2012,12,14, 1434, 2, 1 }, 31111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 1,13, 1434, 3, 1 }, 31121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 2,11, 1434, 4, 1 }, 31131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 3,13, 1434, 5, 1 }, 31141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 4,11, 1434, 6, 1 }, 31151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 5,11, 1434, 7, 1 }, 31161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 6,10, 1434, 8, 1 }, 31171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 7, 9, 1434, 9, 1 }, 31181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 8, 8, 1434,10, 1 }, 31191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013, 9, 7, 1434,11, 1 }, 31201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013,10, 6, 1434,12, 1 }, 31211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013,11, 4, 1435, 1, 1 }, 31221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2013,12, 4, 1435, 2, 1 }, 31231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 1, 2, 1435, 3, 1 }, 31241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 2, 1, 1435, 4, 1 }, 31251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 3, 2, 1435, 5, 1 }, 31261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 4, 1, 1435, 6, 1 }, 31271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 4,30, 1435, 7, 1 }, 31281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 5,30, 1435, 8, 1 }, 31291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 6,28, 1435, 9, 1 }, 31301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 7,28, 1435,10, 1 }, 31311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 8,27, 1435,11, 1 }, 31321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014, 9,25, 1435,12, 1 }, 31331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014,10,25, 1436, 1, 1 }, 31341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014,11,23, 1436, 2, 1 }, 31351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2014,12,23, 1436, 3, 1 }, 31361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 1,21, 1436, 4, 1 }, 31371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 2,20, 1436, 5, 1 }, 31381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 3,21, 1436, 6, 1 }, 31391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 4,20, 1436, 7, 1 }, 31401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 5,19, 1436, 8, 1 }, 31411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 6,18, 1436, 9, 1 }, 31421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 7,17, 1436,10, 1 }, 31431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 8,16, 1436,11, 1 }, 31441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015, 9,14, 1436,12, 1 }, 31451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015,10,14, 1437, 1, 1 }, 31461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015,11,13, 1437, 2, 1 }, 31471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2015,12,12, 1437, 3, 1 }, 31481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 1,11, 1437, 4, 1 }, 31491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 2,10, 1437, 5, 1 }, 31501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 3,10, 1437, 6, 1 }, 31511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 4, 8, 1437, 7, 1 }, 31521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 5, 8, 1437, 8, 1 }, 31531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 6, 6, 1437, 9, 1 }, 31541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 7, 6, 1437,10, 1 }, 31551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 8, 4, 1437,11, 1 }, 31561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016, 9, 2, 1437,12, 1 }, 31571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016,10, 2, 1438, 1, 1 }, 31581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016,11, 1, 1438, 2, 1 }, 31591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016,11,30, 1438, 3, 1 }, 31601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2016,12,30, 1438, 4, 1 }, 31611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 1,29, 1438, 5, 1 }, 31621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 2,28, 1438, 6, 1 }, 31631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 3,29, 1438, 7, 1 }, 31641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 4,27, 1438, 8, 1 }, 31651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 5,27, 1438, 9, 1 }, 31661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 6,25, 1438,10, 1 }, 31671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 7,24, 1438,11, 1 }, 31681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 8,23, 1438,12, 1 }, 31691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017, 9,21, 1439, 1, 1 }, 31701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017,10,21, 1439, 2, 1 }, 31711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017,11,19, 1439, 3, 1 }, 31721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2017,12,19, 1439, 4, 1 }, 31731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 1,18, 1439, 5, 1 }, 31741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 2,17, 1439, 6, 1 }, 31751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 3,18, 1439, 7, 1 }, 31761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 4,17, 1439, 8, 1 }, 31771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 5,16, 1439, 9, 1 }, 31781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 6,15, 1439,10, 1 }, 31791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 7,14, 1439,11, 1 }, 31801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 8,12, 1439,12, 1 }, 31811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2018, 9,11, 1440, 1, 1 }, 31821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2019, 8,31, 1441, 1, 1 }, 31831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2020, 8,20, 1442, 1, 1 }, 31841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2021, 8, 9, 1443, 1, 1 }, 31851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2022, 7,30, 1444, 1, 1 }, 31861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2023, 7,19, 1445, 1, 1 }, 31871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2024, 7, 7, 1446, 1, 1 }, 31881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2025, 6,26, 1447, 1, 1 }, 31891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2026, 6,16, 1448, 1, 1 }, 31901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2027, 6, 6, 1449, 1, 1 }, 31911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2028, 5,25, 1450, 1, 1 }, 31921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2029, 5,14, 1451, 1, 1 }, 31931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2030, 5, 4, 1452, 1, 1 }, 31941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2031, 4,23, 1453, 1, 1 }, 31951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2032, 4,11, 1454, 1, 1 }, 31961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2033, 4, 1, 1455, 1, 1 }, 31971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2034, 3,22, 1456, 1, 1 }, 31981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2035, 3,11, 1457, 1, 1 }, 31991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2036, 2,29, 1458, 1, 1 }, 32001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2037, 2,17, 1459, 1, 1 }, 32011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2038, 2, 6, 1460, 1, 1 }, 32021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2039, 1,26, 1461, 1, 1 }, 32031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2040, 1,15, 1462, 1, 1 }, 32041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2041, 1, 4, 1463, 1, 1 }, 32051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2041,12,25, 1464, 1, 1 }, 32061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2042,12,14, 1465, 1, 1 }, 32071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2043,12, 3, 1466, 1, 1 }, 32081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2044,11,21, 1467, 1, 1 }, 32091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2045,11,11, 1468, 1, 1 }, 32101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2046,10,31, 1469, 1, 1 }, 32111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2047,10,21, 1470, 1, 1 }, 32121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2048,10, 9, 1471, 1, 1 }, 32131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2049, 9,29, 1472, 1, 1 }, 32141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2050, 9,18, 1473, 1, 1 }, 32151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2051, 9, 7, 1474, 1, 1 }, 32161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2052, 8,26, 1475, 1, 1 }, 32171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2053, 8,15, 1476, 1, 1 }, 32181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2054, 8, 5, 1477, 1, 1 }, 32191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2055, 7,26, 1478, 1, 1 }, 32201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2056, 7,14, 1479, 1, 1 }, 32211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2057, 7, 3, 1480, 1, 1 }, 32221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2058, 6,22, 1481, 1, 1 }, 32231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2059, 6,11, 1482, 1, 1 }, 32241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2061, 5,21, 1484, 1, 1 }, 32251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2063, 4,30, 1486, 1, 1 }, 32261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2065, 4, 7, 1488, 1, 1 }, 32271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2067, 3,17, 1490, 1, 1 }, 32281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2069, 2,23, 1492, 1, 1 }, 32291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2071, 2, 2, 1494, 1, 1 }, 32301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2073, 1,10, 1496, 1, 1 }, 32311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2074,12,20, 1498, 1, 1 }, 32321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 2076,11,28, 1500, 1, 1 }, 32331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { 0, 0, 0, 0, 0, 0 }, // terminator 32341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert}; 32351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 32361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertstatic const UChar zoneSA[] = {0x41,0x73,0x69,0x61,0x2F,0x52,0x69,0x79,0x61,0x64,0x68,0}; // "Asia/Riyadh" 32371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 323859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid CalendarTest::TestIslamicUmAlQura() { 323959d709d503bab6e2b61931737e662dd293b40578ccornelius 324059d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 32411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Locale umalquraLoc("ar_SA@calendar=islamic-umalqura"); 32421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Locale gregoLoc("ar_SA@calendar=gregorian"); 32431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert TimeZone* tzSA = TimeZone::createTimeZone(UnicodeString(TRUE, zoneSA, -1)); 32441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Calendar* tstCal = Calendar::createInstance(*((const TimeZone *)tzSA), umalquraLoc, status); 32451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Calendar* gregCal = Calendar::createInstance(*((const TimeZone *)tzSA), gregoLoc, status); 3246fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 324759d709d503bab6e2b61931737e662dd293b40578ccornelius IslamicCalendar* iCal = (IslamicCalendar*)tstCal; 324859d709d503bab6e2b61931737e662dd293b40578ccornelius if(strcmp(iCal->getType(), "islamic-umalqura") != 0) { 324959d709d503bab6e2b61931737e662dd293b40578ccornelius errln("wrong type of calendar created - %s", iCal->getType()); 325059d709d503bab6e2b61931737e662dd293b40578ccornelius } 325159d709d503bab6e2b61931737e662dd293b40578ccornelius 325259d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t firstYear = 1318; 325359d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t lastYear = 1368; // just enough to be pretty sure 325459d709d503bab6e2b61931737e662dd293b40578ccornelius //int32_t lastYear = 1480; // the whole shootin' match 325559d709d503bab6e2b61931737e662dd293b40578ccornelius 325659d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal->clear(); 325759d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal->setLenient(FALSE); 325859d709d503bab6e2b61931737e662dd293b40578ccornelius 325959d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t day=0, month=0, year=0, initDay = 27, initMonth = IslamicCalendar::RAJAB, initYear = 1434; 326059d709d503bab6e2b61931737e662dd293b40578ccornelius 326159d709d503bab6e2b61931737e662dd293b40578ccornelius for( int32_t startYear = firstYear; startYear <= lastYear; startYear++) { 326259d709d503bab6e2b61931737e662dd293b40578ccornelius setAndTestWholeYear(tstCal, startYear, status); 326359d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 326459d709d503bab6e2b61931737e662dd293b40578ccornelius } 326559d709d503bab6e2b61931737e662dd293b40578ccornelius 326659d709d503bab6e2b61931737e662dd293b40578ccornelius initMonth = IslamicCalendar::RABI_2; 326759d709d503bab6e2b61931737e662dd293b40578ccornelius initDay = 5; 326859d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t loopCnt = 25; 326959d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal->clear(); 327059d709d503bab6e2b61931737e662dd293b40578ccornelius setAndTestCalendar( tstCal, initMonth, initDay, initYear, status); 327159d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 327259d709d503bab6e2b61931737e662dd293b40578ccornelius 327359d709d503bab6e2b61931737e662dd293b40578ccornelius for(int x=1; x<=loopCnt; x++) { 327459d709d503bab6e2b61931737e662dd293b40578ccornelius day = tstCal->get(UCAL_DAY_OF_MONTH,status); 327559d709d503bab6e2b61931737e662dd293b40578ccornelius month = tstCal->get(UCAL_MONTH,status); 327659d709d503bab6e2b61931737e662dd293b40578ccornelius year = tstCal->get(UCAL_YEAR,status); 327759d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 327859d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal->roll(UCAL_DAY_OF_MONTH, (UBool)TRUE, status); 327959d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 328059d709d503bab6e2b61931737e662dd293b40578ccornelius } 328159d709d503bab6e2b61931737e662dd293b40578ccornelius 328259d709d503bab6e2b61931737e662dd293b40578ccornelius if(day != (initDay + loopCnt - 1) || month != IslamicCalendar::RABI_2 || year != 1434) 328359d709d503bab6e2b61931737e662dd293b40578ccornelius errln("invalid values for RABI_2 date after roll of %d", loopCnt); 328459d709d503bab6e2b61931737e662dd293b40578ccornelius 328559d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 328659d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal->clear(); 328759d709d503bab6e2b61931737e662dd293b40578ccornelius initMonth = 2; 328859d709d503bab6e2b61931737e662dd293b40578ccornelius initDay = 30; 328959d709d503bab6e2b61931737e662dd293b40578ccornelius setAndTestCalendar( tstCal, initMonth, initDay, initYear, status); 329059d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_SUCCESS(status)) { 329159d709d503bab6e2b61931737e662dd293b40578ccornelius errln("error NOT detected status %i",status); 329259d709d503bab6e2b61931737e662dd293b40578ccornelius errln(" init values:\tmonth %i\tday %i\tyear %i", initMonth, initDay, initYear); 329359d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t day = tstCal->get(UCAL_DAY_OF_MONTH, status); 329459d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t month = tstCal->get(UCAL_MONTH, status); 329559d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t year = tstCal->get(UCAL_YEAR, status); 329659d709d503bab6e2b61931737e662dd293b40578ccornelius errln("values post set():\tmonth %i\tday %i\tyear %i",month, day, year); 329759d709d503bab6e2b61931737e662dd293b40578ccornelius } 329859d709d503bab6e2b61931737e662dd293b40578ccornelius 329959d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 330059d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal->clear(); 330159d709d503bab6e2b61931737e662dd293b40578ccornelius initMonth = 3; 330259d709d503bab6e2b61931737e662dd293b40578ccornelius initDay = 30; 330359d709d503bab6e2b61931737e662dd293b40578ccornelius setAndTestCalendar( tstCal, initMonth, initDay, initYear, status); 330459d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 330559d709d503bab6e2b61931737e662dd293b40578ccornelius 330659d709d503bab6e2b61931737e662dd293b40578ccornelius SimpleDateFormat* formatter = new SimpleDateFormat("yyyy-MM-dd", Locale::getUS(), status); 330759d709d503bab6e2b61931737e662dd293b40578ccornelius UDate date = formatter->parse("1975-05-06", status); 33081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert Calendar* is_cal = Calendar::createInstance(umalquraLoc, status); 330959d709d503bab6e2b61931737e662dd293b40578ccornelius is_cal->setTime(date, status); 331059d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t is_day = is_cal->get(UCAL_DAY_OF_MONTH,status); 331159d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t is_month = is_cal->get(UCAL_MONTH,status); 331259d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t is_year = is_cal->get(UCAL_YEAR,status); 331359d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 3314f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(is_day != 24 || is_month != IslamicCalendar::RABI_2 || is_year != 1395) 3315f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln("unexpected conversion date month %i not %i or day %i not 24 or year %i not 1395", is_month, IslamicCalendar::RABI_2, is_day, is_year); 331659d709d503bab6e2b61931737e662dd293b40578ccornelius 331759d709d503bab6e2b61931737e662dd293b40578ccornelius UDate date2 = is_cal->getTime(status); 331859d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 331959d709d503bab6e2b61931737e662dd293b40578ccornelius if(date2 != date) { 332059d709d503bab6e2b61931737e662dd293b40578ccornelius errln("before(%f) and after(%f) dates don't match up!",date, date2); 332159d709d503bab6e2b61931737e662dd293b40578ccornelius } 33221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 33231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert // check against data 33241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const GregoUmmAlQuraMap* guMapPtr; 33251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert gregCal->clear(); 33261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert tstCal->clear(); 33271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for (guMapPtr = guMappings; guMapPtr->gYear != 0; guMapPtr++) { 33281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert status = U_ZERO_ERROR; 33291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert gregCal->set(guMapPtr->gYear, guMapPtr->gMon - 1, guMapPtr->gDay, 12, 0); 33301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert date = gregCal->getTime(status); 33311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert tstCal->setTime(date, status); 33321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t uYear = tstCal->get(UCAL_YEAR, status); 33331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t uMon = tstCal->get(UCAL_MONTH, status) + 1; 33341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t uDay = tstCal->get(UCAL_DATE, status); 33351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if(U_FAILURE(status)) { 33361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("For gregorian %4d-%02d-%02d, get status %s", 33371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert guMapPtr->gYear, guMapPtr->gMon, guMapPtr->gDay, u_errorName(status) ); 33381b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else if (uYear != guMapPtr->uYear || uMon != guMapPtr->uMon || uDay != guMapPtr->uDay) { 33391b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("For gregorian %4d-%02d-%02d, expect umalqura %4d-%02d-%02d, get %4d-%02d-%02d", 33401b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert guMapPtr->gYear, guMapPtr->gMon, guMapPtr->gDay, 33411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert guMapPtr->uYear, guMapPtr->uMon, guMapPtr->uDay, uYear, uMon, uDay ); 33421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 33431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 334459d709d503bab6e2b61931737e662dd293b40578ccornelius 334559d709d503bab6e2b61931737e662dd293b40578ccornelius delete is_cal; 334659d709d503bab6e2b61931737e662dd293b40578ccornelius delete formatter; 33471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete gregCal; 334859d709d503bab6e2b61931737e662dd293b40578ccornelius delete tstCal; 33491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete tzSA; 335059d709d503bab6e2b61931737e662dd293b40578ccornelius} 335159d709d503bab6e2b61931737e662dd293b40578ccornelius 335259d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid CalendarTest::TestIslamicTabularDates() { 335359d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 335459d709d503bab6e2b61931737e662dd293b40578ccornelius Locale islamicLoc("ar_SA@calendar=islamic-civil"); 335559d709d503bab6e2b61931737e662dd293b40578ccornelius Locale tblaLoc("ar_SA@calendar=islamic-tbla"); 3356fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius SimpleDateFormat* formatter = new SimpleDateFormat("yyyy-MM-dd", Locale::getUS(), status); 335759d709d503bab6e2b61931737e662dd293b40578ccornelius UDate date = formatter->parse("1975-05-06", status); 335859d709d503bab6e2b61931737e662dd293b40578ccornelius 335959d709d503bab6e2b61931737e662dd293b40578ccornelius Calendar* tstCal = Calendar::createInstance(islamicLoc, status); 336059d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal->setTime(date, status); 336159d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t is_day = tstCal->get(UCAL_DAY_OF_MONTH,status); 336259d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t is_month = tstCal->get(UCAL_MONTH,status); 336359d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t is_year = tstCal->get(UCAL_YEAR,status); 336459d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 336559d709d503bab6e2b61931737e662dd293b40578ccornelius delete tstCal; 336659d709d503bab6e2b61931737e662dd293b40578ccornelius 336759d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal = Calendar::createInstance(tblaLoc, status); 336859d709d503bab6e2b61931737e662dd293b40578ccornelius tstCal->setTime(date, status); 336959d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t tbla_day = tstCal->get(UCAL_DAY_OF_MONTH,status); 337059d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t tbla_month = tstCal->get(UCAL_MONTH,status); 337159d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t tbla_year = tstCal->get(UCAL_YEAR,status); 337259d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_CHECK_STATUS; 337359d709d503bab6e2b61931737e662dd293b40578ccornelius 337459d709d503bab6e2b61931737e662dd293b40578ccornelius if(tbla_month != is_month || tbla_year != is_year) 337559d709d503bab6e2b61931737e662dd293b40578ccornelius errln("unexpected difference between islamic and tbla month %d : %d and/or year %d : %d",tbla_month,is_month,tbla_year,is_year); 337659d709d503bab6e2b61931737e662dd293b40578ccornelius 337759d709d503bab6e2b61931737e662dd293b40578ccornelius if(tbla_day - is_day != 1) 337859d709d503bab6e2b61931737e662dd293b40578ccornelius errln("unexpected day difference between islamic and tbla: %d : %d ",tbla_day,is_day); 337959d709d503bab6e2b61931737e662dd293b40578ccornelius delete tstCal; 338059d709d503bab6e2b61931737e662dd293b40578ccornelius delete formatter; 338159d709d503bab6e2b61931737e662dd293b40578ccornelius} 338259d709d503bab6e2b61931737e662dd293b40578ccornelius 3383fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid CalendarTest::TestHebrewMonthValidation() { 3384fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 3385fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<Calendar> cal(Calendar::createInstance(Locale::createFromName("he_IL@calendar=hebrew"), status)); 3386fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (failure(status, "Calendar::createInstance, locale:he_IL@calendar=hebrew", TRUE)) return; 3387fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius Calendar *pCal = cal.getAlias(); 3388fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3389fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UDate d; 3390fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius pCal->setLenient(FALSE); 3391fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3392fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // 5776 is a leap year and has month Adar I 3393fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius pCal->set(5776, HebrewCalendar::ADAR_1, 1); 3394fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius d = pCal->getTime(status); 3395fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 3396fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Fail: 5776 Adar I 1 is a valid date."); 3397fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 3398fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 3399fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3400fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // 5777 is NOT a lear year and does not have month Adar I 3401fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius pCal->set(5777, HebrewCalendar::ADAR_1, 1); 3402fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius d = pCal->getTime(status); 3403fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (void)d; 3404fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (status == U_ILLEGAL_ARGUMENT_ERROR) { 3405fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Info: U_ILLEGAL_ARGUMENT_ERROR, because 5777 Adar I 1 is not a valid date."); 3406fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 3407fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Fail: U_ILLEGAL_ARGUMENT_ERROR should be set for input date 5777 Adar I 1."); 3408fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 3409fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 3410fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3411fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid CalendarTest::TestWeekData() { 3412fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Each line contains two locales using the same set of week rule data. 3413fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char* LOCALE_PAIRS[] = { 3414fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "en", "en_US", 3415fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "de", "de_DE", 3416fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "de_DE", "en_DE", 3417fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "en_GB", "und_GB", 3418fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "ar_EG", "en_EG", 3419fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "ar_SA", "fr_SA", 3420fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 0 3421fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius }; 3422fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3423fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status; 3424fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3425fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t i = 0; LOCALE_PAIRS[i] != 0; i += 2) { 3426fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 3427fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<Calendar> cal1(Calendar::createInstance(LOCALE_PAIRS[i], status)); 3428fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<Calendar> cal2(Calendar::createInstance(LOCALE_PAIRS[i + 1], status)); 3429f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TEST_CHECK_STATUS_LOCALE(LOCALE_PAIRS[i]); 3430fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3431fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // First day of week 3432fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UCalendarDaysOfWeek dow1 = cal1->getFirstDayOfWeek(status); 3433fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UCalendarDaysOfWeek dow2 = cal2->getFirstDayOfWeek(status); 3434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_CHECK_STATUS; 3435fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(dow1 == dow2); 3436fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3437fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Minimum days in first week 3438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius uint8_t minDays1 = cal1->getMinimalDaysInFirstWeek(); 3439fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius uint8_t minDays2 = cal2->getMinimalDaysInFirstWeek(); 3440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(minDays1 == minDays2); 3441fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3442fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Weekdays and Weekends 3443fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t d = UCAL_SUNDAY; d <= UCAL_SATURDAY; d++) { 3444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 3445fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UCalendarWeekdayType wdt1 = cal1->getDayOfWeekType((UCalendarDaysOfWeek)d, status); 3446fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UCalendarWeekdayType wdt2 = cal2->getDayOfWeekType((UCalendarDaysOfWeek)d, status); 3447fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_CHECK_STATUS; 3448fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(wdt1 == wdt2); 3449fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 3450fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 3451fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 3452fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3453fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct { 3454fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char* zone; 3455fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const CalFields base; 3456fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t deltaDays; 3457fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UCalendarWallTimeOption skippedWTOpt; 3458fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const CalFields expected; 3459fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} TestAddAcrossZoneTransitionData; 3460fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3461fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const TestAddAcrossZoneTransitionData AAZTDATA[] = 3462fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius{ 3463fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Time zone Base wall time day(s) Skipped time options 3464fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Expected wall time 3465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Add 1 day, from the date before DST transition 3467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,1,59,59,999), 1, UCAL_WALLTIME_FIRST, 3468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,59,59,999)}, 3469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,1,59,59,999), 1, UCAL_WALLTIME_LAST, 3471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,59,59,999)}, 3472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,1,59,59,999), 1, UCAL_WALLTIME_NEXT_VALID, 3474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,59,59,999)}, 3475fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3477fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,2,0,0,0), 1, UCAL_WALLTIME_FIRST, 3478fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,0,0,0)}, 3479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3480fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,2,0,0,0), 1, UCAL_WALLTIME_LAST, 3481fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3482fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3483fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,2,0,0,0), 1, UCAL_WALLTIME_NEXT_VALID, 3484fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3485fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3486fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3487fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,2,30,0,0), 1, UCAL_WALLTIME_FIRST, 3488fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,30,0,0)}, 3489fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3490fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,2,30,0,0), 1, UCAL_WALLTIME_LAST, 3491fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,30,0,0)}, 3492fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3493fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,2,30,0,0), 1, UCAL_WALLTIME_NEXT_VALID, 3494fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3495fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3496fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,3,0,0,0), 1, UCAL_WALLTIME_FIRST, 3498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,3,0,0,0), 1, UCAL_WALLTIME_LAST, 3501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,8,3,0,0,0), 1, UCAL_WALLTIME_NEXT_VALID, 3504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Subtract 1 day, from one day after DST transition 3507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,1,59,59,999), -1, UCAL_WALLTIME_FIRST, 3508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,59,59,999)}, 3509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,1,59,59,999), -1, UCAL_WALLTIME_LAST, 3511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,59,59,999)}, 3512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,1,59,59,999), -1, UCAL_WALLTIME_NEXT_VALID, 3514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,59,59,999)}, 3515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,2,0,0,0), -1, UCAL_WALLTIME_FIRST, 3518fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,0,0,0)}, 3519fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,2,0,0,0), -1, UCAL_WALLTIME_LAST, 3521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,2,0,0,0), -1, UCAL_WALLTIME_NEXT_VALID, 3524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3526fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,2,30,0,0), -1, UCAL_WALLTIME_FIRST, 3528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,1,30,0,0)}, 3529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3530fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,2,30,0,0), -1, UCAL_WALLTIME_LAST, 3531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,30,0,0)}, 3532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,2,30,0,0), -1, UCAL_WALLTIME_NEXT_VALID, 3534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3535fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3536fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,3,0,0,0), -1, UCAL_WALLTIME_FIRST, 3538fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3539fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3540fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,3,0,0,0), -1, UCAL_WALLTIME_LAST, 3541fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3542fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3543fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Los_Angeles", CalFields(2014,3,10,3,0,0,0), -1, UCAL_WALLTIME_NEXT_VALID, 3544fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2014,3,9,3,0,0,0)}, 3545fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3546fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3547fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Test case for ticket#10544 3548fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Santiago", CalFields(2013,4,27,0,0,0,0), 134, UCAL_WALLTIME_FIRST, 3549fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,9,7,23,0,0,0)}, 3550fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3551fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Santiago", CalFields(2013,4,27,0,0,0,0), 134, UCAL_WALLTIME_LAST, 3552fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,9,8,1,0,0,0)}, 3553fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3554fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Santiago", CalFields(2013,4,27,0,0,0,0), 134, UCAL_WALLTIME_NEXT_VALID, 3555fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,9,8,1,0,0,0)}, 3556fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3557fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3558fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Santiago", CalFields(2013,4,27,0,30,0,0), 134, UCAL_WALLTIME_FIRST, 3559fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,9,7,23,30,0,0)}, 3560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Santiago", CalFields(2013,4,27,0,30,0,0), 134, UCAL_WALLTIME_LAST, 3562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,9,8,1,30,0,0)}, 3563fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"America/Santiago", CalFields(2013,4,27,0,30,0,0), 134, UCAL_WALLTIME_NEXT_VALID, 3565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,9,8,1,0,0,0)}, 3566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3567fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3568fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Extreme transition - Pacific/Apia completely skips 2011-12-30 3569fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Pacific/Apia", CalFields(2011,12,29,0,0,0,0), 1, UCAL_WALLTIME_FIRST, 3570fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2011,12,31,0,0,0,0)}, 3571fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3572fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Pacific/Apia", CalFields(2011,12,29,0,0,0,0), 1, UCAL_WALLTIME_LAST, 3573fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2011,12,31,0,0,0,0)}, 3574fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3575fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Pacific/Apia", CalFields(2011,12,29,0,0,0,0), 1, UCAL_WALLTIME_NEXT_VALID, 3576fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2011,12,31,0,0,0,0)}, 3577fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3578fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3579fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Pacific/Apia", CalFields(2011,12,31,12,0,0,0), -1, UCAL_WALLTIME_FIRST, 3580fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2011,12,29,12,0,0,0)}, 3581fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3582fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Pacific/Apia", CalFields(2011,12,31,12,0,0,0), -1, UCAL_WALLTIME_LAST, 3583fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2011,12,29,12,0,0,0)}, 3584fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3585fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Pacific/Apia", CalFields(2011,12,31,12,0,0,0), -1, UCAL_WALLTIME_NEXT_VALID, 3586fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2011,12,29,12,0,0,0)}, 3587fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // 30 minutes DST - Australia/Lord_Howe 3590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Australia/Lord_Howe", CalFields(2013,10,5,2,15,0,0), 1, UCAL_WALLTIME_FIRST, 3591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,10,6,1,45,0,0)}, 3592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Australia/Lord_Howe", CalFields(2013,10,5,2,15,0,0), 1, UCAL_WALLTIME_LAST, 3594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,10,6,2,45,0,0)}, 3595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"Australia/Lord_Howe", CalFields(2013,10,5,2,15,0,0), 1, UCAL_WALLTIME_NEXT_VALID, 3597fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields(2013,10,6,2,30,0,0)}, 3598fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {NULL, CalFields(0,0,0,0,0,0,0), 0, UCAL_WALLTIME_LAST, CalFields(0,0,0,0,0,0,0)} 3600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}; 3601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3602fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid CalendarTest::TestAddAcrossZoneTransition() { 3603fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 3604fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius GregorianCalendar cal(status); 3605fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_CHECK_STATUS; 3606fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3607fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t i = 0; AAZTDATA[i].zone; i++) { 3608fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 3609fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TimeZone *tz = TimeZone::createTimeZone(AAZTDATA[i].zone); 3610fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius cal.adoptTimeZone(tz); 3611fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius cal.setSkippedWallTimeOption(AAZTDATA[i].skippedWTOpt); 3612fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius AAZTDATA[i].base.setTo(cal); 3613fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius cal.add(UCAL_DATE, AAZTDATA[i].deltaDays, status); 3614fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_CHECK_STATUS; 3615fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3616fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (!AAZTDATA[i].expected.isEquivalentTo(cal, status)) { 3617fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CalFields res(cal, status); 3618fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_CHECK_STATUS; 3619fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char buf[32]; 3620fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *optDisp = AAZTDATA[i].skippedWTOpt == UCAL_WALLTIME_FIRST ? "FIRST" : 3621fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius AAZTDATA[i].skippedWTOpt == UCAL_WALLTIME_LAST ? "LAST" : "NEXT_VALID"; 3622fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln(UnicodeString("Error: base:") + AAZTDATA[i].base.toString(buf, sizeof(buf)) + ", tz:" + AAZTDATA[i].zone 3623fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius + ", delta:" + AAZTDATA[i].deltaDays + " day(s), opt:" + optDisp 3624fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius + ", result:" + res.toString(buf, sizeof(buf)) 3625fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius + " - expected:" + AAZTDATA[i].expected.toString(buf, sizeof(buf))); 3626fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 3627fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 3628fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 362959d709d503bab6e2b61931737e662dd293b40578ccornelius 3630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 3631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 3633