langtools/test/tools/javac/modules/AutomaticModules.java
changeset 39366 8bf5fe72ca88
parent 37758 3ecf9b414e05
child 40308 274367a99f98
equal deleted inserted replaced
39365:79f4425ad27c 39366:8bf5fe72ca88
    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 }