// Tags: JDK1.1 // Uses: sub/OtherPkg sub/Super Other // Test reflection member accessibility checks. package gnu.testlet.wonka.lang.reflect; import gnu.testlet.Testlet; import gnu.testlet.TestHarness; import java.lang.reflect.*; import gnu.testlet.wonka.lang.reflect.sub.*; public class ReflectAccess extends Super implements Testlet { TestHarness harness; public void test(TestHarness harness) { this.harness = harness; try { doTest(); } catch (Exception x) { harness.debug(x); harness.fail(x.toString()); x.printStackTrace(); } } void doTest() throws Exception { Method methodA = ReflectAccess.class.getDeclaredMethod("a", null); Method methodB = ReflectAccess.class.getDeclaredMethod("b", null); Method methodC = ReflectAccess.class.getDeclaredMethod("c", null); Field fieldD = ReflectAccess.class.getDeclaredField("d"); Field fieldE = ReflectAccess.class.getDeclaredField("e"); Field fieldF = ReflectAccess.class.getDeclaredField("f"); Method methodG = OtherPkg.class.getDeclaredMethod("g", null); Method methodH = OtherPkg.class.getDeclaredMethod("h", null); Method methodI = OtherPkg.class.getDeclaredMethod("i", null); Field fieldJ = OtherPkg.class.getDeclaredField("j"); Field fieldK = OtherPkg.class.getDeclaredField("k"); Field fieldL = OtherPkg.class.getDeclaredField("l"); Method methodM = Other.class.getDeclaredMethod("m", null); Method methodN = Other.class.getDeclaredMethod("n", null); Method methodO = Other.class.getDeclaredMethod("o", null); Field fieldP = Other.class.getDeclaredField("p"); Field fieldQ = Other.class.getDeclaredField("q"); Field fieldR = Other.class.getDeclaredField("r"); try { Method methodT = ReflectAccess.class.getDeclaredMethod("t", null); harness.fail(methodT + " is not declared in class ReflectAccess"); } catch (NoSuchMethodException x) { // ok harness.check(true, "method 't' is declared in class ReflectAccess"); } Method methodS = Super.class.getDeclaredMethod("s", null); Method methodT = Super.class.getDeclaredMethod("t", null); Method methodU = Super.class.getDeclaredMethod("u", null); Method methodV = Super.class.getDeclaredMethod("v", null); Field fieldW = Super.class.getDeclaredField("w"); Field fieldX = Super.class.getDeclaredField("x"); Field fieldY = Super.class.getDeclaredField("y"); Field fieldZ = Super.class.getDeclaredField("z"); Object obj = new ReflectAccess(); methodA.invoke(obj, null); methodB.invoke(null, null); methodC.invoke(obj, null); harness.check (fieldD.getChar(obj) == 'd', "field d is accessible"); harness.check (fieldE.getChar(obj) == 'e', "field e is accessible"); harness.check (fieldF.getChar(obj) == 'f', "field f is accessible"); obj = new OtherPkg(); try { methodG.invoke(obj, null); harness.fail(methodG + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, methodG + " is inaccessible"); } try { methodH.invoke(obj, null); harness.fail(methodH + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, methodH + " is inaccessible"); } try { methodI.invoke(obj, null); harness.fail(methodI + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, methodI + " is inaccessible"); } try { fieldJ.getChar(obj); harness.fail(fieldJ + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, fieldJ + " is inaccessible"); } try { fieldK.getChar(obj); harness.fail(fieldK + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, fieldK + " is inaccessible"); } try { fieldL.getChar(obj); harness.fail(fieldL + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, fieldL + " is inaccessible"); } obj = new Other(); methodM.invoke(null, null); methodN.invoke(obj, null); try { methodO.invoke(obj, null); harness.fail(methodO + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, methodO + " is inaccessible"); } methodO.setAccessible(true); methodO.invoke(obj, null); harness.check (fieldP.getChar(obj) == 'p'); harness.check (fieldQ.getChar(obj) == 'q'); try { fieldR.getChar(obj); harness.fail(fieldR + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, fieldR + " is inaccessible"); } fieldR.setAccessible(true); harness.check(fieldR.getChar(obj) == 'r', fieldR + " is accessible"); obj = new ReflectAccess(); try { methodS.invoke(obj, null); harness.fail(methodS + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, methodS + " is inaccessible"); } methodT.invoke(obj, null); methodU.invoke(obj, null); try { methodV.invoke(obj, null); harness.fail(methodV + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, methodV + " is inaccessible"); } harness.check (fieldW.getChar(obj) == 'w'); harness.check (fieldX.getChar(obj) == 'x'); try { fieldY.getChar(obj); harness.fail(fieldY + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, fieldY + " is inaccessible"); } try { fieldZ.getChar(obj); harness.fail(fieldZ + " should not be accessible"); } catch (IllegalAccessException x) { // ok harness.check(true, fieldZ + " is inaccessible"); } } private void a() { } private static void b() { } protected void c() { } private char d = 'd'; private static char e = 'e'; protected char f = 'f'; }