| /* | |
| * Copyright (c) 2007, 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 5102289 | |
| * @summary Test the ResourceBundle.Control factory methods. | |
| */ | |
| import java.util.*; | |
| import static java.util.ResourceBundle.Control.*; | |
| public class ControlFactoryTest { | |
| /** | |
| * An interface for calling ResourceBundle.Control.getControl or | |
| * ResourceBundle.Control.getNoFallbackControl. | |
| */ | |
| private static interface Factory { | |
| public ResourceBundle.Control getControl(List<String> formats); | |
| public String name(); | |
| } | |
| static int errors; | |
| public static void main(String[] args) { | |
| // Test getControl. | |
| testControlFactory(new Factory() { | |
| public ResourceBundle.Control getControl(List<String> formats) { | |
| return ResourceBundle.Control.getControl(formats); | |
| } | |
| public String name() { return "getControl"; } | |
| }, Locale.getDefault()); | |
| // Test getNoFallbackControl. | |
| testControlFactory(new Factory() { | |
| public ResourceBundle.Control getControl(List<String> formats) { | |
| return ResourceBundle.Control.getNoFallbackControl(formats); | |
| } | |
| public String name() { return "getNoFallbackControl"; } | |
| }, null); | |
| if (errors > 0) { | |
| throw new RuntimeException("FAILED: " + errors + " error(s)"); | |
| } | |
| } | |
| private static void testControlFactory(Factory factory, Locale loc) { | |
| testGetControl(factory, loc, FORMAT_DEFAULT, "java.class", "java.properties"); | |
| testGetControl(factory, loc, FORMAT_CLASS, "java.class"); | |
| testGetControl(factory, loc, FORMAT_PROPERTIES, "java.properties"); | |
| // test IllegalArgumentException | |
| String[][] data = { | |
| { "java.class", "java.properties", "java.xml" }, | |
| { "java.class", "java.props" }, | |
| { "java.properties", "java.class" }, | |
| { "java.foo", "java.properties" }, | |
| { "java.foo" }, | |
| { null }, | |
| }; | |
| for (String[] fmts : data) { | |
| try { | |
| List<String> fmt = Arrays.asList(fmts); | |
| ResourceBundle.Control control = factory.getControl(fmt); | |
| error("getControl: %s%n", fmt); | |
| } catch (IllegalArgumentException e) { | |
| } | |
| } | |
| // test NPE | |
| try { | |
| ResourceBundle.Control control = factory.getControl(null); | |
| error("%s: doesn't throw NPE.%n", factory.name()); | |
| } catch (NullPointerException npe) { | |
| } | |
| } | |
| private static void testGetControl(Factory factory, | |
| Locale loc, | |
| final List<String> FORMATS, | |
| String... fmtStrings) { | |
| final ResourceBundle.Control CONTROL = factory.getControl(FORMATS); | |
| List<String> fmt = CONTROL.getFormats("any"); | |
| if (fmt != FORMATS) { | |
| error("%s: returns %s, expected %s.%n", | |
| factory.name(), fmt, FORMATS); | |
| } | |
| ResourceBundle.Control control = null; | |
| // Check if getControl always returns the expected singleton. | |
| for (int i = 0; i < 10; i++) { | |
| fmt = Arrays.asList(fmtStrings); | |
| control = factory.getControl(fmt); | |
| if (control != CONTROL) { | |
| error("%s: doesn't return the singleton: got %s, expected %s%n", | |
| factory.name(), control, CONTROL); | |
| } | |
| } | |
| // Check if getFallbackLocale performs as expected. | |
| Locale defaultLocale = Locale.getDefault(); | |
| Locale nonDefaultLocale = defaultLocale.equals(Locale.US) ? Locale.JAPAN : Locale.US; | |
| if (loc != null) { | |
| // Test ResourceBundle.Control.getControl() | |
| Locale l = CONTROL.getFallbackLocale("any", nonDefaultLocale); | |
| if (!defaultLocale.equals(l)) { | |
| error("%s: getFallbackLocale doesn't return default locale. got %s, expected %s%n", | |
| factory.name(), toString(l), toString(defaultLocale)); | |
| } | |
| l = CONTROL.getFallbackLocale("any", defaultLocale); | |
| if (l != null) { | |
| error("%s: getFallbackLocale doesn't return null. got %s%n", | |
| factory.name(), toString(l)); | |
| } | |
| } else { | |
| // Test ResourceBundle.Control.getNoFallbackControl() | |
| Locale l = CONTROL.getFallbackLocale("any", nonDefaultLocale); | |
| if (l != null) { | |
| error("%s: getFallbackLocale doesn't return null. got %s%n", | |
| factory.name(), toString(l)); | |
| } | |
| l = CONTROL.getFallbackLocale("any", defaultLocale); | |
| if (l != null) { | |
| error("%s: getFallbackLocale doesn't return null. got %s%n", | |
| factory.name(), toString(l)); | |
| } | |
| } | |
| } | |
| private static String toString(Locale loc) { | |
| if (loc == null) | |
| return "null"; | |
| return "\"" + loc.getLanguage() + "_" + loc.getCountry() + "_" + loc.getVariant() + "\""; | |
| } | |
| private static void error(String msg) { | |
| System.out.println(msg); | |
| errors++; | |
| } | |
| private static void error(String fmt, Object... args) { | |
| System.out.printf(fmt, args); | |
| errors++; | |
| } | |
| } |