Path: blob/master/test/langtools/jdk/javadoc/tool/modules/PackageOptions.java
40974 views
/*1* Copyright (c) 2016, 2021, 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 815930526* @summary Test modules with packages and subpackages filtering27* @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 PackageOptions35*/3637import java.io.IOException;38import java.nio.file.DirectoryIteratorException;39import java.nio.file.DirectoryStream;40import java.nio.file.Files;41import java.nio.file.Path;4243import toolbox.*;4445public class PackageOptions extends ModuleTestBase {4647public static void main(String... args) throws Exception {48new PackageOptions().runTests();49}5051@Test52public void testExportedNonQualifiedPackagesLegacyMode(Path base) throws Exception {53execTask("--module-source-path", createSources(base.resolve("src")),54"--add-modules", "m1",55"m1pub");5657checkModulesNotSpecified("m1");58checkModulesIncluded("m1");59checkPackagesSpecified("m1pub");60checkPackagesIncluded("m1pub");61}6263@Test64public void testExportedQualifiedPackagesLegacyMode(Path base) throws Exception {65execTask("--module-source-path", createSources(base.resolve("src")),66"--add-modules", "m1",67"m1/m1pub");6869checkModulesNotSpecified("m1");70checkModulesIncluded("m1");71checkPackagesSpecified("m1pub");72checkPackagesIncluded("m1pub");73}7475@Test76public void testNonExportedQualifedPackagesLegacyMode(Path base) throws Exception {77execTask("--module-source-path", createSources(base.resolve("src")),78"--add-modules", "m1",79"m1/m1pro.pro1" /* not exported, therefore qualify with module */);8081checkModulesNotSpecified("m1");82checkModulesIncluded("m1");83checkPackagesSpecified("m1pro.pro1");84checkPackagesIncluded("m1pro.pro1");85checkPackagesNotIncluded("m1pro.pro2");86checkPackagesNotIncluded("m1pub");87}8889@Test90public void testTypesLegacyMode(Path base) throws Exception {91Path srcPath = base.resolve("src");92Path typPath = srcPath.resolve("m1/m1pub/A.java");93execTask("--module-source-path", createSources(srcPath),94"--add-modules", "m1",95typPath.toString());96checkModulesNotSpecified("m1");97checkModulesIncluded("m1");98checkPackagesIncluded("m1pub");99checkPackagesNotIncluded("m1pro");100checkTypesSpecified("m1pub.A");101checkTypesIncluded("m1pub.A");102checkTypesNotIncluded("m1pub.B");103checkTypesNotIncluded("m1pub.C");104}105106@Test107public void testSubclassedTypesLegacyMode(Path base) throws Exception {108Path srcPath = base.resolve("src");109Path typPath = srcPath.resolve("m1/m1pub/B.java");110execTask("--module-source-path", createSources(srcPath),111"--add-modules", "m1",112typPath.toString());113checkModulesNotSpecified("m1");114checkModulesIncluded("m1");115checkPackagesIncluded("m1pub");116checkPackagesNotIncluded("m1pro");117checkTypesSpecified("m1pub.B");118checkTypesIncluded("m1pub.B");119checkTypesNotIncluded("m1pub.A");120checkTypesNotIncluded("m1pub.C");121}122123@Test124public void testDefaultPackages(Path base) throws Exception {125execTask("--module-source-path", createSources(base.resolve("src")),126"--module", "m1");127128checkModulesSpecified("m1");129130checkPackagesIncluded("m1pub", "m1pub.pub1", "m1pub.pub1.pub11",131"m1pub.pub1.pub12", "m1pub.pub2.pub21");132}133134@Test135public void testEmptyPackageDirectory(Path base) throws Exception {136Path src = base.resolve("src");137createSources(src);138139// need an empty package directory, to check whether140// the behavior of subpackage and package141Path pkgdir = src.resolve("m1/m1pro/");142try (DirectoryStream<Path> stream = Files.newDirectoryStream(pkgdir, "*.java")) {143for (Path entry : stream) {144Files.deleteIfExists(entry);145}146} catch (DirectoryIteratorException ex) {147// I/O error encounted during the iteration148throw ex.getCause();149}150execTask("--module-source-path", src.toString(),151"-subpackages", "m1/m1pro");152153checkPackagesSpecified("m1pro", "m1pro.pro1", "m1pro.pro2");154155// empty package directory should cause an error156execNegativeTask("--module-source-path", src.toString(),157"m1/m1pro");158159}160161@Test162public void testExportedQualifiedSubpackageWithMultipleModules(Path base) throws Exception {163execTask("--module-source-path", createSources(base.resolve("src"), 2),164"--module", "m1",165"-subpackages", "m1/m1pro.pro1:m1/m1pro.pro2:m2/m2pub.pub1");166167checkModulesSpecified("m1");168checkPackagesSpecified("m1pro", "m1pro.pro2");169checkPackagesSpecified("m2pub.pub1");170171checkPackagesIncluded("m1pub", "m1pub.pub1", "m1pub.pub1.pub11",172"m1pub.pub1.pub12", "m1pub.pub2.pub21");173checkPackagesIncluded("m2pub.pub1");174}175176@Test177public void testUnexportedUnqualifiedSubpackages(Path base) throws Exception {178execNegativeTask("--module-source-path", createSources(base.resolve("src")),179"--module", "m1",180"-subpackages", "m1pub.pub1:pro");181182assertMessagePresent("error: No source files for package pro");183}184185@Test186public void testUnexportedQualifiedPackage(Path base) throws Exception {187execTask("--module-source-path", createSources(base.resolve("src")),188"--module", "m1",189"m1/m1pro");190191checkModulesSpecified("m1");192checkPackagesSpecified("m1pro");193194checkPackagesIncluded("m1pub", "m1pub.pub1", "m1pub.pub1.pub11",195"m1pub.pub1.pub12", "m1pub.pub2.pub21");196197checkTypesIncluded("m1pro.L");198}199200@Test201public void testUnexportedQualifiedSubpackage(Path base) throws Exception {202execTask("--module-source-path", createSources(base.resolve("src")),203"--module", "m1",204"-subpackages", "m1/m1pro");205206checkModulesSpecified("m1");207checkPackagesSpecified("m1pro", "m1pro.pro1", "m1pro.pro2");208209checkPackagesIncluded("m1pub", "m1pub.pub1", "m1pub.pub1.pub11",210"m1pub.pub1.pub12", "m1pub.pub2.pub21");211212checkTypesIncluded("m1pro.L", "m1pro.pro1.M", "m1pro.pro2.O");213}214215@Test216public void testUnexportedQualifiedSubpackageExcludeQualified(Path base) throws Exception {217execTask("--module-source-path", createSources(base.resolve("src")),218"--module", "m1",219"-subpackages", "m1/m1pro",220"-exclude", "m1/m1pro.pro1.pro11:m1/m1pro.pro2.pro21");221222checkModulesSpecified("m1");223checkPackagesSpecified("m1pro", "m1pro.pro1", "m1pro.pro2");224225checkPackagesIncluded("m1pub", "m1pub.pub1", "m1pub.pub1.pub11",226"m1pub.pub1.pub12", "m1pub.pub2.pub21");227228checkTypesIncluded("m1pro.L", "m1pro.pro1.M", "m1pro.pro2.O");229checkPackagesNotSpecified(".*pro11.*", ".*pro21.*");230}231232@Test233public void testUnexportedQualifiedSubpackageExcludeUnqualified(Path base) throws Exception {234execTask("--module-source-path", createSources(base.resolve("src")),235"--module", "m1",236"-subpackages", "m1/m1pro",237"-exclude", "m1pro.pro1.pro11:m1pro.pro2.pro21");238239checkModulesSpecified("m1");240checkPackagesSpecified("m1pro", "m1pro.pro1", "m1pro.pro2");241242checkPackagesIncluded("m1pub", "m1pub.pub1", "m1pub.pub1.pub11",243"m1pub.pub1.pub12", "m1pub.pub2.pub21");244245checkTypesIncluded("m1pro.L", "m1pro.pro1.M", "m1pro.pro2.O");246checkPackagesNotSpecified(".*pro11.*", ".*pro21.*");247}248249@Test250public void testUnexportedQualifiedSubpackages(Path base) throws Exception {251execTask("--module-source-path", createSources(base.resolve("src")),252"--module", "m1",253"-subpackages", "m1/m1pro.pro1:m1/m1pro.pro2");254255checkModulesSpecified("m1");256checkPackagesSpecified("m1pro.pro1.pro11");257258checkPackagesIncluded("m1pub", "m1pub.pub1", "m1pub.pub1.pub11",259"m1pub.pub1.pub12", "m1pub.pub2.pub21");260checkTypesIncluded("m1pro.pro1.pro11.N", "m1pro.pro2.pro21.P");261checkTypesNotIncluded("m1pro.L");262}263264String createSources(Path src) throws IOException {265return createSources0(src, 1);266}267268String createSources(Path src, int n) throws IOException {269for (int i = 1 ; i <= n ; i++) {270createSources0(src, i);271}272return src.toString();273}274275String createSources0(Path src, int n) throws IOException {276String mn = "m" + n;277String pn = "package " + mn;278279ModuleBuilder mb1 = new ModuleBuilder(tb, mn);280mb1.comment("The module #" + n)281.classes(pn + "pub; /** Klass A */ public class A {}")282.classes(pn + "pub; /** Klass B */ public class B extends A{}")283.classes(pn + "pub; /** Klass C */ public class C {}")284.classes(pn + "pub;")285.classes(pn + "pub.pub1; /** Klass B */ public class B {}")286.classes(pn + "pub.pub1.pub11; /** Klass C */ public class C {}")287.classes(pn + "pub.pub1.pub12; /** Klass C */ public class C {}")288.classes(pn + "pub.pub2.pub21; /** Klass C */ public class C {}")289.classes(pn + "pro; /** Klass L */ public class L {}")290.classes(pn + "pro.pro1; /** Klass M */ public class M {}")291.classes(pn + "pro.pro1.pro11; /** Klass N */ public class N {}")292.classes(pn + "pro.pro2; /** Klass O */ public class O {}")293.classes(pn + "pro.pro2.pro21; /** Klass P */ public class P {}")294.exports(mn + "pub")295.exports(mn + "pub.pub1")296.exports(mn + "pub.pub1.pub11")297.exports(mn + "pub.pub1.pub12")298.exports(mn + "pub.pub2.pub21")299.write(src);300return src.toString();301}302}303304305