< prev index next >
test/jdk/jigsaw/scenarios/overlappingpackages/OverlappingPackagesTest.java
Print this page
@@ -22,38 +22,44 @@
*/
/**
* @test
* @library ../../lib /lib/testlibrary
- * @build OverlappingPackagesTest CompilerUtils
+ * @build OverlappingPackagesTest CompilerUtils jdk.testlibrary.OutputAnalyzer
* @run testng OverlappingPackagesTest
* @summary Basic test to ensure that startup fails if two or more modules
- * in the boot Layer have the same package
+ * in the boot Layer have the same package. Startup is not supposed
+ * to fail if there is a package name duplication with/on the unnamed
+ * module.
*/
+import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
+import java.util.regex.Pattern;
import static jdk.testlibrary.ProcessTools.*;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
+import jdk.testlibrary.OutputAnalyzer;
+
@Test
public class OverlappingPackagesTest {
private static final String TEST_SRC = System.getProperty("test.src");
private static final Path SRC_DIR = Paths.get(TEST_SRC, "src");
private static final Path MODS_DIR = Paths.get("mods");
// the names of the modules in this test
- private static List<String> modules = Arrays.asList("m1", "m2", "misc", "test");
-
+ private static final List<String> modules = Arrays.asList("m1", "m2",
+ "misc", "test");
/**
* Compiles all modules used by the test
*/
@BeforeTest
@@ -73,43 +79,75 @@
= executeTestJava("-mp", MODS_DIR.toString(),
"-m", "test/test.Main")
.outputTo(System.out)
.errorTo(System.err)
.getExitValue();
-
assertTrue(exitValue == 0);
}
/**
* Run the test with "-addmods misc", the misc module has package
* sun.misc and so should overlap with the base module.
*/
public void testOverlapWithBaseModule() throws Exception {
- int exitValue
+ OutputAnalyzer output
= executeTestJava("-mp", MODS_DIR.toString(),
"-addmods", "misc",
"-m", "test/test.Main")
.outputTo(System.out)
- .errorTo(System.err)
- .getExitValue();
-
- assertTrue(exitValue != 0);
+ .errorTo(System.err);
+ output.shouldContain("Module misc contains package sun.misc, " +
+ "module java.base exports package sun.misc to misc");
+ assertTrue(output.getExitValue() != 0);
}
/**
* Run the test with "-addmods m1,m2". Both modules have package p.
*/
public void testOverlap() throws Exception {
- int exitValue
+ OutputAnalyzer output
= executeTestJava("-mp", MODS_DIR.toString(),
"-addmods", "m1,m2",
"-m", "test/test.Main")
.outputTo(System.out)
+ .errorTo(System.err);
+ String errorText = "Package p in both module m. and module m.";
+ if(!Pattern.compile(errorText).matcher(output.getOutput()).find()) {
+ fail("Output does not contain expected error: \"" +
+ errorText + "\"");
+ }
+ assertTrue(output.getExitValue() != 0);
+ }
+
+ /**
+ * Run the test with m1 being on the modulepath. m1 module has package p.
+ * Package p is also present on the classpath.
+ */
+ public void testOverlapWithClasspath() throws Exception {
+ int exitValue
+ = executeTestJava("-mp", MODS_DIR.toString(),
+ "-classpath", MODS_DIR.resolve("m1").toString(),
+ "-addmods", "m2",
+ "-m", "test/test.Main")
+ .outputTo(System.out)
.errorTo(System.err)
.getExitValue();
-
- assertTrue(exitValue != 0);
+ assertTrue(exitValue == 0);
}
-
+ /**
+ * Run with package p present two times on the classpath.
+ */
+ public void testOverlapWithDupsOnClasspath() throws Exception {
+ String cp = MODS_DIR.resolve("m1").toString() + File.pathSeparator +
+ MODS_DIR.resolve("m2");
+ int exitValue
+ = executeTestJava("-mp", MODS_DIR.toString(),
+ "-classpath", cp,
+ "-m", "test/test.Main")
+ .outputTo(System.out)
+ .errorTo(System.err)
+ .getExitValue();
+ assertTrue(exitValue == 0);
+ }
}
< prev index next >