8202764: api/java_text/SimpleDateFormat/index.html#Format testcases started to fail with JDK11 b12

Reviewed-by: sherman
This commit is contained in:
Naoto Sato 2018-05-11 10:07:10 -07:00
parent e0ac880134
commit 58f45b7b35
2 changed files with 100 additions and 10 deletions

View File

@ -109,6 +109,7 @@ public class CLDRConverter {
private static final String[] AVAILABLE_TZIDS = TimeZone.getAvailableIDs();
private static String zoneNameTempFile;
private static String tzDataDir;
private static final Map<String, String> canonicalTZMap = new HashMap<>();
static enum DraftType {
UNCONFIRMED,
@ -439,6 +440,15 @@ public class CLDRConverter {
// Parse timezone
handlerTimeZone = new TimeZoneParseHandler();
parseLDMLFile(new File(TIMEZONE_SOURCE_FILE), handlerTimeZone);
// canonical tz name map
// alias -> primary
handlerTimeZone.getData().forEach((k, v) -> {
String[] ids = ((String)v).split("\\s");
for (int i = 1; i < ids.length; i++) {
canonicalTZMap.put(ids[i], ids[0]);
}
});
}
private static void parseLDMLFile(File srcfile, AbstractLDMLHandler handler) throws Exception {
@ -658,7 +668,27 @@ public class CLDRConverter {
handlerMetaZones.get(tzid) == null ||
handlerMetaZones.get(tzid) != null &&
map.get(METAZONE_ID_PREFIX + handlerMetaZones.get(tzid)) == null) {
// First, check the CLDR meta key
// First, check the alias
String canonID = canonicalTZMap.get(tzid);
if (canonID != null && !tzid.equals(canonID)) {
Object value = map.get(TIMEZONE_ID_PREFIX + canonID);
if (value != null) {
names.put(tzid, value);
return;
} else {
String meta = handlerMetaZones.get(canonID);
if (meta != null) {
value = map.get(METAZONE_ID_PREFIX + meta);
if (value != null) {
names.put(tzid, meta);
return;
}
}
}
}
// Check the CLDR meta key
Optional<Map.Entry<String, String>> cldrMeta =
handlerMetaZones.getData().entrySet().stream()
.filter(me ->
@ -666,7 +696,7 @@ public class CLDRConverter {
(String[])map.get(METAZONE_ID_PREFIX + me.getValue())))
.findAny();
cldrMeta.ifPresentOrElse(meta -> names.put(tzid, meta.getValue()), () -> {
// check the JRE meta key, add if there is not.
// Check the JRE meta key, add if there is not.
Optional<Map.Entry<String[], String>> jreMeta =
jreMetaMap.entrySet().stream()
.filter(jm -> Arrays.deepEquals(data, jm.getKey()))
@ -1024,16 +1054,9 @@ public class CLDRConverter {
}
private static Stream<String> zidMapEntry() {
Map<String, String> canonMap = new HashMap<>();
handlerTimeZone.getData().entrySet().stream()
.forEach(e -> {
String[] ids = ((String)e.getValue()).split("\\s");
for (int i = 1; i < ids.length; i++) {
canonMap.put(ids[i], ids[0]);
}});
return ZoneId.getAvailableZoneIds().stream()
.map(id -> {
String canonId = canonMap.getOrDefault(id, id);
String canonId = canonicalTZMap.getOrDefault(id, id);
String meta = handlerMetaZones.get(canonId);
String zone001 = handlerMetaZones.zidMap().get(meta);
return zone001 == null ? "" :

View File

@ -0,0 +1,67 @@
/*
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8202764
* @modules jdk.localedata
* @summary Checks time zone names are consistent with aliased ids,
* between DateFormatSymbols.getZoneStrings() and getDisplayName()
* of TimeZone/ZoneId classes
* @run testng/othervm Bug8202764
*/
import static org.testng.Assert.assertEquals;
import java.time.ZoneId;
import java.time.format.TextStyle;
import java.text.DateFormatSymbols;
import java.util.Arrays;
import java.util.Locale;
import java.util.Set;
import java.util.TimeZone;
import org.testng.annotations.Test;
public class Bug8202764 {
@Test
public void testAliasedTZs() {
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
Arrays.stream(DateFormatSymbols.getInstance(Locale.US).getZoneStrings())
.forEach(zone -> {
System.out.println(zone[0]);
TimeZone tz = TimeZone.getTimeZone(zone[0]);
assertEquals(zone[1], tz.getDisplayName(false, TimeZone.LONG, Locale.US));
assertEquals(zone[2], tz.getDisplayName(false, TimeZone.SHORT, Locale.US));
assertEquals(zone[3], tz.getDisplayName(true, TimeZone.LONG, Locale.US));
assertEquals(zone[4], tz.getDisplayName(true, TimeZone.SHORT, Locale.US));
if (zoneIds.contains(zone[0])) {
// Some of the ids, e.g. three-letter ids are not supported in ZoneId
ZoneId zi = tz.toZoneId();
assertEquals(zone[5], zi.getDisplayName(TextStyle.FULL, Locale.US));
assertEquals(zone[6], zi.getDisplayName(TextStyle.SHORT, Locale.US));
}
});
}
}