1 /*
2  * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 /*
25  * @test
26  * @summary Tests for EvalState#addToClasspath
27  * @modules jdk.compiler/com.sun.tools.javac.api
28  *          jdk.compiler/com.sun.tools.javac.main
29  *          jdk.jdeps/com.sun.tools.javap
30  * @library /tools/lib
31  * @build toolbox.ToolBox toolbox.JarTask toolbox.JavacTask
32  * @build KullaTesting TestingInputStream Compiler
33  * @run testng ClassPathTest
34  */
35 
36 import java.nio.file.Path;
37 import java.nio.file.Paths;
38 
39 import org.testng.annotations.Test;
40 
41 @Test
42 public class ClassPathTest extends KullaTesting {
43 
44     private final Compiler compiler = new Compiler();
45     private final Path outDir = Paths.get("class_path_test");
46 
testDirectory()47     public void testDirectory() {
48         compiler.compile(outDir, "package pkg; public class TestDirectory { }");
49         assertDeclareFail("import pkg.TestDirectory;", "compiler.err.doesnt.exist");
50         assertDeclareFail("new pkg.TestDirectory();", "compiler.err.doesnt.exist");
51         addToClasspath(compiler.getPath(outDir));
52         assertEval("new pkg.TestDirectory();");
53     }
54 
testJar()55     public void testJar() {
56         compiler.compile(outDir, "package pkg; public class TestJar { }");
57         String jarName = "test.jar";
58         compiler.jar(outDir, jarName, "pkg/TestJar.class");
59         assertDeclareFail("import pkg.TestJar;", "compiler.err.doesnt.exist");
60         assertDeclareFail("new pkg.TestJar();", "compiler.err.doesnt.exist");
61         addToClasspath(compiler.getPath(outDir).resolve(jarName));
62         assertEval("new pkg.TestJar();");
63     }
64 
testAmbiguousDirectory()65     public void testAmbiguousDirectory() {
66         Path p1 = outDir.resolve("dir1");
67         compiler.compile(p1,
68                 "package p; public class TestAmbiguous {\n" +
69                 "   public String toString() {\n" +
70                 "       return \"first\";" +
71                 "   }\n" +
72                 "}");
73         addToClasspath(compiler.getPath(p1));
74         Path p2 = outDir.resolve("dir2");
75         compiler.compile(p2,
76                 "package p; public class TestAmbiguous {\n" +
77                 "   public String toString() {\n" +
78                 "       return \"second\";" +
79                 "   }\n" +
80                 "}");
81         addToClasspath(compiler.getPath(p2));
82         assertEval("new p.TestAmbiguous();", "first");
83     }
84 
testAmbiguousJar()85     public void testAmbiguousJar() {
86         Path p1 = outDir.resolve("dir1");
87         compiler.compile(p1,
88                 "package p; public class TestAmbiguous {\n" +
89                 "   public String toString() {\n" +
90                 "       return \"first\";" +
91                 "   }\n" +
92                 "}");
93         String jarName = "test.jar";
94         compiler.jar(p1, jarName, "p/TestAmbiguous.class");
95         addToClasspath(compiler.getPath(p1.resolve(jarName)));
96         Path p2 = outDir.resolve("dir2");
97         compiler.compile(p2,
98                 "package p; public class TestAmbiguous {\n" +
99                 "   public String toString() {\n" +
100                 "       return \"second\";" +
101                 "   }\n" +
102                 "}");
103         addToClasspath(compiler.getPath(p2));
104         assertEval("new p.TestAmbiguous();", "first");
105     }
106 
testEmptyClassPath()107     public void testEmptyClassPath() {
108         addToClasspath("");
109         assertEval("new java.util.ArrayList<String>();");
110     }
111 
testUnknown()112     public void testUnknown() {
113         addToClasspath(compiler.getPath(outDir.resolve("UNKNOWN")));
114         assertDeclareFail("new Unknown();", "compiler.err.cant.resolve.location");
115         addToClasspath(compiler.getPath(outDir.resolve("UNKNOWN.jar")));
116         assertDeclareFail("new Unknown();", "compiler.err.cant.resolve.location");
117     }
118 }
119