/* * Copyright (c) 2007, 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 4052440 8062588 8210406 * @summary CollatorProvider tests * @library providersrc/foobarutils * providersrc/fooprovider * @modules java.base/sun.util.locale.provider * java.base/sun.util.resources * @build com.foobar.Utils * com.foo.* * @run main/othervm -Djava.locale.providers=JRE,SPI CollatorProviderTest */ import java.text.Collator; import java.text.ParseException; import java.text.RuleBasedCollator; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.Set; import com.foo.CollatorProviderImpl; import sun.util.locale.provider.AvailableLanguageTags; import sun.util.locale.provider.LocaleProviderAdapter; import sun.util.locale.provider.ResourceBundleBasedAdapter; public class CollatorProviderTest extends ProviderTest { CollatorProviderImpl cp = new CollatorProviderImpl(); List availloc = Arrays.asList(Collator.getAvailableLocales()); List providerloc = Arrays.asList(cp.getAvailableLocales()); List jreloc = Arrays.asList(LocaleProviderAdapter.forJRE().getAvailableLocales()); List jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getCollatorProvider().getAvailableLocales()); public static void main(String[] s) { new CollatorProviderTest(); } CollatorProviderTest() { availableLocalesTest(); objectValidityTest(); } void availableLocalesTest() { Set localesFromAPI = new HashSet<>(availloc); Set localesExpected = new HashSet<>(jreloc); localesExpected.addAll(providerloc); if (localesFromAPI.equals(localesExpected)) { System.out.println("availableLocalesTest passed."); } else { throw new RuntimeException("availableLocalesTest failed"); } } void objectValidityTest() { Collator def = Collator.getInstance(new Locale("")); String defrules = ((RuleBasedCollator)def).getRules(); for (Locale target: availloc) { // pure JRE implementation Set jreimplloc = new HashSet<>(); for (String tag : ((AvailableLanguageTags)LocaleProviderAdapter.forJRE().getCollatorProvider()).getAvailableLanguageTags()) { jreimplloc.add(Locale.forLanguageTag(tag)); } ResourceBundle rb = ((ResourceBundleBasedAdapter)LocaleProviderAdapter.forJRE()).getLocaleData().getCollationData(target); boolean jreSupportsLocale = jreimplloc.contains(target); // result object Collator result = Collator.getInstance(target); // provider's object (if any) Collator providersResult = null; if (providerloc.contains(target)) { providersResult = cp.getInstance(target); } // JRE rule Collator jresResult = null; if (jreSupportsLocale) { try { String rules = rb.getString("Rule"); jresResult = new RuleBasedCollator(defrules+rules); jresResult.setDecomposition(Collator.NO_DECOMPOSITION); } catch (MissingResourceException mre) { } catch (ParseException pe) { } } checkValidity(target, jresResult, providersResult, result, jreSupportsLocale); } } }