# HG changeset patch # User mli # Date 1464757440 25200 # Node ID 12239516ceb1e6b534512663acd28c0b764ec85c # Parent b64f3ec3420eeee78c39ac3e1dfa38f7b89d15b6 8158194: Rename the directory “InstalledModuleDescriptors” and any reference to “installed” to “system” in the tests Reviewed-by: mchung diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/InstalledModulesTest.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/InstalledModulesTest.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.lang.module.ModuleDescriptor; -import java.lang.module.ModuleDescriptor.Requires.Modifier; -import java.lang.module.ModuleFinder; -import java.lang.module.ModuleReference; -import java.util.Collections; -import java.util.EnumSet; -import java.util.Map; -import java.util.Set; - -import jdk.internal.misc.JavaLangModuleAccess; -import jdk.internal.misc.SharedSecrets; -import org.testng.annotations.Test; -import static org.testng.Assert.*; - -/** - * @test - * @modules java.base/jdk.internal.misc - * @run testng InstalledModulesTest - * @summary Verify the properties of ModuleDescriptor created - * by InstalledModules - */ - -public class InstalledModulesTest { - private static final JavaLangModuleAccess jlma = SharedSecrets.getJavaLangModuleAccess(); - - /** - * Verify ModuleDescriptor contains unmodifiable sets - */ - @Test - public void testUnmodifableDescriptors() throws Exception { - ModuleFinder.ofSystem().findAll() - .stream() - .map(ModuleReference::descriptor) - .forEach(this::testModuleDescriptor); - } - - private void testModuleDescriptor(ModuleDescriptor md) { - assertUnmodifiable(md.conceals(), "conceal"); - assertUnmodifiable(md.packages(), "package"); - assertUnmodifiable(md.requires(), - jlma.newRequires(EnumSet.allOf(Modifier.class), "require")); - assertUnmodifiable(md.exports(), jlma.newExports("export")); - assertUnmodifiable(md.uses(), "use"); - assertUnmodifiable(md.provides(), "provide", - jlma.newProvides("provide", Collections.singleton("provide"))); - - } - - private void assertUnmodifiable(Set set, T dummy) { - try { - set.add(dummy); - fail("Should throw UnsupportedOperationException"); - } catch (UnsupportedOperationException e) { - // pass - } catch (Exception e) { - fail("Should throw UnsupportedOperationException"); - } - } - - private void assertUnmodifiable(Map set, T dummyKey, V dummyValue) { - try { - set.put(dummyKey, dummyValue); - fail("Should throw UnsupportedOperationException"); - } catch (UnsupportedOperationException e) { - // pass - } catch (Exception e) { - fail("Should throw UnsupportedOperationException"); - } - } - -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/UserModuleTest.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/UserModuleTest.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.stream.Collectors; - -import jdk.testlibrary.FileUtils; -import static jdk.testlibrary.ProcessTools.*; - - -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; -import static org.testng.Assert.*; - -/** - * @test - * @library /lib/testlibrary - * @modules jdk.compiler - * @build UserModuleTest CompilerUtils jdk.testlibrary.FileUtils jdk.testlibrary.ProcessTools - * @run testng UserModuleTest - */ - -public class UserModuleTest { - private static final String JAVA_HOME = System.getProperty("java.home"); - 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"); - private static final Path IMAGE = Paths.get("image"); - private static final Path JMODS = Paths.get(JAVA_HOME, "jmods"); - - // the names of the modules in this test - private static String[] modules = new String[] {"m1", "m2", "m3"}; - - private static boolean hasJmods() { - if (!Files.exists(JMODS)) { - System.err.println("Test skipped. NO jmods directory"); - return false; - } - return true; - } - - /* - * Compiles all modules used by the test - */ - @BeforeTest - public void compileAll() throws Throwable { - if (!hasJmods()) return; - - for (String mn : modules) { - Path msrc = SRC_DIR.resolve(mn); - assertTrue(CompilerUtils.compile(msrc, MODS_DIR, "-modulesourcepath", SRC_DIR.toString())); - } - - if (Files.exists(IMAGE)) { - FileUtils.deleteFileTreeUnchecked(IMAGE); - } - - createImage(IMAGE, "java.base", "m1"); - } - - private void createImage(Path outputDir, String... modules) throws Throwable { - Path jlink = Paths.get(JAVA_HOME, "bin", "jlink"); - String mp = JMODS.toString() + File.pathSeparator + MODS_DIR.toString(); - assertTrue(executeProcess(jlink.toString(), "--output", outputDir.toString(), - "--addmods", Arrays.stream(modules).collect(Collectors.joining(",")), - "--modulepath", mp) - .outputTo(System.out) - .errorTo(System.out) - .getExitValue() == 0); - } - - /* - * Test the image created when linking with a module with - * no ConcealedPackages attribute - */ - @Test - public void test() throws Throwable { - if (!hasJmods()) return; - - Path java = IMAGE.resolve("bin").resolve("java"); - assertTrue(executeProcess(java.toString(), "-m", "m1/p1.Main") - .outputTo(System.out) - .errorTo(System.out) - .getExitValue() == 0); - } - - /* - * Disable the fast loading of installed modules. - * Parsing module-info.class - */ - @Test - public void disableInstalledModules() throws Throwable { - if (!hasJmods()) return; - - Path java = IMAGE.resolve("bin").resolve("java"); - assertTrue(executeProcess(java.toString(), - "-Djdk.system.module.finder.disabledFastPath", - "-m", "m1/p1.Main") - .outputTo(System.out) - .errorTo(System.out) - .getExitValue() == 0); - } - - /* - * Test the optimization that deduplicates Set on targets of exports, - * uses, provides. - */ - @Test - public void testDedupSet() throws Throwable { - if (!hasJmods()) return; - - Path dir = Paths.get("newImage"); - createImage(dir, "java.base", "m1", "m2", "m3"); - Path java = dir.resolve("bin").resolve("java"); - assertTrue(executeProcess(java.toString(), "-m", "m1/p1.Main") - .outputTo(System.out) - .errorTo(System.out) - .getExitValue() == 0); - } -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m1/module-info.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m1/module-info.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -module m1 { -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m1/p1/Main.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m1/p1/Main.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package p1; - -import java.lang.module.ModuleDescriptor; -import java.net.URI; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collections; -import java.util.Set; - -public class Main { - public static void main(String... args) throws Exception { - // load another package - p2.T.test(); - - // check the module descriptor of an installed module - validate(Main.class.getModule().getDescriptor()); - - // read m1/module-info.class - FileSystem fs = FileSystems.newFileSystem(URI.create("jrt:/"), - Collections.emptyMap()); - Path path = fs.getPath("/", "modules", "m1", "module-info.class"); - validate(ModuleDescriptor.read(Files.newInputStream(path))); - } - - static void validate(ModuleDescriptor md) { - checkPackages(md.conceals(), "p1", "p2"); - checkPackages(md.packages(), "p1", "p2"); - } - - static void checkPackages(Set pkgs, String... expected) { - for (String pn : expected) { - if (!pkgs.contains(pn)) { - throw new RuntimeException(pn + " missing in " + pkgs); - } - } - } -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m1/p2/T.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m1/p2/T.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package p2; - -public class T { - public static void test() { } -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m2/module-info.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m2/module-info.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -module m2 { - uses q.S1; - uses q.S2; -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m2/q/S1.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m2/q/S1.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package q; - -public interface S1 { - public String name(); -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m2/q/S2.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m2/q/S2.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package q; - -public interface S2 { - public String name(); -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m3/module-info.java --- a/jdk/test/tools/jlink/plugins/InstalledModuleDescriptors/src/m3/module-info.java Tue May 31 19:13:21 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -module m3 { -} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/SystemModulesTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/SystemModulesTest.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.lang.module.ModuleDescriptor; +import java.lang.module.ModuleDescriptor.Requires.Modifier; +import java.lang.module.ModuleFinder; +import java.lang.module.ModuleReference; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Map; +import java.util.Set; + +import jdk.internal.misc.JavaLangModuleAccess; +import jdk.internal.misc.SharedSecrets; +import org.testng.annotations.Test; +import static org.testng.Assert.*; + +/** + * @test + * @modules java.base/jdk.internal.misc + * @run testng SystemModulesTest + * @summary Verify the properties of ModuleDescriptor created + * by SystemModules + */ + +public class SystemModulesTest { + private static final JavaLangModuleAccess jlma = SharedSecrets.getJavaLangModuleAccess(); + + /** + * Verify ModuleDescriptor contains unmodifiable sets + */ + @Test + public void testUnmodifableDescriptors() throws Exception { + ModuleFinder.ofSystem().findAll() + .stream() + .map(ModuleReference::descriptor) + .forEach(this::testModuleDescriptor); + } + + private void testModuleDescriptor(ModuleDescriptor md) { + assertUnmodifiable(md.conceals(), "conceal"); + assertUnmodifiable(md.packages(), "package"); + assertUnmodifiable(md.requires(), + jlma.newRequires(EnumSet.allOf(Modifier.class), "require")); + assertUnmodifiable(md.exports(), jlma.newExports("export")); + assertUnmodifiable(md.uses(), "use"); + assertUnmodifiable(md.provides(), "provide", + jlma.newProvides("provide", Collections.singleton("provide"))); + + } + + private void assertUnmodifiable(Set set, T dummy) { + try { + set.add(dummy); + fail("Should throw UnsupportedOperationException"); + } catch (UnsupportedOperationException e) { + // pass + } catch (Exception e) { + fail("Should throw UnsupportedOperationException"); + } + } + + private void assertUnmodifiable(Map set, T dummyKey, V dummyValue) { + try { + set.put(dummyKey, dummyValue); + fail("Should throw UnsupportedOperationException"); + } catch (UnsupportedOperationException e) { + // pass + } catch (Exception e) { + fail("Should throw UnsupportedOperationException"); + } + } + +} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/UserModuleTest.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.stream.Collectors; + +import jdk.testlibrary.FileUtils; +import static jdk.testlibrary.ProcessTools.*; + + +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; +import static org.testng.Assert.*; + +/** + * @test + * @library /lib/testlibrary + * @modules jdk.compiler + * @build UserModuleTest CompilerUtils jdk.testlibrary.FileUtils jdk.testlibrary.ProcessTools + * @run testng UserModuleTest + */ + +public class UserModuleTest { + private static final String JAVA_HOME = System.getProperty("java.home"); + 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"); + private static final Path IMAGE = Paths.get("image"); + private static final Path JMODS = Paths.get(JAVA_HOME, "jmods"); + + // the names of the modules in this test + private static String[] modules = new String[] {"m1", "m2", "m3"}; + + private static boolean hasJmods() { + if (!Files.exists(JMODS)) { + System.err.println("Test skipped. NO jmods directory"); + return false; + } + return true; + } + + /* + * Compiles all modules used by the test + */ + @BeforeTest + public void compileAll() throws Throwable { + if (!hasJmods()) return; + + for (String mn : modules) { + Path msrc = SRC_DIR.resolve(mn); + assertTrue(CompilerUtils.compile(msrc, MODS_DIR, "-modulesourcepath", SRC_DIR.toString())); + } + + if (Files.exists(IMAGE)) { + FileUtils.deleteFileTreeUnchecked(IMAGE); + } + + createImage(IMAGE, "java.base", "m1"); + } + + private void createImage(Path outputDir, String... modules) throws Throwable { + Path jlink = Paths.get(JAVA_HOME, "bin", "jlink"); + String mp = JMODS.toString() + File.pathSeparator + MODS_DIR.toString(); + assertTrue(executeProcess(jlink.toString(), "--output", outputDir.toString(), + "--addmods", Arrays.stream(modules).collect(Collectors.joining(",")), + "--modulepath", mp) + .outputTo(System.out) + .errorTo(System.out) + .getExitValue() == 0); + } + + /* + * Test the image created when linking with a module with + * no ConcealedPackages attribute + */ + @Test + public void test() throws Throwable { + if (!hasJmods()) return; + + Path java = IMAGE.resolve("bin").resolve("java"); + assertTrue(executeProcess(java.toString(), "-m", "m1/p1.Main") + .outputTo(System.out) + .errorTo(System.out) + .getExitValue() == 0); + } + + /* + * Disable the fast loading of system modules. + * Parsing module-info.class + */ + @Test + public void disableSystemModules() throws Throwable { + if (!hasJmods()) return; + + Path java = IMAGE.resolve("bin").resolve("java"); + assertTrue(executeProcess(java.toString(), + "-Djdk.system.module.finder.disabledFastPath", + "-m", "m1/p1.Main") + .outputTo(System.out) + .errorTo(System.out) + .getExitValue() == 0); + } + + /* + * Test the optimization that deduplicates Set on targets of exports, + * uses, provides. + */ + @Test + public void testDedupSet() throws Throwable { + if (!hasJmods()) return; + + Path dir = Paths.get("newImage"); + createImage(dir, "java.base", "m1", "m2", "m3"); + Path java = dir.resolve("bin").resolve("java"); + assertTrue(executeProcess(java.toString(), "-m", "m1/p1.Main") + .outputTo(System.out) + .errorTo(System.out) + .getExitValue() == 0); + } +} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m1/module-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m1/module-info.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +module m1 { +} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m1/p1/Main.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m1/p1/Main.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package p1; + +import java.lang.module.ModuleDescriptor; +import java.net.URI; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collections; +import java.util.Set; + +public class Main { + public static void main(String... args) throws Exception { + // load another package + p2.T.test(); + + // check the module descriptor of a system module + validate(Main.class.getModule().getDescriptor()); + + // read m1/module-info.class + FileSystem fs = FileSystems.newFileSystem(URI.create("jrt:/"), + Collections.emptyMap()); + Path path = fs.getPath("/", "modules", "m1", "module-info.class"); + validate(ModuleDescriptor.read(Files.newInputStream(path))); + } + + static void validate(ModuleDescriptor md) { + checkPackages(md.conceals(), "p1", "p2"); + checkPackages(md.packages(), "p1", "p2"); + } + + static void checkPackages(Set pkgs, String... expected) { + for (String pn : expected) { + if (!pkgs.contains(pn)) { + throw new RuntimeException(pn + " missing in " + pkgs); + } + } + } +} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m1/p2/T.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m1/p2/T.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package p2; + +public class T { + public static void test() { } +} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m2/module-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m2/module-info.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +module m2 { + uses q.S1; + uses q.S2; +} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m2/q/S1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m2/q/S1.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package q; + +public interface S1 { + public String name(); +} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m2/q/S2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m2/q/S2.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package q; + +public interface S2 { + public String name(); +} diff -r b64f3ec3420e -r 12239516ceb1 jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m3/module-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/tools/jlink/plugins/SystemModuleDescriptors/src/m3/module-info.java Tue May 31 22:04:00 2016 -0700 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +module m3 { +}