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