• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 
18 package org.apache.harmony.tests.java.util;
19 
20 import dalvik.annotation.KnownFailure;
21 import java.io.File;
22 import java.net.MalformedURLException;
23 import java.net.URL;
24 import java.net.URLClassLoader;
25 import java.util.Enumeration;
26 import java.util.Locale;
27 import java.util.MissingResourceException;
28 import java.util.ResourceBundle;
29 import java.util.StringTokenizer;
30 import java.util.Vector;
31 import org.apache.harmony.tests.java.util.support.B;
32 import tests.support.resource.Support_Resources;
33 
34 public class ResourceBundleTest extends junit.framework.TestCase {
35 
test_getCandidateLocales()36     public void test_getCandidateLocales() throws Exception {
37         ResourceBundle.Control c = ResourceBundle.Control.getControl(ResourceBundle.Control.FORMAT_DEFAULT);
38         assertEquals("[en_US, en, ]", c.getCandidateLocales("base", Locale.US).toString());
39         assertEquals("[de_CH, de, ]", c.getCandidateLocales("base", new Locale("de", "CH")).toString());
40     }
41 
test_getBaseName()42     public void test_getBaseName() {
43         String name = "tests.support.Support_TestResource";
44         ResourceBundle bundle = ResourceBundle.getBundle(name);
45         assertEquals(name, bundle.getBaseBundleName());
46 
47         bundle = ResourceBundle.getBundle(name, Locale.getDefault());
48         assertEquals(name, bundle.getBaseBundleName());
49 
50         assertNull(new Mock_ResourceBundle().getBaseBundleName());
51     }
52 
53     /**
54      * java.util.ResourceBundle#getBundle(java.lang.String,
55      *        java.util.Locale)
56      */
test_getBundleLjava_lang_StringLjava_util_Locale()57     public void test_getBundleLjava_lang_StringLjava_util_Locale() {
58         ResourceBundle bundle;
59         String name = "tests.support.Support_TestResource";
60         Locale defLocale = Locale.getDefault();
61 
62         Locale.setDefault(new Locale("en", "US"));
63         bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
64         assertEquals("Wrong bundle fr_FR_VAR", "frFRVARValue4", bundle.getString("parent4"));
65 
66         bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "v1"));
67         assertEquals("Wrong bundle fr_FR_v1", "frFRValue4", bundle.getString("parent4"));
68 
69         bundle = ResourceBundle.getBundle(name, new Locale("fr", "US", "VAR"));
70         assertEquals("Wrong bundle fr_US_var", "frValue4", bundle.getString("parent4"));
71 
72         bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "VAR"));
73         assertEquals("Wrong bundle de_FR_var", "enUSValue4", bundle.getString("parent4"));
74 
75         Locale.setDefault(new Locale("fr", "FR", "VAR"));
76         bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "v1"));
77         assertEquals("Wrong bundle de_FR_var 2", "frFRVARValue4", bundle.getString("parent4"));
78 
79         Locale.setDefault(new Locale("de", "US"));
80         bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "var"));
81         assertEquals("Wrong bundle de_FR_var 2", "parentValue4", bundle.getString("parent4")
82                 );
83 
84         try {
85             ResourceBundle.getBundle(null, Locale.US);
86             fail("NullPointerException expected");
87         } catch (NullPointerException ee) {
88             //expected
89         }
90         try {
91             ResourceBundle.getBundle("blah", (Locale) null);
92             fail("NullPointerException expected");
93         } catch (NullPointerException ee) {
94             //expected
95         }
96 
97 
98         try {
99             ResourceBundle.getBundle("", new Locale("xx", "yy"));
100             fail("MissingResourceException expected");
101         } catch (MissingResourceException ee) {
102             //expected
103         }
104     }
105 
106     /**
107      * java.util.ResourceBundle#getBundle(java.lang.String,
108      *        java.util.Locale, java.lang.ClassLoader)
109      */
110     @KnownFailure("It's not allowed to pass null as parent class loader to"
111             + " a new ClassLoader anymore. Maybe we need to change"
112             + " URLClassLoader to allow this? It's not specified.")
test_getBundleLjava_lang_StringLjava_util_LocaleLjava_lang_ClassLoader()113     public void test_getBundleLjava_lang_StringLjava_util_LocaleLjava_lang_ClassLoader() {
114         String classPath = System.getProperty("java.class.path");
115         StringTokenizer tok = new StringTokenizer(classPath, File.pathSeparator);
116         Vector<URL> urlVec = new Vector<URL>();
117         String resPackage = Support_Resources.RESOURCE_PACKAGE;
118         try {
119             while (tok.hasMoreTokens()) {
120                 String path = tok.nextToken();
121                 String url;
122                 if (new File(path).isDirectory())
123                     url = "file:" + path + resPackage + "subfolder/";
124                 else
125                     url = "jar:file:" + path + "!" + resPackage + "subfolder/";
126                 urlVec.addElement(new URL(url));
127             }
128         } catch (MalformedURLException e) {
129         }
130         URL[] urls = new URL[urlVec.size()];
131         for (int i = 0; i < urlVec.size(); i++)
132             urls[i] = urlVec.elementAt(i);
133         URLClassLoader loader = new URLClassLoader(urls, null);
134 
135         String name = Support_Resources.RESOURCE_PACKAGE_NAME
136                 + ".hyts_resource";
137         ResourceBundle bundle = ResourceBundle.getBundle(name, Locale
138                 .getDefault());
139             assertEquals("Wrong value read", "parent", bundle.getString("property"));
140         bundle = ResourceBundle.getBundle(name, Locale.getDefault(), loader);
141         assertEquals("Wrong cached value",
142                 "resource", bundle.getString("property"));
143 
144         try {
145             ResourceBundle.getBundle(null, Locale.getDefault(), loader);
146             fail("NullPointerException expected");
147         } catch (NullPointerException ee) {
148             //expected
149         }
150 
151         try {
152             ResourceBundle.getBundle(name, null, loader);
153             fail("NullPointerException expected");
154         } catch (NullPointerException ee) {
155             //expected
156         }
157 
158         try {
159             ResourceBundle.getBundle(name, Locale.getDefault(), (ClassLoader) null);
160             fail("NullPointerException expected");
161         } catch (NullPointerException ee) {
162             //expected
163         }
164 
165         try {
166             ResourceBundle.getBundle("", Locale.getDefault(), loader);
167             fail("MissingResourceException expected");
168         } catch (MissingResourceException ee) {
169             //expected
170         }
171 
172         // Regression test for Harmony-3823
173         B bb = new B();
174         String s = bb.find("nonexistent");
175         s = bb.find("name");
176         assertEquals("Wrong property got", "Name", s);
177     }
178 
179     /**
180      * java.util.ResourceBundle#getString(java.lang.String)
181      */
test_getStringLjava_lang_String()182     public void test_getStringLjava_lang_String() {
183         ResourceBundle bundle;
184         String name = "tests.support.Support_TestResource";
185         Locale.setDefault(new Locale("en", "US"));
186         bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
187         assertEquals("Wrong value parent4",
188                 "frFRVARValue4", bundle.getString("parent4"));
189         assertEquals("Wrong value parent3",
190                 "frFRValue3", bundle.getString("parent3"));
191         assertEquals("Wrong value parent2",
192                 "frValue2", bundle.getString("parent2"));
193         assertEquals("Wrong value parent1",
194                 "parentValue1", bundle.getString("parent1"));
195         assertEquals("Wrong value child3",
196                 "frFRVARChildValue3", bundle.getString("child3"));
197         assertEquals("Wrong value child2",
198                 "frFRVARChildValue2", bundle.getString("child2"));
199         assertEquals("Wrong value child1",
200                 "frFRVARChildValue1", bundle.getString("child1"));
201 
202         try {
203             bundle.getString(null);
204             fail("NullPointerException expected");
205         } catch (NullPointerException ee) {
206             //expected
207         }
208 
209         try {
210             bundle.getString("");
211             fail("MissingResourceException expected");
212         } catch (MissingResourceException ee) {
213             //expected
214         }
215 
216         try {
217             bundle.getString("IntegerVal");
218             fail("ClassCastException expected");
219         } catch (ClassCastException ee) {
220             //expected
221         }
222     }
test_getBundle_getClassName()223     public void test_getBundle_getClassName() {
224         // Regression test for Harmony-1759
225         Locale locale = Locale.GERMAN;
226         String nonExistentBundle = "Non-ExistentBundle";
227         try {
228             ResourceBundle.getBundle(nonExistentBundle, locale, this.getClass()
229                     .getClassLoader());
230             fail("MissingResourceException expected!");
231         } catch (MissingResourceException e) {
232             assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
233         }
234 
235         try {
236             ResourceBundle.getBundle(nonExistentBundle, locale);
237             fail("MissingResourceException expected!");
238         } catch (MissingResourceException e) {
239             assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
240         }
241 
242         locale = Locale.getDefault();
243         try {
244             ResourceBundle.getBundle(nonExistentBundle);
245             fail("MissingResourceException expected!");
246         } catch (MissingResourceException e) {
247             assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
248         }
249     }
250 
251     class Mock_ResourceBundle extends ResourceBundle {
252         @Override
getKeys()253         public Enumeration<String> getKeys() {
254             return null;
255         }
256 
257         @Override
handleGetObject(String key)258         protected Object handleGetObject(String key) {
259             return null;
260         }
261     }
262 
test_constructor()263     public void test_constructor() {
264         assertNotNull(new Mock_ResourceBundle());
265     }
266 
test_getLocale()267     public void test_getLocale() {
268         ResourceBundle bundle;
269         String name = "tests.support.Support_TestResource";
270         Locale loc = Locale.getDefault();
271         Locale.setDefault(new Locale("en", "US"));
272 
273         bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
274         assertEquals("fr_FR_VAR", bundle.getLocale().toString());
275 
276         bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "v1"));
277         assertEquals("fr_FR", bundle.getLocale().toString());
278 
279         bundle = ResourceBundle.getBundle(name, new Locale("fr", "US", "VAR"));
280         assertEquals("fr", bundle.getLocale().toString());
281 
282         bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "VAR"));
283         assertEquals("en_US", bundle.getLocale().toString());
284 
285         bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "v1"));
286         assertEquals("en_US", bundle.getLocale().toString());
287 
288         bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "var"));
289         assertEquals("en_US", bundle.getLocale().toString());
290 
291         Locale.setDefault(loc);
292     }
293 
test_getObjectLjava_lang_String()294     public void test_getObjectLjava_lang_String() {
295         ResourceBundle bundle;
296         String name = "tests.support.Support_TestResource";
297         Locale.setDefault(new Locale("en", "US"));
298         bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
299         assertEquals("Wrong value parent4",
300                 "frFRVARValue4", (String)bundle.getObject("parent4"));
301         assertEquals("Wrong value parent3",
302                 "frFRValue3", (String)bundle.getObject("parent3"));
303         assertEquals("Wrong value parent2",
304                 "frValue2", (String) bundle.getObject("parent2"));
305         assertEquals("Wrong value parent1",
306                 "parentValue1", (String)bundle.getObject("parent1"));
307         assertEquals("Wrong value child3",
308                 "frFRVARChildValue3", (String)bundle.getObject("child3"));
309         assertEquals("Wrong value child2",
310                 "frFRVARChildValue2", (String) bundle.getObject("child2"));
311         assertEquals("Wrong value child1",
312                 "frFRVARChildValue1", (String)bundle.getObject("child1"));
313         assertEquals("Wrong value IntegerVal",
314                 1, bundle.getObject("IntegerVal"));
315 
316         try {
317             bundle.getObject(null);
318             fail("NullPointerException expected");
319         } catch (NullPointerException ee) {
320             //expected
321         }
322 
323         try {
324             bundle.getObject("");
325             fail("MissingResourceException expected");
326         } catch (MissingResourceException ee) {
327             //expected
328         }
329     }
330 
test_getStringArrayLjava_lang_String()331     public void test_getStringArrayLjava_lang_String() {
332         ResourceBundle bundle;
333         String name = "tests.support.Support_TestResource";
334         Locale.setDefault(new Locale("en", "US"));
335         bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
336 
337         String[] array = bundle.getStringArray("StringArray");
338         for(int i = 0; i < array.length; i++) {
339             assertEquals("Str" + (i + 1), array[i]);
340         }
341 
342         try {
343             bundle.getStringArray(null);
344             fail("NullPointerException expected");
345         } catch (NullPointerException ee) {
346             //expected
347         }
348 
349         try {
350             bundle.getStringArray("");
351             fail("MissingResourceException expected");
352         } catch (MissingResourceException ee) {
353             //expected
354         }
355 
356         try {
357             bundle.getStringArray("IntegerVal");
358             fail("ClassCastException expected");
359         } catch (ClassCastException ee) {
360             //expected
361         }
362     }
363 
test_getBundleLjava_lang_String()364     public void test_getBundleLjava_lang_String() {
365         ResourceBundle bundle;
366         String name = "tests.support.Support_TestResource";
367         Locale defLocale = Locale.getDefault();
368 
369         Locale.setDefault(new Locale("en", "US"));
370         bundle = ResourceBundle.getBundle(name);
371         assertEquals("enUSValue4", bundle.getString("parent4"));
372 
373         Locale.setDefault(new Locale("fr", "FR", "v1"));
374         bundle = ResourceBundle.getBundle(name);
375         assertEquals("Wrong bundle fr_FR_v1", "frFRValue4", bundle.getString("parent4"));
376 
377         Locale.setDefault(new Locale("fr", "US", "VAR"));
378         bundle = ResourceBundle.getBundle(name);
379         assertEquals("Wrong bundle fr_US_var", "frValue4", bundle.getString("parent4"));
380 
381         Locale.setDefault(new Locale("de", "FR", "VAR"));
382         bundle = ResourceBundle.getBundle(name);
383         assertEquals("Wrong bundle de_FR_var", "parentValue4", bundle.getString("parent4"));
384 
385         Locale.setDefault(new Locale("de", "FR", "v1"));
386         bundle = ResourceBundle.getBundle(name);
387         assertEquals("Wrong bundle de_FR_var 2", "parentValue4", bundle.getString("parent4"));
388 
389         Locale.setDefault(new Locale("de", "FR", "var"));
390         bundle = ResourceBundle.getBundle(name);
391         assertEquals("Wrong bundle de_FR_var 2", "parentValue4", bundle.getString("parent4"));
392 
393         try {
394             ResourceBundle.getBundle(null);
395             fail("NullPointerException expected");
396         } catch (NullPointerException ee) {
397             //expected
398         }
399 
400         try {
401             ResourceBundle.getBundle("");
402             fail("MissingResourceException expected");
403         } catch (MissingResourceException ee) {
404             //expected
405         }
406 
407         Locale.setDefault(defLocale);
408     }
409 
410     // http://b/26879578
testBundleWithUtf8Values()411     public void testBundleWithUtf8Values() {
412         ResourceBundle bundle = ResourceBundle.getBundle(
413                 "org.apache.harmony.tests.java.util.TestUtf8ResourceBundle");
414         assertEquals("Страх мой удивительный UTF-8 синтаксического анализа",
415                 bundle.getString("key"));
416     }
417 }
418