1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.util;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport static java.util.ResourceBundle.Control.FORMAT_CLASS;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport static java.util.ResourceBundle.Control.FORMAT_DEFAULT;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport static java.util.ResourceBundle.Control.FORMAT_PROPERTIES;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.MalformedURLException;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URL;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URLClassLoader;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Enumeration;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashSet;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Locale;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.MissingResourceException;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ResourceBundle;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Set;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.StringTokenizer;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Vector;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ResourceBundle.Control;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.resource.Support_Resources;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.luni.tests.support.B;
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test cases for java.util.ResourceBundle.
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ResourceBundleTest extends junit.framework.TestCase {
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final String PROPERTIES_NAME = Support_Resources.RESOURCE_PACKAGE_NAME
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            + ".hyts_resource"; //$NON-NLS-1$
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final String SUBFOLDER_PROPERTIES_NAME = "tests.resources.subfolder.tests.resources.hyts_resource"; //$NON-NLS-1$
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final String SUBFOLDER_NOROOT_NAME = "tests.resources.subfolder.tests.norootresources.hyts_resource"; //$NON-NLS-1$
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final String CLASS_NAME = "tests.support.Support_TestResource"; //$NON-NLS-1$
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final String PROPERTIES_NAME_COPY = "hyts_resource_copy"; //$NON-NLS-1$
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final ClassLoader URL_LOADER = getURLClassLoader();
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final ClassLoader SYSTEM_LOADER = ClassLoader
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            .getSystemClassLoader();
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Control CLASS_CONTROL = Control
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            .getControl(FORMAT_CLASS);
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Control PROPERTIES_CONTROL = Control
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            .getControl(FORMAT_PROPERTIES);
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Control DEFAULT_CONTROL = Control
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            .getControl(FORMAT_DEFAULT);
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.ResourceBundle#getString(java.lang.String)
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getStringLjava_lang_String() {
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle bundle;
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String name = "tests.support.Support_TestResource";
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(new Locale("en", "US"));
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong value parent4", "frFRVARValue4", bundle
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent4"));
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong value parent3", "frFRValue3", bundle
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent3"));
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong value parent2", "frValue2", bundle
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent2"));
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong value parent1", "parentValue1", bundle
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent1"));
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong value child3", "frFRVARChildValue3", bundle
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("child3"));
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong value child2", "frFRVARChildValue2", bundle
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("child2"));
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong value child1", "frFRVARChildValue1", bundle
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("child1"));
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-5698
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle("Does not exist");
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNotNull(e.getLocalizedMessage());
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Locale LOCALE_FRFR = new Locale("fr", "FR");
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Locale LOCALE_FR = new Locale("fr");
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Locale LOCALE_EN = new Locale("en");
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Locale LOCALE_ENUSVAR = new Locale("en", "US", "VAR");
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private ResourceBundle bundle;
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private Locale defLocale = null;
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.ResourceBundle#getBundle(java.lang.String,
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.util.Locale)
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getBundleLjava_lang_StringLjava_util_Locale() {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(CLASS_NAME, new Locale("fr", "FR",
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "VAR"));
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong bundle fr_FR_VAR", "frFRVARValue4", bundle
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent4"));
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(CLASS_NAME, new Locale("fr", "FR",
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "v1"));
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong bundle fr_FR_v1", "frFRValue4", bundle
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent4"));
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(CLASS_NAME, new Locale("fr", "US",
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "VAR"));
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong bundle fr_US_var", "frValue4", bundle
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent4"));
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(CLASS_NAME, new Locale("de", "FR",
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "VAR"));
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong bundle de_FR_var", "enUSValue4", bundle
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent4"));
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(new Locale("fr", "FR", "VAR"));
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(CLASS_NAME, new Locale("de", "FR",
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "v1"));
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong bundle de_FR_var 2", "frFRVARValue4", bundle
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent4"));
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(new Locale("de", "US"));
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(CLASS_NAME, new Locale("de", "FR",
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "var"));
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong bundle de_FR_var 2", "parentValue4", bundle
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("parent4"));
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-5698
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle("Does not exist", Locale.getDefault());
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNotNull(e.getLocalizedMessage());
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.ResourceBundle#getBundle(java.lang.String,
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.util.Locale, java.lang.ClassLoader)
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getBundleLjava_lang_StringLjava_util_LocaleLjava_lang_ClassLoader() {
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(PROPERTIES_NAME, LOCALE_EN);
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(PROPERTIES_NAME, LOCALE_EN,
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URL_LOADER);
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong cached value", "en_resource", bundle
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("property"));
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String classPath = System.getProperty("java.class.path");
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        StringTokenizer tok = new StringTokenizer(classPath, File.pathSeparator);
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Vector urlVec = new Vector();
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String resPackage = Support_Resources.RESOURCE_PACKAGE;
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (tok.hasMoreTokens()) {
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String path = (String) tok.nextToken();
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String url;
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (new File(path).isDirectory())
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    url = "file:" + path + resPackage + "subfolder/";
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                else
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    url = "jar:file:" + path + "!" + resPackage + "subfolder/";
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                urlVec.addElement(new URL(url));
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MalformedURLException e) {
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL[] urls = new URL[urlVec.size()];
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < urlVec.size(); i++)
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            urls[i] = (URL) urlVec.elementAt(i);
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URLClassLoader loader = new URLClassLoader(urls, null);
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String name = Support_Resources.RESOURCE_PACKAGE_NAME
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + ".hyts_resource";
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle bundle = ResourceBundle.getBundle(name, Locale
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getDefault());
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong value read", "parent", bundle.getString("property"));
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(name, Locale.getDefault(), loader);
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong cached value", "en_US_resource", bundle
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("property"));
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-3823
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        B bb = new B();
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String s = bb.find("nonexistent");
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s = bb.find("name");
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Wrong property got", "Name", s);
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-5698
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle("Does not exist", Locale.getDefault(),
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    loader);
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNotNull(e.getLocalizedMessage());
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static URLClassLoader getURLClassLoader() {
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String classPath = System.getProperty("java.class.path");
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        StringTokenizer tok = new StringTokenizer(classPath, File.pathSeparator);
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Vector<URL> urlVec = new Vector<URL>();
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String resPackage = Support_Resources.RESOURCE_PACKAGE;
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (tok.hasMoreTokens()) {
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String path = tok.nextToken();
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String url;
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (new File(path).isDirectory()) {
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    url = "file:" + path + resPackage + "subfolder/";
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    url = "jar:file:" + path + "!" + resPackage + "subfolder/";
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                urlVec.addElement(new URL(url));
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MalformedURLException e) {
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // ignore
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // add temp path if possible
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String tmpdir = System.getProperty("java.io.tmpdir");
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (null != tmpdir) {
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                urlVec.add(new URL("file:" + tmpdir));
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (MalformedURLException e) {
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // ignore
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL[] urls = new URL[urlVec.size()];
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < urlVec.size(); i++) {
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            urls[i] = urlVec.elementAt(i);
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URLClassLoader loader = new URLClassLoader(urls, null);
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return loader;
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.ResourceBundle#getObject(java.lang.String)
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getObjectLjava_lang_String() {
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-5698
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle bundle;
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String name = "tests.support.Support_TestResource";
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Locale.setDefault(new Locale("en", "US"));
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR",
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "VAR"));
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bundle.getObject("not exist");
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNotNull(e.getLocalizedMessage());
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getBundle_getClassName() {
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-1759
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale locale = Locale.GERMAN;
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String nonExistentBundle = "Non-ExistentBundle";
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(nonExistentBundle, locale, this.getClass()
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getClassLoader());
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("MissingResourceException expected!");
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(nonExistentBundle, locale);
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("MissingResourceException expected!");
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        locale = Locale.getDefault();
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(nonExistentBundle);
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("MissingResourceException expected!");
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Can cause {@link IllegalArgumentException} in getBundle method
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class NullCandidateLocalesControl extends Control {
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @see java.util.ResourceBundle.Control#getCandidateLocales(java.lang.String,
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         *      java.util.Locale)
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @Override
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public List<Locale> getCandidateLocales(@SuppressWarnings("unused")
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String baseName, @SuppressWarnings("unused")
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale locale) {
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return null;
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the class and constructor must be public so ResourceBundle has the
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * possibility to instantiate
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class GetBundleTest {
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public GetBundleTest() {
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Try to load a resource with the same name as the class.
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // getBundle() should not try to instantiate the class since
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // its not a ResourceBundle. If a .properties file exists it
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // would be loaded.
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getBundle("org.apache.harmony.luni.tests.java.util.ResourceBundleTest$GetBundleTest");
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.util.ResourceBundle#getBundle(java.lang.String)
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getBundleLjava_lang_String() {
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /* ResourceBundle.getBundle recursion loading class name */
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new GetBundleTest();
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * The control with given formats.
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class GivenFormatsControl extends Control {
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        List<String> formats;
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GivenFormatsControl(List<String> theFormats) {
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super();
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            formats = theFormats;
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @see java.util.ResourceBundle.Control#getFormats(java.lang.String)
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @SuppressWarnings("nls")
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @Override
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public List<String> getFormats(@SuppressWarnings("unused")
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String baseName) {
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return formats;
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * The control with reverse formats with default Control and no fallback
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * locale.
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class ReverseNoFallbackLocaleControl extends Control {
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @see java.util.ResourceBundle.Control#getFormats(java.lang.String)
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @SuppressWarnings("nls")
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @Override
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public List<String> getFormats(@SuppressWarnings("unused")
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String baseName) {
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return Arrays
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .asList(new String[] { "java.properties", "java.class" });
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @see java.util.ResourceBundle.Control#getFallbackLocale(java.lang.String,
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         *      java.util.Locale)
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @Override
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Locale getFallbackLocale(@SuppressWarnings("unused")
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String baseName, @SuppressWarnings("unused")
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale locale) {
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return null;
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests {@link java.util.ResourceBundle#getBundle(String, java.util.ResourceBundle.Control)}
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getBundle_LStringLControl() {
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(LOCALE_FRFR);
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                DEFAULT_CONTROL);
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle("wrongName", DEFAULT_CONTROL);
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(null, DEFAULT_CONTROL);
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, (Control) null);
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // illegal control causes IllegalArgumentException
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Control otherControl = new NullCandidateLocalesControl();
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, otherControl);
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw IllegalArgumentException");
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests {@link java.util.ResourceBundle#getBundle(String, Locale, java.util.ResourceBundle.Control)}
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getBundle_LStringLLocaleLControl() {
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, DEFAULT_CONTROL);
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle("wrongName", LOCALE_FRFR, DEFAULT_CONTROL);
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(null, LOCALE_FRFR, DEFAULT_CONTROL);
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, null,
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    DEFAULT_CONTROL);
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    (Control) null);
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // illegal control causes IllegalArgumentException
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Control otherControl = new NullCandidateLocalesControl();
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    otherControl);
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw IllegalArgumentException");
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests {@link java.util.ResourceBundle#getBundle(String, Locale, ClassLoader, java.util.ResourceBundle.Control)}
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getBundle_LStringLLocaleLClassLoaderLControl() {
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        getBundleWithControlTester();
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private void getBundleWithControlTester() {
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 1. cache feature: is tested in other methods
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 2. Formats/Locale
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // the "reverse" control that take java.properties first
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Control reverseControl = new GivenFormatsControl(Arrays
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .asList(new String[] { "java.properties", "java.class" }));
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // locale that has both class file and properties file support.
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, DEFAULT_CONTROL);
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, CLASS_CONTROL);
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, PROPERTIES_CONTROL);
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subParent1"));
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, reverseControl);
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subParent1"));
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // locale that has only properties file support.
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_EN,
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, DEFAULT_CONTROL);
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(5, bundle.keySet().size());
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("en_resource", bundle.getString("property"));
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue4", bundle.getString("subParent4"));
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subChild1"));
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_EN,
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, CLASS_CONTROL);
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue2", bundle.getString("subParent2"));
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSValue3", bundle.getString("subParent3"));
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSValue4", bundle.getString("subParent4"));
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSChildValue1", bundle.getString("subChild1"));
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSChildValue2", bundle.getString("subChild2"));
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_EN,
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, PROPERTIES_CONTROL);
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, bundle.keySet().size());
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("en_resource", bundle.getString("property"));
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_EN,
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, reverseControl);
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, bundle.keySet().size());
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("en_resource", bundle.getString("property"));
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // locale that has only class file support.
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_ENUSVAR, SYSTEM_LOADER, DEFAULT_CONTROL);
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(8, bundle.keySet().size());
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSVARChildValue3", bundle.getString("subChild3"));
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("en_resource", bundle.getString("property"));
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSVARValue4", bundle.getString("subParent4"));
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSValue3", bundle.getString("subParent3"));
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue2", bundle.getString("subParent2"));
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_ENUSVAR, SYSTEM_LOADER, CLASS_CONTROL);
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(7, bundle.keySet().size());
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSVARChildValue3", bundle.getString("subChild3"));
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSVARValue4", bundle.getString("subParent4"));
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSValue3", bundle.getString("subParent3"));
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue2", bundle.getString("subParent2"));
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_ENUSVAR, SYSTEM_LOADER, PROPERTIES_CONTROL);
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, bundle.keySet().size());
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("en_US_resource", bundle.getString("property"));
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_ENUSVAR, SYSTEM_LOADER, reverseControl);
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("en_US_resource", bundle.getString("property"));
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSVARChildValue1", bundle.getString("subChild1"));
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSVARChildValue2", bundle.getString("subChild2"));
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSVARChildValue3", bundle.getString("subChild3"));
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("enUSVARValue4", bundle.getString("subParent4"));
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // root locale
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ROOT, SYSTEM_LOADER, DEFAULT_CONTROL);
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue4", bundle.getString("subParent4"));
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subChild1"));
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ROOT, SYSTEM_LOADER, CLASS_CONTROL);
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue4", bundle.getString("subParent4"));
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subChild1"));
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ROOT, SYSTEM_LOADER, PROPERTIES_CONTROL);
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, bundle.keySet().size());
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("resource", bundle.getString("property"));
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ROOT, SYSTEM_LOADER, reverseControl);
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, bundle.keySet().size());
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("resource", bundle.getString("property"));
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 3.use the FallbackLocale
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(LOCALE_FRFR);
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // no resource for Locale.ITALY
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, DEFAULT_CONTROL);
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue1", bundle.getString("subChild1"));
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, CLASS_CONTROL);
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue1", bundle.getString("subChild1"));
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, PROPERTIES_CONTROL);
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, reverseControl);
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // with NoFallbackControl
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Control noFallbackControl = Control
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getNoFallbackControl(FORMAT_DEFAULT);
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, noFallbackControl);
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue4", bundle.getString("subParent4"));
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        noFallbackControl = Control.getNoFallbackControl(FORMAT_CLASS);
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, noFallbackControl);
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue4", bundle.getString("subParent4"));
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        noFallbackControl = Control.getNoFallbackControl(FORMAT_PROPERTIES);
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, noFallbackControl);
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, bundle.keySet().size());
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("resource", bundle.getString("property"));
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        noFallbackControl = new ReverseNoFallbackLocaleControl();
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, noFallbackControl);
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, bundle.keySet().size());
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("resource", bundle.getString("property"));
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // locale is equal to the default locale
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(Locale.ITALY);
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Locale.ITALY, SYSTEM_LOADER, DEFAULT_CONTROL);
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue4", bundle.getString("subParent4"));
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subChild1"));
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 4.test the resources without a root resource
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // locale that has both class file and properties file support.
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, LOCALE_FRFR,
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, DEFAULT_CONTROL);
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(5, bundle.keySet().size());
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subParent1"));
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, LOCALE_FRFR,
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, CLASS_CONTROL);
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(5, bundle.keySet().size());
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subParent1"));
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, LOCALE_FRFR,
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, PROPERTIES_CONTROL);
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(3, bundle.keySet().size());
786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, LOCALE_FRFR,
792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, reverseControl);
793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(3, bundle.keySet().size());
794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // root locale
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ROOT,
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, DEFAULT_CONTROL);
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ROOT,
811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, CLASS_CONTROL);
812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ROOT,
820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, PROPERTIES_CONTROL);
821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ROOT,
829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, reverseControl);
830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // fall back locale
836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(LOCALE_FRFR);
837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // no resource for Locale.ITALY
838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, DEFAULT_CONTROL);
841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(5, bundle.keySet().size());
842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue1", bundle.getString("subChild1"));
843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frValue2", bundle.getString("subParent2"));
845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue3", bundle.getString("subParent3"));
847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, CLASS_CONTROL);
851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(5, bundle.keySet().size());
852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue1", bundle.getString("subChild1"));
853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frValue2", bundle.getString("subParent2"));
855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue3", bundle.getString("subParent3"));
857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, PROPERTIES_CONTROL);
861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(3, bundle.keySet().size());
862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, reverseControl);
869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(3, bundle.keySet().size());
870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // with NoFallbackControl
875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        noFallbackControl = Control.getNoFallbackControl(FORMAT_DEFAULT);
876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, noFallbackControl);
880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        noFallbackControl = Control.getNoFallbackControl(FORMAT_CLASS);
886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, noFallbackControl);
890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        noFallbackControl = Control.getNoFallbackControl(FORMAT_PROPERTIES);
896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, noFallbackControl);
900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        noFallbackControl = new ReverseNoFallbackLocaleControl();
906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, noFallbackControl);
910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // locale is equal to the default locale
916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(Locale.ITALY);
917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_NOROOT_NAME, Locale.ITALY,
920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, noFallbackControl);
921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 5.simple exceptions
927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle("wrongName", LOCALE_FRFR, SYSTEM_LOADER,
930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    DEFAULT_CONTROL);
931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    URL_LOADER, DEFAULT_CONTROL);
938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(null, LOCALE_FRFR, SYSTEM_LOADER,
944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    DEFAULT_CONTROL);
945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, null,
951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, DEFAULT_CONTROL);
952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    null, DEFAULT_CONTROL);
959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, null);
966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 6. exceptions caused by control
971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // illegal control causes IllegalArgumentException
972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Control otherControl = new NullCandidateLocalesControl();
973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, otherControl);
976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw IllegalArgumentException");
977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // illegal control with illegal format
982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        otherControl = new GivenFormatsControl(Arrays
983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .asList(new String[] { "java.test" }));
984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        illegalFormatControlTester(otherControl);
985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // illegal control with other format
987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        otherControl = new GivenFormatsControl(Arrays
988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .asList(new String[] { "other.format" }));
989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        illegalFormatControlTester(otherControl);
990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private void illegalFormatControlTester(Control otherControl) {
994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, DEFAULT_CONTROL);
997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // cache can ignore the illegal control
998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, otherControl);
1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, otherControl);
1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // cache can also ignore the legal control
1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FRFR,
1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SYSTEM_LOADER, DEFAULT_CONTROL);
1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw MissingResourceException");
1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (MissingResourceException e) {
1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, DEFAULT_CONTROL);
1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests {@link java.util.ResourceBundle#clearCache()}
1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_clearCache() {
1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, DEFAULT_CONTROL);
1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // the cache used
1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, PROPERTIES_CONTROL);
1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache(URL_LOADER);
1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // system loader's cache is still there
1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, PROPERTIES_CONTROL);
1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(6, bundle.keySet().size());
1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRChildValue2", bundle.getString("subChild2"));
1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("subParentValue1", bundle.getString("subParent1"));
1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("frFRValue4", bundle.getString("subParent4"));
1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("property"));
1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME,
1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LOCALE_FRFR, SYSTEM_LOADER, PROPERTIES_CONTROL);
1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, bundle.keySet().size());
1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFRFR", bundle.getString("propertyInFRFR"));
1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInURLParent", bundle
1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getString("propertyInURLParent"));
1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("fr_FR_resource", bundle.getString("property"));
1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("valueInFR", bundle.getString("propertyInFR"));
1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subParent1"));
1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests {@link java.util.ResourceBundle#clearCache(ClassLoader)}
1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_clearCacheLjava_lang_ClassLoader() throws IOException {
1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // copy the file to test
1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URL srcFile = URL_LOADER.getResource(DEFAULT_CONTROL.toResourceName(
1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                DEFAULT_CONTROL.toBundleName(PROPERTIES_NAME, LOCALE_FRFR),
1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "properties"));
1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File copyFile = ControlTest.copyFile(srcFile);
1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (null != URL_LOADER
1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getResourceAsStream("hyts_resource_copy_fr_FR.properties")) {
1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // load first time
1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bundle = ResourceBundle.getBundle(PROPERTIES_NAME_COPY,
1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    LOCALE_FRFR, URL_LOADER, DEFAULT_CONTROL);
1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("fr_FR_resource", bundle.getString("property"));
1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ControlTest.changeProperties(copyFile);
1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bundle = ResourceBundle.getBundle(PROPERTIES_NAME_COPY,
1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    LOCALE_FRFR, URL_LOADER, DEFAULT_CONTROL);
1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // value from cache, unchanged
1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("fr_FR_resource", bundle.getString("property"));
1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.clearCache();
1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bundle = ResourceBundle.getBundle(PROPERTIES_NAME_COPY,
1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    LOCALE_FRFR, URL_LOADER, DEFAULT_CONTROL);
1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // value from cache, unchanged
1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("fr_FR_resource", bundle.getString("property"));
1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.clearCache(URL_LOADER);
1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bundle = ResourceBundle.getBundle(PROPERTIES_NAME_COPY,
1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    LOCALE_FRFR, URL_LOADER, DEFAULT_CONTROL);
1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // value changed
1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("changedValue", bundle.getString("property"));
1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } else {
1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.err
1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .println("Can not find the test file, some code of this test 'test_clearCacheLjava_lang_ClassLoader' did not run.");
1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ResourceBundle.clearCache(null);
1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests {@link java.util.ResourceBundle#containsKey(String)}
1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_containsKeyLjava_lang_String() {
1120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache(URL_LOADER);
1121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(PROPERTIES_NAME, LOCALE_FRFR,
1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URL_LOADER, DEFAULT_CONTROL);
1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("property"));
1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("propertyInFRFR"));
1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("propertyInURLParent"));
1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("propertyInSystemParent"));
1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("propertyInFR"));
1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache(URL_LOADER);
1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(PROPERTIES_NAME, LOCALE_FR,
1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URL_LOADER, DEFAULT_CONTROL);
1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("property"));
1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("propertyInFRFR"));
1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("propertyInFR"));
1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("propertyInURLParent"));
1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("propertyInSystemParent"));
1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(PROPERTIES_NAME, LOCALE_FR,
1140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, DEFAULT_CONTROL);
1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("property"));
1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("propertyInURLParent"));
1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("propertyInSystemParent"));
1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(CLASS_NAME, LOCALE_FR, SYSTEM_LOADER,
1147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                DEFAULT_CONTROL);
1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("parent2"));
1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("parent1"));
1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("child1"));
1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("child2"));
1152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FR,
1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, DEFAULT_CONTROL);
1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("subParent1"));
1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("subParent2"));
1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("subParent3"));
1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("subParent4"));
1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(bundle.containsKey("subChild1"));
1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subChild2"));
1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(bundle.containsKey("subChild3"));
1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(bundle);
1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bundle.containsKey(null);
1167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
1168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
1169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
1170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests {@link java.util.ResourceBundle#keySet()}
1175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
1176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
1178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_keySet() {
1179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache(URL_LOADER);
1180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(PROPERTIES_NAME, LOCALE_FRFR,
1181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URL_LOADER, DEFAULT_CONTROL);
1182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Set<String> keys = bundle.keySet();
1183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, keys.size());
1184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(keys, bundle.keySet());
1185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keys.add("wrongKey");
1186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keys = bundle.keySet();
1187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(4, keys.size());
1188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.getClass() == HashSet.class);
1189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("propertyInFRFR"));
1190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("propertyInURLParent"));
1191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("propertyInFR"));
1192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("property"));
1193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache(URL_LOADER);
1195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(PROPERTIES_NAME, LOCALE_FR,
1196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URL_LOADER, DEFAULT_CONTROL);
1197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keys = bundle.keySet();
1198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(3, keys.size());
1199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("propertyInURLParent"));
1200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("propertyInFR"));
1201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("property"));
1202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(PROPERTIES_NAME, LOCALE_FR,
1205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, DEFAULT_CONTROL);
1206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keys = bundle.keySet();
1207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, keys.size());
1208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("propertyInSystemParent"));
1209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("property"));
1210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(CLASS_NAME, LOCALE_FR, SYSTEM_LOADER,
1213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                DEFAULT_CONTROL);
1214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keys = bundle.keySet();
1215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(5, keys.size());
1216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("parent1"));
1217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("parent2"));
1218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("parent3"));
1219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("parent4"));
1220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("child1"));
1221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ResourceBundle.clearCache();
1223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bundle = ResourceBundle.getBundle(SUBFOLDER_PROPERTIES_NAME, LOCALE_FR,
1224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SYSTEM_LOADER, DEFAULT_CONTROL);
1225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        keys = bundle.keySet();
1226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(5, keys.size());
1227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("subParent1"));
1228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("subParent2"));
1229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("subParent3"));
1230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("subParent4"));
1231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("subChild1"));
1232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests {@link java.util.ResourceBundle#handleKeySet()}
1236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
1237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
1239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_handleKeySet() {
1240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class SubBundle extends ResourceBundle {
1241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SubBundle() {
1242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                super();
1243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
1246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public Set<String> handleKeySet() {
1247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return super.handleKeySet();
1248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
1251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public Enumeration<String> getKeys() {
1252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Vector<String> keys = new Vector<String>();
1253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                keys.add("key1InThis");
1254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                keys.add("key2InThis");
1255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                keys.add("key1InParent");
1256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                keys.add("key2InParent");
1257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return keys.elements();
1258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
1261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected Object handleGetObject(String key) {
1262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (key.equals("key1InParent") || key.equals("key2InParent")) {
1263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    return null;
1264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return new Object();
1266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SubBundle subBundle = new SubBundle();
1269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Set<String> keys = subBundle.handleKeySet();
1270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, keys.size());
1271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("key1InThis"));
1272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(keys.contains("key2InThis"));
1273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @see junit.framework.TestCase#setUp()
1277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("nls")
1279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
1280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() {
1281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        defLocale = Locale.getDefault();
1282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(new Locale("en", "US"));
1283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @see junit.framework.TestCase#tearDown()
1287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
1289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() {
1290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Locale.setDefault(defLocale);
1291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
1293