/*
*******************************************************************************
-* Copyright (C) 2007-2010, International Business Machines Corporation and *
-* others. All Rights Reserved. *
+* Copyright (C) 2007-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
*******************************************************************************
*/
#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break
#define HOUR (60*60*1000)
-static const UVersionInfo ICU_453 = {4,5,3,0};
-
static const char *const TESTZIDS[] = {
"AGT",
"America/New_York",
len = tzenum->count(status);
} else {
tzenum = NULL;
- len = (int32_t)sizeof(TESTZIDS)/sizeof(TESTZIDS[0]);
+ len = UPRV_LENGTHOF(TESTZIDS);
}
}
CASE(14, TestT6216);
CASE(15, TestT6669);
CASE(16, TestVTimeZoneWrapper);
+ CASE(17, TestT8943);
default: name = ""; break;
}
}
getUTCMillis(2005, UCAL_JULY, 1),
getUTCMillis(2010, UCAL_NOVEMBER, 1),
};
- int32_t numTimes = sizeof(testTimes)/sizeof(UDate);
+ int32_t numTimes = UPRV_LENGTHOF(testTimes);
UErrorCode status = U_ZERO_ERROR;
TestZIDEnumeration tzenum(!quick);
InitialTimeZoneRule *initial;
int32_t i, j;
// Get test times
- UDate times[sizeof(TestDates) / (3 * sizeof(int32_t))];
+ UDate times[UPRV_LENGTHOF(TestDates)];
int32_t numTimes;
UErrorCode status = U_ZERO_ERROR;
return TRUE;
}
+// Test case for ticket#8943
+// RuleBasedTimeZone#getOffsets throws NPE
+void
+TimeZoneRuleTest::TestT8943(void) {
+ UErrorCode status = U_ZERO_ERROR;
+ UnicodeString id("Ekaterinburg Time");
+ UnicodeString stdName("Ekaterinburg Standard Time");
+ UnicodeString dstName("Ekaterinburg Daylight Time");
+
+ InitialTimeZoneRule *initialRule = new InitialTimeZoneRule(stdName, 18000000, 0);
+ RuleBasedTimeZone *rbtz = new RuleBasedTimeZone(id, initialRule);
+
+ DateTimeRule *dtRule = new DateTimeRule(UCAL_OCTOBER, -1, UCAL_SUNDAY, 10800000, DateTimeRule::WALL_TIME);
+ AnnualTimeZoneRule *atzRule = new AnnualTimeZoneRule(stdName, 18000000, 0, dtRule, 2000, 2010);
+ rbtz->addTransitionRule(atzRule, status);
+
+ dtRule = new DateTimeRule(UCAL_MARCH, -1, UCAL_SUNDAY, 7200000, DateTimeRule::WALL_TIME);
+ atzRule = new AnnualTimeZoneRule(dstName, 18000000, 3600000, dtRule, 2000, 2010);
+ rbtz->addTransitionRule(atzRule, status);
+
+ dtRule = new DateTimeRule(UCAL_JANUARY, 1, 0, DateTimeRule::WALL_TIME);
+ atzRule = new AnnualTimeZoneRule(stdName, 21600000, 0, dtRule, 2011, AnnualTimeZoneRule::MAX_YEAR);
+ rbtz->addTransitionRule(atzRule, status);
+
+ dtRule = new DateTimeRule(UCAL_JANUARY, 1, 1, DateTimeRule::WALL_TIME);
+ atzRule = new AnnualTimeZoneRule(dstName, 21600000, 0, dtRule, 2011, AnnualTimeZoneRule::MAX_YEAR);
+ rbtz->addTransitionRule(atzRule, status);
+ rbtz->complete(status);
+
+ if (U_FAILURE(status)) {
+ errln("Failed to construct a RuleBasedTimeZone");
+ } else {
+ int32_t raw, dst;
+ rbtz->getOffset(1293822000000.0 /* 2010-12-31 19:00:00 UTC */, FALSE, raw, dst, status);
+ if (U_FAILURE(status)) {
+ errln("Error invoking getOffset");
+ } else if (raw != 21600000 || dst != 0) {
+ errln(UnicodeString("Fail: Wrong offsets: ") + raw + "/" + dst + " Expected: 21600000/0");
+ }
+ }
+
+ delete rbtz;
+}
#endif /* #if !UCONFIG_NO_FORMATTING */