< prev index next >

test/java/util/ServiceLoader/ModulesTest.java

Print this page

        

@@ -31,10 +31,11 @@
  *          classpath/pearscript/org/pear/PearScript.java
  * @run testng/othervm ModulesTest
  * @summary Basic test for ServiceLoader with a provider deployed as a module.
  */
 
+import java.io.File;
 import java.lang.module.Configuration;
 import java.lang.module.ModuleFinder;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;

@@ -47,10 +48,11 @@
 import java.util.Optional;
 import java.util.ServiceLoader;
 import java.util.ServiceLoader.Provider;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.script.ScriptEngineFactory;
 
 import org.testng.annotations.Test;
 import org.testng.annotations.BeforeTest;
 import static org.testng.Assert.*;

@@ -234,12 +236,14 @@
      * Basic test of ServiceLoader.load where the service provider module is an
      * automatic module.
      */
     @Test
     public void testWithAutomaticModule() throws Exception {
+        Path here = Paths.get("");
+        Path jar = Files.createTempDirectory(here, "lib").resolve("pearscript.jar");
         Path classes = Paths.get(System.getProperty("test.classes"));
-        Path jar = Files.createTempDirectory("lib").resolve("pearscript.jar");
+
         JarUtils.createJarFile(jar, classes, "META-INF", "org");
 
         ModuleFinder finder = ModuleFinder.of(jar);
         ModuleLayer bootLayer = ModuleLayer.boot();
         Configuration parent = bootLayer.configuration();

@@ -351,12 +355,11 @@
                 .filter("BananaScriptEngine"::equals)
                 .findAny()
                 .isPresent());
 
         ClassLoader scl = ClassLoader.getSystemClassLoader();
-        Path dir = Paths.get(System.getProperty("test.classes", "."), "modules");
-        ModuleFinder finder = ModuleFinder.of(dir);
+        ModuleFinder finder = ModuleFinder.of(testModulePath());
 
         // layer1
         Configuration cf1 = cf0.resolveAndBind(finder, ModuleFinder.of(), Set.of());
         ModuleLayer layer1 = bootLayer.defineModulesWithOneLoader(cf1, scl);
         assertTrue(layer1.modules().size() == 1);

@@ -449,15 +452,14 @@
         ServiceLoader.loadInstalled(null);
     }
 
     /**
      * Create a custom layer by resolving the given module names. The modules
-     * are located in the {@code ${test.classes}/modules} directory.
+     * are located on the test module path ({@code ${test.module.path}}).
      */
     private ModuleLayer createCustomLayer(String... modules) {
-        Path dir = Paths.get(System.getProperty("test.classes", "."), "modules");
-        ModuleFinder finder = ModuleFinder.of(dir);
+        ModuleFinder finder = ModuleFinder.of(testModulePath());
         Set<String> roots = new HashSet<>();
         Collections.addAll(roots, modules);
         ModuleLayer bootLayer = ModuleLayer.boot();
         Configuration parent = bootLayer.configuration();
         Configuration cf = parent.resolve(finder, ModuleFinder.of(), roots);

@@ -465,10 +467,17 @@
         ModuleLayer layer = bootLayer.defineModulesWithOneLoader(cf, scl);
         assertTrue(layer.modules().size() == 1);
         return layer;
     }
 
+    private Path[] testModulePath() {
+        String mp = System.getProperty("test.module.path");
+        return Stream.of(mp.split(File.pathSeparator))
+                .map(Paths::get)
+                .toArray(Path[]::new);
+    }
+
     private <E> List<E> collectAll(ServiceLoader<E> loader) {
         List<E> list = new ArrayList<>();
         Iterator<E> iterator = loader.iterator();
         while (iterator.hasNext()) {
             list.add(iterator.next());
< prev index next >