26 * @summary tests for -modulesourcepath |
26 * @summary tests for -modulesourcepath |
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 ModuleSourcePathTest |
32 * @run main ModuleSourcePathTest |
34 */ |
33 */ |
35 |
34 |
36 import java.io.File; |
35 import java.io.File; |
37 import java.io.IOException; |
36 import java.io.IOException; |
41 import java.util.Arrays; |
40 import java.util.Arrays; |
42 import java.util.List; |
41 import java.util.List; |
43 import java.util.stream.Collectors; |
42 import java.util.stream.Collectors; |
44 import java.util.stream.Stream; |
43 import java.util.stream.Stream; |
45 |
44 |
|
45 import toolbox.JavacTask; |
|
46 import toolbox.Task; |
|
47 import toolbox.ToolBox; |
|
48 |
46 public class ModuleSourcePathTest extends ModuleTestBase { |
49 public class ModuleSourcePathTest extends ModuleTestBase { |
47 |
50 |
48 public static final char PATH_SEP = File.pathSeparatorChar; |
51 public static final char PATH_SEP = File.pathSeparatorChar; |
49 |
52 |
50 public static void main(String... args) throws Exception { |
53 public static void main(String... args) throws Exception { |
55 @Test |
58 @Test |
56 void testSourcePathConflict(Path base) throws Exception { |
59 void testSourcePathConflict(Path base) throws Exception { |
57 Path sp = base.resolve("src"); |
60 Path sp = base.resolve("src"); |
58 Path msp = base.resolve("srcmodules"); |
61 Path msp = base.resolve("srcmodules"); |
59 |
62 |
60 String log = tb.new JavacTask(ToolBox.Mode.CMDLINE) |
63 String log = new JavacTask(tb, Task.Mode.CMDLINE) |
61 .options("-XDrawDiagnostics", |
64 .options("-XDrawDiagnostics", |
62 "-sourcepath", sp.toString().replace('/', File.separatorChar), |
65 "-sourcepath", sp.toString().replace('/', File.separatorChar), |
63 "-modulesourcepath", msp.toString().replace('/', File.separatorChar), |
66 "-modulesourcepath", msp.toString().replace('/', File.separatorChar), |
64 "dummyClass") |
67 "dummyClass") |
65 .run(ToolBox.Expect.FAIL) |
68 .run(Task.Expect.FAIL) |
66 .writeAll() |
69 .writeAll() |
67 .getOutput(ToolBox.OutputKind.DIRECT); |
70 .getOutput(Task.OutputKind.DIRECT); |
68 |
71 |
69 if (!log.contains("cannot specify both -sourcepath and -modulesourcepath")) |
72 if (!log.contains("cannot specify both -sourcepath and -modulesourcepath")) |
70 throw new Exception("expected diagnostic not found"); |
73 throw new Exception("expected diagnostic not found"); |
71 } |
74 } |
72 |
75 |
76 Path src_m1 = src.resolve("m1"); |
79 Path src_m1 = src.resolve("m1"); |
77 tb.writeJavaFiles(src_m1, "module m1 { }"); |
80 tb.writeJavaFiles(src_m1, "module m1 { }"); |
78 Path modules = base.resolve("modules"); |
81 Path modules = base.resolve("modules"); |
79 Files.createDirectories(modules); |
82 Files.createDirectories(modules); |
80 |
83 |
81 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
84 new JavacTask(tb, Task.Mode.CMDLINE) |
82 .options("-XDrawDiagnostics", |
85 .options("-XDrawDiagnostics", |
83 "-modulesourcepath", src.toString()) |
86 "-modulesourcepath", src.toString()) |
84 .outdir(modules) |
87 .outdir(modules) |
85 .files(prefixAll(findJavaFiles(src), Paths.get("./"))) |
88 .files(prefixAll(findJavaFiles(src), Paths.get("./"))) |
86 .run() |
89 .run() |
93 Path src_m1 = src.resolve("m1"); |
96 Path src_m1 = src.resolve("m1"); |
94 tb.writeJavaFiles(src_m1, "module m1 { }"); |
97 tb.writeJavaFiles(src_m1, "module m1 { }"); |
95 Path modules = base.resolve("modules"); |
98 Path modules = base.resolve("modules"); |
96 Files.createDirectories(modules); |
99 Files.createDirectories(modules); |
97 |
100 |
98 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
101 new JavacTask(tb, Task.Mode.CMDLINE) |
99 .options("-XDrawDiagnostics", |
102 .options("-XDrawDiagnostics", |
100 "-modulesourcepath", "./" + src) |
103 "-modulesourcepath", "./" + src) |
101 .outdir(modules) |
104 .outdir(modules) |
102 .files(findJavaFiles(src)) |
105 .files(findJavaFiles(src)) |
103 .run() |
106 .run() |
116 generateModules(base, "src1", "src2/inner_dir"); |
119 generateModules(base, "src1", "src2/inner_dir"); |
117 |
120 |
118 final Path modules = base.resolve("modules"); |
121 final Path modules = base.resolve("modules"); |
119 tb.createDirectories(modules); |
122 tb.createDirectories(modules); |
120 |
123 |
121 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
124 new JavacTask(tb, Task.Mode.CMDLINE) |
122 .options("-XDrawDiagnostics", |
125 .options("-XDrawDiagnostics", |
123 "-modulesourcepath", base + "/{src1,src2/inner_dir}") |
126 "-modulesourcepath", base + "/{src1,src2/inner_dir}") |
124 .files(base.resolve("src1/m0/pkg0/A.java"), base.resolve("src2/inner_dir/m1/pkg1/A.java")) |
127 .files(base.resolve("src1/m0/pkg0/A.java"), base.resolve("src2/inner_dir/m1/pkg1/A.java")) |
125 .outdir(modules) |
128 .outdir(modules) |
126 .run() |
129 .run() |
147 "{.,..{}/src", |
150 "{.,..{}/src", |
148 "*}{", |
151 "*}{", |
149 "{}*}" |
152 "{}*}" |
150 ); |
153 ); |
151 for (String sourcepath : sourcePaths) { |
154 for (String sourcepath : sourcePaths) { |
152 String log = tb.new JavacTask(ToolBox.Mode.CMDLINE) |
155 String log = new JavacTask(tb, Task.Mode.CMDLINE) |
153 .options("-XDrawDiagnostics", |
156 .options("-XDrawDiagnostics", |
154 "-modulesourcepath", sourcepath.replace('/', File.separatorChar)) |
157 "-modulesourcepath", sourcepath.replace('/', File.separatorChar)) |
155 .run(ToolBox.Expect.FAIL) |
158 .run(Task.Expect.FAIL) |
156 .writeAll() |
159 .writeAll() |
157 .getOutput(ToolBox.OutputKind.DIRECT); |
160 .getOutput(Task.OutputKind.DIRECT); |
158 |
161 |
159 if (!log.contains("- compiler.err.illegal.argument.for.option: -modulesourcepath, mismatched braces")) |
162 if (!log.contains("- compiler.err.illegal.argument.for.option: -modulesourcepath, mismatched braces")) |
160 throw new Exception("expected output for path [" + sourcepath + "] not found"); |
163 throw new Exception("expected output for path [" + sourcepath + "] not found"); |
161 } |
164 } |
162 } |
165 } |
175 generateModules(base, modulePaths); |
178 generateModules(base, modulePaths); |
176 |
179 |
177 final Path modules = base.resolve("modules"); |
180 final Path modules = base.resolve("modules"); |
178 tb.createDirectories(modules); |
181 tb.createDirectories(modules); |
179 |
182 |
180 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
183 new JavacTask(tb, Task.Mode.CMDLINE) |
181 .options("-XDrawDiagnostics", |
184 .options("-XDrawDiagnostics", |
182 "-modulesourcepath", |
185 "-modulesourcepath", |
183 base + "/{src/{{src1,src2,src3},{srcB,srcC}/{src1,src2/srcX{X,Y}/}},.}" |
186 base + "/{src/{{src1,src2,src3},{srcB,srcC}/{src1,src2/srcX{X,Y}/}},.}" |
184 .replace('/', File.separatorChar)) |
187 .replace('/', File.separatorChar)) |
185 .files(findJavaFiles(base.resolve(modulePaths[modulePaths.length - 1]))) |
188 .files(findJavaFiles(base.resolve(modulePaths[modulePaths.length - 1]))) |
200 tb.writeFile(base.resolve("dummy.txt"), ""); |
203 tb.writeFile(base.resolve("dummy.txt"), ""); |
201 |
204 |
202 final Path modules = base.resolve("modules"); |
205 final Path modules = base.resolve("modules"); |
203 tb.createDirectories(modules); |
206 tb.createDirectories(modules); |
204 |
207 |
205 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
208 new JavacTask(tb, Task.Mode.CMDLINE) |
206 .options("-XDrawDiagnostics", |
209 .options("-XDrawDiagnostics", |
207 "-modulesourcepath", base + "/{dummy.txt,src}") |
210 "-modulesourcepath", base + "/{dummy.txt,src}") |
208 .files(src.resolve("kettle$/electric/Heater.java")) |
211 .files(src.resolve("kettle$/electric/Heater.java")) |
209 .outdir(modules) |
212 .outdir(modules) |
210 .run() |
213 .run() |
220 tb.writeJavaFiles(src.resolve("kettle$"), "module kettle$ { }", "package electric; class Heater { }"); |
223 tb.writeJavaFiles(src.resolve("kettle$"), "module kettle$ { }", "package electric; class Heater { }"); |
221 |
224 |
222 final Path modules = base.resolve("modules"); |
225 final Path modules = base.resolve("modules"); |
223 tb.createDirectories(modules); |
226 tb.createDirectories(modules); |
224 |
227 |
225 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
228 new JavacTask(tb, Task.Mode.CMDLINE) |
226 .options("-XDrawDiagnostics", |
229 .options("-XDrawDiagnostics", |
227 "-modulesourcepath", base + "/{src}") |
230 "-modulesourcepath", base + "/{src}") |
228 .files(src.resolve("kettle$/electric/Heater.java")) |
231 .files(src.resolve("kettle$/electric/Heater.java")) |
229 .outdir(modules) |
232 .outdir(modules) |
230 .run() |
233 .run() |
239 tb.writeJavaFiles(base.resolve("kettle$"), "module kettle$ { }", "package electric; class Heater { }"); |
242 tb.writeJavaFiles(base.resolve("kettle$"), "module kettle$ { }", "package electric; class Heater { }"); |
240 |
243 |
241 final Path modules = base.resolve("modules"); |
244 final Path modules = base.resolve("modules"); |
242 tb.createDirectories(modules); |
245 tb.createDirectories(modules); |
243 |
246 |
244 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
247 new JavacTask(tb, Task.Mode.CMDLINE) |
245 .options("-XDrawDiagnostics", |
248 .options("-XDrawDiagnostics", |
246 "-modulesourcepath", base + "/{}") |
249 "-modulesourcepath", base + "/{}") |
247 .files(base.resolve("kettle$/electric/Heater.java")) |
250 .files(base.resolve("kettle$/electric/Heater.java")) |
248 .outdir(modules) |
251 .outdir(modules) |
249 .run() |
252 .run() |
260 tb.writeJavaFiles(carModule.resolve("engine"), "module engine { }", "package flat; class Piston { }"); |
263 tb.writeJavaFiles(carModule.resolve("engine"), "module engine { }", "package flat; class Piston { }"); |
261 |
264 |
262 final Path modules = src.resolve("modules"); |
265 final Path modules = src.resolve("modules"); |
263 tb.createDirectories(modules); |
266 tb.createDirectories(modules); |
264 |
267 |
265 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
268 new JavacTask(tb, Task.Mode.CMDLINE) |
266 .options("-XDrawDiagnostics", |
269 .options("-XDrawDiagnostics", |
267 "-modulesourcepath", "{" + src + "," + src + "/car}") |
270 "-modulesourcepath", "{" + src + "," + src + "/car}") |
268 .files(findJavaFiles(src)) |
271 .files(findJavaFiles(src)) |
269 .outdir(modules) |
272 .outdir(modules) |
270 .run() |
273 .run() |
279 tb.writeJavaFiles(src.resolve("kettle"), "module kettle { }", "package electric; class Heater { }"); |
282 tb.writeJavaFiles(src.resolve("kettle"), "module kettle { }", "package electric; class Heater { }"); |
280 |
283 |
281 final Path modules = base.resolve("modules"); |
284 final Path modules = base.resolve("modules"); |
282 tb.createDirectories(modules); |
285 tb.createDirectories(modules); |
283 |
286 |
284 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
287 new JavacTask(tb, Task.Mode.CMDLINE) |
285 .options("-XDrawDiagnostics", |
288 .options("-XDrawDiagnostics", |
286 "-modulesourcepath", base + "/src/./../src") |
289 "-modulesourcepath", base + "/src/./../src") |
287 .files(src.resolve("kettle/electric/Heater.java")) |
290 .files(src.resolve("kettle/electric/Heater.java")) |
288 .outdir(modules) |
291 .outdir(modules) |
289 .run() |
292 .run() |
298 tb.writeJavaFiles(src.resolve("m1"), "module m1 { }", "package a; class A { }"); |
301 tb.writeJavaFiles(src.resolve("m1"), "module m1 { }", "package a; class A { }"); |
299 |
302 |
300 final Path modules = base.resolve("modules"); |
303 final Path modules = base.resolve("modules"); |
301 tb.createDirectories(modules); |
304 tb.createDirectories(modules); |
302 |
305 |
303 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
306 new JavacTask(tb, Task.Mode.CMDLINE) |
304 .options("-XDrawDiagnostics", |
307 .options("-XDrawDiagnostics", |
305 "-modulesourcepath", base + "/{src,src,src}") |
308 "-modulesourcepath", base + "/{src,src,src}") |
306 .files(src.resolve("m1/a/A.java")) |
309 .files(src.resolve("m1/a/A.java")) |
307 .outdir(modules) |
310 .outdir(modules) |
308 .run() |
311 .run() |
316 tb.writeJavaFiles(base.resolve("m1"), "module m1 { requires m0; }", "package a; class A { }"); |
319 tb.writeJavaFiles(base.resolve("m1"), "module m1 { requires m0; }", "package a; class A { }"); |
317 |
320 |
318 final Path modules = base.resolve("modules"); |
321 final Path modules = base.resolve("modules"); |
319 tb.createDirectories(modules); |
322 tb.createDirectories(modules); |
320 |
323 |
321 String log = tb.new JavacTask(ToolBox.Mode.CMDLINE) |
324 String log = new JavacTask(tb, Task.Mode.CMDLINE) |
322 .options("-XDrawDiagnostics", |
325 .options("-XDrawDiagnostics", |
323 "-modulesourcepath", base + "/not_exist" + PATH_SEP + base + "/{not_exist,}") |
326 "-modulesourcepath", base + "/not_exist" + PATH_SEP + base + "/{not_exist,}") |
324 .files(base.resolve("m1/a/A.java")) |
327 .files(base.resolve("m1/a/A.java")) |
325 .outdir(modules) |
328 .outdir(modules) |
326 .run(ToolBox.Expect.FAIL) |
329 .run(Task.Expect.FAIL) |
327 .writeAll() |
330 .writeAll() |
328 .getOutput(ToolBox.OutputKind.DIRECT); |
331 .getOutput(Task.OutputKind.DIRECT); |
329 if (!log.contains("compiler.err.module.not.found: m0")) |
332 if (!log.contains("compiler.err.module.not.found: m0")) |
330 throw new Exception("expected output for not existent module source path not found"); |
333 throw new Exception("expected output for not existent module source path not found"); |
331 } |
334 } |
332 |
335 |
333 @Test |
336 @Test |
335 tb.writeJavaFiles(base.resolve("m1"), "module m1 { }", "package a; class A { }"); |
338 tb.writeJavaFiles(base.resolve("m1"), "module m1 { }", "package a; class A { }"); |
336 |
339 |
337 final Path modules = base.resolve("modules"); |
340 final Path modules = base.resolve("modules"); |
338 tb.createDirectories(modules); |
341 tb.createDirectories(modules); |
339 |
342 |
340 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
343 new JavacTask(tb, Task.Mode.CMDLINE) |
341 .options("-XDrawDiagnostics", |
344 .options("-XDrawDiagnostics", |
342 "-modulesourcepath", base + "{/not_exist,/}") |
345 "-modulesourcepath", base + "{/not_exist,/}") |
343 .files(base.resolve("m1/a/A.java")) |
346 .files(base.resolve("m1/a/A.java")) |
344 .outdir(modules) |
347 .outdir(modules) |
345 .run() |
348 .run() |
354 tb.writeJavaFiles(src.resolve("m1"), "module m1 { }", "package a; class A { }"); |
357 tb.writeJavaFiles(src.resolve("m1"), "module m1 { }", "package a; class A { }"); |
355 |
358 |
356 final Path modules = base.resolve("modules"); |
359 final Path modules = base.resolve("modules"); |
357 tb.createDirectories(modules); |
360 tb.createDirectories(modules); |
358 |
361 |
359 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
362 new JavacTask(tb, Task.Mode.CMDLINE) |
360 .options("-XDrawDiagnostics", |
363 .options("-XDrawDiagnostics", |
361 "-modulesourcepath", base + "/{,{,,,,src,,,}}") |
364 "-modulesourcepath", base + "/{,{,,,,src,,,}}") |
362 .files(src.resolve("m1/a/A.java")) |
365 .files(src.resolve("m1/a/A.java")) |
363 .outdir(modules) |
366 .outdir(modules) |
364 .run() |
367 .run() |
373 "package electric; class Heater { }"); |
376 "package electric; class Heater { }"); |
374 |
377 |
375 final Path modules = base.resolve("modules"); |
378 final Path modules = base.resolve("modules"); |
376 tb.createDirectories(modules); |
379 tb.createDirectories(modules); |
377 |
380 |
378 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
381 new JavacTask(tb, Task.Mode.CMDLINE) |
379 .options("-XDrawDiagnostics", |
382 .options("-XDrawDiagnostics", |
380 "-modulesourcepath", base + "/*/classes/") |
383 "-modulesourcepath", base + "/*/classes/") |
381 .files(base.resolve("kettle/classes/electric/Heater.java")) |
384 .files(base.resolve("kettle/classes/electric/Heater.java")) |
382 .outdir(modules) |
385 .outdir(modules) |
383 .run() |
386 .run() |
396 tb.writeJavaFiles(module.resolve("special/classes"), "package gas; class Heater { }"); |
399 tb.writeJavaFiles(module.resolve("special/classes"), "package gas; class Heater { }"); |
397 |
400 |
398 final Path modules = base.resolve("modules"); |
401 final Path modules = base.resolve("modules"); |
399 tb.createDirectories(modules); |
402 tb.createDirectories(modules); |
400 |
403 |
401 tb.new JavacTask(ToolBox.Mode.CMDLINE) |
404 new JavacTask(tb, Task.Mode.CMDLINE) |
402 .options("-XDrawDiagnostics", |
405 .options("-XDrawDiagnostics", |
403 "-modulesourcepath", src + "{/*/gensrc/,/*/classes/}" + PATH_SEP |
406 "-modulesourcepath", src + "{/*/gensrc/,/*/classes/}" + PATH_SEP |
404 + src + "/*/special/classes") |
407 + src + "/*/special/classes") |
405 .files(findJavaFiles(src)) |
408 .files(findJavaFiles(src)) |
406 .outdir(modules) |
409 .outdir(modules) |
425 "src/*/*/", |
428 "src/*/*/", |
426 "{*,*}", |
429 "{*,*}", |
427 "src/module*/" |
430 "src/module*/" |
428 ); |
431 ); |
429 for (String sourcepath : sourcePaths) { |
432 for (String sourcepath : sourcePaths) { |
430 String log = tb.new JavacTask(ToolBox.Mode.CMDLINE) |
433 String log = new JavacTask(tb, Task.Mode.CMDLINE) |
431 .options("-XDrawDiagnostics", |
434 .options("-XDrawDiagnostics", |
432 "-modulesourcepath", sourcepath.replace('/', File.separatorChar)) |
435 "-modulesourcepath", sourcepath.replace('/', File.separatorChar)) |
433 .run(ToolBox.Expect.FAIL) |
436 .run(Task.Expect.FAIL) |
434 .writeAll() |
437 .writeAll() |
435 .getOutput(ToolBox.OutputKind.DIRECT); |
438 .getOutput(Task.OutputKind.DIRECT); |
436 |
439 |
437 if (!log.contains("- compiler.err.illegal.argument.for.option: -modulesourcepath, illegal use of *")) |
440 if (!log.contains("- compiler.err.illegal.argument.for.option: -modulesourcepath, illegal use of *")) |
438 throw new Exception("expected output for path [" + sourcepath + "] not found"); |
441 throw new Exception("expected output for path [" + sourcepath + "] not found"); |
439 } |
442 } |
440 } |
443 } |