Path: blob/master/test/jdk/java/util/PluggableLocale/DateFormatSymbolsProviderTest.java
41149 views
/*1* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 4052440 7200341 8062588 821040626* @summary DateFormatSymbolsProvider tests27* @library providersrc/foobarutils28* providersrc/fooprovider29* @modules java.base/sun.util.locale.provider30* java.base/sun.util.resources31* @build com.foobar.Utils32* com.foo.*33* @run main/othervm -Djava.locale.providers=JRE,SPI DateFormatSymbolsProviderTest34*/3536import java.text.DateFormatSymbols;37import java.util.Arrays;38import java.util.HashSet;39import java.util.List;40import java.util.Locale;41import java.util.MissingResourceException;42import java.util.ResourceBundle;43import java.util.Set;4445import com.foo.DateFormatSymbolsProviderImpl;4647import sun.util.locale.provider.LocaleProviderAdapter;48import sun.util.locale.provider.ResourceBundleBasedAdapter;4950public class DateFormatSymbolsProviderTest extends ProviderTest {5152DateFormatSymbolsProviderImpl dfsp = new DateFormatSymbolsProviderImpl();53List<Locale> availloc = Arrays.asList(DateFormatSymbols.getAvailableLocales());54List<Locale> providerloc = Arrays.asList(dfsp.getAvailableLocales());55List<Locale> jreloc = Arrays.asList(LocaleProviderAdapter.forJRE().getAvailableLocales());56List<Locale> jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getDateFormatSymbolsProvider().getAvailableLocales());5758public static void main(String[] s) {59new DateFormatSymbolsProviderTest();60}6162DateFormatSymbolsProviderTest() {63availableLocalesTest();64objectValidityTest();65hashCodeTest();66}6768void availableLocalesTest() {69Set<Locale> localesFromAPI = new HashSet<>(availloc);70Set<Locale> localesExpected = new HashSet<>(jreloc);71localesExpected.addAll(providerloc);72if (localesFromAPI.equals(localesExpected)) {73System.out.println("availableLocalesTest passed.");74} else {75throw new RuntimeException("availableLocalesTest failed");76}77}7879void objectValidityTest() {8081for (Locale target: availloc) {82// pure JRE implementation83ResourceBundle rb = ((ResourceBundleBasedAdapter)LocaleProviderAdapter.forJRE()).getLocaleData().getDateFormatData(target);84boolean jreSupportsLocale = jreimplloc.contains(target);8586// JRE string arrays87String[][] jres = new String[6][];88if (jreSupportsLocale) {89try {90jres[0] = (String[])rb.getObject("MonthNames");91jres[1] = (String[])rb.getObject("MonthAbbreviations");92jres[2] = (String[])rb.getObject("DayNames");93jres[3] = (String[])rb.getObject("DayAbbreviations");94jres[4] = (String[])rb.getObject("AmPmMarkers");95jres[5] = (String[])rb.getObject("Eras");96} catch (MissingResourceException mre) {}97}9899// result object100DateFormatSymbols dfs = DateFormatSymbols.getInstance(target);101String[][] result = new String[6][];102result[0] = dfs.getMonths();103result[1] = dfs.getShortMonths();104// note that weekdays are 1-based105String[] tmp = dfs.getWeekdays();106result[2] = new String[7];107System.arraycopy(tmp, 1, result[2], 0, result[2].length);108tmp = dfs.getShortWeekdays();109result[3] = new String[7];110System.arraycopy(tmp, 1, result[3], 0, result[3].length);111result[4] = dfs.getAmPmStrings();112result[5] = dfs.getEras();113114// provider's object (if any)115DateFormatSymbols providersDfs= null;116String[][] providers = new String[6][];117if (providerloc.contains(target)) {118providersDfs = dfsp.getInstance(target);119providers[0] = providersDfs.getMonths();120providers[1] = providersDfs.getShortMonths();121// note that weekdays are 1-based122tmp = dfs.getWeekdays();123providers[2] = new String[7];124System.arraycopy(tmp, 1, providers[2], 0, providers[2].length);125tmp = dfs.getShortWeekdays();126providers[3] = new String[7];127System.arraycopy(tmp, 1, providers[3], 0, providers[3].length);128providers[4] = providersDfs.getAmPmStrings();129providers[5] = providersDfs.getEras();130}131132for (int i = 0; i < result.length; i ++) {133for (int j = 0; j < result[i].length; j++) {134String jresStr =135(jres[i] != null ? jres[i][j] : null);136String providersStr =137(providers[i] != null ? providers[i][j] : null);138String resultStr =139(result[i] != null ? result[i][j] : null);140checkValidity(target, jresStr, providersStr, resultStr, jreSupportsLocale);141}142}143}144}145146// Bug 7200341.147void hashCodeTest() {148for (Locale target: availloc) {149// look for provider's object150DateFormatSymbols dfs = DateFormatSymbols.getInstance(target);151if (dfs.getClass().getSimpleName().equals("FooDateFormatSymbols")) {152// call its hashCode(). success if no ArrayIndexOutOfBoundsException is thrown.153dfs.hashCode();154break;155}156}157}158}159160