jdk/test/java/lang/reflect/Layer/LayerAndLoadersTest.java
changeset 42338 a60f280f803c
parent 40261 86a49ba76f52
child 43712 5dfd0950317c
equal deleted inserted replaced
42148:7a4a59859ac0 42338:a60f280f803c
    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