Path: blob/master/test/jdk/tools/launcher/modules/limitmods/LimitModsTest.java
41154 views
/*1* Copyright (c) 2014, 2018, 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* @requires !vm.graal.enabled26* @library /test/lib27* @modules java.desktop java.logging jdk.compiler28* @build LimitModsTest jdk.test.lib.compiler.CompilerUtils29* @run testng LimitModsTest30* @summary Basic tests for java --limit-modules31*/3233import java.nio.file.Path;34import java.nio.file.Paths;3536import jdk.test.lib.compiler.CompilerUtils;37import static jdk.test.lib.process.ProcessTools.*;3839import org.testng.annotations.BeforeTest;40import org.testng.annotations.Test;41import static org.testng.Assert.*;4243@Test44public class LimitModsTest {4546private static final String TEST_SRC = System.getProperty("test.src");4748private static final Path SRC_DIR = Paths.get(TEST_SRC, "src");49private static final Path MODS_DIR = Paths.get("mods");5051// the module name / main class of the test module52private static final String TEST_MODULE = "test";53private static final String MAIN_CLASS = "jdk.test.UseAWT";545556@BeforeTest57public void compileTestModule() throws Exception {5859// javac -d mods/$TESTMODULE src/$TESTMODULE/**60boolean compiled61= CompilerUtils.compile(SRC_DIR.resolve(TEST_MODULE),62MODS_DIR.resolve(TEST_MODULE));6364assertTrue(compiled, "test module did not compile");65}666768/**69* Basic test of --limit-modules to limit which platform modules are observable.70*/71public void testLimitingPlatformModules() throws Exception {72int exitValue;7374// java --limit-modules java.base --list-modules75exitValue = executeTestJava("--limit-modules", "java.base", "--list-modules")76.outputTo(System.out)77.errorTo(System.out)78.shouldContain("java.base")79.shouldNotContain("java.logging")80.shouldNotContain("java.xml")81.getExitValue();8283assertTrue(exitValue == 0);848586// java --limit-modules java.logging --list-modules87exitValue = executeTestJava("--limit-modules", "java.logging", "--list-modules")88.outputTo(System.out)89.errorTo(System.out)90.shouldContain("java.base")91.shouldContain("java.logging")92.shouldNotContain("java.xml")93.getExitValue();9495assertTrue(exitValue == 0);96}979899/**100* Test --limit-modules with --add-modules101*/102public void testWithAddMods() throws Exception {103int exitValue;104105// java --limit-modules java.base --add-modules java.logging --list-modules106exitValue = executeTestJava("--limit-modules", "java.base",107"--add-modules", "java.logging",108"--list-modules")109.outputTo(System.out)110.errorTo(System.out)111.shouldContain("java.base")112.shouldContain("java.logging")113.shouldNotContain("java.xml")114.getExitValue();115116assertTrue(exitValue == 0);117118119// java --limit-modules java.base --add-modules java.sql --list-modules120// This should fail because java.sql has dependences beyond java.base121exitValue = executeTestJava("--limit-modules", "java.base",122"--add-modules", "java.sql",123"--list-modules")124.outputTo(System.out)125.errorTo(System.out)126.getExitValue();127128assertTrue(exitValue != 0);129}130131132/**133* Run class path application with --limit-modules134*/135public void testUnnamedModule() throws Exception {136String classpath = MODS_DIR.resolve(TEST_MODULE).toString();137138// java --limit-modules java.base -cp mods/$TESTMODULE ...139int exitValue1140= executeTestJava("--limit-modules", "java.base",141"-cp", classpath,142MAIN_CLASS)143.outputTo(System.out)144.errorTo(System.out)145.shouldContain("NoClassDefFoundError")146.getExitValue();147148assertTrue(exitValue1 != 0);149150151// java --limit-modules java.base -cp mods/$TESTMODULE ...152int exitValue2153= executeTestJava("--limit-modules", "java.desktop",154"-cp", classpath,155MAIN_CLASS)156.outputTo(System.out)157.errorTo(System.out)158.getExitValue();159160assertTrue(exitValue2 == 0);161}162163164/**165* Run named module with --limit-modules166*/167public void testNamedModule() throws Exception {168169String modulepath = MODS_DIR.toString();170String mid = TEST_MODULE + "/" + MAIN_CLASS;171172// java --limit-modules java.base --module-path mods -m $TESTMODULE/$MAINCLASS173int exitValue = executeTestJava("--limit-modules", "java.base",174"--module-path", modulepath,175"-m", mid)176.outputTo(System.out)177.errorTo(System.out)178.getExitValue();179180assertTrue(exitValue != 0);181182// java --limit-modules java.desktop --module-path mods -m $TESTMODULE/$MAINCLASS183exitValue = executeTestJava("--limit-modules", "java.desktop",184"--module-path", modulepath,185"-m", mid)186.outputTo(System.out)187.errorTo(System.out)188.getExitValue();189190assertTrue(exitValue == 0);191}192193}194195196