21 * questions. |
21 * questions. |
22 */ |
22 */ |
23 |
23 |
24 /** |
24 /** |
25 * @test |
25 * @test |
|
26 * @bug 8155026 |
26 * @summary Test automatic modules |
27 * @summary Test automatic modules |
27 * @library /tools/lib |
28 * @library /tools/lib |
28 * @modules |
29 * @modules |
|
30 * java.desktop |
29 * jdk.compiler/com.sun.tools.javac.api |
31 * jdk.compiler/com.sun.tools.javac.api |
30 * jdk.compiler/com.sun.tools.javac.main |
32 * jdk.compiler/com.sun.tools.javac.main |
31 * @build toolbox.ToolBox toolbox.JavacTask toolbox.JarTask ModuleTestBase |
33 * @build toolbox.ToolBox toolbox.JavacTask toolbox.JarTask ModuleTestBase |
32 * @run main AutomaticModules |
34 * @run main AutomaticModules |
33 */ |
35 */ |
34 |
36 |
35 import java.nio.file.Files; |
37 import java.nio.file.Files; |
36 import java.nio.file.Path; |
38 import java.nio.file.Path; |
|
39 import java.util.Arrays; |
|
40 import java.util.List; |
37 |
41 |
38 import toolbox.JarTask; |
42 import toolbox.JarTask; |
39 import toolbox.JavacTask; |
43 import toolbox.JavacTask; |
40 import toolbox.Task; |
44 import toolbox.Task; |
41 import toolbox.ToolBox; |
|
42 |
45 |
43 public class AutomaticModules extends ModuleTestBase { |
46 public class AutomaticModules extends ModuleTestBase { |
44 |
47 |
45 public static void main(String... args) throws Exception { |
48 public static void main(String... args) throws Exception { |
46 AutomaticModules t = new AutomaticModules(); |
49 AutomaticModules t = new AutomaticModules(); |
84 Path classes = base.resolve("classes"); |
87 Path classes = base.resolve("classes"); |
85 |
88 |
86 Files.createDirectories(classes); |
89 Files.createDirectories(classes); |
87 |
90 |
88 tb.writeJavaFiles(m1, |
91 tb.writeJavaFiles(m1, |
89 "module m1 { requires test.api; }", |
92 "module m1 { requires test.api; requires java.desktop; }", |
90 "package impl; public class Impl { public void e(api.Api api) { api.actionPerformed(null); } }"); |
93 "package impl; public class Impl { public void e(api.Api api) { api.actionPerformed(null); } }"); |
91 |
94 |
92 new JavacTask(tb) |
95 new JavacTask(tb) |
93 .options("-modulesourcepath", moduleSrc.toString(), "-modulepath", modulePath.toString(), "-addmods", "java.desktop") |
96 .options("-modulesourcepath", moduleSrc.toString(), "-modulepath", modulePath.toString()) |
94 .outdir(classes) |
97 .outdir(classes) |
95 .files(findJavaFiles(moduleSrc)) |
98 .files(findJavaFiles(moduleSrc)) |
96 .run() |
99 .run() |
97 .writeAll(); |
100 .writeAll(); |
98 } |
101 } |
222 .outdir(testClasses) |
225 .outdir(testClasses) |
223 .files(findJavaFiles(testSrc)) |
226 .files(findJavaFiles(testSrc)) |
224 .run() |
227 .run() |
225 .writeAll(); |
228 .writeAll(); |
226 } |
229 } |
|
230 |
|
231 @Test |
|
232 public void testAutomaticAndNamedModules(Path base) throws Exception { |
|
233 Path modulePath = base.resolve("module-path"); |
|
234 |
|
235 Files.createDirectories(modulePath); |
|
236 |
|
237 for (char c : new char[] {'A', 'B'}) { |
|
238 Path automaticSrc = base.resolve("automaticSrc" + c); |
|
239 tb.writeJavaFiles(automaticSrc, "package api" + c + "; public class Api {}"); |
|
240 Path automaticClasses = base.resolve("automaticClasses" + c); |
|
241 tb.createDirectories(automaticClasses); |
|
242 |
|
243 String automaticLog = new JavacTask(tb) |
|
244 .outdir(automaticClasses) |
|
245 .files(findJavaFiles(automaticSrc)) |
|
246 .run() |
|
247 .writeAll() |
|
248 .getOutput(Task.OutputKind.DIRECT); |
|
249 |
|
250 if (!automaticLog.isEmpty()) |
|
251 throw new Exception("expected output not found: " + automaticLog); |
|
252 |
|
253 Path automaticJar = modulePath.resolve("automatic" + c + "-1.0.jar"); |
|
254 |
|
255 new JarTask(tb, automaticJar) |
|
256 .baseDir(automaticClasses) |
|
257 .files("api" + c + "/Api.class") |
|
258 .run(); |
|
259 } |
|
260 |
|
261 Path moduleSrc = base.resolve("module-src"); |
|
262 |
|
263 tb.writeJavaFiles(moduleSrc.resolve("m1"), |
|
264 "module m1 { requires automaticA; }", |
|
265 "package impl; public class Impl { apiA.Api a; apiB.Api b; m2.M2 m;}"); |
|
266 |
|
267 tb.writeJavaFiles(moduleSrc.resolve("m2"), |
|
268 "module m2 { exports m2; }", |
|
269 "package m2; public class M2 { }"); |
|
270 |
|
271 Path classes = base.resolve("classes"); |
|
272 |
|
273 Files.createDirectories(classes); |
|
274 |
|
275 List<String> log = new JavacTask(tb) |
|
276 .options("-modulesourcepath", moduleSrc.toString(), |
|
277 "-modulepath", modulePath.toString(), |
|
278 "-addmods", "automaticB", |
|
279 "-XDrawDiagnostics") |
|
280 .outdir(classes) |
|
281 .files(findJavaFiles(moduleSrc)) |
|
282 .run(Task.Expect.FAIL) |
|
283 .writeAll() |
|
284 .getOutputLines(Task.OutputKind.DIRECT); |
|
285 |
|
286 List<String> expected = Arrays.asList("Impl.java:1:61: compiler.err.not.def.access.package.cant.access: m2.M2, m2", |
|
287 "1 error"); |
|
288 |
|
289 if (!expected.equals(log)) { |
|
290 throw new Exception("expected output not found: " + log); |
|
291 } |
|
292 |
|
293 log = new JavacTask(tb) |
|
294 .options("-modulesourcepath", moduleSrc.toString(), |
|
295 "-modulepath", modulePath.toString(), |
|
296 "-XDrawDiagnostics") |
|
297 .outdir(classes) |
|
298 .files(findJavaFiles(moduleSrc)) |
|
299 .run(Task.Expect.FAIL) |
|
300 .writeAll() |
|
301 .getOutputLines(Task.OutputKind.DIRECT); |
|
302 |
|
303 expected = Arrays.asList("Impl.java:1:51: compiler.err.doesnt.exist: apiB", |
|
304 "Impl.java:1:61: compiler.err.not.def.access.package.cant.access: m2.M2, m2", |
|
305 "2 errors"); |
|
306 |
|
307 if (!expected.equals(log)) { |
|
308 throw new Exception("expected output not found: " + log); |
|
309 } |
|
310 } |
227 } |
311 } |