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