1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.util;
18cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport junit.framework.TestCase;
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport tests.support.resource.Support_Resources;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.File;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileNotFoundException;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileWriter;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStreamReader;
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PrintWriter;
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.Reader;
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.Writer;
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.net.URL;
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.ArrayList;
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Collections;
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.List;
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.ListResourceBundle;
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Locale;
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.PropertyResourceBundle;
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.ResourceBundle;
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.ResourceBundle.Control;
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Scanner;
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport static java.util.ResourceBundle.Control.*;
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/**
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Test cases for java.util.ResourceBundle.Control
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class ControlTest extends TestCase {
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Control with format:FORMAT_PROPERTIES
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private Control controlP;
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Control with format:FORMAT_CLASS
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private Control controlC;
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Control with format:FORMAT_DEFAULT
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private Control control;
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#Control()}.
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constructor() {
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        class SubControl extends Control {
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            SubControl() {
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                super();
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Control subControl = new SubControl();
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_DEFAULT, subControl.getFormats(""));
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertFalse(control.equals(subControl));
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Test for all the public constants.
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     *
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#FORMAT_CLASS}
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#FORMAT_DEFAULT}
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#FORMAT_PROPERTIES}
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#TTL_DONT_CACHE}
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#TTL_NO_EXPIRATION_CONTROL}
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constants() {
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        List<String> list = FORMAT_CLASS;
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1, list.size());
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("java.class", list.get(0));
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list = FORMAT_PROPERTIES;
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1, list.size());
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("java.properties", list.get(0));
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list = FORMAT_DEFAULT;
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(2, list.size());
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("java.class", list.get(0));
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("java.properties", list.get(1));
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            FORMAT_CLASS.add("");
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw UnsupportedOperationException");
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedOperationException e) {
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            FORMAT_DEFAULT.add("");
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw UnsupportedOperationException");
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedOperationException e) {
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            FORMAT_PROPERTIES.add("");
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw UnsupportedOperationException");
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedOperationException e) {
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Class<?> unmodifiableListClass = Collections.unmodifiableList(
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new ArrayList<String>()).getClass();
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_CLASS.getClass(), unmodifiableListClass);
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_DEFAULT.getClass(), unmodifiableListClass);
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_PROPERTIES.getClass(), unmodifiableListClass);
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1L, TTL_DONT_CACHE);
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-2L, TTL_NO_EXPIRATION_CONTROL);
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#getControl(java.util.List)}.
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getControl_LList() {
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // singleton
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(control, Control.getControl(FORMAT_DEFAULT));
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(controlC, Control.getControl(FORMAT_CLASS));
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(controlP, Control.getControl(FORMAT_PROPERTIES));
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // class
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(control.getClass() == Control.class);
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(controlC.getClass() != Control.class);
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(controlP.getClass() != Control.class);
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // formats: need not same, just need equal
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        List<String> list = new ArrayList<String>(FORMAT_CLASS);
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(controlC, Control.getControl(list));
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // can add
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list.add(FORMAT_PROPERTIES.get(0));
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(control, Control.getControl(list));
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // exceptions
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Control.getControl(null);
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list = new ArrayList<String>();
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Control.getControl(list);
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException");
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list = new ArrayList<String>(FORMAT_CLASS);
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // java.class -> JAVA.CLASS
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list.set(0, list.get(0).toUpperCase());
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Control.getControl(list);
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException");
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list = new ArrayList<String>(FORMAT_CLASS);
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list.add("");
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Control.getControl(list);
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException");
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#getNoFallbackControl(java.util.List)}.
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getNoFallbackControl_LList() {
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNotSame(control, Control.getNoFallbackControl(FORMAT_DEFAULT));
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNotSame(controlC, Control.getNoFallbackControl(FORMAT_CLASS));
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNotSame(controlP, Control.getNoFallbackControl(FORMAT_PROPERTIES));
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        controlP = Control.getNoFallbackControl(FORMAT_PROPERTIES);
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        controlC = Control.getNoFallbackControl(FORMAT_CLASS);
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        control = Control.getNoFallbackControl(FORMAT_DEFAULT);
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // singleton
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(control, Control.getNoFallbackControl(FORMAT_DEFAULT));
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(controlC, Control.getNoFallbackControl(FORMAT_CLASS));
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(controlP, Control.getNoFallbackControl(FORMAT_PROPERTIES));
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // class
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(control.getClass() != Control.class);
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(controlC.getClass() != Control.class);
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(controlP.getClass() != Control.class);
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // format
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_CLASS, controlC.getFormats(""));
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_DEFAULT, control.getFormats(""));
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_PROPERTIES, controlP.getFormats(""));
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // no fall back locale
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale defaultLocale = Locale.getDefault();
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale.setDefault(new Locale("TestLanguage", "TestCountry", "Var"));
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNull(control.getFallbackLocale("message", Locale.US));
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.getFallbackLocale("message", null);
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.getFallbackLocale(null, Locale.US);
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale.setDefault(defaultLocale);
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // formats: need not same, just need equal
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        List<String> list = new ArrayList<String>(FORMAT_CLASS);
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(controlC, Control.getNoFallbackControl(list));
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // can add
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list.add(FORMAT_PROPERTIES.get(0));
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(control, Control.getNoFallbackControl(list));
232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // exceptions
234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Control.getNoFallbackControl(null);
236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list = new ArrayList<String>();
241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Control.getNoFallbackControl(list);
243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException");
244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list = new ArrayList<String>(FORMAT_CLASS);
248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // java.class -> JAVA.CLASS
249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list.set(0, list.get(0).toUpperCase());
250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Control.getNoFallbackControl(list);
252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException");
253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list = new ArrayList<String>(FORMAT_CLASS);
257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        list.add("");
258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Control.getNoFallbackControl(list);
260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException");
261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#getFormats(java.lang.String)}.
268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getFormats_LString() {
271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_DEFAULT, control.getFormats(""));
272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_PROPERTIES, controlP.getFormats(""));
273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(FORMAT_CLASS, controlC.getFormats(""));
274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            controlC.getFormats(null);
276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#getCandidateLocales(java.lang.String, java.util.Locale)}.
284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getCandidateLocales_LStringLLocale() {
287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // the ResourceBundle for this baseName and Locale does not exists
288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        List<Locale> result = control.getCandidateLocales("baseName",
289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Locale("one", "two", "three"));
290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(4, result.size());
291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale locale = result.get(0);
292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("one", locale.getLanguage());
293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("TWO", locale.getCountry());
294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("three", locale.getVariant());
295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("one", "TWO"), result.get(1));
296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("one"), result.get(2));
297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(Locale.ROOT, result.get(3));
298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // ArrayList is not immutable
299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(ArrayList.class == result.getClass());
300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        result = control.getCandidateLocales("baseName", new Locale("one",
302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "two", ""));
303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("one", "TWO"), result.get(0));
304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("one"), result.get(1));
305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(Locale.ROOT, result.get(2));
306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        result = control.getCandidateLocales("baseName", new Locale("one", "",
308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "three"));
309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("one", "", "three"), result.get(0));
310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("one"), result.get(1));
311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(Locale.ROOT, result.get(2));
312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        result = control.getCandidateLocales("baseName", new Locale("", "two",
314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "three"));
315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("", "TWO", "three"), result.get(0));
316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("", "TWO"), result.get(1));
317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(Locale.ROOT, result.get(2));
318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        result = control.getCandidateLocales("baseName", new Locale("", "",
320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "three"));
321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("", "", "three"), result.get(0));
322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(Locale.ROOT, result.get(1));
323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        result = control.getCandidateLocales("baseName", new Locale("", "two",
325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                ""));
326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(new Locale("", "TWO"), result.get(0));
327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(Locale.ROOT, result.get(1));
328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        result = control.getCandidateLocales("baseName", Locale.ROOT);
330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(Locale.ROOT, result.get(0));
331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.getCandidateLocales(null, Locale.US);
334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.getCandidateLocales("baseName", null);
341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#getFallbackLocale(java.lang.String, java.util.Locale)}.
349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getFallbackLocale_LStringLLocale() {
352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale defaultLocale = Locale.getDefault();
353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale testLocale = new Locale("TestLanguage", "TestCountry", "Var");
354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale.setDefault(testLocale);
355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(testLocale, control.getFallbackLocale("baseName",
356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Locale.ROOT));
357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(testLocale, control.getFallbackLocale("baseName", Locale.US));
358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(null, control.getFallbackLocale("baseName", testLocale));
359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.getFallbackLocale(null, Locale.US);
361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.getFallbackLocale("baseName", null);
368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // restore
373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale.setDefault(defaultLocale);
374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static File copyFile(final URL src) throws IOException {
378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String tail = src.getFile().split("hyts_resource")[1];
379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String tmpdir = System.getProperty("java.io.tmpdir");
380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        if (null == tmpdir) {
381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return null;
382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String copyName = tmpdir + File.separator + "hyts_resource_copy" + tail;
384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        File copy = new File(copyName);
385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        if (copy.exists()) {
386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            copy.delete();
387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        copy.createNewFile();
389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        copy.deleteOnExit();
390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Reader in = new InputStreamReader(src.openStream());
392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Writer out = new FileWriter(copy);
393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int c;
394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        while ((c = in.read()) != -1) {
395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            out.write(c);
396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        in.close();
398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.close();
399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return copy;
400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class SubRBStaticPrivate extends ListResourceBundle {
403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        private SubRBStaticPrivate() {
404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            super();
405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        @Override
408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        protected Object[][] getContents() {
409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return null;
410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * change the value in the .properties file
415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static void changeProperties(File file) throws FileNotFoundException {
418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String newValue = "property=changedValue";
419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PrintWriter writer = new PrintWriter(file);
420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(newValue);
421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.close();
423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Scanner scanner = new Scanner(file);
424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(newValue, scanner.nextLine());
425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        scanner.close();
426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#getTimeToLive(java.lang.String, java.util.Locale)}.
430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getTimeToLive_LStringLLocale() {
433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(TTL_NO_EXPIRATION_CONTROL, control.getTimeToLive(
434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "baseName", Locale.US));
435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.getTimeToLive(null, Locale.US);
437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.getTimeToLive("baseName", null);
443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @throws Exception
451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#needsReload(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long)}.
452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_needsReload_LStringLLocaleLStringLClassLoaderResourceBundleJ()
455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            throws Exception {
456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String className = "tests.support.Support_TestResource";
457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String propertiesName = Support_Resources.RESOURCE_PACKAGE_NAME
458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                + ".hyts_resource";
459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String propertiesNameCopy = "hyts_resource_copy";
460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String CLASS = "java.class";
461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String PROPERTIES = "java.properties";
462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Locale frFR = new Locale("fr", "FR");
463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ClassLoader URLLoader = systemLoader;
465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ResourceBundle bundle = null;
466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long time = 0L;
467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final URL srcFile = URLLoader.getResource(control.toResourceName(
468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                control.toBundleName(propertiesName, frFR), "properties"));
469665c45e473c041dc2b1e8d85fbaf7008daa69c06Narayan Kamath        assertNotNull(srcFile);
470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final File copyFile = copyFile(srcFile);
471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // 1. format = "java.properties"
473665c45e473c041dc2b1e8d85fbaf7008daa69c06Narayan Kamath        if (null != URLLoader.getResourceAsStream(copyFile.toURL().toString())) {
474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Thread.sleep(1000);
475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            bundle = control.newBundle(propertiesNameCopy, frFR, PROPERTIES,
476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    URLLoader, false);
477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            time = System.currentTimeMillis();
478cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue(bundle.getClass() == PropertyResourceBundle.class);
479cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("fr_FR_resource", bundle.getString("property"));
480cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertFalse(control.needsReload(propertiesNameCopy, frFR,
481cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, URLLoader, bundle, time));
482cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // change the file
483cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Thread.sleep(2000);
484cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            changeProperties(copyFile);
485cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue(control.needsReload(propertiesNameCopy, frFR,
486cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, URLLoader, bundle, time));
487cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // detect again
488cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue(control.needsReload(propertiesNameCopy, frFR,
489cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, URLLoader, bundle, time));
490cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // long long ago
491cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue(control.needsReload(propertiesNameCopy, frFR,
492cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, URLLoader, bundle, 2006L));
493cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // other loader
494cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertFalse(control.needsReload(propertiesNameCopy, frFR,
495cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, systemLoader, bundle, time));
496cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // other bundle
497cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ResourceBundle otherBundle = control.newBundle(propertiesName,
498cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Locale.ROOT, PROPERTIES, systemLoader, false);
499cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("parent", otherBundle.getString("property"));
500cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue(control.needsReload(propertiesNameCopy, frFR,
501cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, URLLoader, otherBundle, time));
502cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            otherBundle = control.newBundle(propertiesName, Locale.ROOT,
503cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, URLLoader, false);
504cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("resource", otherBundle.getString("property"));
505cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue(control.needsReload(propertiesNameCopy, frFR,
506cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, URLLoader, otherBundle, time));
507cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // other time
508cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertFalse(control.needsReload(propertiesNameCopy, frFR,
509cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    PROPERTIES, URLLoader, bundle, System.currentTimeMillis()));
510cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } else {
511cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            System.err
512cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .println("Can not find the test file, some code of this test 'test_needsReload_LStringLLocaleLStringLClassLoaderResourceBundleJ' did not run.");
513cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
514cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
515cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
516cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // 2. format = "java.class"
517cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        bundle = control.newBundle(className, frFR, CLASS, systemLoader, false);
518cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        time = System.currentTimeMillis();
519cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("frFRValue3", bundle.getString("parent3"));
520cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertFalse(control.needsReload(className, frFR, CLASS, systemLoader,
521cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                bundle, time));
522cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // exceptions
523cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        control.needsReload(propertiesName, frFR, PROPERTIES, URLLoader,
524cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                bundle, time);
525cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
526cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control
527cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .needsReload(null, frFR, PROPERTIES, URLLoader, bundle,
528cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            time);
529cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
530cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
531cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
532cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
533cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
534cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.needsReload(propertiesName, null, PROPERTIES, URLLoader,
535cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    bundle, time);
536cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
537cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
538cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
539cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
540cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
541cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.needsReload(propertiesName, frFR, null, URLLoader, bundle,
542cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    time);
543cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
544cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
545cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
546cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
547cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
548cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.needsReload(propertiesName, frFR, PROPERTIES, null, bundle,
549cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    time);
550cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
551cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
552cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
553cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
554cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
555cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.needsReload(propertiesName, frFR, PROPERTIES, URLLoader,
556cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    null, time);
557cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
558cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
559cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
560cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
561cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
562cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
563cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
564cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#toBundleName(java.lang.String, java.util.Locale)}.
565cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
566cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
567cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_toBundleName_LStringLLocale() {
568cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName_one_TWO_three", control.toBundleName("baseName",
569cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Locale("one", "two", "three")));
570cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName_one_TWO", control.toBundleName("baseName",
571cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Locale("one", "two")));
572cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName_one__three", control.toBundleName("baseName",
573cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Locale("one", "", "three")));
574cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName__TWO_three", control.toBundleName("baseName",
575cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Locale("", "two", "three")));
576cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName_one", control.toBundleName("baseName",
577cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Locale("one", "", "")));
578cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName___three", control.toBundleName("baseName",
579cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Locale("", "", "three")));
580cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName__TWO", control.toBundleName("baseName",
581cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Locale("", "two", "")));
582cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName", control.toBundleName("baseName", new Locale(
583cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "", "", "")));
584cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("baseName", control.toBundleName("baseName", Locale.ROOT));
585cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("_one_TWO_three", control.toBundleName("", new Locale(
586cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "one", "two", "three")));
587cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("", control.toBundleName("", Locale.ROOT));
588cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
589cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does.not.exists_one_TWO_three", control.toBundleName(
590cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "does.not.exists", new Locale("one", "two", "three")));
591cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does/not/exists_one_TWO_three", control.toBundleName(
592cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "does/not/exists", new Locale("one", "two", "three")));
593cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does_not_exists__one_TWO_three", control.toBundleName(
594cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "does_not_exists_", new Locale("one", "two", "three")));
595cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
596cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("...", control.toBundleName("...", Locale.ROOT));
597cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("s/./\\//g", control
598cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .toBundleName("s/./\\//g", Locale.ROOT));
599cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("123_one", control.toBundleName("123", new Locale("one")));
600cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
601cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
602cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.toBundleName(null, Locale.US);
603cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
604cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
605cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
606cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
607cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
608cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
609cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.toBundleName("baseName", null);
610cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
611cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
612cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
613cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
614cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
615cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
616cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
617cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.util.ResourceBundle.Control#toResourceName(java.lang.String, java.lang.String)}.
618cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
619cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("nls")
620cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_toResourceNameLStringLString() {
621cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does/not/exists_language_country.someSuffix", control
622cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .toResourceName("does.not.exists_language_country",
623cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        "someSuffix"));
624cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does/not/exists_language_country.someSuffix", control
625cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .toResourceName("does/not/exists_language_country",
626cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        "someSuffix"));
627cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does///not//exists_language/country.someSuffix", control
628cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .toResourceName("does...not..exists_language.country",
629cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        "someSuffix"));
630cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does\\not\\exists_language_country.someSuffix", control
631cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .toResourceName("does\\not\\exists_language_country",
632cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        "someSuffix"));
633cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does/not/exists_language_country/.someSuffix", control
634cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .toResourceName("does.not.exists_language_country.",
635cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        "someSuffix"));
636cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("does/not/exists_language_country../someSuffix", control
637cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .toResourceName("does.not.exists_language_country",
638cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        "./someSuffix"));
639cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
640cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("///.//", control.toResourceName("...", "//"));
641cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("///...", control.toResourceName("///", ".."));
642cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("123...", control.toResourceName("123", ".."));
643cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("base.", control.toResourceName("base", ""));
644cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(".suffix", control.toResourceName("", "suffix"));
645cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(".", control.toResourceName("", ""));
646cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
647cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
648cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.toResourceName(null, "suffix");
649cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
650cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
651cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
652cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
653cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
654cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
655cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            control.toResourceName("bundleName", null);
656cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
657cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
658cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
659cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
660cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
661cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
662cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
663cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
664cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @throws java.lang.Exception
665cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
666cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @Override
667cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void tearDown() throws Exception {
668cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        super.tearDown();
669cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
670cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
671cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
672cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @throws java.lang.Exception
673cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
674cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @Override
675cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void setUp() throws Exception {
676cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        super.setUp();
677cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        controlP = Control.getControl(FORMAT_PROPERTIES);
678cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        controlC = Control.getControl(FORMAT_CLASS);
679cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        control = Control.getControl(FORMAT_DEFAULT);
680cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
681cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
682cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
683