28 * @build LayerAndLoadersTest CompilerUtils ModuleUtils |
28 * @build LayerAndLoadersTest CompilerUtils ModuleUtils |
29 * @run testng LayerAndLoadersTest |
29 * @run testng LayerAndLoadersTest |
30 * @summary Tests for java.lang.reflect.Layer@createWithXXX methods |
30 * @summary Tests for java.lang.reflect.Layer@createWithXXX methods |
31 */ |
31 */ |
32 |
32 |
|
33 import java.io.IOException; |
|
34 import java.io.InputStream; |
33 import java.lang.module.Configuration; |
35 import java.lang.module.Configuration; |
34 import java.lang.module.ModuleDescriptor; |
36 import java.lang.module.ModuleDescriptor; |
35 import java.lang.module.ModuleFinder; |
37 import java.lang.module.ModuleFinder; |
36 import java.lang.module.ModuleReference; |
38 import java.lang.module.ModuleReference; |
37 import java.lang.reflect.Layer; |
39 import java.lang.reflect.Layer; |
38 import java.lang.reflect.LayerInstantiationException; |
40 import java.lang.reflect.LayerInstantiationException; |
39 import java.lang.reflect.Method; |
41 import java.lang.reflect.Method; |
40 import java.lang.reflect.Module; |
42 import java.lang.reflect.Module; |
|
43 import java.net.URL; |
41 import java.nio.file.Path; |
44 import java.nio.file.Path; |
42 import java.nio.file.Paths; |
45 import java.nio.file.Paths; |
|
46 import java.util.Enumeration; |
43 import java.util.HashMap; |
47 import java.util.HashMap; |
44 import java.util.Iterator; |
48 import java.util.Iterator; |
45 import java.util.Map; |
49 import java.util.Map; |
46 import java.util.Optional; |
50 import java.util.Optional; |
47 import java.util.ServiceLoader; |
51 import java.util.ServiceLoader; |
261 * m2 exports p |
265 * m2 exports p |
262 */ |
266 */ |
263 public void testOverlappingPackages() { |
267 public void testOverlappingPackages() { |
264 |
268 |
265 ModuleDescriptor descriptor1 |
269 ModuleDescriptor descriptor1 |
266 = new ModuleDescriptor.Builder("m1").exports("p").build(); |
270 = ModuleDescriptor.module("m1").exports("p").build(); |
267 |
271 |
268 ModuleDescriptor descriptor2 |
272 ModuleDescriptor descriptor2 |
269 = new ModuleDescriptor.Builder("m2").exports("p").build(); |
273 = ModuleDescriptor.module("m2").exports("p").build(); |
270 |
274 |
271 ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2); |
275 ModuleFinder finder = ModuleUtils.finderOf(descriptor1, descriptor2); |
272 |
276 |
273 Configuration cf = Layer.boot() |
277 Configuration cf = Layer.boot() |
274 .configuration() |
278 .configuration() |
295 * layer2: m3 reads m1, m4 reads m2 |
299 * layer2: m3 reads m1, m4 reads m2 |
296 */ |
300 */ |
297 public void testSplitDelegation() { |
301 public void testSplitDelegation() { |
298 |
302 |
299 ModuleDescriptor descriptor1 |
303 ModuleDescriptor descriptor1 |
300 = new ModuleDescriptor.Builder("m1").exports("p").build(); |
304 = ModuleDescriptor.module("m1").exports("p").build(); |
301 |
305 |
302 ModuleDescriptor descriptor2 |
306 ModuleDescriptor descriptor2 |
303 = new ModuleDescriptor.Builder("m2").exports("p").build(); |
307 = ModuleDescriptor.module("m2").exports("p").build(); |
304 |
308 |
305 ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2); |
309 ModuleFinder finder1 = ModuleUtils.finderOf(descriptor1, descriptor2); |
306 |
310 |
307 Configuration cf1 = Layer.boot() |
311 Configuration cf1 = Layer.boot() |
308 .configuration() |
312 .configuration() |
310 |
314 |
311 Layer layer1 = Layer.boot().defineModulesWithManyLoaders(cf1, null); |
315 Layer layer1 = Layer.boot().defineModulesWithManyLoaders(cf1, null); |
312 checkLayer(layer1, "m1", "m2"); |
316 checkLayer(layer1, "m1", "m2"); |
313 |
317 |
314 ModuleDescriptor descriptor3 |
318 ModuleDescriptor descriptor3 |
315 = new ModuleDescriptor.Builder("m3").requires("m1").build(); |
319 = ModuleDescriptor.module("m3").requires("m1").build(); |
316 |
320 |
317 ModuleDescriptor descriptor4 |
321 ModuleDescriptor descriptor4 |
318 = new ModuleDescriptor.Builder("m4").requires("m2").build(); |
322 = ModuleDescriptor.module("m4").requires("m2").build(); |
319 |
323 |
320 ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3, descriptor4); |
324 ModuleFinder finder2 = ModuleUtils.finderOf(descriptor3, descriptor4); |
321 |
325 |
322 Configuration cf2 = cf1.resolveRequires(finder2, ModuleFinder.of(), |
326 Configuration cf2 = cf1.resolveRequires(finder2, ModuleFinder.of(), |
323 Set.of("m3", "m4")); |
327 Set.of("m3", "m4")); |
563 assertTrue(loader4.loadClass("q.Hello").getClassLoader() == loader2); |
567 assertTrue(loader4.loadClass("q.Hello").getClassLoader() == loader2); |
564 assertTrue(loader4.loadClass("w.Hello").getClassLoader() == loader6); |
568 assertTrue(loader4.loadClass("w.Hello").getClassLoader() == loader6); |
565 |
569 |
566 assertTrue(loader6.loadClass("w.Hello").getClassLoader() == loader6); |
570 assertTrue(loader6.loadClass("w.Hello").getClassLoader() == loader6); |
567 |
571 |
|
572 } |
|
573 |
|
574 |
|
575 /** |
|
576 * Basic test of resource loading with a class loader created by |
|
577 * Layer.defineModulesWithOneLoader. |
|
578 */ |
|
579 public void testResourcesOneLoader() throws Exception { |
|
580 Configuration cf = resolveRequires("m1"); |
|
581 ClassLoader scl = ClassLoader.getSystemClassLoader(); |
|
582 Layer layer = Layer.boot().defineModulesWithOneLoader(cf, scl); |
|
583 ClassLoader loader = layer.findLoader("m1"); |
|
584 testResourceLoading(loader, "p/Main.class"); |
|
585 } |
|
586 |
|
587 /** |
|
588 * Basic test of resource loading with a class loader created by |
|
589 * Layer.defineModulesWithOneLoader. |
|
590 */ |
|
591 public void testResourcesManyLoaders() throws Exception { |
|
592 Configuration cf = resolveRequires("m1"); |
|
593 ClassLoader scl = ClassLoader.getSystemClassLoader(); |
|
594 Layer layer = Layer.boot().defineModulesWithManyLoaders(cf, scl); |
|
595 ClassLoader loader = layer.findLoader("m1"); |
|
596 testResourceLoading(loader, "p/Main.class"); |
|
597 } |
|
598 |
|
599 /** |
|
600 * Test that a resource is located by a class loader. |
|
601 */ |
|
602 private void testResourceLoading(ClassLoader loader, String name) |
|
603 throws IOException |
|
604 { |
|
605 URL url = loader.getResource(name); |
|
606 assertNotNull(url); |
|
607 |
|
608 try (InputStream in = loader.getResourceAsStream(name)) { |
|
609 assertNotNull(in); |
|
610 } |
|
611 |
|
612 Enumeration<URL> urls = loader.getResources(name); |
|
613 assertTrue(urls.hasMoreElements()); |
568 } |
614 } |
569 |
615 |
570 |
616 |
571 // -- supporting methods -- |
617 // -- supporting methods -- |
572 |
618 |