zarafa/dev-libs/icu/files/icu-4.0.1-TestDisplayNamesM...

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 */