1 /* 2 * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 4052440 8062588 8210406 27 * @summary Generic tests for the pluggable locales feature 28 * @library providersrc/foobarutils 29 * providersrc/barprovider 30 * providersrc/fooprovider 31 * @modules java.base/sun.util.locale.provider 32 * @build com.foobar.Utils 33 * com.bar.* 34 * com.foo.* 35 * @run main/othervm -Djava.locale.providers=JRE,SPI GenericTest 36 */ 37 38 import java.util.Arrays; 39 import java.util.HashSet; 40 import java.util.Locale; 41 import java.util.Set; 42 43 import com.bar.CalendarDataProviderImpl; 44 import com.bar.CalendarNameProviderImpl; 45 import com.bar.CurrencyNameProviderImpl; 46 import com.bar.CurrencyNameProviderImpl2; 47 import com.bar.GenericTimeZoneNameProviderImpl; 48 import com.bar.LocaleNameProviderImpl; 49 import com.bar.TimeZoneNameProviderImpl; 50 import com.foo.BreakIteratorProviderImpl; 51 import com.foo.CollatorProviderImpl; 52 import com.foo.DateFormatProviderImpl; 53 import com.foo.DateFormatSymbolsProviderImpl; 54 import com.foo.DecimalFormatSymbolsProviderImpl; 55 import com.foo.NumberFormatProviderImpl; 56 57 import sun.util.locale.provider.LocaleProviderAdapter; 58 59 public class GenericTest { 60 61 // test providers 62 BreakIteratorProviderImpl breakIP = new BreakIteratorProviderImpl(); 63 CollatorProviderImpl collatorP = new CollatorProviderImpl(); 64 DateFormatProviderImpl dateFP = new DateFormatProviderImpl(); 65 DateFormatSymbolsProviderImpl dateFSP = new DateFormatSymbolsProviderImpl(); 66 DecimalFormatSymbolsProviderImpl decimalFSP = new DecimalFormatSymbolsProviderImpl(); 67 NumberFormatProviderImpl numberFP = new NumberFormatProviderImpl(); 68 CurrencyNameProviderImpl currencyNP = new CurrencyNameProviderImpl(); 69 CurrencyNameProviderImpl2 currencyNP2 = new CurrencyNameProviderImpl2(); 70 LocaleNameProviderImpl localeNP = new LocaleNameProviderImpl(); 71 TimeZoneNameProviderImpl tzNP = new TimeZoneNameProviderImpl(); 72 GenericTimeZoneNameProviderImpl tzGenNP = new GenericTimeZoneNameProviderImpl(); 73 CalendarDataProviderImpl calDataP = new CalendarDataProviderImpl(); 74 CalendarNameProviderImpl calNameP = new CalendarNameProviderImpl(); 75 main(String[] s)76 public static void main(String[] s) { 77 new GenericTest(); 78 } 79 GenericTest()80 GenericTest() { 81 availableLocalesTest(); 82 localeFallbackTest(); 83 } 84 85 /** 86 * Make sure that all the locales are available from the existing providers 87 */ availableLocalesTest()88 void availableLocalesTest() { 89 // Check that Locale.getAvailableLocales() returns the union of the JRE supported 90 // locales and providers' locales 91 HashSet<Locale> result = 92 new HashSet<>(Arrays.asList(Locale.getAvailableLocales())); 93 HashSet<Locale> expected = 94 new HashSet<>(Arrays.asList(LocaleProviderAdapter.forJRE().getAvailableLocales())); 95 expected.addAll(Arrays.asList(breakIP.getAvailableLocales())); 96 expected.addAll(Arrays.asList(collatorP.getAvailableLocales())); 97 expected.addAll(Arrays.asList(dateFP.getAvailableLocales())); 98 expected.addAll(Arrays.asList(dateFSP.getAvailableLocales())); 99 expected.addAll(Arrays.asList(decimalFSP.getAvailableLocales())); 100 expected.addAll(Arrays.asList(numberFP.getAvailableLocales())); 101 expected.addAll(Arrays.asList(currencyNP.getAvailableLocales())); 102 expected.addAll(Arrays.asList(currencyNP2.getAvailableLocales())); 103 expected.addAll(Arrays.asList(localeNP.getAvailableLocales())); 104 expected.addAll(Arrays.asList(tzNP.getAvailableLocales())); 105 expected.addAll(Arrays.asList(tzGenNP.getAvailableLocales())); 106 expected.addAll(Arrays.asList(calDataP.getAvailableLocales())); 107 expected.addAll(Arrays.asList(calNameP.getAvailableLocales())); 108 if (!result.equals(expected)) { 109 throw new RuntimeException("Locale.getAvailableLocales() does not return the union of locales: diff=" 110 + getDiff(result, expected)); 111 } 112 } 113 114 /** 115 * test with "xx_YY_ZZ", which is an example locale not contained 116 * in Locale.getAvailableLocales(). Fallback tests for supported locales 117 * are done in each xxxProviderTest test cases. 118 */ localeFallbackTest()119 void localeFallbackTest() { 120 Locale xx = new Locale("xx"); 121 Locale dispLocale = new Locale ("xx", "YY", "ZZ"); 122 123 String xxname = xx.getDisplayLanguage(xx); 124 String expected = localeNP.getDisplayLanguage(xx.getLanguage(), dispLocale); 125 if (!xxname.equals(expected)) { 126 throw new RuntimeException("Locale fallback did not perform correctly. got: "+xxname+" expected: "+expected); 127 } 128 } 129 getDiff(Set set1, Set set2)130 private static String getDiff(Set set1, Set set2) { 131 Set s1 = (Set)((HashSet)set1).clone(); 132 s1.removeAll(set2); 133 134 Set s2 = (Set)((HashSet)set2).clone(); 135 s2.removeAll(set1); 136 s2.addAll(s1); 137 return s2.toString(); 138 } 139 }