37 import java.util.Arrays; |
38 import java.util.Arrays; |
38 import java.util.List; |
39 import java.util.List; |
39 |
40 |
40 import toolbox.JavacTask; |
41 import toolbox.JavacTask; |
41 import toolbox.Task; |
42 import toolbox.Task; |
|
43 import toolbox.Task.Expect; |
42 import toolbox.ToolBox; |
44 import toolbox.ToolBox; |
43 |
45 |
44 public class ProvidesTest extends ModuleTestBase { |
46 public class ProvidesTest extends ModuleTestBase { |
45 public static void main(String... args) throws Exception { |
47 public static void main(String... args) throws Exception { |
46 ProvidesTest t = new ProvidesTest(); |
48 ProvidesTest t = new ProvidesTest(); |
413 public void testServiceDefinitionInnerClass(Path base) throws Exception { |
415 public void testServiceDefinitionInnerClass(Path base) throws Exception { |
414 Path src = base.resolve("src"); |
416 Path src = base.resolve("src"); |
415 tb.writeJavaFiles(src, |
417 tb.writeJavaFiles(src, |
416 "module m { provides p1.C1.InnerDefinition with p2.C2; }", |
418 "module m { provides p1.C1.InnerDefinition with p2.C2; }", |
417 "package p1; public class C1 { public class InnerDefinition { } }", |
419 "package p1; public class C1 { public class InnerDefinition { } }", |
418 "package p2; public class C2 extends p1.C1.InnerDefinition { }"); |
420 "package p2; public class C2 extends p1.C1.InnerDefinition { public C2() { new p1.C1().super(); } }"); |
419 |
421 |
420 List<String> output = new JavacTask(tb) |
422 new JavacTask(tb) |
421 .options("-XDrawDiagnostics") |
423 .options("-XDrawDiagnostics") |
422 .outdir(Files.createDirectories(base.resolve("classes"))) |
424 .outdir(Files.createDirectories(base.resolve("classes"))) |
423 .files(findJavaFiles(src)) |
425 .files(findJavaFiles(src)) |
424 .run(Task.Expect.FAIL) |
426 .run(Expect.SUCCESS) |
425 .writeAll() |
427 .writeAll(); |
426 .getOutputLines(Task.OutputKind.DIRECT); |
|
427 |
|
428 List<String> expected = Arrays.asList( |
|
429 "module-info.java:1:26: compiler.err.service.definition.is.inner: p1.C1.InnerDefinition", |
|
430 "module-info.java:1:12: compiler.warn.service.provided.but.not.exported.or.used: p1.C1.InnerDefinition", |
|
431 "C2.java:1:20: compiler.err.encl.class.required: p1.C1.InnerDefinition", |
|
432 "2 errors", |
|
433 "1 warning"); |
|
434 if (!output.containsAll(expected)) { |
|
435 throw new Exception("Expected output not found"); |
|
436 } |
|
437 } |
428 } |
438 } |
429 } |