62 * Compiles all modules used by the test 63 */ 64 @BeforeTest 65 public void compileAll() throws Exception { 66 for (String mn : modules) { 67 Path msrc = SRC_DIR.resolve(mn); 68 assertTrue(CompilerUtils.compile(msrc, MODS_DIR, "--module-source-path", SRC_DIR.toString())); 69 } 70 } 71 72 /** 73 * Test proxy implementing interfaces in a Layer defined in 74 * an unnamed module 75 */ 76 @Test 77 public void testProxyInUnnamed() throws Exception { 78 ModuleFinder finder = ModuleFinder.of(MODS_DIR); 79 Layer bootLayer = Layer.boot(); 80 Configuration cf = bootLayer 81 .configuration() 82 .resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules)); 83 ClassLoader scl = ClassLoader.getSystemClassLoader(); 84 Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl); 85 86 ClassLoader loader = layer.findLoader("m1"); 87 88 assertTrue(layer.findModule("m1").isPresent()); 89 assertTrue(layer.findModule("m2").isPresent()); 90 assertTrue(layer.findModule("m3").isPresent()); 91 92 Class<?>[] interfaces = new Class<?>[] { 93 Class.forName("p.one.I", false, loader), 94 Class.forName("p.two.A", false, loader), 95 Class.forName("p.three.P", false, loader), 96 }; 97 Object o = Proxy.newProxyInstance(loader, interfaces, handler); 98 99 Class<?> proxyClass = o.getClass(); 100 Package pkg = proxyClass.getPackage(); 101 assertFalse(proxyClass.getModule().isNamed()); 102 assertFalse(pkg.isSealed()); 103 assertEquals(proxyClass.getModule().getLayer(), null); 104 } 105 106 /** 107 * Test proxy implementing interfaces in a Layer and defined in a 108 * dynamic module 109 */ 110 @Test 111 public void testProxyInDynamicModule() throws Exception { 112 ModuleFinder finder = ModuleFinder.of(MODS_DIR); 113 Layer bootLayer = Layer.boot(); 114 Configuration cf = bootLayer 115 .configuration() 116 .resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules)); 117 ClassLoader scl = ClassLoader.getSystemClassLoader(); 118 Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl); 119 120 ClassLoader loader = layer.findLoader("m1"); 121 122 assertTrue(layer.findModule("m1").isPresent()); 123 assertTrue(layer.findModule("m2").isPresent()); 124 assertTrue(layer.findModule("m3").isPresent()); 125 126 Class<?>[] interfaces = new Class<?>[] { 127 Class.forName("p.one.internal.J", false, loader), 128 }; 129 Object o = Proxy.newProxyInstance(loader, interfaces, handler); 130 Class<?> proxyClass = o.getClass(); 131 Package pkg = proxyClass.getPackage(); 132 assertTrue(proxyClass.getModule().isNamed()); 133 assertTrue(pkg.isSealed()); 134 assertEquals(proxyClass.getModule().getLayer(), null); 135 } 136 137 /** 138 * Test proxy implementing interfaces that the target module has no access 139 */ 140 @Test 141 public void testNoReadAccess() throws Exception { 142 ModuleFinder finder = ModuleFinder.of(MODS_DIR); 143 Layer bootLayer = Layer.boot(); 144 Configuration cf = bootLayer 145 .configuration() 146 .resolveRequiresAndUses(ModuleFinder.of(), finder, Arrays.asList(modules)); 147 ClassLoader scl = ClassLoader.getSystemClassLoader(); 148 Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl); 149 150 ClassLoader loader = layer.findLoader("m1"); 151 152 assertTrue(layer.findModule("m1").isPresent()); 153 assertTrue(layer.findModule("m2").isPresent()); 154 assertTrue(layer.findModule("m3").isPresent()); 155 156 Class<?>[] interfaces = new Class<?>[] { 157 Class.forName("p.one.I", false, loader), 158 Class.forName("p.two.B", false, loader) // non-public interface but exported package 159 }; 160 checkIAE(loader, interfaces); 161 } 162 163 private void checkIAE(ClassLoader loader, Class<?>[] interfaces) { 164 try { 165 Proxy.getProxyClass(loader, interfaces); 166 throw new RuntimeException("Expected IllegalArgumentException thrown"); | 62 * Compiles all modules used by the test 63 */ 64 @BeforeTest 65 public void compileAll() throws Exception { 66 for (String mn : modules) { 67 Path msrc = SRC_DIR.resolve(mn); 68 assertTrue(CompilerUtils.compile(msrc, MODS_DIR, "--module-source-path", SRC_DIR.toString())); 69 } 70 } 71 72 /** 73 * Test proxy implementing interfaces in a Layer defined in 74 * an unnamed module 75 */ 76 @Test 77 public void testProxyInUnnamed() throws Exception { 78 ModuleFinder finder = ModuleFinder.of(MODS_DIR); 79 Layer bootLayer = Layer.boot(); 80 Configuration cf = bootLayer 81 .configuration() 82 .resolveAndBind(ModuleFinder.of(), finder, Arrays.asList(modules)); 83 ClassLoader scl = ClassLoader.getSystemClassLoader(); 84 Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl); 85 86 ClassLoader loader = layer.findLoader("m1"); 87 88 assertTrue(layer.findModule("m1").isPresent()); 89 assertTrue(layer.findModule("m2").isPresent()); 90 assertTrue(layer.findModule("m3").isPresent()); 91 92 Class<?>[] interfaces = new Class<?>[] { 93 Class.forName("p.one.I", false, loader), 94 Class.forName("p.two.A", false, loader), 95 Class.forName("p.three.P", false, loader), 96 }; 97 Object o = Proxy.newProxyInstance(loader, interfaces, handler); 98 99 Class<?> proxyClass = o.getClass(); 100 Package pkg = proxyClass.getPackage(); 101 assertFalse(proxyClass.getModule().isNamed()); 102 assertFalse(pkg.isSealed()); 103 assertEquals(proxyClass.getModule().getLayer(), null); 104 } 105 106 /** 107 * Test proxy implementing interfaces in a Layer and defined in a 108 * dynamic module 109 */ 110 @Test 111 public void testProxyInDynamicModule() throws Exception { 112 ModuleFinder finder = ModuleFinder.of(MODS_DIR); 113 Layer bootLayer = Layer.boot(); 114 Configuration cf = bootLayer 115 .configuration() 116 .resolveAndBind(ModuleFinder.of(), finder, Arrays.asList(modules)); 117 ClassLoader scl = ClassLoader.getSystemClassLoader(); 118 Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl); 119 120 ClassLoader loader = layer.findLoader("m1"); 121 122 assertTrue(layer.findModule("m1").isPresent()); 123 assertTrue(layer.findModule("m2").isPresent()); 124 assertTrue(layer.findModule("m3").isPresent()); 125 126 Class<?>[] interfaces = new Class<?>[] { 127 Class.forName("p.one.internal.J", false, loader), 128 }; 129 Object o = Proxy.newProxyInstance(loader, interfaces, handler); 130 Class<?> proxyClass = o.getClass(); 131 Package pkg = proxyClass.getPackage(); 132 assertTrue(proxyClass.getModule().isNamed()); 133 assertTrue(pkg.isSealed()); 134 assertEquals(proxyClass.getModule().getLayer(), null); 135 } 136 137 /** 138 * Test proxy implementing interfaces that the target module has no access 139 */ 140 @Test 141 public void testNoReadAccess() throws Exception { 142 ModuleFinder finder = ModuleFinder.of(MODS_DIR); 143 Layer bootLayer = Layer.boot(); 144 Configuration cf = bootLayer 145 .configuration() 146 .resolveAndBind(ModuleFinder.of(), finder, Arrays.asList(modules)); 147 ClassLoader scl = ClassLoader.getSystemClassLoader(); 148 Layer layer = bootLayer.defineModulesWithOneLoader(cf, scl); 149 150 ClassLoader loader = layer.findLoader("m1"); 151 152 assertTrue(layer.findModule("m1").isPresent()); 153 assertTrue(layer.findModule("m2").isPresent()); 154 assertTrue(layer.findModule("m3").isPresent()); 155 156 Class<?>[] interfaces = new Class<?>[] { 157 Class.forName("p.one.I", false, loader), 158 Class.forName("p.two.B", false, loader) // non-public interface but exported package 159 }; 160 checkIAE(loader, interfaces); 161 } 162 163 private void checkIAE(ClassLoader loader, Class<?>[] interfaces) { 164 try { 165 Proxy.getProxyClass(loader, interfaces); 166 throw new RuntimeException("Expected IllegalArgumentException thrown"); |