< prev index next >
test/runtime/valhalla/nestmates/MethodHandleInheritTest.java
Print this page
*** 31,40 ****
--- 31,41 ----
/*
* @test MethodHandleInheritTest
* @summary Verify parent's protected and private methods access from children classes using MethodHandles
* @library /
* @modules java.base
+ * @compile -XDdisableAccessors p2/MethodHandleSubTop.java
* @run testng runtime.valhalla.nestmates.MethodHandleInheritTest
*/
public class MethodHandleInheritTest {
private static final String METHOD_NAME_PROTECTED = "getField";
*** 51,103 ****
methodHandleSubTop = new MethodHandleSubTop();
inner = methodHandleSubTop.new Inner();
innerInner = inner.new InnerInner();
}
@Test(expectedExceptions = {IllegalAccessException.class})
public void testPrivateMethodNeg() throws NoSuchMethodException, IllegalAccessException {
methodHandleSubTop.getSuperMethodMH(METHOD_NAME_PRIVATE);
}
@Test(expectedExceptions = {IllegalAccessException.class})
public void testPrivateFieldNeg() throws NoSuchFieldException, IllegalAccessException {
methodHandleSubTop.getSuperFieldMH(FIELD_NAME_PRIVATE);
}
! @Test(expectedExceptions = {NoSuchMethodException.class})
! public void testProtectedMethodFromInnerNeg() throws NoSuchMethodException, IllegalAccessException {
! inner.getSuperMethodMH(METHOD_NAME_PROTECTED);
}
! @Test(expectedExceptions = {NoSuchFieldException.class})
! public void testProtectedFieldFromInnerNeg() throws NoSuchFieldException, IllegalAccessException {
! inner.getSuperFieldMH(FIELD_NAME_PROTECTED);
}
! @Test(expectedExceptions = {NoSuchMethodException.class})
! public void testProtectedMethodFromInnerInnerNeg() throws NoSuchMethodException, IllegalAccessException {
! innerInner.getSuperMethodMH(METHOD_NAME_PROTECTED);
}
! @Test(expectedExceptions = {NoSuchFieldException.class})
! public void testProtectedFieldFromInnerInnerNeg() throws NoSuchFieldException, IllegalAccessException {
! innerInner.getSuperFieldMH(FIELD_NAME_PROTECTED);
}
@Test
public void testProtectedAccessFromTopPos() throws Throwable {
Assert.assertEquals((int) methodHandleSubTop.getSuperMethodMH(METHOD_NAME_PROTECTED).invokeExact(methodHandleSubTop), 1, "top -> parent method");
Assert.assertEquals((int) methodHandleSubTop.getSuperFieldMH(FIELD_NAME_PROTECTED).invokeExact(methodHandleSubTop), 1, "top -> parent field");
}
! @Test
! public void testProtectedAccessFromInnerPos() throws Throwable {
! Assert.assertEquals((int) inner.getSuperProtectedMethodMH().invokeExact(methodHandleSubTop), 1, "inner -> top -> parent method");
! Assert.assertEquals((int) inner.getSuperProtectedFieldMH().invokeExact(methodHandleSubTop), 1, "inner -> top -> parent field");
}
! @Test
! public void testProtectedAccessFromInnerInnerPos() throws Throwable {
! Assert.assertEquals((int) innerInner.getSuperProtectedMethodMH().invokeExact(methodHandleSubTop), 1, "innerInner -> inner -> top -> parent method");
! Assert.assertEquals((int) innerInner.getSuperProtectedFieldMH().invokeExact(methodHandleSubTop), 1, "innerInner -> inner -> top -> parent field");
}
}
--- 52,145 ----
methodHandleSubTop = new MethodHandleSubTop();
inner = methodHandleSubTop.new Inner();
innerInner = inner.new InnerInner();
}
+ /**
+ * negative case, to verify that there is no access to private method of the parent class from its child
+ */
@Test(expectedExceptions = {IllegalAccessException.class})
public void testPrivateMethodNeg() throws NoSuchMethodException, IllegalAccessException {
methodHandleSubTop.getSuperMethodMH(METHOD_NAME_PRIVATE);
}
+ /**
+ * negative case, to verify that there is no access to private field of the parent class from its child
+ */
@Test(expectedExceptions = {IllegalAccessException.class})
public void testPrivateFieldNeg() throws NoSuchFieldException, IllegalAccessException {
methodHandleSubTop.getSuperFieldMH(FIELD_NAME_PRIVATE);
}
! /**
! * positive case, to verify that there is access to protected method of the parent class from its child's inner class
! */
! @Test
! public void testProtectedMethodFromInnerPos() throws Throwable {
! Assert.assertEquals((int) inner.getSuperMethodMH(METHOD_NAME_PROTECTED).invokeExact(methodHandleSubTop), 1, "inner -> top -> parent method");
}
! /**
! * positive case, to verify that there is access to protected field of the parent class from its child's inner class
! */
! @Test
! public void testProtectedFieldFromInnerPos() throws Throwable {
! Assert.assertEquals((int) inner.getSuperFieldMH(FIELD_NAME_PROTECTED).invokeExact(methodHandleSubTop), 1, "inner -> top -> parent field");
}
! /**
! * positive case, to verify that there is access to protected method of the parent class from its child's inner inner class
! */
! @Test
! public void testProtectedMethodFromInnerInnerPos() throws Throwable {
! Assert.assertEquals((int) innerInner.getSuperMethodMH(METHOD_NAME_PROTECTED).invokeExact(methodHandleSubTop), 1, "innerInner -> inner -> top -> parent method");
}
! /**
! * positive case, to verify that there is access to protected field of the parent class from its child's inner inner class
! */
! @Test
! public void testProtectedFieldFromInnerInnerPos() throws Throwable {
! Assert.assertEquals((int) innerInner.getSuperFieldMH(FIELD_NAME_PROTECTED).invokeExact(methodHandleSubTop), 1, "innerInner -> inner -> top -> parent field");
}
+ /**
+ * positive case, to verify that there is access to protected field and method of the parent class from its child
+ */
@Test
public void testProtectedAccessFromTopPos() throws Throwable {
Assert.assertEquals((int) methodHandleSubTop.getSuperMethodMH(METHOD_NAME_PROTECTED).invokeExact(methodHandleSubTop), 1, "top -> parent method");
Assert.assertEquals((int) methodHandleSubTop.getSuperFieldMH(FIELD_NAME_PROTECTED).invokeExact(methodHandleSubTop), 1, "top -> parent field");
}
! /**
! * negative case, to verify that there is no method access bridge in top accessing from inner
! */
! @Test(expectedExceptions = {NoSuchMethodException.class})
! public void testProtectedMethodAccessFromInnerNeg() throws Throwable {
! inner.getSuperProtectedMethodMH();
}
! /**
! * negative case, to verify that there is no field access bridge in top accessing from inner
! */
! @Test(expectedExceptions = {NoSuchMethodException.class})
! public void testProtectedFieldAccessFromInnerNeg() throws Throwable {
! inner.getSuperProtectedFieldMH();
! }
!
! /**
! * negative case, to verify that there is no method access bridge in top accessing from inner's inner
! */
! @Test(expectedExceptions = {NoSuchMethodException.class})
! public void testProtectedMethodAccessFromInnerInnerNeg() throws Throwable {
! innerInner.getSuperProtectedMethodMH();
! }
!
! /**
! * negative case, to verify that there is no field access bridge in top accessing from inner's inner
! */
! @Test(expectedExceptions = {NoSuchMethodException.class})
! public void testProtectedFieldAccessFromInnerInnerNeg() throws Throwable {
! innerInner.getSuperProtectedFieldMH();
}
}
< prev index next >