Path: blob/master/test/langtools/jdk/javadoc/tool/modules/PatchModules.java
40974 views
/*1* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/**24* @test25* @bug 817534626* @summary Test patch module options27* @modules28* jdk.javadoc/jdk.javadoc.internal.api29* jdk.javadoc/jdk.javadoc.internal.tool30* jdk.compiler/com.sun.tools.javac.api31* jdk.compiler/com.sun.tools.javac.main32* @library /tools/lib33* @build toolbox.ToolBox toolbox.TestRunner34* @run main PatchModules35*/3637import java.nio.file.Path;38import java.nio.file.Paths;3940import toolbox.*;4142public class PatchModules extends ModuleTestBase {4344public static void main(String... args) throws Exception {45new PatchModules().runTests();46}4748// Case A.1, m2 augmenting m149@Test50public void testPatchModuleOption(Path base) throws Exception {51Path src = base.resolve("src");52Path modulePath = base.resolve("modules");53Path patchPath = base.resolve("patch");5455ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");56mb1.comment("Module on module path.")57.exports("pkg1")58.classes("package pkg1; /** Class A */ public class A { }")59.build(modulePath);6061tb.writeJavaFiles(patchPath, "package pkg1; /** Class A */ public class A { public static int k; }");62new JavacTask(tb)63.files(patchPath.resolve("pkg1/A.java"))64.run();6566ModuleBuilder mb2 = new ModuleBuilder(tb, "m2");67mb2.comment("The second module.")68.exports("pkg2")69.requires("m1")70.classes("package pkg2; /** Class B */ public class B { /** Field f */ public int f = pkg1.A.k; }")71.write(src);72execTask("--module-source-path", src.toString(),73"--patch-module", "m1=" + patchPath.toString(),74"--module-path", modulePath.toString(),75"--module", "m2");76checkModulesSpecified("m2");77checkPackagesIncluded("pkg2");78checkMembersSelected("pkg2.B.f");79}8081// Case A.2: use package, source form of m1 augmenting binary form of m182@Test83public void testPatchModuleWithPackage(Path base) throws Exception {84Path modulePath = base.resolve("modules");85Path moduleSrcPath = base.resolve("modulesSrc");8687Path mpath = Paths.get(moduleSrcPath.toString(), "m1");8889ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");90mb1.comment("Module m1.")91.exports("pkg1")92.classes("package pkg1; /** Class A */ public class A { }")93.classes("package pkg1.pkg2; /** Class B */ public class B { }")94.build(modulePath);9596execTask("-hasDocComments",97"--module-path", modulePath.toString(),98"--add-modules", "m1",99"--patch-module", "m1=" + mpath.toString(),100"pkg1");101checkTypesIncluded("pkg1.A hasDocComments");102}103104// Case A.2: use subpackages, source form of m1 augmenting binary form of m1105@Test106public void testPatchModuleWithSubPackages(Path base) throws Exception {107Path modulePath = base.resolve("modules");108Path moduleSrcPath = base.resolve("modulesSrc");109110Path mpath = Paths.get(moduleSrcPath.toString(), "m1");111112ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");113mb1.comment("Module m1.")114.exports("pkg1")115.classes("package pkg1; /** Class A */ public class A { }")116.classes("package pkg1.pkg2; /** Class B */ public class B { }")117.build(modulePath);118119execTask("-hasDocComments",120"--module-path", modulePath.toString(),121"--add-modules", "m1",122"--patch-module", "m1=" + mpath.toString(),123"-subpackages", "pkg1");124checkTypesIncluded("pkg1.A hasDocComments");125checkTypesIncluded("pkg1.pkg2.B hasDocComments");126}127128// Case B.1: (jsr166) augment and override system module129@Test130public void testPatchModuleModifyingSystemModule(Path base) throws Exception {131Path patchSrc = base.resolve("patch");132133// build the patching sources134tb.writeJavaFiles(patchSrc, """135package java.util;136/** Class Collection */137public interface Collection<K> {}""");138139tb.writeJavaFiles(patchSrc, """140package java.util;141/** Class MyCollection */142public interface MyCollection<K> extends Collection {}""");143144execTask("-hasDocComments", "--patch-module", "java.base=" + patchSrc.toString(),145"java.util");146147checkPackagesSpecified("java.util");148checkTypesIncluded("java.util.Collection hasDocComments",149"java.util.MyCollection hasDocComments");150}151152// Case C.1: patch a user module's sources using source path153@Test154public void testPatchModuleUsingSourcePath(Path base) throws Exception {155Path src = base.resolve("src");156Path patchSrc = base.resolve("patch");157158ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");159mb1.comment("Module m1.")160.exports("pkg1")161.classes("package pkg1; /** Class A */ public class A { }")162.write(src);163164// build the patching module165tb.writeJavaFiles(patchSrc, """166package pkg1;167/** Class A */ public class A extends java.util.ArrayList { }""");168tb.writeJavaFiles(patchSrc, """169package pkg1;170/** Class B */ public class B { }""");171172Path m1src = Paths.get(src.toString(), "m1");173174execTask("--source-path", m1src.toString(),175"--patch-module", "m1=" + patchSrc.toString(),176"pkg1");177178checkPackagesSpecified("pkg1");179checkModulesIncluded("m1");180checkTypesIncluded("pkg1.A", "pkg1.B");181}182183// Case C.2: patch a user module's sources using module source path184@Test185public void testPatchModuleWithModuleSourcePath(Path base) throws Exception {186Path src = base.resolve("src");187Path patchSrc = base.resolve("patch");188189ModuleBuilder mb1 = new ModuleBuilder(tb, "m1");190mb1.comment("Module on module-source-path.")191.exports("pkg1")192.classes("package pkg1; /** Class A */ public class A { }")193.write(src);194195// build the patching module196tb.writeJavaFiles(patchSrc, """197package pkg1;198/** Class A */ public class A extends java.util.ArrayList { }""");199tb.writeJavaFiles(patchSrc, """200package pkg1;201/** Class B */ public class B { }""");202203204execTask("--module-source-path", src.toString(),205"--add-modules", "m1",206"--patch-module", "m1=" + patchSrc.toString(),207"pkg1");208209checkPackagesSpecified("pkg1");210checkModulesIncluded("m1");211checkTypesIncluded("pkg1.A", "pkg1.B");212}213214}215216217