Index: src/test/java/tests/api/java/util/resourceBundleTest/P.java =================================================================== --- src/test/java/tests/api/java/util/resourceBundleTest/P.java (revision 0) +++ src/test/java/tests/api/java/util/resourceBundleTest/P.java (revision 0) @@ -0,0 +1,28 @@ +package tests.api.java.util.resourceBundleTest; + +import java.util.ResourceBundle; + +public class P { + private Class c; + + public void setClazz(Class c) { + this.c = c; + } + + public String findProp(String key) { + return findProp(this.c, key); + } + + private String findProp(Class cls, String key) { + String ret = null; + try { + ResourceBundle b = ResourceBundle.getBundle(cls.getName()); + ret = (String)b.getObject(key); + } catch (Exception e) { + } + if (ret == null && !cls.equals(Object.class) && !cls.isPrimitive()) { + ret = findProp(cls.getSuperclass(), key); + } + return ret; + } +} Index: src/test/java/tests/api/java/util/resourceBundleTest/A.java =================================================================== --- src/test/java/tests/api/java/util/resourceBundleTest/A.java (revision 0) +++ src/test/java/tests/api/java/util/resourceBundleTest/A.java (revision 0) @@ -0,0 +1,13 @@ +package tests.api.java.util.resourceBundleTest; + +public class A implements I { + private static P pp = new P(); + + public A() { + pp.setClazz(getClass()); + } + + public String find(String key) { + return pp.findProp(key); + } +} Index: src/test/java/tests/api/java/util/resourceBundleTest/B.java =================================================================== --- src/test/java/tests/api/java/util/resourceBundleTest/B.java (revision 0) +++ src/test/java/tests/api/java/util/resourceBundleTest/B.java (revision 0) @@ -0,0 +1,4 @@ +package tests.api.java.util.resourceBundleTest; + +public class B extends A { +} Index: src/test/java/tests/api/java/util/resourceBundleTest/I.java =================================================================== --- src/test/java/tests/api/java/util/resourceBundleTest/I.java (revision 0) +++ src/test/java/tests/api/java/util/resourceBundleTest/I.java (revision 0) @@ -0,0 +1,5 @@ +package tests.api.java.util.resourceBundleTest; + +public interface I { + String find(String key); +} Index: src/test/java/tests/api/java/util/ResourceBundleTest.java =================================================================== --- src/test/java/tests/api/java/util/ResourceBundleTest.java (revision 535922) +++ src/test/java/tests/api/java/util/ResourceBundleTest.java (working copy) @@ -28,6 +28,7 @@ import java.util.Vector; import tests.support.resource.Support_Resources; +import tests.api.java.util.resourceBundleTest.B; public class ResourceBundleTest extends junit.framework.TestCase { @@ -126,6 +127,12 @@ bundle = ResourceBundle.getBundle(name, Locale.getDefault(), loader); assertEquals("Wrong cached value", "resource", bundle.getString("property")); + + // Regression test for Harmony-3823 + B bb = new B(); + String s = bb.find("nonexistent"); + s = bb.find("name"); + assertEquals("Wrong property got", "Name", s); } /** Index: src/test/java/tests/api/java/util/resourceBundleTest/A.java =================================================================== --- src/test/java/tests/api/java/util/resourceBundleTest/A.java (revision 0) +++ src/test/java/tests/api/java/util/resourceBundleTest/A.java (revision 0) @@ -0,0 +1,13 @@ +package tests.api.java.util.resourceBundleTest; + +public class A implements I { + private static P pp = new P(); + + public A() { + pp.setClazz(getClass()); + } + + public String find(String key) { + return pp.findProp(key); + } +} Index: src/test/java/tests/api/java/util/resourceBundleTest/B.java =================================================================== --- src/test/java/tests/api/java/util/resourceBundleTest/B.java (revision 0) +++ src/test/java/tests/api/java/util/resourceBundleTest/B.java (revision 0) @@ -0,0 +1,4 @@ +package tests.api.java.util.resourceBundleTest; + +public class B extends A { +} Index: src/test/java/tests/api/java/util/resourceBundleTest/I.java =================================================================== --- src/test/java/tests/api/java/util/resourceBundleTest/I.java (revision 0) +++ src/test/java/tests/api/java/util/resourceBundleTest/I.java (revision 0) @@ -0,0 +1,5 @@ +package tests.api.java.util.resourceBundleTest; + +public interface I { + String find(String key); +} Index: src/test/java/tests/api/java/util/resourceBundleTest/P.java =================================================================== --- src/test/java/tests/api/java/util/resourceBundleTest/P.java (revision 0) +++ src/test/java/tests/api/java/util/resourceBundleTest/P.java (revision 0) @@ -0,0 +1,28 @@ +package tests.api.java.util.resourceBundleTest; + +import java.util.ResourceBundle; + +public class P { + private Class c; + + public void setClazz(Class c) { + this.c = c; + } + + public String findProp(String key) { + return findProp(this.c, key); + } + + private String findProp(Class cls, String key) { + String ret = null; + try { + ResourceBundle b = ResourceBundle.getBundle(cls.getName()); + ret = (String)b.getObject(key); + } catch (Exception e) { + } + if (ret == null && !cls.equals(Object.class) && !cls.isPrimitive()) { + ret = findProp(cls.getSuperclass(), key); + } + return ret; + } +} Index: src/test/resources/tests/api/java/util/resourceBundleTest/B.properties =================================================================== --- src/test/resources/tests/api/java/util/resourceBundleTest/B.properties (revision 0) +++ src/test/resources/tests/api/java/util/resourceBundleTest/B.properties (revision 0) @@ -0,0 +1 @@ +name=Name Index: src/test/resources/tests/api/java/util/resourceBundleTest/B.properties =================================================================== --- src/test/resources/tests/api/java/util/resourceBundleTest/B.properties (revision 0) +++ src/test/resources/tests/api/java/util/resourceBundleTest/B.properties (revision 0) @@ -0,0 +1 @@ +name=Name