ResolveTest.java revision 3740:d3dde3f775b8
1/*
2 * Copyright (c) 2013, 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 module resolution
27 * @library /tools/lib
28 * @modules
29 *      jdk.compiler/com.sun.tools.javac.api
30 *      jdk.compiler/com.sun.tools.javac.main
31 * @build toolbox.ToolBox toolbox.JavacTask ModuleTestBase
32 * @run main ResolveTest
33 */
34
35import java.nio.file.*;
36
37import toolbox.JavacTask;
38import toolbox.Task;
39import toolbox.ToolBox;
40
41public class ResolveTest extends ModuleTestBase {
42    public static void main(String... args) throws Exception {
43        ResolveTest t = new ResolveTest();
44        t.runTests();
45    }
46
47    @Test
48    public void testMissingSimpleTypeUnnamedModule(Path base) throws Exception {
49        Path src = base.resolve("src");
50        tb.writeJavaFiles(src, "class C { D d; }");
51
52        String log = new JavacTask(tb)
53                .options("-XDrawDiagnostics")
54                .files(findJavaFiles(src))
55                .run(Task.Expect.FAIL)
56                .writeAll()
57                .getOutput(Task.OutputKind.DIRECT);
58
59        if (!log.contains("C.java:1:11: compiler.err.cant.resolve.location: "
60                + "kindname.class, D, , , (compiler.misc.location: kindname.class, C, null)"))
61            throw new Exception("expected output not found");
62    }
63
64    @Test
65    public void testMissingSimpleTypeNamedModule(Path base) throws Exception {
66        Path src = base.resolve("src");
67        tb.writeJavaFiles(src,
68                "module m { }",
69                "class C { D d; }");
70
71        String log = new JavacTask(tb)
72                .options("-XDrawDiagnostics")
73                .files(findJavaFiles(src))
74                .run(Task.Expect.FAIL)
75                .writeAll()
76                .getOutput(Task.OutputKind.DIRECT);
77
78        if (!log.contains("C.java:1:11: compiler.err.cant.resolve.location: "
79                + "kindname.class, D, , , (compiler.misc.location: kindname.class, C, null)"))
80            throw new Exception("expected output not found");
81    }
82
83    @Test
84    public void testUnexportedTypeUnreadableModule(Path base) throws Exception {
85        Path src = base.resolve("src");
86        tb.writeJavaFiles(src.resolve("m1"),
87                "module m1 { }",
88                "package p1; public class C1 { }");
89        tb.writeJavaFiles(src.resolve("m2"),
90                "module m2 { }",
91                "package p2; public class C2 { p1.C1 c; }");
92        Path modules = base.resolve("modules");
93        Files.createDirectories(modules);
94
95        String log = new JavacTask(tb)
96                .options("-XDrawDiagnostics", "--module-source-path", src.toString())
97                .outdir(modules)
98                .files(findJavaFiles(src))
99                .run(Task.Expect.FAIL)
100                .writeAll()
101                .getOutput(Task.OutputKind.DIRECT);
102
103        if (!log.contains("C2.java:1:31: compiler.err.package.not.visible: p1, (compiler.misc.not.def.access.does.not.read: m2, p1, m1)"))
104            throw new Exception("expected output not found");
105    }
106
107    @Test
108    public void testUnexportedTypeReadableModule(Path base) throws Exception {
109        Path src = base.resolve("src");
110        tb.writeJavaFiles(src.resolve("m1"),
111                "module m1 { }",
112                "package p1; public class C1 { }");
113        tb.writeJavaFiles(src.resolve("m2"),
114                "module m2 { requires m1; }",
115                "package p2; public class C2 { p1.C1 c; }");
116        Path modules = base.resolve("modules");
117        Files.createDirectories(modules);
118
119        String log = new JavacTask(tb)
120                .options("-XDrawDiagnostics", "--module-source-path", src.toString())
121                .outdir(modules)
122                .files(findJavaFiles(src))
123                .run(Task.Expect.FAIL)
124                .writeAll()
125                .getOutput(Task.OutputKind.DIRECT);
126
127        if (!log.contains("C2.java:1:31: compiler.err.package.not.visible: p1, (compiler.misc.not.def.access.not.exported: p1, m1)"))
128            throw new Exception("expected output not found");
129    }
130
131    @Test
132    public void testQualifiedExportedTypeReadableModule(Path base) throws Exception {
133        Path src = base.resolve("src");
134        tb.writeJavaFiles(src.resolve("m1"),
135                "module m1 { exports p1 to m3; }",
136                "package p1; public class C1 { }");
137        tb.writeJavaFiles(src.resolve("m2"),
138                "module m2 { requires m1; }",
139                "package p2; public class C2 { p1.C1 c; }");
140        tb.writeJavaFiles(src.resolve("m3"),
141                "module m3 { requires m1; }");
142        Path modules = base.resolve("modules");
143        Files.createDirectories(modules);
144
145        String log = new JavacTask(tb)
146                .options("-XDrawDiagnostics", "--module-source-path", src.toString())
147                .outdir(modules)
148                .files(findJavaFiles(src))
149                .run(Task.Expect.FAIL)
150                .writeAll()
151                .getOutput(Task.OutputKind.DIRECT);
152
153        if (!log.contains("C2.java:1:31: compiler.err.package.not.visible: p1, (compiler.misc.not.def.access.not.exported.to.module: p1, m1, m2)"))
154            throw new Exception("expected output not found");
155    }
156
157    @Test
158    public void testExportedTypeUnreadableModule(Path base) throws Exception {
159        Path src = base.resolve("src");
160        tb.writeJavaFiles(src.resolve("m1"),
161                "module m1 { exports p1; }",
162                "package p1; public class C1 { }");
163        tb.writeJavaFiles(src.resolve("m2"),
164                "module m2 { }",
165                "package p2; public class C2 { p1.C1 c; }");
166        Path modules = base.resolve("modules");
167        Files.createDirectories(modules);
168
169        String log = new JavacTask(tb)
170                .options("-XDrawDiagnostics", "--module-source-path", src.toString())
171                .outdir(modules)
172                .files(findJavaFiles(src))
173                .run(Task.Expect.FAIL)
174                .writeAll()
175                .getOutput(Task.OutputKind.DIRECT);
176
177        if (!log.contains("C2.java:1:31: compiler.err.package.not.visible: p1, (compiler.misc.not.def.access.does.not.read: m2, p1, m1)"))
178            throw new Exception("expected output not found");
179    }
180
181    @Test
182    public void testExportedTypeReadableModule(Path base) throws Exception {
183        Path src = base.resolve("src");
184        tb.writeJavaFiles(src.resolve("m1"),
185                "module m1 { exports p1; }",
186                "package p1; public class C1 { }");
187        tb.writeJavaFiles(src.resolve("m2"),
188                "module m2 { requires m1; }",
189                "package p2; public class C2 { p1.C1 c; }");
190        Path modules = base.resolve("modules");
191        Files.createDirectories(modules);
192
193        new JavacTask(tb)
194                .options("-XDrawDiagnostics", "--module-source-path", src.toString())
195                .outdir(modules)
196                .files(findJavaFiles(src))
197                .run()
198                .writeAll();
199    }
200
201    @Test
202    public void testExportedTypeReadableModule2(Path base) throws Exception {
203        Path src = base.resolve("src");
204        tb.writeJavaFiles(src.resolve("m1"),
205                "module m1 { exports p1 to m2; }",
206                "package p1; public class C1 { }");
207        tb.writeJavaFiles(src.resolve("m2"),
208                "module m2 { requires m1; }",
209                "package p2; public class C2 { p1.C1 c; }");
210        Path modules = base.resolve("modules");
211        Files.createDirectories(modules);
212
213        new JavacTask(tb)
214                .options("-XDrawDiagnostics", "--module-source-path", src.toString())
215                .outdir(modules)
216                .files(findJavaFiles(src))
217                .run()
218                .writeAll();
219    }
220}
221