ClassPathTest.java revision 3062:15bdc18525ff
155714Skris/*
255714Skris * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
355714Skris * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
455714Skris *
555714Skris * This code is free software; you can redistribute it and/or modify it
655714Skris * under the terms of the GNU General Public License version 2 only, as
755714Skris * published by the Free Software Foundation.
855714Skris *
955714Skris * This code is distributed in the hope that it will be useful, but WITHOUT
1055714Skris * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1155714Skris * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1255714Skris * version 2 for more details (a copy is included in the LICENSE file that
1355714Skris * accompanied this code).
14160814Ssimon *
1555714Skris * You should have received a copy of the GNU General Public License version
1655714Skris * 2 along with this work; if not, write to the Free Software Foundation,
1755714Skris * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1855714Skris *
1955714Skris * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2055714Skris * or visit www.oracle.com if you need additional information or have any
2159191Skris * questions.
2259191Skris */
2359191Skris
2459191Skris/*
2559191Skris * @test
2659191Skris * @summary Tests for EvalState#addToClasspath
2759191Skris * @library /tools/lib
2859191Skris * @build KullaTesting TestingInputStream ToolBox Compiler
2959191Skris * @run testng ClassPathTest
3059191Skris */
3159191Skris
3259191Skrisimport java.nio.file.Path;
3355714Skrisimport java.nio.file.Paths;
3459191Skris
3555714Skrisimport org.testng.annotations.Test;
3659191Skris
3759191Skris@Test
3859191Skrispublic class ClassPathTest extends KullaTesting {
3959191Skris
4059191Skris    private final Compiler compiler = new Compiler();
4159191Skris    private final Path outDir = Paths.get("class_path_test");
4259191Skris
4359191Skris    public void testDirectory() {
4459191Skris        compiler.compile(outDir, "package pkg; public class TestDirectory { }");
4559191Skris        assertDeclareFail("import pkg.TestDirectory;", "compiler.err.doesnt.exist");
4659191Skris        assertDeclareFail("new pkg.TestDirectory();", "compiler.err.doesnt.exist");
4759191Skris        addToClasspath(compiler.getPath(outDir));
4855714Skris        assertEval("new pkg.TestDirectory();");
4955714Skris    }
5059191Skris
5159191Skris    public void testJar() {
5259191Skris        compiler.compile(outDir, "package pkg; public class TestJar { }");
5359191Skris        String jarName = "test.jar";
5459191Skris        compiler.jar(outDir, jarName, "pkg/TestJar.class");
5559191Skris        assertDeclareFail("import pkg.TestJar;", "compiler.err.doesnt.exist");
5659191Skris        assertDeclareFail("new pkg.TestJar();", "compiler.err.doesnt.exist");
5759191Skris        addToClasspath(compiler.getPath(outDir).resolve(jarName));
5859191Skris        assertEval("new pkg.TestJar();");
5959191Skris    }
6059191Skris
6159191Skris    public void testAmbiguousDirectory() {
6259191Skris        Path p1 = outDir.resolve("dir1");
6359191Skris        compiler.compile(p1,
6459191Skris                "package p; public class TestAmbiguous {\n" +
6559191Skris                "   public String toString() {\n" +
6659191Skris                "       return \"first\";" +
6759191Skris                "   }\n" +
6859191Skris                "}");
6959191Skris        addToClasspath(compiler.getPath(p1));
7059191Skris        Path p2 = outDir.resolve("dir2");
7159191Skris        compiler.compile(p2,
7259191Skris                "package p; public class TestAmbiguous {\n" +
7359191Skris                "   public String toString() {\n" +
7459191Skris                "       return \"second\";" +
7559191Skris                "   }\n" +
7659191Skris                "}");
7759191Skris        addToClasspath(compiler.getPath(p2));
7859191Skris        assertEval("new p.TestAmbiguous();", "first");
7959191Skris    }
8059191Skris
8159191Skris    public void testAmbiguousJar() {
8259191Skris        Path p1 = outDir.resolve("dir1");
8359191Skris        compiler.compile(p1,
8459191Skris                "package p; public class TestAmbiguous {\n" +
8559191Skris                "   public String toString() {\n" +
8659191Skris                "       return \"first\";" +
8759191Skris                "   }\n" +
8859191Skris                "}");
8955714Skris        String jarName = "test.jar";
9055714Skris        compiler.jar(p1, jarName, "p/TestAmbiguous.class");
9155714Skris        addToClasspath(compiler.getPath(p1.resolve(jarName)));
9255714Skris        Path p2 = outDir.resolve("dir2");
9355714Skris        compiler.compile(p2,
9455714Skris                "package p; public class TestAmbiguous {\n" +
9555714Skris                "   public String toString() {\n" +
9655714Skris                "       return \"second\";" +
9755714Skris                "   }\n" +
9855714Skris                "}");
9955714Skris        addToClasspath(compiler.getPath(p2));
10055714Skris        assertEval("new p.TestAmbiguous();", "first");
10155714Skris    }
10255714Skris
10355714Skris    public void testEmptyClassPath() {
104194206Ssimon        addToClasspath("");
10555714Skris        assertEval("new java.util.ArrayList<String>();");
10655714Skris    }
107194206Ssimon
10855714Skris    public void testUnknown() {
109194206Ssimon        addToClasspath(compiler.getPath(outDir.resolve("UNKNOWN")));
11055714Skris        assertDeclareFail("new Unknown();", "compiler.err.cant.resolve.location");
11155714Skris        addToClasspath(compiler.getPath(outDir.resolve("UNKNOWN.jar")));
11255714Skris        assertDeclareFail("new Unknown();", "compiler.err.cant.resolve.location");
11355714Skris    }
11455714Skris}
11555714Skris