| /* |
| * 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++; |
| } |
| } |