langtools/test/tools/javac/modules/XModuleTest.java
changeset 36778 e04318f39f92
parent 36526 3b41f1c69604
child 37758 3ecf9b414e05
equal deleted inserted replaced
36777:28d33fb9097f 36778:e04318f39f92
    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()