1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/******************************************************************** 2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Copyright (c) 1997-2010, International Business Machines 3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Corporation and others. All Rights Reserved. 4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ********************************************************************/ 5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypes.h" 7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#if !UCONFIG_NO_FORMATTING 9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/simpletz.h" 11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/smpdtfmt.h" 12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/strenum.h" 13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "tzregts.h" 14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "calregts.h" 15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "cmemory.h" 16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// ***************************************************************************** 18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// class TimeZoneRegressionTest 19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// ***************************************************************************** 20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* length of an array */ 21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0])) 22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break 23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void 25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)TimeZoneRegressionTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // if (exec) logln((UnicodeString)"TestSuite NumberFormatRegressionTest"); 28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch (index) { 29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(0, Test4052967); 31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(1, Test4073209); 32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(2, Test4073215); 33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(3, Test4084933); 34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(4, Test4096952); 35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(5, Test4109314); 36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(6, Test4126678); 37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(7, Test4151406); 38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(8, Test4151429); 39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(9, Test4154537); 40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(10, Test4154542); 41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(11, Test4154650); 42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(12, Test4154525); 43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(13, Test4162593); 44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(14, TestJ186); 45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(15, TestJ449); 46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(16, TestJDK12API); 47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(17, Test4176686); 48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CASE(18, Test4184229); 49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) default: name = ""; break; 50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool 54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)TimeZoneRegressionTest::failure(UErrorCode status, const char* msg) 55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) { 57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status)); 58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return TRUE; 59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return FALSE; 62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4052967 66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4052967() { 68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // {sfb} not applicable in C++ ? 69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /*logln("*** CHECK TIMEZONE AGAINST HOST OS SETTING ***"); 70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("user.timezone:" + System.getProperty("user.timezone", "<not set>")); 71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(new Date().toString()); 72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("*** THE RESULTS OF THIS TEST MUST BE VERIFIED MANUALLY ***");*/ 73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4073209 77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4073209() { 79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *z1 = TimeZone::createTimeZone("PST"); 80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *z2 = TimeZone::createTimeZone("PST"); 81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (z1 == z2) 82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: TimeZone should return clones"); 83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete z1; 84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete z2; 85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UDate TimeZoneRegressionTest::findTransitionBinary(const SimpleTimeZone& tz, UDate min, UDate max) { 88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool startsInDST = tz.inDaylightTime(min, status); 90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (failure(status, "SimpleTimeZone::inDaylightTime")) return 0; 91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (tz.inDaylightTime(max, status) == startsInDST) { 92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln((UnicodeString)"Error: inDaylightTime() != " + ((!startsInDST)?"TRUE":"FALSE")); 93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 0; 94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (failure(status, "SimpleTimeZone::inDaylightTime")) return 0; 96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) while ((max - min) > 100) { // Min accuracy in ms 97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate mid = (min + max) / 2; 98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (tz.inDaylightTime(mid, status) == startsInDST) { 99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) min = mid; 100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) max = mid; 102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (failure(status, "SimpleTimeZone::inDaylightTime")) return 0; 104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return (min + max) / 2; 106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UDate TimeZoneRegressionTest::findTransitionStepwise(const SimpleTimeZone& tz, UDate min, UDate max) { 109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool startsInDST = tz.inDaylightTime(min, status); 111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (failure(status, "SimpleTimeZone::inDaylightTime")) return 0; 112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) while (min < max) { 113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (tz.inDaylightTime(min, status) != startsInDST) { 114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return min; 115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (failure(status, "SimpleTimeZone::inDaylightTime")) return 0; 117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) min += (UDate)24*60*60*1000; // one day 118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 0; 120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4073215 124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// {sfb} will this work using a Calendar? 126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4073215() 127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString str, str2; 130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *z = new SimpleTimeZone(0, "GMT"); 131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (z->useDaylightTime()) 132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: Fix test to start with non-DST zone"); 133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z->setStartRule(UCAL_FEBRUARY, 1, UCAL_SUNDAY, 0, status); 134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "z->setStartRule()"); 135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z->setEndRule(UCAL_MARCH, -1, UCAL_SUNDAY, 0, status); 136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "z->setStartRule()"); 137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!z->useDaylightTime()) 138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: DST not active"); 139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GregorianCalendar cal(1997, UCAL_JANUARY, 31, status); 141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) { 142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln("Error creating calendar %s", u_errorName(status)); 143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "new GregorianCalendar"); 146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cal.adoptTimeZone(z); 147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleDateFormat sdf((UnicodeString)"E d MMM yyyy G HH:mm", status); 149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) { 150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errcheckln(status, "Error creating date format %s", u_errorName(status)); 151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sdf.setCalendar(cal); 154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "new SimpleDateFormat"); 155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate jan31, mar1, mar31; 157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool indt = z->inDaylightTime(jan31=cal.getTime(status), status); 159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "inDaylightTime or getTime call on Jan 31"); 160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (indt) { 161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: Jan 31 inDaylightTime=TRUE, exp FALSE"); 162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cal.set(1997, UCAL_MARCH, 1); 164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) indt = z->inDaylightTime(mar1=cal.getTime(status), status); 165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "inDaylightTime or getTime call on Mar 1"); 166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!indt) { 167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString str; 168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sdf.format(cal.getTime(status), str); 169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "getTime"); 170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"Fail: " + str + " inDaylightTime=FALSE, exp TRUE"); 171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cal.set(1997, UCAL_MARCH, 31); 173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) indt = z->inDaylightTime(mar31=cal.getTime(status), status); 174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "inDaylightTime or getTime call on Mar 31"); 175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (indt) { 176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: Mar 31 inDaylightTime=TRUE, exp FALSE"); 177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* 180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cal.set(1997, Calendar::DECEMBER, 31); 181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate dec31 = cal.getTime(status); 182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "getTime"); 183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate trans = findTransitionStepwise(*z, jan31, dec31); 184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln((UnicodeString)"Stepwise from " + 185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sdf.format(jan31, str.remove()) + "; transition at " + 186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (trans?sdf.format(trans, str2.remove()):(UnicodeString)"NONE")); 187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) trans = findTransitionStepwise(*z, mar1, dec31); 188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln((UnicodeString)"Stepwise from " + 189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sdf.format(mar1, str.remove()) + "; transition at " + 190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (trans?sdf.format(trans, str2.remove()):(UnicodeString)"NONE")); 191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) trans = findTransitionStepwise(*z, mar31, dec31); 192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln((UnicodeString)"Stepwise from " + 193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sdf.format(mar31, str.remove()) + "; transition at " + 194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (trans?sdf.format(trans, str2.remove()):(UnicodeString)"NONE")); 195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4084933 200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The expected behavior of TimeZone around the boundaries is: 201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * (Assume transition time of 2:00 AM) 202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * day of onset 1:59 AM STD = display name 1:59 AM ST 203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 2:00 AM STD = display name 3:00 AM DT 204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * day of end 0:59 AM STD = display name 1:59 AM DT 205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 1:00 AM STD = display name 1:00 AM ST 206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4084933() { 208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *tz = TimeZone::createTimeZone("PST"); 210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset1 = tz->getOffset(1, 212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (2*60*60*1000), status); 213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset2 = tz->getOffset(1, 214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (2*60*60*1000)-1, status); 215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset3 = tz->getOffset(1, 217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (1*60*60*1000), status); 218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset4 = tz->getOffset(1, 219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (1*60*60*1000)-1, status); 220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* 222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The following was added just for consistency. It shows that going *to* Daylight 223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Savings Time (PDT) does work at 2am. 224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset5 = tz->getOffset(1, 226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (2*60*60*1000), status); 227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset6 = tz->getOffset(1, 228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (2*60*60*1000)-1, status); 229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset5a = tz->getOffset(1, 230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (3*60*60*1000), status); 231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset6a = tz->getOffset(1, 232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (3*60*60*1000)-1, status); 233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset7 = tz->getOffset(1, 234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (1*60*60*1000), status); 235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset8 = tz->getOffset(1, 236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_APRIL, 6, UCAL_SUNDAY, (1*60*60*1000)-1, status); 237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t SToffset = (int32_t)(-8 * 60*60*1000L); 238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t DToffset = (int32_t)(-7 * 60*60*1000L); 239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define ERR_IF_FAIL(x) if(x) { dataerrln("FAIL: TimeZone misbehaving - %s", #x); } 241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(U_FAILURE(status)) 243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset1 != SToffset) 244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset2 != SToffset) 245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset3 != SToffset) 246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset4 != DToffset) 247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset5 != DToffset) 248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset6 != SToffset) 249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset5a != DToffset) 250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset6a != DToffset) 251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset7 != SToffset) 252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ERR_IF_FAIL(offset8 != SToffset) 253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#undef ERR_IF_FAIL 255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete tz; 257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4096952 261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4096952() { 263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // {sfb} serialization not applicable 264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/* 265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString ZONES [] = { UnicodeString("GMT"), UnicodeString("MET"), UnicodeString("IST") }; 266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool pass = TRUE; 267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //try { 268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i=0; i < ZONES.length; ++i) { 269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *zone = TimeZone::createTimeZone(ZONES[i]); 270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString id; 271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (zone->getID(id) != ZONES[i]) 272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: Test broken; zones not instantiating"); 273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ByteArrayOutputStream baos; 275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ObjectOutputStream ostream = 276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) new ObjectOutputStream(baos = new 277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ByteArrayOutputStream()); 278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ostream.writeObject(zone); 279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ostream.close(); 280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) baos.close(); 281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ObjectInputStream istream = 282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) new ObjectInputStream(new 283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ByteArrayInputStream(baos.toByteArray())); 284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone frankenZone = (TimeZone) istream.readObject(); 285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //logln("Zone: " + zone); 286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //logln("FrankenZone: " + frankenZone); 287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!zone.equals(frankenZone)) { 288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("TimeZone " + zone.getID() + 289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) " not equal to serialized/deserialized one"); 290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pass = false; 291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!pass) errln("Fail: TimeZone serialization/equality bug"); 294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) catch (IOException e) { 296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: " + e); 297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) e.print32_tStackTrace(); 298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) catch (ClassNotFoundException e) { 300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: " + e); 301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) e.print32_tStackTrace(); 302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)*/ 304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4109314 308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4109314() { 310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GregorianCalendar *testCal = (GregorianCalendar*)Calendar::createInstance(status); 312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) { 313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln("Error creating calendar %s", u_errorName(status)); 314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete testCal; 315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "Calendar::createInstance"); 318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *PST = TimeZone::createTimeZone("PST"); 319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /*Object[] testData = { 320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) PST, new Date(98,Calendar.APRIL,4,22,0), new Date(98, Calendar.APRIL, 5,6,0), 321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) PST, new Date(98,Calendar.OCTOBER,24,22,0), new Date(98,Calendar.OCTOBER,25,6,0), 322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) };*/ 323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate testData [] = { 324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CalendarRegressionTest::makeDate(98,UCAL_APRIL,4,22,0), 325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CalendarRegressionTest::makeDate(98, UCAL_APRIL,5,6,0), 326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CalendarRegressionTest::makeDate(98,UCAL_OCTOBER,24,22,0), 327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CalendarRegressionTest::makeDate(98,UCAL_OCTOBER,25,6,0) 328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool pass = TRUE; 330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i = 0; i < 4; i+=2) { 331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //testCal->setTimeZone((TimeZone) testData[i]); 332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testCal->setTimeZone(*PST); 333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate t = testData[i]; 334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate end = testData[i+1]; 335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) while(testCal->getTime(status) < end) { 336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testCal->setTime(t, status); 337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if ( ! checkCalendar314(testCal, PST)) 338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pass = FALSE; 339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) t += 60*60*1000.0; 340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if ( ! pass) 343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: TZ API inconsistent"); 344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete testCal; 346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete PST; 347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)UBool 350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)TimeZoneRegressionTest::checkCalendar314(GregorianCalendar *testCal, TimeZone *testTZ) 351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // GregorianCalendar testCal = (GregorianCalendar)aCal.clone(); 354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t tzOffset, tzRawOffset; 356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) float tzOffsetFloat,tzRawOffsetFloat; 357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Here is where the user made an error. They were passing in the value of 358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // the MILLSECOND field; you need to pass in the millis in the day in STANDARD 359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // time. 360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate millis = testCal->get(UCAL_MILLISECOND, status) + 361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1000.0 * (testCal->get(UCAL_SECOND, status) + 362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 60.0 * (testCal->get(UCAL_MINUTE, status) + 363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 60.0 * (testCal->get(UCAL_HOUR_OF_DAY, status)))) - 364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testCal->get(UCAL_DST_OFFSET, status); 365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Fix up millis to be in range. ASSUME THAT WE ARE NOT AT THE 367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * BEGINNING OR END OF A MONTH. We must add this code because 368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * getOffset() has been changed to be more strict about the parameters 369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * it receives -- it turns out that this test was passing in illegal 370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * values. */ 371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t date = testCal->get(UCAL_DATE, status); 372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t dow = testCal->get(UCAL_DAY_OF_WEEK, status); 373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) while(millis < 0) { 374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) millis += U_MILLIS_PER_DAY; 375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --date; 376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dow = UCAL_SUNDAY + ((dow - UCAL_SUNDAY + 6) % 7); 377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) while (millis >= U_MILLIS_PER_DAY) { 379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) millis -= U_MILLIS_PER_DAY; 380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ++date; 381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dow = UCAL_SUNDAY + ((dow - UCAL_SUNDAY + 1) % 7); 382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tzOffset = testTZ->getOffset((uint8_t)testCal->get(UCAL_ERA, status), 385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testCal->get(UCAL_YEAR, status), 386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testCal->get(UCAL_MONTH, status), 387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) date, 388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (uint8_t)dow, 389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int32_t)millis, 390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status); 391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tzRawOffset = testTZ->getRawOffset(); 392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tzOffsetFloat = (float)tzOffset/(float)3600000; 393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tzRawOffsetFloat = (float)tzRawOffset/(float)3600000; 394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate testDate = testCal->getTime(status); 396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool inDaylightTime = testTZ->inDaylightTime(testDate, status); 398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy HH:mm", status); 399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sdf->setCalendar(*testCal); 400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString inDaylightTimeString; 401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool passed; 403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(inDaylightTime) 405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) inDaylightTimeString = " DST "; 407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) passed = (tzOffset == (tzRawOffset + 3600000)); 408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else 410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) inDaylightTimeString = " "; 412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) passed = (tzOffset == tzRawOffset); 413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString output; 416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) FieldPosition pos(0); 417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) output = testTZ->getID(output) + " " + sdf->format(testDate, output, pos) + 418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) " Offset(" + tzOffsetFloat + ")" + 419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) " RawOffset(" + tzRawOffsetFloat + ")" + 420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) " " + millis/(float)3600000 + " " + 421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) inDaylightTimeString; 422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (passed) 424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) output += " "; 425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else 426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) output += "ERROR"; 427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (passed) 429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(output); 430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else 431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(output); 432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete sdf; 434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return passed; 435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4126678 439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * CANNOT REPRODUDE 440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Yet another _alleged_ bug in TimeZone::getOffset(), a method that never 442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * should have been made public. It's simply too hard to use correctly. 443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * The original test code failed to do the following: 445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * (1) Call Calendar::setTime() before getting the fields! 446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * (2) Use the right millis (as usual) for getOffset(); they were passing 447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * in the MILLIS field, instead of the STANDARD MILLIS IN DAY. 448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * When you fix these two problems, the test passes, as expected. 449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4126678() 451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) Calendar *cal = Calendar::createInstance(status); 454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) { 455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln("Error creating calendar %s", u_errorName(status)); 456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete cal; 457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "Calendar::createInstance"); 460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *tz = TimeZone::createTimeZone("PST"); 461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cal->adoptTimeZone(tz); 462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cal->set(1998, UCAL_APRIL, 5, 10, 0); 464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (! tz->useDaylightTime() || U_FAILURE(status)) 466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln("We're not in Daylight Savings Time and we should be. - %s", u_errorName(status)); 467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //cal.setTime(dt); 469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t era = cal->get(UCAL_ERA, status); 470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t year = cal->get(UCAL_YEAR, status); 471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t month = cal->get(UCAL_MONTH, status); 472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t day = cal->get(UCAL_DATE, status); 473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t dayOfWeek = cal->get(UCAL_DAY_OF_WEEK, status); 474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t millis = cal->get(UCAL_MILLISECOND, status) + 475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (cal->get(UCAL_SECOND, status) + 476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (cal->get(UCAL_MINUTE, status) + 477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (cal->get(UCAL_HOUR, status) * 60) * 60) * 1000) - 478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cal->get(UCAL_DST_OFFSET, status); 479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "cal->get"); 481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset = tz->getOffset((uint8_t)era, year, month, day, (uint8_t)dayOfWeek, millis, status); 482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t raw_offset = tz->getRawOffset(); 483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (offset == raw_offset) 485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Offsets should match"); 486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete cal; 488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4151406 492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * TimeZone::getAvailableIDs(int32_t) throws exception for certain values, 493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * due to a faulty constant in TimeZone::java. 494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4151406() { 496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t max = 0; 497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t h=-28; h<=30; ++h) { 498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // h is in half-hours from GMT; rawoffset is in millis 499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t rawoffset = h * 1800000; 500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t hh = (h<0) ? -h : h; 501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString hname = UnicodeString((h<0) ? "GMT-" : "GMT+") + 502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ((hh/2 < 10) ? "0" : "") + 503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (hh/2) + ':' + 504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ((hh%2==0) ? "00" : "30"); 505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //try { 506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode ec = U_ZERO_ERROR; 507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t count; 508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringEnumeration* ids = TimeZone::createEnumeration(rawoffset); 509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) count = ids->count(ec); 510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (count> max) 511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) max = count; 512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (count > 0) { 513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(hname + ' ' + (UnicodeString)count + (UnicodeString)" e.g. " + *ids->snext(ec)); 514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(hname + ' ' + count); 516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // weiv 11/27/2002: why uprv_free? This should be a delete 518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete ids; 519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //delete [] ids; 520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //uprv_free(ids); 521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /*} catch (Exception e) { 522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(hname + ' ' + "Fail: " + e); 523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }*/ 524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Maximum zones per offset = %d", max); 526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4151429 530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4151429() { 532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // {sfb} silly test in C++, since we are using an enum and not an int 533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //try { 534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /*TimeZone *tz = TimeZone::createTimeZone("GMT"); 535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString name; 536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tz->getDisplayName(TRUE, TimeZone::LONG, 537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) Locale.getDefault(), name); 538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("IllegalArgumentException not thrown by TimeZone::getDisplayName()");*/ 539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} catch(IllegalArgumentException e) {} 540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4154537 544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * SimpleTimeZone::hasSameRules() doesn't work for zones with no DST 545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * and different DST parameters. 546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4154537() { 548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // tz1 and tz2 have no DST and different rule parameters 550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *tz1 = new SimpleTimeZone(0, "1", 0, 0, 0, 0, 2, 0, 0, 0, status); 551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *tz2 = new SimpleTimeZone(0, "2", 1, 0, 0, 0, 3, 0, 0, 0, status); 552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // tza and tzA have the same rule params 553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *tza = new SimpleTimeZone(0, "a", 0, 1, 0, 0, 3, 2, 0, 0, status); 554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *tzA = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 3, 2, 0, 0, status); 555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // tzb differs from tza 556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *tzb = new SimpleTimeZone(0, "b", 0, 1, 0, 0, 3, 1, 0, 0, status); 557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) 559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Couldn't create TimeZones"); 560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (tz1->useDaylightTime() || tz2->useDaylightTime() || 562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) !tza->useDaylightTime() || !tzA->useDaylightTime() || 563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) !tzb->useDaylightTime()) { 564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Test is broken -- rewrite it"); 565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!tza->hasSameRules(*tzA) || tza->hasSameRules(*tzb)) { 567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: hasSameRules() broken for zones with rules"); 568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!tz1->hasSameRules(*tz2)) { 570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: hasSameRules() returns false for zones without rules"); 571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //errln("zone 1 = " + tz1); 572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //errln("zone 2 = " + tz2); 573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete tz1; 576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete tz2; 577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete tza; 578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete tzA; 579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete tzb; 580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4154542 584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * SimpleTimeZOne constructors, setStartRule(), and setEndRule() don't 585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * check for out-of-range arguments. 586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest:: Test4154542() 588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD = 1; 590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t BAD = 0; 591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD_MONTH = UCAL_JANUARY; 593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD_DAY = 1; 594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD_DAY_OF_WEEK = UCAL_SUNDAY; 595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD_TIME = 0; 596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t DATA [] = { 598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, INT32_MIN, 0, INT32_MAX, INT32_MIN, 599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, UCAL_JANUARY, -5, UCAL_SUNDAY, 0, 600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, UCAL_DECEMBER, 5, UCAL_SATURDAY, 24*60*60*1000, 601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_DECEMBER, 5, UCAL_SATURDAY, 24*60*60*1000+1, 602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_DECEMBER, 5, UCAL_SATURDAY, -1, 603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_JANUARY, -6, UCAL_SUNDAY, 0, 604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_DECEMBER, 6, UCAL_SATURDAY, 24*60*60*1000, 605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, UCAL_DECEMBER, 1, 0, 0, 606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, UCAL_DECEMBER, 31, 0, 0, 607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_APRIL, 31, 0, 0, 608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_DECEMBER, 32, 0, 0, 609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_JANUARY-1, 1, UCAL_SUNDAY, 0, 610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_DECEMBER+1, 1, UCAL_SUNDAY, 0, 611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, UCAL_DECEMBER, 31, -UCAL_SUNDAY, 0, 612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, UCAL_DECEMBER, 31, -UCAL_SATURDAY, 0, 613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_DECEMBER, 32, -UCAL_SATURDAY, 0, 614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_DECEMBER, -32, -UCAL_SATURDAY, 0, 615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, UCAL_DECEMBER, 31, -UCAL_SATURDAY-1, 0, 616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *zone = new SimpleTimeZone(0, "Z"); 618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i=0; i < 18*5; i+=5) { 619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool shouldBeGood = (DATA[i] == GOOD); 620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t month = DATA[i+1]; 621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t day = DATA[i+2]; 622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t dayOfWeek = DATA[i+3]; 623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t time = DATA[i+4]; 624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //Exception ex = null; 628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //try { 629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone->setStartRule(month, day, dayOfWeek, time, status); 630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} catch (IllegalArgumentException e) { 631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // ex = e; 632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} 633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_SUCCESS(status) != shouldBeGood) { 634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString("setStartRule(month=") + month + ", day=" + day + 635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", dayOfWeek=" + dayOfWeek + ", time=" + time + 636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (shouldBeGood ? (") should work") 637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) : ") should fail but doesn't")); 638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //ex = null; 641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //try { 642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone->setEndRule(month, day, dayOfWeek, time, status); 644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} catch (IllegalArgumentException e) { 645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // ex = e; 646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} 647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_SUCCESS(status) != shouldBeGood) { 648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString("setEndRule(month=") + month + ", day=" + day + 649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", dayOfWeek=" + dayOfWeek + ", time=" + time + 650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (shouldBeGood ? (") should work") 651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) : ") should fail but doesn't")); 652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //ex = null; 655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //try { 656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // {sfb} need to look into ctor problems! (UErrorCode vs. dst signature confusion) 657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *temp = new SimpleTimeZone(0, "Z", 659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int8_t)month, (int8_t)day, (int8_t)dayOfWeek, time, 660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int8_t)GOOD_MONTH, (int8_t)GOOD_DAY, (int8_t)GOOD_DAY_OF_WEEK, 661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD_TIME,status); 662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} catch (IllegalArgumentException e) { 663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // ex = e; 664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} 665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_SUCCESS(status) != shouldBeGood) { 666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString("SimpleTimeZone(month=") + month + ", day=" + day + 667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", dayOfWeek=" + dayOfWeek + ", time=" + time + 668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (shouldBeGood ? (", <end>) should work")// + ex) 669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) : ", <end>) should fail but doesn't")); 670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete temp; 673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //ex = null; 674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //try { 675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) temp = new SimpleTimeZone(0, "Z", 677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int8_t)GOOD_MONTH, (int8_t)GOOD_DAY, (int8_t)GOOD_DAY_OF_WEEK, 678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD_TIME, 679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (int8_t)month, (int8_t)day, (int8_t)dayOfWeek, time,status); 680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} catch (IllegalArgumentException e) { 681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // ex = e; 682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} 683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_SUCCESS(status) != shouldBeGood) { 684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString("SimpleTimeZone(<start>, month=") + month + ", day=" + day + 685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", dayOfWeek=" + dayOfWeek + ", time=" + time + 686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (shouldBeGood ? (") should work")// + ex) 687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) : ") should fail but doesn't")); 688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete temp; 690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete zone; 692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4154525 697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * SimpleTimeZone accepts illegal DST savings values. These values 698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * must be non-zero. There is no upper limit at this time. 699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void 701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)TimeZoneRegressionTest::Test4154525() 702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD = 1, BAD = 0; 704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t DATA [] = { 706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1, GOOD, 707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 0, BAD, 708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) -1, BAD, 709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 60*60*1000, GOOD, 710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) INT32_MIN, BAD, 711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Integer.MAX_VALUE, ?, // no upper limit on DST savings at this time 712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for(int32_t i = 0; i < 10; i+=2) { 716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t savings = DATA[i]; 717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool valid = DATA[i+1] == GOOD; 718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString method; 719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for(int32_t j=0; j < 2; ++j) { 720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *z=NULL; 721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch (j) { 722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 0: 723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) method = "constructor"; 724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z = new SimpleTimeZone(0, "id", 725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCAL_JANUARY, 1, 0, 0, 726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCAL_MARCH, 1, 0, 0, 727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) savings, status); // <- what we're interested in 728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 1: 730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) method = "setDSTSavings()"; 731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z = new SimpleTimeZone(0, "GMT"); 732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z->setDSTSavings(savings, status); 733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) { 737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(valid) { 738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString("Fail: DST savings of ") + savings + " to " + method + " gave " + u_errorName(status)); 739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(UnicodeString("Pass: DST savings of ") + savings + " to " + method + " gave " + u_errorName(status)); 742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(valid) { 746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(UnicodeString("Pass: DST savings of ") + savings + " accepted by " + method); 747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString("Fail: DST savings of ") + savings + " accepted by " + method); 750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete z; 754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4154650 760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * SimpleTimeZone.getOffset accepts illegal arguments. 761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void 763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)TimeZoneRegressionTest::Test4154650() 764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD = 1, BAD = 0; 766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD_ERA = GregorianCalendar::AD, GOOD_YEAR = 1998, GOOD_MONTH = UCAL_AUGUST; 767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t GOOD_DAY = 2, GOOD_DOW = UCAL_SUNDAY, GOOD_TIME = 16*3600000; 768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t DATA []= { 770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, 771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GregorianCalendar::BC, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, 773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GregorianCalendar::AD, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, 774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GregorianCalendar::BC-1, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, 775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GregorianCalendar::AD+1, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME, 776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, GOOD_DAY, GOOD_DOW, GOOD_TIME, 778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, UCAL_DECEMBER, GOOD_DAY, GOOD_DOW, GOOD_TIME, 779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY-1, GOOD_DAY, GOOD_DOW, GOOD_TIME, 780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GOOD_ERA, GOOD_YEAR, UCAL_DECEMBER+1, GOOD_DAY, GOOD_DOW, GOOD_TIME, 781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, 1, GOOD_DOW, GOOD_TIME, 783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, 31, GOOD_DOW, GOOD_TIME, 784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, 0, GOOD_DOW, GOOD_TIME, 785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, 32, GOOD_DOW, GOOD_TIME, 786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, UCAL_SUNDAY, GOOD_TIME, 788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, UCAL_SATURDAY, GOOD_TIME, 789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, UCAL_SUNDAY-1, GOOD_TIME, 790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, UCAL_SATURDAY+1, GOOD_TIME, 791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 0, 793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 24*3600000-1, 794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, -1, 795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 24*3600000, 796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t dataLen = (int32_t)(sizeof(DATA) / sizeof(DATA[0])); 799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *tz = TimeZone::createDefault(); 802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for(int32_t i = 0; i < dataLen; i += 7) { 803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool good = DATA[i] == GOOD; 804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //IllegalArgumentException e = null; 805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //try { 806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /*int32_t offset = */ 807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tz->getOffset((uint8_t)DATA[i+1], DATA[i+2], DATA[i+3], 808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) DATA[i+4], (uint8_t)DATA[i+5], DATA[i+6], status); 809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} catch (IllegalArgumentException ex) { 810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // e = ex; 811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //} 812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(good != U_SUCCESS(status)) { 813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString errMsg; 814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (good) { 815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errMsg = (UnicodeString(") threw ") + u_errorName(status)); 816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errMsg = UnicodeString(") accepts invalid args", ""); 819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln(UnicodeString("Fail: getOffset(") + 821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) DATA[i+1] + ", " + DATA[i+2] + ", " + DATA[i+3] + ", " + 822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) DATA[i+4] + ", " + DATA[i+5] + ", " + DATA[i+6] + 823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errMsg); 824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; // reset 826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete tz; 828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * @bug 4162593 832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * TimeZone broken at midnight. The TimeZone code fails to handle 833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * transitions at midnight correctly. 834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void 836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)TimeZoneRegressionTest::Test4162593() 837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleDateFormat *fmt = new SimpleDateFormat("z", Locale::getUS(), status); 840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_FAILURE(status)) { 841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln("Error creating calendar %s", u_errorName(status)); 842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete fmt; 843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const int32_t ONE_HOUR = 60*60*1000; 846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *asuncion = new SimpleTimeZone(-4*ONE_HOUR, "America/Asuncion" /*PY%sT*/, 848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCAL_OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR, 849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCAL_MARCH, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR, status); 850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Zone 852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Starting time 853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Transition expected between start+1H and start+2H 854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *DATA_TZ [] = { 856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 0, 0, 0 }; 857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t DATA_INT [] [5] = { 859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // These years must be AFTER the Gregorian cutover 860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {1998, UCAL_SEPTEMBER, 30, 22, 0}, 861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {2000, UCAL_FEBRUARY, 28, 22, 0}, 862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) {2000, UCAL_FEBRUARY, 29, 22, 0}, 863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool DATA_BOOL [] = { 866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TRUE, 867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) FALSE, 868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TRUE, 869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString zone [4];// = new String[4]; 872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) DATA_TZ[0] = 873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) new SimpleTimeZone(2*ONE_HOUR, "Asia/Damascus" /*EE%sT*/, 874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCAL_APRIL, 1, 0 /*DOM*/, 0*ONE_HOUR, 875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCAL_OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR, status); 876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) DATA_TZ[1] = asuncion; DATA_TZ[2] = asuncion; 877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for(int32_t j = 0; j < 3; j++) { 879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *tz = (TimeZone*)DATA_TZ[j]; 880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone::setDefault(*tz); 881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fmt->setTimeZone(*tz); 882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Must construct the Date object AFTER setting the default zone 884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t *p = (int32_t*)DATA_INT[j]; 885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate d = CalendarRegressionTest::makeDate(p[0], p[1], p[2], p[3], p[4]); 886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool transitionExpected = DATA_BOOL[j]; 887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 888f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString temp; 889f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(tz->getID(temp) + ":"); 890f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t i = 0; i < 4; ++i) { 891f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) FieldPosition pos(0); 892f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone[i].remove(); 893f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone[i] = fmt->format(d+ i*ONE_HOUR, zone[i], pos); 894f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(UnicodeString("") + i + ": " + d + " / " + zone[i]); 895f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //d += (double) ONE_HOUR; 896f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 897f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(zone[0] == zone[1] && 898f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (zone[1] == zone[2]) != transitionExpected && 899f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone[2] == zone[3]) { 900f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln(UnicodeString("Ok: transition ") + transitionExpected); 901f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 902f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else { 903f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: boundary transition incorrect"); 904f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 905f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 906f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete fmt; 907f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete asuncion; 908f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete DATA_TZ[0]; 909f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 910f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 911f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /** 912f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * getDisplayName doesn't work with unusual savings/offsets. 913f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 914f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest::Test4176686() { 915f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Construct a zone that does not observe DST but 916f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // that does have a DST savings (which should be ignored). 917f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 918f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset = 90 * 60000; // 1:30 919f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone* z1 = new SimpleTimeZone(offset, "_std_zone_"); 920f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z1->setDSTSavings(45 * 60000, status); // 0:45 921f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 922f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Construct a zone that observes DST for the first 6 months. 923f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone* z2 = new SimpleTimeZone(offset, "_dst_zone_"); 924f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z2->setDSTSavings(45 * 60000, status); // 0:45 925f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z2->setStartRule(UCAL_JANUARY, 1, 0, status); 926f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z2->setEndRule(UCAL_JULY, 1, 0, status); 927f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 928f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Also check DateFormat 929f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) DateFormat* fmt1 = new SimpleDateFormat(UnicodeString("z"), status); 930f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(status)) { 931f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln("Failure trying to construct: %s", u_errorName(status)); 932f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 933f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 934f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fmt1->setTimeZone(*z1); // Format uses standard zone 935f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) DateFormat* fmt2 = new SimpleDateFormat(UnicodeString("z"), status); 936f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(!assertSuccess("trying to construct", status))return; 937f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fmt2->setTimeZone(*z2); // Format uses DST zone 938f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) Calendar* tempcal = Calendar::createInstance(status); 939f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tempcal->clear(); 940f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tempcal->set(1970, UCAL_FEBRUARY, 1); 941f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate dst = tempcal->getTime(status); // Time in DST 942f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) tempcal->set(1970, UCAL_AUGUST, 1); 943f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate std = tempcal->getTime(status); // Time in standard 944f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 945f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Description, Result, Expected Result 946f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString a,b,c,d,e,f,g,h,i,j,k,l; 947f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString DATA[] = { 948f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "z1->getDisplayName(false, SHORT)/std zone", 949f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z1->getDisplayName(FALSE, TimeZone::SHORT, a), "GMT+01:30", 950f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "z1->getDisplayName(false, LONG)/std zone", 951f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z1->getDisplayName(FALSE, TimeZone::LONG, b), "GMT+01:30", 952f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "z1->getDisplayName(true, SHORT)/std zone", 953f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z1->getDisplayName(TRUE, TimeZone::SHORT, c), "GMT+01:30", 954f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "z1->getDisplayName(true, LONG)/std zone", 955f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z1->getDisplayName(TRUE, TimeZone::LONG, d ), "GMT+01:30", 956f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "z2->getDisplayName(false, SHORT)/dst zone", 957f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z2->getDisplayName(FALSE, TimeZone::SHORT, e), "GMT+01:30", 958f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "z2->getDisplayName(false, LONG)/dst zone", 959f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z2->getDisplayName(FALSE, TimeZone::LONG, f ), "GMT+01:30", 960f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "z2->getDisplayName(true, SHORT)/dst zone", 961f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z2->getDisplayName(TRUE, TimeZone::SHORT, g), "GMT+02:15", 962f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "z2->getDisplayName(true, LONG)/dst zone", 963f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z2->getDisplayName(TRUE, TimeZone::LONG, h ), "GMT+02:15", 964f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "DateFormat.format(std)/std zone", fmt1->format(std, i), "GMT+01:30", 965f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "DateFormat.format(dst)/std zone", fmt1->format(dst, j), "GMT+01:30", 966f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "DateFormat.format(std)/dst zone", fmt2->format(std, k), "GMT+01:30", 967f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "DateFormat.format(dst)/dst zone", fmt2->format(dst, l), "GMT+02:15", 968f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 969f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 970f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for (int32_t idx=0; idx<(int32_t)ARRAY_LENGTH(DATA); idx+=3) { 971f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (DATA[idx+1]!=(DATA[idx+2])) { 972f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("FAIL: " + DATA[idx] + " -> " + DATA[idx+1] + ", exp " + DATA[idx+2]); 973f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 974f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 975f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete z1; 976f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete z2; 977f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete fmt1; 978f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete fmt2; 979f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete tempcal; 980f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 981f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 982f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 983f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Make sure setStartRule and setEndRule set the DST savings to nonzero 984f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * if it was zero. 985f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 986f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest::TestJ186() { 987f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 988f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // NOTE: Setting the DST savings to zero is illegal, so we 989f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // are limited in the testing we can do here. This is why 990f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // lines marked //~ are commented out. 991f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone z(0, "ID"); 992f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //~z.setDSTSavings(0, status); // Must do this! 993f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z.setStartRule(UCAL_FEBRUARY, 1, UCAL_SUNDAY, 0, status); 994f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "setStartRule()"); 995f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (z.useDaylightTime()) { 996f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: useDaylightTime true with start rule only"); 997f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 998f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //~if (z.getDSTSavings() != 0) { 999f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //~ errln("Fail: dst savings != 0 with start rule only"); 1000f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //~} 1001f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) z.setEndRule(UCAL_MARCH, -1, UCAL_SUNDAY, 0, status); 1002f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "setStartRule()"); 1003f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (!z.useDaylightTime()) { 1004f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: useDaylightTime false with rules set"); 1005f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1006f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (z.getDSTSavings() == 0) { 1007f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: dst savings == 0 with rules set"); 1008f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1009f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1010f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1011f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 1012f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Test to see if DateFormat understands zone equivalency groups. It 1013f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * might seem that this should be a DateFormat test, but it's really a 1014f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * TimeZone test -- the changes to DateFormat are minor. 1015f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 1016f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * We use two known, stable zones that shouldn't change much over time 1017f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * -- America/Vancouver and America/Los_Angeles. However, they MAY 1018f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * change at some point -- if that happens, replace them with any two 1019f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * zones in an equivalency group where one zone has localized name 1020f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * data, and the other doesn't, in some locale. 1021f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1022f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest::TestJ449() { 1023f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 1024f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString str; 1025f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1026f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Modify the following three as necessary. The two IDs must 1027f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // specify two zones in the same equivalency group. One must have 1028f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // locale data in 'loc'; the other must not. 1029f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* idWithLocaleData = "America/Los_Angeles"; 1030f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char* idWithoutLocaleData = "US/Pacific"; 1031f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const Locale loc("en", "", ""); 1032f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1033f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *zoneWith = TimeZone::createTimeZone(idWithLocaleData); 1034f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *zoneWithout = TimeZone::createTimeZone(idWithoutLocaleData); 1035f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Make sure we got valid zones 1036f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (zoneWith->getID(str) != UnicodeString(idWithLocaleData) || 1037f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zoneWithout->getID(str) != UnicodeString(idWithoutLocaleData)) { 1038f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) dataerrln(UnicodeString("Fail: Unable to create zones - wanted ") + idWithLocaleData + ", got " + zoneWith->getID(str) + ", and wanted " + idWithoutLocaleData + " but got " + zoneWithout->getID(str)); 1039f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1040f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GregorianCalendar calWith(*zoneWith, status); 1041f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GregorianCalendar calWithout(*zoneWithout, status); 1042f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleDateFormat fmt("MMM d yyyy hh:mm a zzz", loc, status); 1043f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(status)) { 1044f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Fail: Unable to create GregorianCalendar/SimpleDateFormat"); 1045f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1046f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UDate date = 0; 1047f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString strWith, strWithout; 1048f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fmt.setCalendar(calWith); 1049f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fmt.format(date, strWith); 1050f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fmt.setCalendar(calWithout); 1051f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) fmt.format(date, strWithout); 1052f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (strWith == strWithout) { 1053f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln((UnicodeString)"Ok: " + idWithLocaleData + " -> " + 1054f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strWith + "; " + idWithoutLocaleData + " -> " + 1055f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strWithout); 1056f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1057f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"FAIL: " + idWithLocaleData + " -> " + 1058f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strWith + "; " + idWithoutLocaleData + " -> " + 1059f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) strWithout); 1060f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1061f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1062f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1063f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1064f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete zoneWith; 1065f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete zoneWithout; 1066f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1067f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1068f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// test new API for JDK 1.2 8/31 putback 1069f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void 1070f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)TimeZoneRegressionTest::TestJDK12API() 1071f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 1072f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // TimeZone *pst = TimeZone::createTimeZone("PST"); 1073f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // TimeZone *cst1 = TimeZone::createTimeZone("CST"); 1074f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode ec = U_ZERO_ERROR; 1075f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //d,-28800,3,1,-1,120,w,9,-1,1,120,w,60 1076f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *pst = new SimpleTimeZone(-28800*U_MILLIS_PER_SECOND, 1077f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "PST", 1078f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 3,1,-1,120*U_MILLIS_PER_MINUTE, 1079f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone::WALL_TIME, 1080f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 9,-1,1,120*U_MILLIS_PER_MINUTE, 1081f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone::WALL_TIME, 1082f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 60*U_MILLIS_PER_MINUTE,ec); 1083f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //d,-21600,3,1,-1,120,w,9,-1,1,120,w,60 1084f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TimeZone *cst1 = new SimpleTimeZone(-21600*U_MILLIS_PER_SECOND, 1085f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "CST", 1086f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 3,1,-1,120*U_MILLIS_PER_MINUTE, 1087f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone::WALL_TIME, 1088f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 9,-1,1,120*U_MILLIS_PER_MINUTE, 1089f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone::WALL_TIME, 1090f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 60*U_MILLIS_PER_MINUTE,ec); 1091f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (U_FAILURE(ec)) { 1092f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("FAIL: SimpleTimeZone constructor"); 1093f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 1094f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1095f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1096f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone *cst = dynamic_cast<SimpleTimeZone *>(cst1); 1097f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1098f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pst->hasSameRules(*cst)) { 1099f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("FAILURE: PST and CST have same rules"); 1100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 1103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset1 = pst->getOffset(1, 1104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (2*60*60*1000), status); 1105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "getOffset() failed"); 1106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t offset2 = cst->getOffset(1, 1109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (2*60*60*1000), 31, status); 1110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "getOffset() failed"); 1111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(offset1 == offset2) 1113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("FAILURE: Sunday Oct. 26 1997 2:00 has same offset for PST and CST"); 1114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // verify error checking 1116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pst->getOffset(1, 1117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1997, UCAL_FIELD_COUNT+1, 26, UCAL_SUNDAY, (2*60*60*1000), status); 1118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)) 1119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("FAILURE: getOffset() succeeded with -1 for month"); 1120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 1122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cst->setDSTSavings(60*60*1000, status); 1123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) failure(status, "setDSTSavings() failed"); 1124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t savings = cst->getDSTSavings(); 1126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(savings != 60*60*1000) { 1127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setDSTSavings() failed"); 1128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete pst; 1131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete cst; 1132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/** 1134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * SimpleTimeZone allows invalid DOM values. 1135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) */ 1136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void TimeZoneRegressionTest::Test4184229() { 1137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SimpleTimeZone* zone = NULL; 1138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 1139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 0, status); 1140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 1141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed. No exception has been thrown for DOM -1 startDay"); 1142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 1143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("(a) " + UnicodeString( u_errorName(status))); 1144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 1146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete zone; 1147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0, status); 1149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 1150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed. No exception has been thrown for DOM -1 endDay"); 1151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 1152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("(b) " + UnicodeString(u_errorName(status))); 1153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 1155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete zone; 1156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone = new SimpleTimeZone(0, "A", 0, -1, 0, 0, 0, 0, 0, 1000, status); 1158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 1159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed. No exception has been thrown for DOM -1 startDay+savings"); 1160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 1161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("(c) " + UnicodeString(u_errorName(status))); 1162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 1164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete zone; 1165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone = new SimpleTimeZone(0, "A", 0, 0, 0, 0, 0, -1, 0, 0, 1000, status); 1166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 1167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed. No exception has been thrown for DOM -1 endDay+ savings"); 1168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 1169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("(d) " + UnicodeString(u_errorName(status))); 1170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 1172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete zone; 1173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Make a valid constructor call for subsequent tests. 1174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 0, 1, 0, 0, status); 1175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone->setStartRule(0, -1, 0, 0, status); 1177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 1178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed. No exception has been thrown for DOM -1 setStartRule +savings"); 1179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else{ 1180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("(e) " + UnicodeString(u_errorName(status))); 1181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone->setStartRule(0, -1, 0, status); 1183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 1184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed. No exception has been thrown for DOM -1 setStartRule"); 1185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else{ 1186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("(f) " + UnicodeString(u_errorName(status))); 1187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone->setEndRule(0, -1, 0, 0, status); 1190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 1191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed. No exception has been thrown for DOM -1 setEndRule+savings"); 1192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else{ 1193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("(g) " + UnicodeString(u_errorName(status))); 1194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) zone->setEndRule(0, -1, 0, status); 1197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(U_SUCCESS(status)){ 1198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed. No exception has been thrown for DOM -1 setEndRule"); 1199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else{ 1200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("(h) " + UnicodeString(u_errorName(status))); 1201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete zone; 1203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#endif /* #if !UCONFIG_NO_FORMATTING */ 1206