< prev index next >
test/jdk/java/lang/invoke/defineHiddenClass/BasicTest.java
Print this page
*** 283,325 ****
@Test(dataProvider = "nestedTypesOrAnonymousClass")
public void hasInnerClassesOrEnclosingMethodAttribute(String className, String badDeclaringClassName) throws Throwable {
byte[] bytes = Files.readAllBytes(CLASSES_10_DIR.resolve(className + ".class"));
Class<?> hc = lookup().defineHiddenClass(bytes, false).lookupClass();
! hiddenClassWithBadAttribute(hc, badDeclaringClassName, null);
}
- private static final String BAD_NEST_HOST_CLASS_ERROR = "Unable to load nest-host class (Outer) of Outer$Inner/";
-
// define a hidden class with static nest membership
- // it fails when it attempts to validate the nest membership
@Test
public void hasStaticNestHost() throws Exception {
byte[] bytes = Files.readAllBytes(CLASSES_DIR.resolve("Outer$Inner.class"));
Class<?> hc = lookup().defineHiddenClass(bytes, false).lookupClass();
! hiddenClassWithBadAttribute(hc, "Outer", BAD_NEST_HOST_CLASS_ERROR);
}
@Test
public void hasStaticNestMembers() throws Throwable {
byte[] bytes = Files.readAllBytes(CLASSES_DIR.resolve("Outer.class"));
Class<?> hc = lookup().defineHiddenClass(bytes, false).lookupClass();
assertHiddenClass(hc);
assertTrue(hc.getNestHost() == hc);
! try {
! // fail to validate the static nest membership
! hc.getNestMembers();
! assertTrue(false);
! } catch (NoClassDefFoundError e) {
! if (!e.getMessage().equals("Outer$Inner")) {
! throw e;
! }
! }
}
// a hidden class with bad InnerClasses or EnclosingMethod attribute
! private void hiddenClassWithBadAttribute(Class<?> hc, String badDeclaringClassName, String badNestMembersError) {
assertTrue(hc.isHiddenClass());
assertTrue(hc.getCanonicalName() == null);
assertTrue(hc.getName().contains("/"));
if (badDeclaringClassName == null) {
--- 283,315 ----
@Test(dataProvider = "nestedTypesOrAnonymousClass")
public void hasInnerClassesOrEnclosingMethodAttribute(String className, String badDeclaringClassName) throws Throwable {
byte[] bytes = Files.readAllBytes(CLASSES_10_DIR.resolve(className + ".class"));
Class<?> hc = lookup().defineHiddenClass(bytes, false).lookupClass();
! hiddenClassWithBadAttribute(hc, badDeclaringClassName);
}
// define a hidden class with static nest membership
@Test
public void hasStaticNestHost() throws Exception {
byte[] bytes = Files.readAllBytes(CLASSES_DIR.resolve("Outer$Inner.class"));
Class<?> hc = lookup().defineHiddenClass(bytes, false).lookupClass();
! hiddenClassWithBadAttribute(hc, "Outer");
}
@Test
public void hasStaticNestMembers() throws Throwable {
byte[] bytes = Files.readAllBytes(CLASSES_DIR.resolve("Outer.class"));
Class<?> hc = lookup().defineHiddenClass(bytes, false).lookupClass();
assertHiddenClass(hc);
assertTrue(hc.getNestHost() == hc);
! Class<?>[] members = hc.getNestMembers();
! assertTrue(members.length == 1 && members[0] == hc);
}
// a hidden class with bad InnerClasses or EnclosingMethod attribute
! private void hiddenClassWithBadAttribute(Class<?> hc, String badDeclaringClassName) {
assertTrue(hc.isHiddenClass());
assertTrue(hc.getCanonicalName() == null);
assertTrue(hc.getName().contains("/"));
if (badDeclaringClassName == null) {
*** 331,351 ****
assertFalse(hc.isMemberClass());
} else {
declaringClassNotFound(hc, badDeclaringClassName);
}
! // validation of nest membership may fail
assertTrue(hc.getNestHost() == hc);
- try {
// validate the static nest membership
! hc.getNestMembers();
! assertTrue(badNestMembersError == null);
! } catch (NoClassDefFoundError e) {
! if (!e.getMessage().startsWith(badNestMembersError)) {
! throw e;
! }
! }
}
// Class::getSimpleName, Class::isMemberClass
private void declaringClassNotFound(Class<?> c, String cn) {
try {
--- 321,335 ----
assertFalse(hc.isMemberClass());
} else {
declaringClassNotFound(hc, badDeclaringClassName);
}
! // validation of nest membership
assertTrue(hc.getNestHost() == hc);
// validate the static nest membership
! Class<?>[] members = hc.getNestMembers();
! assertTrue(members.length == 1 && members[0] == hc);
}
// Class::getSimpleName, Class::isMemberClass
private void declaringClassNotFound(Class<?> c, String cn) {
try {
< prev index next >