< prev index next >
test/java/util/ServiceLoader/ModulesTest.java
Print this page
*** 31,40 ****
--- 31,41 ----
* 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,56 ****
--- 48,58 ----
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,245 ****
* Basic test of ServiceLoader.load where the service provider module is an
* automatic module.
*/
@Test
public void testWithAutomaticModule() throws Exception {
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();
--- 236,249 ----
* 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"));
!
JarUtils.createJarFile(jar, classes, "META-INF", "org");
ModuleFinder finder = ModuleFinder.of(jar);
ModuleLayer bootLayer = ModuleLayer.boot();
Configuration parent = bootLayer.configuration();
*** 351,362 ****
.filter("BananaScriptEngine"::equals)
.findAny()
.isPresent());
ClassLoader scl = ClassLoader.getSystemClassLoader();
! Path dir = Paths.get(System.getProperty("test.classes", "."), "modules");
! ModuleFinder finder = ModuleFinder.of(dir);
// layer1
Configuration cf1 = cf0.resolveAndBind(finder, ModuleFinder.of(), Set.of());
ModuleLayer layer1 = bootLayer.defineModulesWithOneLoader(cf1, scl);
assertTrue(layer1.modules().size() == 1);
--- 355,365 ----
.filter("BananaScriptEngine"::equals)
.findAny()
.isPresent());
ClassLoader scl = ClassLoader.getSystemClassLoader();
! 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,463 ****
ServiceLoader.loadInstalled(null);
}
/**
* Create a custom layer by resolving the given module names. The modules
! * are located in the {@code ${test.classes}/modules} directory.
*/
private ModuleLayer createCustomLayer(String... modules) {
! Path dir = Paths.get(System.getProperty("test.classes", "."), "modules");
! ModuleFinder finder = ModuleFinder.of(dir);
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);
--- 452,465 ----
ServiceLoader.loadInstalled(null);
}
/**
* Create a custom layer by resolving the given module names. The modules
! * are located on the test module path ({@code ${test.module.path}}).
*/
private ModuleLayer createCustomLayer(String... modules) {
! 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,474 ****
--- 467,483 ----
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 >