178 lines
8.1 KiB
Diff
178 lines
8.1 KiB
Diff
|
https://bugs.icu-project.org/trac/ticket/6814
|
||
|
https://bugs.icu-project.org/trac/changeset/25681
|
||
|
|
||
|
--- i18n/olsontz.cpp
|
||
|
+++ i18n/olsontz.cpp
|
||
|
@@ -1,6 +1,6 @@
|
||
|
/*
|
||
|
**********************************************************************
|
||
|
-* Copyright (c) 2003-2008, International Business Machines
|
||
|
+* Copyright (c) 2003-2009, International Business Machines
|
||
|
* Corporation and others. All Rights Reserved.
|
||
|
**********************************************************************
|
||
|
* Author: Alan Liu
|
||
|
@@ -526,8 +526,8 @@
|
||
|
if (transitionTimes[i] >= limit) {
|
||
|
break;
|
||
|
}
|
||
|
- if (transitionTimes[i] >= start &&
|
||
|
- dstOffset(typeData[i]) != 0) {
|
||
|
+ if ((transitionTimes[i] >= start && dstOffset(typeData[i]) != 0)
|
||
|
+ || (transitionTimes[i] > start && i > 0 && dstOffset(typeData[i - 1]) != 0)) {
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
--- i18n/timezone.cpp
|
||
|
+++ i18n/timezone.cpp
|
||
|
@@ -1,6 +1,6 @@
|
||
|
/*
|
||
|
*******************************************************************************
|
||
|
-* Copyright (C) 1997-2008, International Business Machines Corporation and *
|
||
|
+* Copyright (C) 1997-2009, International Business Machines Corporation and *
|
||
|
* others. All Rights Reserved. *
|
||
|
*******************************************************************************
|
||
|
*
|
||
|
@@ -1240,6 +1240,8 @@
|
||
|
}
|
||
|
} else {
|
||
|
// The display name for standard time was requested, but currently in DST
|
||
|
+ // or display name for daylight saving time was requested, but this zone no longer
|
||
|
+ // observes DST.
|
||
|
tz = new SimpleTimeZone(rawOffset, tempID);
|
||
|
if (U_FAILURE(status) || tz == NULL) {
|
||
|
if (U_SUCCESS(status)) {
|
||
|
--- test/intltest/tztest.cpp
|
||
|
+++ test/intltest/tztest.cpp
|
||
|
@@ -34,6 +34,11 @@
|
||
|
// class TimeZoneTest
|
||
|
// *****************************************************************************
|
||
|
|
||
|
+// TODO: We should probably read following data at runtime, so we can update
|
||
|
+// the these values every release with necessary data changes.
|
||
|
+const int32_t TimeZoneTest::REFERENCE_YEAR = 2009;
|
||
|
+const char * TimeZoneTest::REFERENCE_DATA_VERSION = "2009d";
|
||
|
+
|
||
|
void TimeZoneTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
|
||
|
{
|
||
|
if (exec) logln("TestSuite TestTimeZone");
|
||
|
@@ -579,18 +584,13 @@
|
||
|
*/
|
||
|
void TimeZoneTest::TestShortZoneIDs()
|
||
|
{
|
||
|
- // TODO: This test case is tzdata sensitive.
|
||
|
- // We should actually put the data version in this test code
|
||
|
- // at build time. For now, we just hardcode the version string
|
||
|
- // and display warning instead of error if non-reference tzdata
|
||
|
- // version is used.
|
||
|
- const char *REFERENCE_DATA_VERSION = "2008i";
|
||
|
-
|
||
|
UErrorCode status = U_ZERO_ERROR;
|
||
|
+
|
||
|
+ // This test case is tzdata version sensitive.
|
||
|
UBool isNonReferenceTzdataVersion = FALSE;
|
||
|
const char *tzdataVer = TimeZone::getTZDataVersion(status);
|
||
|
if (failure(status, "getTZDataVersion")) return;
|
||
|
- if (uprv_strcmp(tzdataVer, REFERENCE_DATA_VERSION) != 0) {
|
||
|
+ if (uprv_strcmp(tzdataVer, TimeZoneTest::REFERENCE_DATA_VERSION) != 0) {
|
||
|
// Note: We want to display a warning message here if
|
||
|
// REFERENCE_DATA_VERSION is out of date - so we
|
||
|
// do not forget to update the value before GA.
|
||
|
@@ -603,11 +603,11 @@
|
||
|
// Note: useDaylightTime returns true if DST is observed
|
||
|
// in the time zone in the current calendar year. The test
|
||
|
// data is valid for the date after the reference year below.
|
||
|
- // If system clock is before the year, some test cases may fail.
|
||
|
- const int32_t REFERENCE_YEAR = 2009;
|
||
|
+ // If system clock is before the year, some test cases may
|
||
|
+ // fail.
|
||
|
GregorianCalendar cal(*TimeZone::getGMT(), status);
|
||
|
if (failure(status, "GregorianCalendar")) return;
|
||
|
- cal.set(REFERENCE_YEAR, UCAL_JANUARY, 2); // day 2 in GMT
|
||
|
+ cal.set(TimeZoneTest::REFERENCE_YEAR, UCAL_JANUARY, 2); // day 2 in GMT
|
||
|
|
||
|
UBool isDateBeforeReferenceYear = ucal_getNow() < cal.getTime(status);
|
||
|
if (failure(status, "Calendar::getTime")) return;
|
||
|
@@ -1898,6 +1898,15 @@
|
||
|
};
|
||
|
|
||
|
void TimeZoneTest::TestDisplayNamesMeta() {
|
||
|
+ UErrorCode status = U_ZERO_ERROR;
|
||
|
+ GregorianCalendar cal(*TimeZone::getGMT(), status);
|
||
|
+ if (failure(status, "GregorianCalendar")) return;
|
||
|
+
|
||
|
+ UBool isReferenceYear = TRUE;
|
||
|
+ if (cal.get(UCAL_YEAR, status) != TimeZoneTest::REFERENCE_YEAR) {
|
||
|
+ isReferenceYear = FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
UBool sawAnError = FALSE;
|
||
|
for (int testNum = 0; zoneDisplayTestData[testNum].zoneName != NULL; testNum++) {
|
||
|
Locale locale = Locale::createFromName(zoneDisplayTestData[testNum].localeName);
|
||
|
@@ -1908,20 +1917,33 @@
|
||
|
locale,
|
||
|
displayName);
|
||
|
if (displayName != zoneDisplayTestData[testNum].expectedDisplayName) {
|
||
|
- sawAnError = TRUE;
|
||
|
char name[100];
|
||
|
UErrorCode status = U_ZERO_ERROR;
|
||
|
displayName.extract(name, 100, NULL, status);
|
||
|
- errln("Incorrect time zone display name. zone = \"%s\",\n"
|
||
|
- " locale = \"%s\", style = %s, Summertime = %d\n"
|
||
|
- " Expected \"%s\", "
|
||
|
- " Got \"%s\"\n", zoneDisplayTestData[testNum].zoneName,
|
||
|
- zoneDisplayTestData[testNum].localeName,
|
||
|
- zoneDisplayTestData[testNum].style==TimeZone::SHORT ?
|
||
|
- "SHORT" : "LONG",
|
||
|
- zoneDisplayTestData[testNum].summerTime,
|
||
|
- zoneDisplayTestData[testNum].expectedDisplayName,
|
||
|
- name);
|
||
|
+ if (isReferenceYear) {
|
||
|
+ sawAnError = TRUE;
|
||
|
+ errln("Incorrect time zone display name. zone = \"%s\",\n"
|
||
|
+ " locale = \"%s\", style = %s, Summertime = %d\n"
|
||
|
+ " Expected \"%s\", "
|
||
|
+ " Got \"%s\"\n", zoneDisplayTestData[testNum].zoneName,
|
||
|
+ zoneDisplayTestData[testNum].localeName,
|
||
|
+ zoneDisplayTestData[testNum].style==TimeZone::SHORT ?
|
||
|
+ "SHORT" : "LONG",
|
||
|
+ zoneDisplayTestData[testNum].summerTime,
|
||
|
+ zoneDisplayTestData[testNum].expectedDisplayName,
|
||
|
+ name);
|
||
|
+ } else {
|
||
|
+ logln("Incorrect time zone display name. zone = \"%s\",\n"
|
||
|
+ " locale = \"%s\", style = %s, Summertime = %d\n"
|
||
|
+ " Expected \"%s\", "
|
||
|
+ " Got \"%s\"\n", zoneDisplayTestData[testNum].zoneName,
|
||
|
+ zoneDisplayTestData[testNum].localeName,
|
||
|
+ zoneDisplayTestData[testNum].style==TimeZone::SHORT ?
|
||
|
+ "SHORT" : "LONG",
|
||
|
+ zoneDisplayTestData[testNum].summerTime,
|
||
|
+ zoneDisplayTestData[testNum].expectedDisplayName,
|
||
|
+ name);
|
||
|
+ }
|
||
|
}
|
||
|
delete zone;
|
||
|
}
|
||
|
--- test/intltest/tztest.h
|
||
|
+++ test/intltest/tztest.h
|
||
|
@@ -1,6 +1,6 @@
|
||
|
|
||
|
/********************************************************************
|
||
|
- * Copyright (c) 1997-2008, International Business Machines
|
||
|
+ * Copyright (c) 1997-2009, International Business Machines
|
||
|
* Corporation and others. All Rights Reserved.
|
||
|
********************************************************************/
|
||
|
|
||
|
@@ -98,6 +98,11 @@
|
||
|
// internal functions
|
||
|
static UnicodeString& formatOffset(int32_t offset, UnicodeString& rv);
|
||
|
static UnicodeString& formatTZID(int32_t offset, UnicodeString& rv);
|
||
|
+
|
||
|
+ // Some test case data is current date/tzdata version sensitive and producing errors
|
||
|
+ // when year/rule are changed.
|
||
|
+ static const int32_t REFERENCE_YEAR;
|
||
|
+ static const char *REFERENCE_DATA_VERSION;
|
||
|
};
|
||
|
|
||
|
#endif /* #if !UCONFIG_NO_FORMATTING */
|