vromero@1591: /* vromero@1591: * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. vromero@1591: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. vromero@1591: * vromero@1591: * This code is free software; you can redistribute it and/or modify it vromero@1591: * under the terms of the GNU General Public License version 2 only, as vromero@1591: * published by the Free Software Foundation. vromero@1591: * vromero@1591: * This code is distributed in the hope that it will be useful, but WITHOUT vromero@1591: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or vromero@1591: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License vromero@1591: * version 2 for more details (a copy is included in the LICENSE file that vromero@1591: * accompanied this code). vromero@1591: * vromero@1591: * You should have received a copy of the GNU General Public License version vromero@1591: * 2 along with this work; if not, write to the Free Software Foundation, vromero@1591: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. vromero@1591: * vromero@1591: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA vromero@1591: * or visit www.oracle.com if you need additional information or have any vromero@1591: * questions. vromero@1591: */ vromero@1591: vromero@1591: /* vromero@1591: * @test vromero@1591: * @bug 4241229 4785453 vromero@1591: * @summary Test -classpath option and classpath defaults. vromero@1591: * @library /tools/javac/lib vromero@1591: * @build ToolBox vromero@1591: * @run main ClassPathTest vromero@1591: */ vromero@1591: vromero@1591: import java.nio.file.Paths; vromero@1591: import java.util.Map; vromero@1591: import java.util.TreeMap; vromero@1591: import com.sun.tools.javac.util.ArrayUtils; vromero@1591: vromero@1591: //original test: test/tools/javac/ClassPathTest/ClassPathTest.sh vromero@1591: public class ClassPathTest { vromero@1591: vromero@1591: private static final String ClassPathTest1Src = vromero@1591: "import pkg.*;\n" + vromero@1591: "public class ClassPathTest1 {\n" + vromero@1591: " ClassPathTestAux1 x;\n" + vromero@1591: "}"; vromero@1591: vromero@1591: private static final String ClassPathTest2Src = vromero@1591: "import pkg.*;\n" + vromero@1591: "public class ClassPathTest2 {\n" + vromero@1591: " ClassPathTestAux2 x;\n" + vromero@1591: "}"; vromero@1591: vromero@1591: private static final String ClassPathTest3Src = vromero@1591: "import pkg.*;\n" + vromero@1591: "public class ClassPathTest3 {\n" + vromero@1591: " ClassPathTestAux3 x;\n" + vromero@1591: "}"; vromero@1591: vromero@1591: private static final String fooPkgClassPathTestAux1Src = vromero@1591: "package pkg;\n" + vromero@1591: "public class ClassPathTestAux1 {}"; vromero@1591: vromero@1591: private static final String barPkgClassPathTestAux2Src = vromero@1591: "package pkg;\n" + vromero@1591: "public class ClassPathTestAux2 {}"; vromero@1591: vromero@1591: private static final String pkgClassPathTestAux3Src = vromero@1591: "package pkg;\n" + vromero@1591: "public class ClassPathTestAux3 {}"; vromero@1591: vromero@1591: ProcessBuilder pb = null; vromero@1591: vromero@1591: public static void main(String[] args) throws Exception { vromero@1591: new ClassPathTest().test(); vromero@1591: } vromero@1591: vromero@1591: public void test() throws Exception { vromero@1591: createOutputDirAndSourceFiles(); vromero@1591: checkCompileCommands(); vromero@1591: } vromero@1591: vromero@1591: void createOutputDirAndSourceFiles() throws Exception { vromero@1591: //dirs and files creation vromero@1591: ToolBox.createJavaFileFromSource(ClassPathTest1Src); vromero@1591: ToolBox.createJavaFileFromSource(ClassPathTest2Src); vromero@1591: ToolBox.createJavaFileFromSource(ClassPathTest3Src); vromero@1591: ToolBox.createJavaFileFromSource(Paths.get("foo"), vromero@1591: fooPkgClassPathTestAux1Src); vromero@1591: ToolBox.createJavaFileFromSource(Paths.get("bar"), vromero@1591: barPkgClassPathTestAux2Src); vromero@1591: ToolBox.createJavaFileFromSource(pkgClassPathTestAux3Src); vromero@1591: } vromero@1591: vromero@1591: void checkCompileCommands() throws Exception { vromero@1591: String[] mainArgs = ToolBox.getJavacBin(); vromero@1591: vromero@1591: // Without the -cp . parameter the command will fail seems like when called vromero@1591: // from the command line, the current dir is added to the classpath vromero@1591: // automatically but this is not happening when called using ProcessBuilder vromero@1591: vromero@1591: // testJavac success ClassPathTest3.java vromero@1591: String[] commonArgs = ArrayUtils.concatOpen(mainArgs, "-cp", "."); vromero@1591: vromero@1591: ToolBox.AnyToolArgs successParams = vromero@1591: new ToolBox.AnyToolArgs() vromero@1591: .setAllArgs(ArrayUtils.concatOpen(commonArgs, "ClassPathTest3.java")); vromero@1591: ToolBox.executeCommand(successParams); vromero@1591: vromero@1591: // testJavac failure ClassPathTest1.java vromero@1591: ToolBox.AnyToolArgs failParams = vromero@1591: new ToolBox.AnyToolArgs(ToolBox.Expect.FAIL) vromero@1591: .setAllArgs(ArrayUtils.concatOpen(commonArgs, "ClassPathTest1.java")); vromero@1591: ToolBox.executeCommand(failParams); vromero@1591: vromero@1591: // This is done inside the executeCommand method vromero@1591: // CLASSPATH=bar; export CLASSPATH vromero@1591: vromero@1591: Map extVars = new TreeMap<>(); vromero@1591: extVars.put("CLASSPATH", "bar"); vromero@1591: vromero@1591: // testJavac success ClassPathTest2.java vromero@1591: successParams.setAllArgs(ArrayUtils.concatOpen(mainArgs, "ClassPathTest2.java")).set(extVars); vromero@1591: ToolBox.executeCommand(successParams); vromero@1591: vromero@1591: // testJavac failure ClassPathTest1.java vromero@1591: failParams.setAllArgs(ArrayUtils.concatOpen(mainArgs, "ClassPathTest1.java")).set(extVars); vromero@1591: ToolBox.executeCommand(failParams); vromero@1591: vromero@1591: // testJavac failure ClassPathTest3.java vromero@1591: failParams.setAllArgs(ArrayUtils.concatOpen(mainArgs, "ClassPathTest3.java")); vromero@1591: ToolBox.executeCommand(failParams); vromero@1591: vromero@1591: // testJavac success -classpath foo ClassPathTest1.java vromero@1591: vromero@1591: commonArgs = ArrayUtils.concatOpen(mainArgs, "-cp", "foo"); vromero@1591: successParams.setAllArgs(ArrayUtils.concatOpen(commonArgs, "ClassPathTest1.java")); vromero@1591: ToolBox.executeCommand(successParams); vromero@1591: vromero@1591: // testJavac failure -classpath foo ClassPathTest2.java vromero@1591: failParams.setAllArgs(ArrayUtils.concatOpen(commonArgs, "ClassPathTest2.java")); vromero@1591: ToolBox.executeCommand(failParams); vromero@1591: vromero@1591: // testJavac failure -classpath foo ClassPathTest3.java vromero@1591: failParams.setAllArgs(ArrayUtils.concatOpen(commonArgs, "ClassPathTest3.java")); vromero@1591: ToolBox.executeCommand(failParams); vromero@1591: } vromero@1591: vromero@1591: }