26 * @summary tests for multi-module mode compilation |
26 * @summary tests for multi-module mode compilation |
27 * @library /tools/lib |
27 * @library /tools/lib |
28 * @modules |
28 * @modules |
29 * jdk.compiler/com.sun.tools.javac.api |
29 * jdk.compiler/com.sun.tools.javac.api |
30 * jdk.compiler/com.sun.tools.javac.main |
30 * jdk.compiler/com.sun.tools.javac.main |
31 * jdk.jdeps/com.sun.tools.javap |
31 * @build toolbox.ToolBox toolbox.JavacTask ModuleTestBase |
32 * @build ToolBox ModuleTestBase |
|
33 * @run main XModuleTest |
32 * @run main XModuleTest |
34 */ |
33 */ |
35 |
34 |
36 import java.nio.file.Path; |
35 import java.nio.file.Path; |
37 import java.util.Arrays; |
36 import java.util.Arrays; |
38 import java.util.List; |
37 import java.util.List; |
39 |
38 |
|
39 import toolbox.JavacTask; |
|
40 import toolbox.Task; |
|
41 import toolbox.ToolBox; |
|
42 |
40 public class XModuleTest extends ModuleTestBase { |
43 public class XModuleTest extends ModuleTestBase { |
41 |
44 |
42 public static void main(String... args) throws Exception { |
45 public static void main(String... args) throws Exception { |
43 new XModuleTest().runTests(); |
46 new XModuleTest().runTests(); |
44 } |
47 } |
49 Path src = base.resolve("src"); |
52 Path src = base.resolve("src"); |
50 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element { }"); |
53 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element { }"); |
51 Path classes = base.resolve("classes"); |
54 Path classes = base.resolve("classes"); |
52 tb.createDirectories(classes); |
55 tb.createDirectories(classes); |
53 |
56 |
54 String log = tb.new JavacTask() |
57 String log = new JavacTask(tb) |
55 .options("-Xmodule:java.compiler") |
58 .options("-Xmodule:java.compiler") |
56 .outdir(classes) |
59 .outdir(classes) |
57 .files(findJavaFiles(src)) |
60 .files(findJavaFiles(src)) |
58 .run() |
61 .run() |
59 .writeAll() |
62 .writeAll() |
60 .getOutput(ToolBox.OutputKind.DIRECT); |
63 .getOutput(Task.OutputKind.DIRECT); |
61 |
64 |
62 if (!log.isEmpty()) |
65 if (!log.isEmpty()) |
63 throw new Exception("expected output not found: " + log); |
66 throw new Exception("expected output not found: " + log); |
64 } |
67 } |
65 |
68 |
69 Path src = base.resolve("src"); |
72 Path src = base.resolve("src"); |
70 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element, Other { }", "package javax.lang.model.element; interface Other { }"); |
73 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element, Other { }", "package javax.lang.model.element; interface Other { }"); |
71 Path classes = base.resolve("classes"); |
74 Path classes = base.resolve("classes"); |
72 tb.createDirectories(classes); |
75 tb.createDirectories(classes); |
73 |
76 |
74 String log = tb.new JavacTask() |
77 String log = new JavacTask(tb) |
75 .options("-Xmodule:java.compiler", "-sourcepath", src.toString()) |
78 .options("-Xmodule:java.compiler", "-sourcepath", src.toString()) |
76 .outdir(classes) |
79 .outdir(classes) |
77 .files(src.resolve("javax/lang/model/element/Extra.java")) |
80 .files(src.resolve("javax/lang/model/element/Extra.java")) |
78 .run() |
81 .run() |
79 .writeAll() |
82 .writeAll() |
80 .getOutput(ToolBox.OutputKind.DIRECT); |
83 .getOutput(Task.OutputKind.DIRECT); |
81 |
84 |
82 if (!log.isEmpty()) |
85 if (!log.isEmpty()) |
83 throw new Exception("expected output not found: " + log); |
86 throw new Exception("expected output not found: " + log); |
84 } |
87 } |
85 |
88 |
88 Path cpSrc = base.resolve("cpSrc"); |
91 Path cpSrc = base.resolve("cpSrc"); |
89 tb.writeJavaFiles(cpSrc, "package p; public interface Other { }"); |
92 tb.writeJavaFiles(cpSrc, "package p; public interface Other { }"); |
90 Path cpClasses = base.resolve("cpClasses"); |
93 Path cpClasses = base.resolve("cpClasses"); |
91 tb.createDirectories(cpClasses); |
94 tb.createDirectories(cpClasses); |
92 |
95 |
93 String cpLog = tb.new JavacTask() |
96 String cpLog = new JavacTask(tb) |
94 .outdir(cpClasses) |
97 .outdir(cpClasses) |
95 .files(findJavaFiles(cpSrc)) |
98 .files(findJavaFiles(cpSrc)) |
96 .run() |
99 .run() |
97 .writeAll() |
100 .writeAll() |
98 .getOutput(ToolBox.OutputKind.DIRECT); |
101 .getOutput(Task.OutputKind.DIRECT); |
99 |
102 |
100 if (!cpLog.isEmpty()) |
103 if (!cpLog.isEmpty()) |
101 throw new Exception("expected output not found: " + cpLog); |
104 throw new Exception("expected output not found: " + cpLog); |
102 |
105 |
103 Path src = base.resolve("src"); |
106 Path src = base.resolve("src"); |
104 //note: avoiding use of java.base, as that gets special handling on some places: |
107 //note: avoiding use of java.base, as that gets special handling on some places: |
105 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element, p.Other { }"); |
108 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element, p.Other { }"); |
106 Path classes = base.resolve("classes"); |
109 Path classes = base.resolve("classes"); |
107 tb.createDirectories(classes); |
110 tb.createDirectories(classes); |
108 |
111 |
109 String log = tb.new JavacTask() |
112 String log = new JavacTask(tb) |
110 .options("-Xmodule:java.compiler", "-classpath", cpClasses.toString()) |
113 .options("-Xmodule:java.compiler", "-classpath", cpClasses.toString()) |
111 .outdir(classes) |
114 .outdir(classes) |
112 .files(src.resolve("javax/lang/model/element/Extra.java")) |
115 .files(src.resolve("javax/lang/model/element/Extra.java")) |
113 .run() |
116 .run() |
114 .writeAll() |
117 .writeAll() |
115 .getOutput(ToolBox.OutputKind.DIRECT); |
118 .getOutput(Task.OutputKind.DIRECT); |
116 |
119 |
117 if (!log.isEmpty()) |
120 if (!log.isEmpty()) |
118 throw new Exception("expected output not found: " + log); |
121 throw new Exception("expected output not found: " + log); |
119 } |
122 } |
120 |
123 |
126 "module java.compiler {}", |
129 "module java.compiler {}", |
127 "package javax.lang.model.element; public interface Extra { }"); |
130 "package javax.lang.model.element; public interface Extra { }"); |
128 Path classes = base.resolve("classes"); |
131 Path classes = base.resolve("classes"); |
129 tb.createDirectories(classes); |
132 tb.createDirectories(classes); |
130 |
133 |
131 List<String> log = tb.new JavacTask() |
134 List<String> log = new JavacTask(tb) |
132 .options("-XDrawDiagnostics", "-Xmodule:java.compiler") |
135 .options("-XDrawDiagnostics", "-Xmodule:java.compiler") |
133 .outdir(classes) |
136 .outdir(classes) |
134 .files(findJavaFiles(src)) |
137 .files(findJavaFiles(src)) |
135 .run(ToolBox.Expect.FAIL) |
138 .run(Task.Expect.FAIL) |
136 .writeAll() |
139 .writeAll() |
137 .getOutputLines(ToolBox.OutputKind.DIRECT); |
140 .getOutputLines(Task.OutputKind.DIRECT); |
138 |
141 |
139 List<String> expected = Arrays.asList("Extra.java:1:1: compiler.err.module-info.with.xmodule.sourcepath", |
142 List<String> expected = Arrays.asList("Extra.java:1:1: compiler.err.module-info.with.xmodule.sourcepath", |
140 "1 error"); |
143 "1 error"); |
141 |
144 |
142 if (!expected.equals(log)) |
145 if (!expected.equals(log)) |
150 tb.writeJavaFiles(srcMod, |
153 tb.writeJavaFiles(srcMod, |
151 "module mod {}"); |
154 "module mod {}"); |
152 Path classes = base.resolve("classes"); |
155 Path classes = base.resolve("classes"); |
153 tb.createDirectories(classes); |
156 tb.createDirectories(classes); |
154 |
157 |
155 String logMod = tb.new JavacTask() |
158 String logMod = new JavacTask(tb) |
156 .options() |
159 .options() |
157 .outdir(classes) |
160 .outdir(classes) |
158 .files(findJavaFiles(srcMod)) |
161 .files(findJavaFiles(srcMod)) |
159 .run() |
162 .run() |
160 .writeAll() |
163 .writeAll() |
161 .getOutput(ToolBox.OutputKind.DIRECT); |
164 .getOutput(Task.OutputKind.DIRECT); |
162 |
165 |
163 if (!logMod.isEmpty()) |
166 if (!logMod.isEmpty()) |
164 throw new Exception("unexpected output found: " + logMod); |
167 throw new Exception("unexpected output found: " + logMod); |
165 |
168 |
166 Path src = base.resolve("src"); |
169 Path src = base.resolve("src"); |
167 tb.writeJavaFiles(src, |
170 tb.writeJavaFiles(src, |
168 "package javax.lang.model.element; public interface Extra { }"); |
171 "package javax.lang.model.element; public interface Extra { }"); |
169 tb.createDirectories(classes); |
172 tb.createDirectories(classes); |
170 |
173 |
171 List<String> log = tb.new JavacTask() |
174 List<String> log = new JavacTask(tb) |
172 .options("-XDrawDiagnostics", "-Xmodule:java.compiler") |
175 .options("-XDrawDiagnostics", "-Xmodule:java.compiler") |
173 .outdir(classes) |
176 .outdir(classes) |
174 .files(findJavaFiles(src)) |
177 .files(findJavaFiles(src)) |
175 .run(ToolBox.Expect.FAIL) |
178 .run(Task.Expect.FAIL) |
176 .writeAll() |
179 .writeAll() |
177 .getOutputLines(ToolBox.OutputKind.DIRECT); |
180 .getOutputLines(Task.OutputKind.DIRECT); |
178 |
181 |
179 List<String> expected = Arrays.asList("Extra.java:1:1: compiler.err.module-info.with.xmodule.classpath", |
182 List<String> expected = Arrays.asList("Extra.java:1:1: compiler.err.module-info.with.xmodule.classpath", |
180 "1 error"); |
183 "1 error"); |
181 |
184 |
182 if (!expected.equals(log)) |
185 if (!expected.equals(log)) |
189 Path src = base.resolve("src"); |
192 Path src = base.resolve("src"); |
190 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element { }"); |
193 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element { }"); |
191 Path classes = base.resolve("classes"); |
194 Path classes = base.resolve("classes"); |
192 tb.createDirectories(classes); |
195 tb.createDirectories(classes); |
193 |
196 |
194 List<String> log = tb.new JavacTask() |
197 List<String> log = new JavacTask(tb) |
195 .options("-XDrawDiagnostics", "-Xmodule:java.compiler", "-modulesourcepath", src.toString()) |
198 .options("-XDrawDiagnostics", "-Xmodule:java.compiler", "-modulesourcepath", src.toString()) |
196 .outdir(classes) |
199 .outdir(classes) |
197 .files(findJavaFiles(src)) |
200 .files(findJavaFiles(src)) |
198 .run(ToolBox.Expect.FAIL) |
201 .run(Task.Expect.FAIL) |
199 .writeAll() |
202 .writeAll() |
200 .getOutputLines(ToolBox.OutputKind.DIRECT); |
203 .getOutputLines(Task.OutputKind.DIRECT); |
201 |
204 |
202 List<String> expected = Arrays.asList("- compiler.err.xmodule.no.module.sourcepath", |
205 List<String> expected = Arrays.asList("- compiler.err.xmodule.no.module.sourcepath", |
203 "1 error"); |
206 "1 error"); |
204 |
207 |
205 if (!expected.equals(log)) |
208 if (!expected.equals(log)) |
212 Path src = base.resolve("src"); |
215 Path src = base.resolve("src"); |
213 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element { }"); |
216 tb.writeJavaFiles(src, "package javax.lang.model.element; public interface Extra extends Element { }"); |
214 Path classes = base.resolve("classes"); |
217 Path classes = base.resolve("classes"); |
215 tb.createDirectories(classes); |
218 tb.createDirectories(classes); |
216 |
219 |
217 List<String> log = tb.new JavacTask(ToolBox.Mode.CMDLINE) |
220 List<String> log = new JavacTask(tb, Task.Mode.CMDLINE) |
218 .options("-XDrawDiagnostics", "-Xmodule:java.compiler", "-Xmodule:java.compiler") |
221 .options("-XDrawDiagnostics", "-Xmodule:java.compiler", "-Xmodule:java.compiler") |
219 .outdir(classes) |
222 .outdir(classes) |
220 .files(findJavaFiles(src)) |
223 .files(findJavaFiles(src)) |
221 .run(ToolBox.Expect.FAIL) |
224 .run(Task.Expect.FAIL) |
222 .writeAll() |
225 .writeAll() |
223 .getOutputLines(ToolBox.OutputKind.DIRECT); |
226 .getOutputLines(Task.OutputKind.DIRECT); |
224 |
227 |
225 List<String> expected = Arrays.asList("javac: option -Xmodule: can only be specified once", |
228 List<String> expected = Arrays.asList("javac: option -Xmodule: can only be specified once", |
226 "Usage: javac <options> <source files>", |
229 "Usage: javac <options> <source files>", |
227 "use -help for a list of possible options"); |
230 "use -help for a list of possible options"); |
228 |
231 |
238 .build(module); |
241 .build(module); |
239 |
242 |
240 Path src = base.resolve("src"); |
243 Path src = base.resolve("src"); |
241 tb.writeJavaFiles(src, "package p; interface A extends pkg1.E { }"); |
244 tb.writeJavaFiles(src, "package p; interface A extends pkg1.E { }"); |
242 |
245 |
243 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
246 new JavacTask(tb, Task.Mode.CMDLINE) |
244 .options("-modulepath", module.toString(), |
247 .options("-modulepath", module.toString(), |
245 "-Xmodule:m1") |
248 "-Xmodule:m1") |
246 .files(findJavaFiles(src)) |
249 .files(findJavaFiles(src)) |
247 .run() |
250 .run() |
248 .writeAll(); |
251 .writeAll(); |
253 .build(module); |
256 .build(module); |
254 |
257 |
255 Path src2 = base.resolve("src2"); |
258 Path src2 = base.resolve("src2"); |
256 tb.writeJavaFiles(src2, "package p; interface A extends pkg2.D { }"); |
259 tb.writeJavaFiles(src2, "package p; interface A extends pkg2.D { }"); |
257 |
260 |
258 List<String> log = tb.new JavacTask(ToolBox.Mode.CMDLINE) |
261 List<String> log = new JavacTask(tb, Task.Mode.CMDLINE) |
259 .options("-XDrawDiagnostics", |
262 .options("-XDrawDiagnostics", |
260 "-modulepath", module.toString(), |
263 "-modulepath", module.toString(), |
261 "-Xmodule:m1") |
264 "-Xmodule:m1") |
262 .files(findJavaFiles(src2)) |
265 .files(findJavaFiles(src2)) |
263 .run(ToolBox.Expect.FAIL) |
266 .run(Task.Expect.FAIL) |
264 .writeAll() |
267 .writeAll() |
265 .getOutputLines(ToolBox.OutputKind.DIRECT); |
268 .getOutputLines(Task.OutputKind.DIRECT); |
266 |
269 |
267 List<String> expected = Arrays.asList("A.java:1:36: compiler.err.doesnt.exist: pkg2", |
270 List<String> expected = Arrays.asList("A.java:1:36: compiler.err.doesnt.exist: pkg2", |
268 "1 error"); |
271 "1 error"); |
269 |
272 |
270 if (!expected.equals(log)) |
273 if (!expected.equals(log)) |
284 .build(upgrade); |
287 .build(upgrade); |
285 |
288 |
286 Path src = base.resolve("src"); |
289 Path src = base.resolve("src"); |
287 tb.writeJavaFiles(src, "package p; interface A extends pkg1.D { }"); |
290 tb.writeJavaFiles(src, "package p; interface A extends pkg1.D { }"); |
288 |
291 |
289 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
292 new JavacTask(tb, Task.Mode.CMDLINE) |
290 .options("-modulepath", module.toString(), |
293 .options("-modulepath", module.toString(), |
291 "-upgrademodulepath", upgrade.toString(), |
294 "-upgrademodulepath", upgrade.toString(), |
292 "-Xmodule:m1") |
295 "-Xmodule:m1") |
293 .files(findJavaFiles(src)) |
296 .files(findJavaFiles(src)) |
294 .run() |
297 .run() |