blob: 83cb5c75cd9ba859400056cfc5561d6ebe32ac6e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package tests.api.java.util;
import dalvik.annotation.KnownFailure;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargets;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.Permission;
import java.util.Enumeration;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.StringTokenizer;
import java.util.Vector;
import tests.api.java.util.support.B;
import tests.support.resource.Support_Resources;
@TestTargetClass(ResourceBundle.class)
public class ResourceBundleTest extends junit.framework.TestCase {
SecurityManager sm = new SecurityManager() {
@Override
public void checkPermission(Permission perm) {
}
};
/**
* @tests java.util.ResourceBundle#getBundle(java.lang.String,
* java.util.Locale)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getBundle",
args = {java.lang.String.class, java.util.Locale.class}
)
public void test_getBundleLjava_lang_StringLjava_util_Locale() {
ResourceBundle bundle;
String name = "tests.support.Support_TestResource";
Locale defLocale = Locale.getDefault();
Locale.setDefault(new Locale("en", "US"));
bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
assertEquals("Wrong bundle fr_FR_VAR", "frFRVARValue4", bundle.getString("parent4")
);
bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "v1"));
assertEquals("Wrong bundle fr_FR_v1",
"frFRValue4", bundle.getString("parent4"));
bundle = ResourceBundle.getBundle(name, new Locale("fr", "US", "VAR"));
assertEquals("Wrong bundle fr_US_var", "frValue4", bundle.getString("parent4")
);
bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "VAR"));
assertEquals("Wrong bundle de_FR_var", "enUSValue4", bundle.getString("parent4")
);
Locale.setDefault(new Locale("fr", "FR", "VAR"));
bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "v1"));
assertEquals("Wrong bundle de_FR_var 2", "frFRVARValue4", bundle.getString("parent4")
);
Locale.setDefault(new Locale("de", "US"));
bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "var"));
assertEquals("Wrong bundle de_FR_var 2", "parentValue4", bundle.getString("parent4")
);
// Test with a security manager
Locale.setDefault(new Locale("en", "US"));
try {
ResourceBundle.getBundle(null, Locale.getDefault());
fail("NullPointerException expected");
} catch (NullPointerException ee) {
//expected
}
try {
ResourceBundle.getBundle("", new Locale("xx", "yy"));
fail("MissingResourceException expected");
} catch (MissingResourceException ee) {
//expected
}
Locale.setDefault(defLocale);
}
/**
* @tests java.util.ResourceBundle#getBundle(java.lang.String,
* java.util.Locale, java.lang.ClassLoader)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getBundle",
args = {java.lang.String.class, java.util.Locale.class, java.lang.ClassLoader.class}
)
@KnownFailure("It's not allowed to pass null as parent class loader to"
+ " a new ClassLoader anymore. Maybe we need to change"
+ " URLClassLoader to allow this? It's not specified.")
public void test_getBundleLjava_lang_StringLjava_util_LocaleLjava_lang_ClassLoader() {
String classPath = System.getProperty("java.class.path");
StringTokenizer tok = new StringTokenizer(classPath, File.pathSeparator);
Vector<URL> urlVec = new Vector<URL>();
String resPackage = Support_Resources.RESOURCE_PACKAGE;
try {
while (tok.hasMoreTokens()) {
String path = tok.nextToken();
String url;
if (new File(path).isDirectory())
url = "file:" + path + resPackage + "subfolder/";
else
url = "jar:file:" + path + "!" + resPackage + "subfolder/";
urlVec.addElement(new URL(url));
}
} catch (MalformedURLException e) {
}
URL[] urls = new URL[urlVec.size()];
for (int i = 0; i < urlVec.size(); i++)
urls[i] = urlVec.elementAt(i);
URLClassLoader loader = new URLClassLoader(urls, null);
String name = Support_Resources.RESOURCE_PACKAGE_NAME
+ ".hyts_resource";
ResourceBundle bundle = ResourceBundle.getBundle(name, Locale
.getDefault());
assertEquals("Wrong value read", "parent", bundle.getString("property"));
bundle = ResourceBundle.getBundle(name, Locale.getDefault(), loader);
assertEquals("Wrong cached value",
"resource", bundle.getString("property"));
try {
ResourceBundle.getBundle(null, Locale.getDefault(), loader);
fail("NullPointerException expected");
} catch (NullPointerException ee) {
//expected
}
try {
ResourceBundle.getBundle(name, null, loader);
fail("NullPointerException expected");
} catch (NullPointerException ee) {
//expected
}
try {
ResourceBundle.getBundle(name, Locale.getDefault(), (ClassLoader) null);
fail("NullPointerException expected");
} catch (NullPointerException ee) {
//expected
}
try {
ResourceBundle.getBundle("", Locale.getDefault(), loader);
fail("MissingResourceException expected");
} catch (MissingResourceException ee) {
//expected
}
// Regression test for Harmony-3823
B bb = new B();
String s = bb.find("nonexistent");
s = bb.find("name");
assertEquals("Wrong property got", "Name", s);
}
/**
* @tests java.util.ResourceBundle#getString(java.lang.String)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getString",
args = {java.lang.String.class}
)
public void test_getStringLjava_lang_String() {
ResourceBundle bundle;
String name = "tests.support.Support_TestResource";
Locale.setDefault(new Locale("en", "US"));
bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
assertEquals("Wrong value parent4",
"frFRVARValue4", bundle.getString("parent4"));
assertEquals("Wrong value parent3",
"frFRValue3", bundle.getString("parent3"));
assertEquals("Wrong value parent2",
"frValue2", bundle.getString("parent2"));
assertEquals("Wrong value parent1",
"parentValue1", bundle.getString("parent1"));
assertEquals("Wrong value child3",
"frFRVARChildValue3", bundle.getString("child3"));
assertEquals("Wrong value child2",
"frFRVARChildValue2", bundle.getString("child2"));
assertEquals("Wrong value child1",
"frFRVARChildValue1", bundle.getString("child1"));
try {
bundle.getString(null);
fail("NullPointerException expected");
} catch (NullPointerException ee) {
//expected
}
try {
bundle.getString("");
fail("MissingResourceException expected");
} catch (MissingResourceException ee) {
//expected
}
try {
bundle.getString("IntegerVal");
fail("ClassCastException expected");
} catch (ClassCastException ee) {
//expected
}
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Regression test. Doesn't verify NullPointerException.",
method = "getBundle",
args = {java.lang.String.class}
)
public void test_getBundle_getClassName() {
// Regression test for Harmony-1759
Locale locale = Locale.GERMAN;
String nonExistentBundle = "Non-ExistentBundle";
try {
ResourceBundle.getBundle(nonExistentBundle, locale, this.getClass()
.getClassLoader());
fail("MissingResourceException expected!");
} catch (MissingResourceException e) {
assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
}
try {
ResourceBundle.getBundle(nonExistentBundle, locale);
fail("MissingResourceException expected!");
} catch (MissingResourceException e) {
assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
}
locale = Locale.getDefault();
try {
ResourceBundle.getBundle(nonExistentBundle);
fail("MissingResourceException expected!");
} catch (MissingResourceException e) {
assertEquals(nonExistentBundle + "_" + locale, e.getClassName());
}
}
class Mock_ResourceBundle extends ResourceBundle {
@Override
public Enumeration<String> getKeys() {
return null;
}
@Override
protected Object handleGetObject(String key) {
return null;
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "ResourceBundle",
args = {}
)
public void test_constructor() {
assertNotNull(new Mock_ResourceBundle());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getLocale",
args = {}
)
public void test_getLocale() {
ResourceBundle bundle;
String name = "tests.support.Support_TestResource";
Locale loc = Locale.getDefault();
Locale.setDefault(new Locale("en", "US"));
bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
assertEquals("fr_FR_VAR", bundle.getLocale().toString());
bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "v1"));
assertEquals("fr_FR", bundle.getLocale().toString());
bundle = ResourceBundle.getBundle(name, new Locale("fr", "US", "VAR"));
assertEquals("fr", bundle.getLocale().toString());
bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "VAR"));
assertEquals("en_US", bundle.getLocale().toString());
bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "v1"));
assertEquals("en_US", bundle.getLocale().toString());
bundle = ResourceBundle.getBundle(name, new Locale("de", "FR", "var"));
assertEquals("en_US", bundle.getLocale().toString());
Locale.setDefault(loc);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getObject",
args = {java.lang.String.class}
)
public void test_getObjectLjava_lang_String() {
ResourceBundle bundle;
String name = "tests.support.Support_TestResource";
Locale.setDefault(new Locale("en", "US"));
bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
assertEquals("Wrong value parent4",
"frFRVARValue4", (String)bundle.getObject("parent4"));
assertEquals("Wrong value parent3",
"frFRValue3", (String)bundle.getObject("parent3"));
assertEquals("Wrong value parent2",
"frValue2", (String)bundle.getObject("parent2"));
assertEquals("Wrong value parent1",
"parentValue1", (String)bundle.getObject("parent1"));
assertEquals("Wrong value child3",
"frFRVARChildValue3", (String)bundle.getObject("child3"));
assertEquals("Wrong value child2",
"frFRVARChildValue2", (String)bundle.getObject("child2"));
assertEquals("Wrong value child1",
"frFRVARChildValue1", (String)bundle.getObject("child1"));
assertEquals("Wrong value IntegerVal",
1, bundle.getObject("IntegerVal"));
try {
bundle.getObject(null);
fail("NullPointerException expected");
} catch (NullPointerException ee) {
//expected
}
try {
bundle.getObject("");
fail("MissingResourceException expected");
} catch (MissingResourceException ee) {
//expected
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getStringArray",
args = {java.lang.String.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setParent",
args = {java.util.ResourceBundle.class}
)
})
public void test_getStringArrayLjava_lang_String() {
ResourceBundle bundle;
String name = "tests.support.Support_TestResource";
Locale.setDefault(new Locale("en", "US"));
bundle = ResourceBundle.getBundle(name, new Locale("fr", "FR", "VAR"));
String[] array = bundle.getStringArray("StringArray");
for(int i = 0; i < array.length; i++) {
assertEquals("Str" + (i + 1), array[i]);
}
try {
bundle.getStringArray(null);
fail("NullPointerException expected");
} catch (NullPointerException ee) {
//expected
}
try {
bundle.getStringArray("");
fail("MissingResourceException expected");
} catch (MissingResourceException ee) {
//expected
}
try {
bundle.getStringArray("IntegerVal");
fail("ClassCastException expected");
} catch (ClassCastException ee) {
//expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getBundle",
args = {java.lang.String.class}
)
public void test_getBundleLjava_lang_String() {
ResourceBundle bundle;
String name = "tests.support.Support_TestResource";
Locale defLocale = Locale.getDefault();
Locale.setDefault(new Locale("en", "US"));
bundle = ResourceBundle.getBundle(name);
assertEquals("enUSValue4", bundle.getString("parent4")
);
Locale.setDefault(new Locale("fr", "FR", "v1"));
bundle = ResourceBundle.getBundle(name);
assertEquals("Wrong bundle fr_FR_v1",
"frFRValue4", bundle.getString("parent4"));
Locale.setDefault(new Locale("fr", "US", "VAR"));
bundle = ResourceBundle.getBundle(name);
assertEquals("Wrong bundle fr_US_var", "frValue4", bundle.getString("parent4")
);
Locale.setDefault(new Locale("de", "FR", "VAR"));
bundle = ResourceBundle.getBundle(name);
assertEquals("Wrong bundle de_FR_var", "parentValue4", bundle.getString("parent4")
);
Locale.setDefault(new Locale("de", "FR", "v1"));
bundle = ResourceBundle.getBundle(name);
assertEquals("Wrong bundle de_FR_var 2", "parentValue4", bundle.getString("parent4")
);
Locale.setDefault(new Locale("de", "FR", "var"));
bundle = ResourceBundle.getBundle(name);
assertEquals("Wrong bundle de_FR_var 2", "parentValue4", bundle.getString("parent4")
);
try {
ResourceBundle.getBundle(null);
fail("NullPointerException expected");
} catch (NullPointerException ee) {
//expected
}
try {
ResourceBundle.getBundle("");
fail("MissingResourceException expected");
} catch (MissingResourceException ee) {
//expected
}
}
protected void setUp() {
}
protected void tearDown() {
}
}