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