< 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 >