--- a/jdk/test/java/lang/module/AutomaticModulesTest.java Wed Nov 23 16:16:35 2016 +0000
+++ b/jdk/test/java/lang/module/AutomaticModulesTest.java Thu Dec 01 08:57:53 2016 +0000
@@ -67,6 +67,15 @@
// JAR file name module-name[/version]
{ "foo.jar", "foo" },
+ { "foo4j.jar", "foo4j", },
+
+ { "foo1.jar", "foo" },
+ { "foo1.2.jar", "foo" },
+ { "foo1.2.3.jar", "foo" },
+
+ { "foo10.jar", "foo" },
+ { "foo10.20.jar", "foo" },
+ { "foo10.20.30.jar", "foo" },
{ "foo-1.jar", "foo/1" },
{ "foo-1.2.jar", "foo/1.2" },
@@ -258,8 +267,8 @@
ModuleDescriptor descriptor = mref.get().descriptor();
assertTrue(descriptor.provides().size() == 1);
- assertTrue(descriptor.provides().containsKey(service));
- ModuleDescriptor.Provides provides = descriptor.provides().get(service);
+ ModuleDescriptor.Provides provides = descriptor.provides().iterator().next();
+ assertEquals(provides.service(), service);
assertTrue(provides.providers().size() == 1);
assertTrue(provides.providers().contains((provider)));
}
@@ -343,17 +352,17 @@
attrs.put(Attributes.Name.MAIN_CLASS, mainClass);
Path dir = Files.createTempDirectory(USER_DIR, "mods");
- createDummyJarFile(dir.resolve("m1.jar"), man);
+ createDummyJarFile(dir.resolve("m.jar"), man);
ModuleFinder finder = ModuleFinder.of(dir);
Configuration parent = Layer.boot().configuration();
- Configuration cf = resolve(parent, finder, "m1");
+ Configuration cf = resolve(parent, finder, "m");
- ModuleDescriptor m1 = findDescriptor(cf, "m1");
+ ModuleDescriptor descriptor = findDescriptor(cf, "m");
- assertTrue(m1.mainClass().isPresent());
- assertEquals(m1.mainClass().get(), mainClass);
+ assertTrue(descriptor.mainClass().isPresent());
+ assertEquals(descriptor.mainClass().get(), mainClass);
}
@@ -380,7 +389,7 @@
attrs.put(Attributes.Name.MAIN_CLASS, mainClass);
Path dir = Files.createTempDirectory(USER_DIR, "mods");
- createDummyJarFile(dir.resolve("m1.jar"), man);
+ createDummyJarFile(dir.resolve("m.jar"), man);
// should throw FindException
ModuleFinder.of(dir).findAll();
@@ -389,213 +398,213 @@
/**
* Basic test of a configuration created with automatic modules.
- * m1 requires m2*
- * m1 requires m3*
- * m2*
- * m3*
+ * a requires b*
+ * a requires c*
+ * b*
+ * c*
*/
public void testConfiguration1() throws Exception {
ModuleDescriptor descriptor1
- = new ModuleDescriptor.Builder("m1")
- .requires("m2")
- .requires("m3")
+ = ModuleDescriptor.module("a")
+ .requires("b")
+ .requires("c")
.requires("java.base")
.build();
- // m2 and m3 are automatic modules
+ // b and c are automatic modules
Path dir = Files.createTempDirectory(USER_DIR, "mods");
- createDummyJarFile(dir.resolve("m2.jar"), "p/T.class");
- createDummyJarFile(dir.resolve("m3.jar"), "q/T.class");
+ createDummyJarFile(dir.resolve("b.jar"), "p/T.class");
+ createDummyJarFile(dir.resolve("c.jar"), "q/T.class");
- // module finder locates m1 and the modules in the directory
+ // module finder locates a and the modules in the directory
ModuleFinder finder
= ModuleFinder.compose(ModuleUtils.finderOf(descriptor1),
ModuleFinder.of(dir));
Configuration parent = Layer.boot().configuration();
- Configuration cf = resolve(parent, finder, "m1");
+ Configuration cf = resolve(parent, finder, "a");
assertTrue(cf.modules().size() == 3);
- assertTrue(cf.findModule("m1").isPresent());
- assertTrue(cf.findModule("m2").isPresent());
- assertTrue(cf.findModule("m3").isPresent());
+ assertTrue(cf.findModule("a").isPresent());
+ assertTrue(cf.findModule("b").isPresent());
+ assertTrue(cf.findModule("c").isPresent());
ResolvedModule base = cf.findModule("java.base").get();
assertTrue(base.configuration() == Layer.boot().configuration());
- ResolvedModule m1 = cf.findModule("m1").get();
- ResolvedModule m2 = cf.findModule("m2").get();
- ResolvedModule m3 = cf.findModule("m3").get();
+ ResolvedModule a = cf.findModule("a").get();
+ ResolvedModule b = cf.findModule("b").get();
+ ResolvedModule c = cf.findModule("c").get();
- // m2 && m3 only require java.base
- assertTrue(m2.reference().descriptor().requires().size() == 1);
- assertTrue(m3.reference().descriptor().requires().size() == 1);
+ // b && c only require java.base
+ assertTrue(b.reference().descriptor().requires().size() == 1);
+ assertTrue(c.reference().descriptor().requires().size() == 1);
// readability
- assertTrue(m1.reads().size() == 3);
- assertTrue(m1.reads().contains(base));
- assertTrue(m1.reads().contains(m2));
- assertTrue(m1.reads().contains(m3));
+ assertTrue(a.reads().size() == 3);
+ assertTrue(a.reads().contains(base));
+ assertTrue(a.reads().contains(b));
+ assertTrue(a.reads().contains(c));
- assertTrue(m2.reads().contains(m1));
- assertTrue(m2.reads().contains(m3));
- testReadAllBootModules(cf, "m2"); // m2 reads all modules in boot layer
+ assertTrue(b.reads().contains(a));
+ assertTrue(b.reads().contains(c));
+ testReadAllBootModules(cf, "b"); // b reads all modules in boot layer
- assertTrue(m3.reads().contains(m1));
- assertTrue(m3.reads().contains(m2));
- testReadAllBootModules(cf, "m3"); // m3 reads all modules in boot layer
+ assertTrue(c.reads().contains(a));
+ assertTrue(c.reads().contains(b));
+ testReadAllBootModules(cf, "c"); // c reads all modules in boot layer
}
/**
* Basic test of a configuration created with automatic modules
- * m1 requires m2
- * m2 requires m3*
- * m3*
- * m4*
+ * a requires b
+ * b requires c*
+ * c*
+ * d*
*/
public void testInConfiguration2() throws IOException {
ModuleDescriptor descriptor1
- = new ModuleDescriptor.Builder("m1")
- .requires("m2")
+ = ModuleDescriptor.module("a")
+ .requires("b")
.requires("java.base")
.build();
ModuleDescriptor descriptor2
- = new ModuleDescriptor.Builder("m2")
- .requires("m3")
+ = ModuleDescriptor.module("b")
+ .requires("c")
.requires("java.base")
.build();
- // m3 and m4 are automatic modules
+ // c and d are automatic modules
Path dir = Files.createTempDirectory(USER_DIR, "mods");
- createDummyJarFile(dir.resolve("m3.jar"), "p/T.class");
- createDummyJarFile(dir.resolve("m4.jar"), "q/T.class");
+ createDummyJarFile(dir.resolve("c.jar"), "p/T.class");
+ createDummyJarFile(dir.resolve("d.jar"), "q/T.class");
- // module finder locates m1 and the modules in the directory
+ // module finder locates a and the modules in the directory
ModuleFinder finder
= ModuleFinder.compose(ModuleUtils.finderOf(descriptor1, descriptor2),
ModuleFinder.of(dir));
Configuration parent = Layer.boot().configuration();
- Configuration cf = resolve(parent, finder, "m1", "m4");
+ Configuration cf = resolve(parent, finder, "a", "d");
assertTrue(cf.modules().size() == 4);
- assertTrue(cf.findModule("m1").isPresent());
- assertTrue(cf.findModule("m2").isPresent());
- assertTrue(cf.findModule("m3").isPresent());
- assertTrue(cf.findModule("m4").isPresent());
+ assertTrue(cf.findModule("a").isPresent());
+ assertTrue(cf.findModule("b").isPresent());
+ assertTrue(cf.findModule("c").isPresent());
+ assertTrue(cf.findModule("d").isPresent());
- // m3 && m4 should only require java.base
- assertTrue(findDescriptor(cf, "m3").requires().size() == 1);
- assertTrue(findDescriptor(cf, "m4").requires().size() == 1);
+ // c && d should only require java.base
+ assertTrue(findDescriptor(cf, "c").requires().size() == 1);
+ assertTrue(findDescriptor(cf, "d").requires().size() == 1);
// readability
ResolvedModule base = cf.findModule("java.base").get();
assertTrue(base.configuration() == Layer.boot().configuration());
- ResolvedModule m1 = cf.findModule("m1").get();
- ResolvedModule m2 = cf.findModule("m2").get();
- ResolvedModule m3 = cf.findModule("m3").get();
- ResolvedModule m4 = cf.findModule("m4").get();
+ ResolvedModule a = cf.findModule("a").get();
+ ResolvedModule b = cf.findModule("b").get();
+ ResolvedModule c = cf.findModule("c").get();
+ ResolvedModule d = cf.findModule("d").get();
- assertTrue(m1.reads().size() == 2);
- assertTrue(m1.reads().contains(m2));
- assertTrue(m1.reads().contains(base));
+ assertTrue(a.reads().size() == 2);
+ assertTrue(a.reads().contains(b));
+ assertTrue(a.reads().contains(base));
- assertTrue(m2.reads().size() == 3);
- assertTrue(m2.reads().contains(m3));
- assertTrue(m2.reads().contains(m4));
- assertTrue(m2.reads().contains(base));
+ assertTrue(b.reads().size() == 3);
+ assertTrue(b.reads().contains(c));
+ assertTrue(b.reads().contains(d));
+ assertTrue(b.reads().contains(base));
- assertTrue(m3.reads().contains(m1));
- assertTrue(m3.reads().contains(m2));
- assertTrue(m3.reads().contains(m4));
- testReadAllBootModules(cf, "m3"); // m3 reads all modules in boot layer
+ assertTrue(c.reads().contains(a));
+ assertTrue(c.reads().contains(b));
+ assertTrue(c.reads().contains(d));
+ testReadAllBootModules(cf, "c"); // c reads all modules in boot layer
- assertTrue(m4.reads().contains(m1));
- assertTrue(m4.reads().contains(m2));
- assertTrue(m4.reads().contains(m3));
- testReadAllBootModules(cf, "m4"); // m4 reads all modules in boot layer
+ assertTrue(d.reads().contains(a));
+ assertTrue(d.reads().contains(b));
+ assertTrue(d.reads().contains(c));
+ testReadAllBootModules(cf, "d"); // d reads all modules in boot layer
}
/**
* Basic test of a configuration created with automatic modules
- * m1 requires m2
- * m2 requires public m3*
- * m3*
- * m4*
+ * a requires b
+ * b requires transitive c*
+ * c*
+ * d*
*/
public void testInConfiguration3() throws IOException {
ModuleDescriptor descriptor1
- = new ModuleDescriptor.Builder("m1")
- .requires("m2")
+ = ModuleDescriptor.module("a")
+ .requires("b")
.requires("java.base")
.build();
ModuleDescriptor descriptor2
- = new ModuleDescriptor.Builder("m2")
- .requires(Modifier.PUBLIC, "m3")
+ = ModuleDescriptor.module("b")
+ .requires(Set.of(Modifier.TRANSITIVE), "c")
.requires("java.base")
.build();
- // m3 and m4 are automatic modules
+ // c and d are automatic modules
Path dir = Files.createTempDirectory(USER_DIR, "mods");
- createDummyJarFile(dir.resolve("m3.jar"), "p/T.class");
- createDummyJarFile(dir.resolve("m4.jar"), "q/T.class");
+ createDummyJarFile(dir.resolve("c.jar"), "p/T.class");
+ createDummyJarFile(dir.resolve("d.jar"), "q/T.class");
- // module finder locates m1 and the modules in the directory
+ // module finder locates a and the modules in the directory
ModuleFinder finder
= ModuleFinder.compose(ModuleUtils.finderOf(descriptor1, descriptor2),
ModuleFinder.of(dir));
Configuration parent = Layer.boot().configuration();
- Configuration cf = resolve(parent, finder, "m1", "m4");
+ Configuration cf = resolve(parent, finder, "a", "d");
assertTrue(cf.modules().size() == 4);
- assertTrue(cf.findModule("m1").isPresent());
- assertTrue(cf.findModule("m2").isPresent());
- assertTrue(cf.findModule("m3").isPresent());
- assertTrue(cf.findModule("m4").isPresent());
+ assertTrue(cf.findModule("a").isPresent());
+ assertTrue(cf.findModule("b").isPresent());
+ assertTrue(cf.findModule("c").isPresent());
+ assertTrue(cf.findModule("d").isPresent());
ResolvedModule base = cf.findModule("java.base").get();
assertTrue(base.configuration() == Layer.boot().configuration());
- ResolvedModule m1 = cf.findModule("m1").get();
- ResolvedModule m2 = cf.findModule("m2").get();
- ResolvedModule m3 = cf.findModule("m3").get();
- ResolvedModule m4 = cf.findModule("m4").get();
+ ResolvedModule a = cf.findModule("a").get();
+ ResolvedModule b = cf.findModule("b").get();
+ ResolvedModule c = cf.findModule("c").get();
+ ResolvedModule d = cf.findModule("d").get();
- // m3 && m4 should only require java.base
- assertTrue(findDescriptor(cf, "m3").requires().size() == 1);
- assertTrue(findDescriptor(cf, "m4").requires().size() == 1);
+ // c && d should only require java.base
+ assertTrue(findDescriptor(cf, "c").requires().size() == 1);
+ assertTrue(findDescriptor(cf, "d").requires().size() == 1);
// readability
- assertTrue(m1.reads().size() == 4);
- assertTrue(m1.reads().contains(m2));
- assertTrue(m1.reads().contains(m3));
- assertTrue(m1.reads().contains(m4));
- assertTrue(m1.reads().contains(base));
+ assertTrue(a.reads().size() == 4);
+ assertTrue(a.reads().contains(b));
+ assertTrue(a.reads().contains(c));
+ assertTrue(a.reads().contains(d));
+ assertTrue(a.reads().contains(base));
- assertTrue(m2.reads().size() == 3);
- assertTrue(m2.reads().contains(m3));
- assertTrue(m2.reads().contains(m4));
- assertTrue(m2.reads().contains(base));
+ assertTrue(b.reads().size() == 3);
+ assertTrue(b.reads().contains(c));
+ assertTrue(b.reads().contains(d));
+ assertTrue(b.reads().contains(base));
- assertTrue(reads(cf, "m2", "m3"));
- assertTrue(reads(cf, "m2", "m4"));
- assertTrue(reads(cf, "m2", "java.base"));
+ assertTrue(reads(cf, "b", "c"));
+ assertTrue(reads(cf, "b", "d"));
+ assertTrue(reads(cf, "b", "java.base"));
- assertTrue(m3.reads().contains(m1));
- assertTrue(m3.reads().contains(m2));
- assertTrue(m3.reads().contains(m4));
- testReadAllBootModules(cf, "m3"); // m3 reads all modules in boot layer
+ assertTrue(c.reads().contains(a));
+ assertTrue(c.reads().contains(b));
+ assertTrue(c.reads().contains(d));
+ testReadAllBootModules(cf, "c"); // c reads all modules in boot layer
- assertTrue(m4.reads().contains(m1));
- assertTrue(m4.reads().contains(m2));
- assertTrue(m4.reads().contains(m3));
- testReadAllBootModules(cf, "m4"); // m4 reads all modules in boot layer
+ assertTrue(d.reads().contains(a));
+ assertTrue(d.reads().contains(b));
+ assertTrue(d.reads().contains(c));
+ testReadAllBootModules(cf, "d"); // d reads all modules in boot layer
}
@@ -604,23 +613,23 @@
*/
public void testInLayer() throws IOException {
ModuleDescriptor descriptor
- = new ModuleDescriptor.Builder("m1")
- .requires("m2")
- .requires("m3")
+ = ModuleDescriptor.module("a")
+ .requires("b")
+ .requires("c")
.build();
- // m2 and m3 are simple JAR files
+ // b and c are simple JAR files
Path dir = Files.createTempDirectory(USER_DIR, "mods");
- createDummyJarFile(dir.resolve("m2.jar"), "p/T.class");
- createDummyJarFile(dir.resolve("m3.jar"), "q/T2.class");
+ createDummyJarFile(dir.resolve("b.jar"), "p/T.class");
+ createDummyJarFile(dir.resolve("c.jar"), "q/T2.class");
- // module finder locates m1 and the modules in the directory
+ // module finder locates a and the modules in the directory
ModuleFinder finder
= ModuleFinder.compose(ModuleUtils.finderOf(descriptor),
ModuleFinder.of(dir));
Configuration parent = Layer.boot().configuration();
- Configuration cf = resolve(parent, finder, "m1");
+ Configuration cf = resolve(parent, finder, "a");
assertTrue(cf.modules().size() == 3);
// each module gets its own loader
@@ -629,15 +638,15 @@
// an unnamed module
Module unnamed = (new ClassLoader() { }).getUnnamedModule();
- Module m2 = layer.findModule("m2").get();
- assertTrue(m2.isNamed());
- assertTrue(m2.canRead(unnamed));
- testsReadsAll(m2, layer);
+ Module b = layer.findModule("b").get();
+ assertTrue(b.isNamed());
+ assertTrue(b.canRead(unnamed));
+ testsReadsAll(b, layer);
- Module m3 = layer.findModule("m3").get();
- assertTrue(m3.isNamed());
- assertTrue(m2.canRead(unnamed));
- testsReadsAll(m3, layer);
+ Module c = layer.findModule("c").get();
+ assertTrue(c.isNamed());
+ assertTrue(b.canRead(unnamed));
+ testsReadsAll(c, layer);
}
@@ -646,19 +655,19 @@
*/
public void testMisc() throws IOException {
Path dir = Files.createTempDirectory(USER_DIR, "mods");
- Path m1_jar = createDummyJarFile(dir.resolve("m1.jar"), "p/T.class");
+ Path m_jar = createDummyJarFile(dir.resolve("m.jar"), "p/T.class");
- ModuleFinder finder = ModuleFinder.of(m1_jar);
+ ModuleFinder finder = ModuleFinder.of(m_jar);
- assertTrue(finder.find("m1").isPresent());
- ModuleDescriptor m1 = finder.find("m1").get().descriptor();
+ assertTrue(finder.find("m").isPresent());
+ ModuleDescriptor m = finder.find("m").get().descriptor();
// test miscellaneous methods
- assertTrue(m1.isAutomatic());
- assertFalse(m1.isSynthetic());
- assertFalse(m1.osName().isPresent());
- assertFalse(m1.osArch().isPresent());
- assertFalse(m1.osVersion().isPresent());
+ assertTrue(m.isAutomatic());
+ assertFalse(m.isSynthetic());
+ assertFalse(m.osName().isPresent());
+ assertFalse(m.osArch().isPresent());
+ assertFalse(m.osVersion().isPresent());
}
@@ -703,17 +712,15 @@
* and its parent Layers.
*/
static void testsReadsAll(Module m, Layer layer) {
- while (layer != Layer.empty()) {
+ // check that m reads all modules in the layer
+ layer.configuration().modules().stream()
+ .map(ResolvedModule::name)
+ .map(layer::findModule)
+ .map(Optional::get)
+ .forEach(other -> assertTrue(m.canRead(other)));
- // check that m reads all module in the layer
- layer.configuration().modules().stream()
- .map(ResolvedModule::name)
- .map(layer::findModule)
- .map(Optional::get)
- .forEach(m2 -> assertTrue(m.canRead(m2)));
-
- layer = layer.parent().get();
- }
+ // also check parent layers
+ layer.parents().forEach(l -> testsReadsAll(m, l));
}
/**
@@ -721,11 +728,11 @@
* that reads module mn2.
*/
static boolean reads(Configuration cf, String mn1, String mn2) {
- Optional<ResolvedModule> om1 = cf.findModule(mn1);
- if (!om1.isPresent())
+ Optional<ResolvedModule> om = cf.findModule(mn1);
+ if (!om.isPresent())
return false;
- return om1.get().reads().stream()
+ return om.get().reads().stream()
.map(ResolvedModule::name)
.anyMatch(mn2::equals);
}
@@ -757,7 +764,7 @@
* in the resulting JAR file.
*/
static Path createDummyJarFile(Path jarfile, String... entries)
- throws IOException
+ throws IOException
{
return createDummyJarFile(jarfile, null, entries);
}