< 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 >