--- old/test/jdk/sun/text/resources/JavaTimeSupplementaryTest.java 2018-06-13 10:51:30.000000000 +0530 +++ /dev/null 2018-06-13 10:51:30.000000000 +0530 @@ -1,154 +0,0 @@ -/* - * Copyright (c) 2016, 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 8159943 8154797 - * @modules java.base/sun.util.locale.provider - * java.base/sun.util.resources - * jdk.localedata - * @summary Test for checking consistency between CLDR and COMPAT locale data - * for java.time. - */ - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.ResourceBundle; -import java.util.Set; -import java.util.TreeSet; -import java.util.stream.Collectors; -import sun.util.locale.provider.LocaleProviderAdapter.Type; -import sun.util.locale.provider.LocaleProviderAdapter; - -public class JavaTimeSupplementaryTest { - // COMPAT-to-CLDR locale mapping - private static final Map LOCALEMAP; - static { - LOCALEMAP = new HashMap<>(); - LOCALEMAP.put(new Locale("hi", "IN"), new Locale("hi")); - LOCALEMAP.put(new Locale("no", "NO", "NY"), new Locale("nn", "NO")); - LOCALEMAP.put(new Locale("no"), new Locale("nb")); - LOCALEMAP.put(Locale.TAIWAN, Locale.forLanguageTag("zh-Hant")); - LOCALEMAP.put(new Locale("zh", "HK"), Locale.forLanguageTag("zh-Hant-HK")); - LOCALEMAP.put(new Locale("zh", "SG"), Locale.forLanguageTag("zh-Hans-SG")); - LOCALEMAP.put(new Locale("sr", "BA"), Locale.forLanguageTag("sr-Cyrl-BA")); - } - - private static final String[] PREFIXES = { - "Quarter", - "java.time.", - "calendarname.", - "field.", - "islamic.", - "roc.", - "timezone." - }; - - // All available locales for the COMPAT FormatData resource bundles - static final List COMPAT_LOCALES - = Arrays.asList(LocaleProviderAdapter.forJRE() - .getDateFormatSymbolsProvider().getAvailableLocales()); - - static int errors; - - public static void main(String... args) { - for (Locale locale : COMPAT_LOCALES) { - ResourceBundle compat - = LocaleProviderAdapter.forJRE() - .getLocaleResources(locale).getJavaTimeFormatData(); - if (!compat.getLocale().equals(locale)) { - continue; - } - Locale cldrLocale = toCldrLocale(locale); - ResourceBundle cldr - = LocaleProviderAdapter.forType(Type.CLDR) - .getLocaleResources(locale).getJavaTimeFormatData(); - if (!cldr.getLocale().equals(cldrLocale)) { - continue; - } - compareResources(compat, cldr); - } - if (errors > 0) { - throw new RuntimeException(errors + " failure(s)"); - } - } - - private static Locale toCldrLocale(Locale compatLocale) { - Locale loc = LOCALEMAP.get(compatLocale); - return loc != null ? loc: compatLocale; - } - - private static void compareResources(ResourceBundle compat, ResourceBundle cldr) { - Set supplementalKeys = getSupplementalKeys(compat); - for (String key : supplementalKeys) { - Object compatData = compat.getObject(key); - String cldrKey = toCldrKey(key); - Object cldrData = cldr.containsKey(cldrKey) ? cldr.getObject(cldrKey) : null; - if (!Objects.deepEquals(compatData, cldrData)) { - // OK if key is for the Buddhist or Japanese calendars which had been - // supported before java.time, or if key is "java.time.short.Eras" due - // to legacy era names. - if (!(key.contains("buddhist") || key.contains("japanese") - || key.equals("java.time.short.Eras"))) { - errors++; - System.out.print("Failure: "); - } - System.out.println("diff: " + compat.getLocale().toLanguageTag() + "\n" - + " COMPAT: " + key + " -> " + toString(compatData) + "\n" - + " CLDR: " + cldrKey + " -> " + toString(cldrData)); - } - } - } - - private static Set getSupplementalKeys(ResourceBundle rb) { - // Collect keys starting with any of PREFIXES - Set keys = rb.keySet().stream() - .filter(k -> Arrays.stream(PREFIXES).anyMatch(p -> k.startsWith(p))) - .collect(Collectors.toCollection(TreeSet::new)); - return keys; - } - - /** - * Removes "java.time." prefix where it's unused in CLDR. - */ - private static String toCldrKey(String key) { - if (key.contains("short.Eras")) { - key = key.replace("short.", ""); - } - if (key.startsWith("java.time.") && key.endsWith(".Eras")) { - return key.substring("java.time.".length()); - } - return key; - } - - private static String toString(Object data) { - if (data instanceof String[]) { - return Arrays.toString((String[]) data); - } - return data.toString(); - } -}