< prev index next >

test/jdk/java/lang/invoke/defineHiddenClass/BasicTest.java

Print this page
*** 37,10 ***
--- 37,11 ---
  import java.io.File;
  import java.io.IOException;
  import java.lang.classfile.ClassFile;
  import java.lang.constant.ClassDesc;
  import java.lang.invoke.MethodHandles.Lookup;
+ import java.lang.reflect.AccessFlag;
  import java.lang.reflect.Array;
  import java.lang.reflect.Method;
  import java.nio.charset.StandardCharsets;
  import java.nio.file.Files;
  import java.nio.file.Path;

*** 112,12 ***
          // sanity check
          Class<?> c = t.getClass();
          Class<?>[] intfs = c.getInterfaces();
          assertTrue(c.isHidden());
          assertFalse(c.isPrimitive());
!         assertEquals(1, intfs.length);
!         assertSame(HiddenTest.class, intfs[0]);
          assertNull(c.getCanonicalName());
  
          String hcName = "HiddenClass";
          String hcSuffix = "0x[0-9a-f]+";
          assertTrue(c.getName().matches(hcName + "/" + hcSuffix));
--- 113,12 ---
          // sanity check
          Class<?> c = t.getClass();
          Class<?>[] intfs = c.getInterfaces();
          assertTrue(c.isHidden());
          assertFalse(c.isPrimitive());
!         assertTrue(intfs.length == 1 || intfs.length == 2);
!         assertTrue(intfs[0] == HiddenTest.class || (intfs.length == 2 && intfs[1] == HiddenTest.class));
          assertNull(c.getCanonicalName());
  
          String hcName = "HiddenClass";
          String hcSuffix = "0x[0-9a-f]+";
          assertTrue(c.getName().matches(hcName + "/" + hcSuffix));

*** 247,13 ***
          assertSame(host, hc.getNestMembers()[0]);
      }
  
      private static Object[][] emptyClasses() {
          return new Object[][] {
!                 new Object[] { "EmptyHiddenSynthetic", ACC_SYNTHETIC },
!                 new Object[] { "EmptyHiddenEnum", ACC_ENUM },
!                 new Object[] { "EmptyHiddenAbstractClass", ACC_ABSTRACT },
                  new Object[] { "EmptyHiddenInterface", ACC_ABSTRACT|ACC_INTERFACE },
                  new Object[] { "EmptyHiddenAnnotation", ACC_ANNOTATION|ACC_ABSTRACT|ACC_INTERFACE },
          };
      }
  
--- 248,13 ---
          assertSame(host, hc.getNestMembers()[0]);
      }
  
      private static Object[][] emptyClasses() {
          return new Object[][] {
!                 new Object[] { "EmptyHiddenSynthetic", ACC_SYNTHETIC | ACC_IDENTITY },
!                 new Object[] { "EmptyHiddenEnum", ACC_ENUM | ACC_IDENTITY },
!                 new Object[] { "EmptyHiddenAbstractClass", ACC_ABSTRACT | ACC_IDENTITY },
                  new Object[] { "EmptyHiddenInterface", ACC_ABSTRACT|ACC_INTERFACE },
                  new Object[] { "EmptyHiddenAnnotation", ACC_ANNOTATION|ACC_ABSTRACT|ACC_INTERFACE },
          };
      }
  

*** 266,27 ***
       * class.
       */
      @ParameterizedTest
      @MethodSource("emptyClasses")
      public void emptyHiddenClass(String name, int accessFlags) throws Exception {
!         byte[] bytes = (accessFlags == ACC_ENUM) ? classBytes(name, CD_Enum, accessFlags)
                  : classBytes(name, accessFlags);
          Class<?> hc = lookup().defineHiddenClass(bytes, false).lookupClass();
          switch (accessFlags) {
!             case ACC_SYNTHETIC:
                  assertTrue(hc.isSynthetic());
                  assertFalse(hc.isEnum());
                  assertFalse(hc.isAnnotation());
                  assertFalse(hc.isInterface());
                  break;
!             case ACC_ENUM:
                  assertFalse(hc.isSynthetic());
                  assertTrue(hc.isEnum());
                  assertFalse(hc.isAnnotation());
                  assertFalse(hc.isInterface());
                  break;
!             case ACC_ABSTRACT:
                  assertFalse(hc.isSynthetic());
                  assertFalse(hc.isEnum());
                  assertFalse(hc.isAnnotation());
                  assertFalse(hc.isInterface());
                  break;
--- 267,27 ---
       * class.
       */
      @ParameterizedTest
      @MethodSource("emptyClasses")
      public void emptyHiddenClass(String name, int accessFlags) throws Exception {
!         byte[] bytes = (accessFlags == (ACC_ENUM | ACC_IDENTITY)) ? classBytes(name, CD_Enum, accessFlags)
                  : classBytes(name, accessFlags);
          Class<?> hc = lookup().defineHiddenClass(bytes, false).lookupClass();
          switch (accessFlags) {
!             case (ACC_SYNTHETIC | ACC_IDENTITY):
                  assertTrue(hc.isSynthetic());
                  assertFalse(hc.isEnum());
                  assertFalse(hc.isAnnotation());
                  assertFalse(hc.isInterface());
                  break;
!             case (ACC_ENUM | ACC_IDENTITY):
                  assertFalse(hc.isSynthetic());
                  assertTrue(hc.isEnum());
                  assertFalse(hc.isAnnotation());
                  assertFalse(hc.isInterface());
                  break;
!             case ACC_ABSTRACT | ACC_IDENTITY:
                  assertFalse(hc.isSynthetic());
                  assertFalse(hc.isEnum());
                  assertFalse(hc.isAnnotation());
                  assertFalse(hc.isInterface());
                  break;

*** 304,11 ***
                  break;
              default:
                  throw new IllegalArgumentException("unexpected access flag: " + accessFlags);
          }
          assertTrue(hc.isHidden());
!         assertEquals(hc.getModifiers(), ACC_PUBLIC | accessFlags);
          assertFalse(hc.isLocalClass());
          assertFalse(hc.isMemberClass());
          assertFalse(hc.isAnonymousClass());
          assertFalse(hc.isArray());
      }
--- 305,11 ---
                  break;
              default:
                  throw new IllegalArgumentException("unexpected access flag: " + accessFlags);
          }
          assertTrue(hc.isHidden());
!         assertEquals(hc.getModifiers(), (ACC_PUBLIC|accessFlags));
          assertFalse(hc.isLocalClass());
          assertFalse(hc.isMemberClass());
          assertFalse(hc.isAnonymousClass());
          assertFalse(hc.isArray());
      }
< prev index next >