mirror of
https://github.com/darlinghq/darling-openjdk.git
synced 2025-03-01 12:38:27 +00:00
8202764: api/java_text/SimpleDateFormat/index.html#Format testcases started to fail with JDK11 b12
Reviewed-by: sherman
This commit is contained in:
parent
e0ac880134
commit
58f45b7b35
@ -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 ? "" :
|
||||
|
67
test/jdk/sun/util/resources/cldr/Bug8202764.java
Normal file
67
test/jdk/sun/util/resources/cldr/Bug8202764.java
Normal 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));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user