langtools/test/tools/javac/modules/AddExportsTest.java
changeset 42822 a84956e7ee4d
parent 41938 8e66bf10fcec
equal deleted inserted replaced
42812:084017ef9300 42822:a84956e7ee4d
    29  *          jdk.compiler/com.sun.tools.javac.main
    29  *          jdk.compiler/com.sun.tools.javac.main
    30  * @build toolbox.ToolBox toolbox.JavacTask ModuleTestBase
    30  * @build toolbox.ToolBox toolbox.JavacTask ModuleTestBase
    31  * @run main AddExportsTest
    31  * @run main AddExportsTest
    32  */
    32  */
    33 
    33 
    34 import java.nio.file.Files;
       
    35 import java.nio.file.Path;
    34 import java.nio.file.Path;
    36 import java.util.Set;
       
    37 
    35 
    38 import toolbox.JavacTask;
    36 import toolbox.JavacTask;
    39 import toolbox.Task;
    37 import toolbox.Task;
    40 import toolbox.ToolBox;
       
    41 
    38 
    42 public class AddExportsTest extends ModuleTestBase {
    39 public class AddExportsTest extends ModuleTestBase {
    43 
    40 
    44     public static void main(String... args) throws Exception {
    41     public static void main(String... args) throws Exception {
    45         new AddExportsTest().runTests();
    42         new AddExportsTest().runTests();
    69     }
    66     }
    70 
    67 
    71     @Test
    68     @Test
    72     public void testEmptyItem(Path base) throws Exception {
    69     public void testEmptyItem(Path base) throws Exception {
    73         Path src = base.resolve("src");
    70         Path src = base.resolve("src");
    74         Path src_m1 = src.resolve("m1");
    71         Path src_m1 = src.resolve("m1x");
    75         tb.writeJavaFiles(src_m1,
    72         tb.writeJavaFiles(src_m1,
    76                           "module m1 { }",
    73                           "module m1x { }",
    77                           "package p1; public class C1 { }");
    74                           "package p1; public class C1 { }");
    78         Path src_m2 = src.resolve("m2");
    75         Path src_m2 = src.resolve("m2x");
    79         tb.writeJavaFiles(src_m2,
    76         tb.writeJavaFiles(src_m2,
    80                           "module m2 { }",
    77                           "module m2x { }",
    81                           "package p2; class C2 { p1.C1 c1; }");
    78                           "package p2; class C2 { p1.C1 c1; }");
    82         Path src_m3 = src.resolve("m3");
    79         Path src_m3 = src.resolve("m3x");
    83         tb.writeJavaFiles(src_m3,
    80         tb.writeJavaFiles(src_m3,
    84                           "module m3 { }",
    81                           "module m3x { }",
    85                           "package p3; class C3 { p1.C1 c1; }");
    82                           "package p3; class C3 { p1.C1 c1; }");
    86         Path classes = base.resolve("classes");
    83         Path classes = base.resolve("classes");
    87         tb.createDirectories(classes);
    84         tb.createDirectories(classes);
    88 
    85 
    89         testEmptyItem(src, classes, "m1/p1=,m2,m3");
    86         testEmptyItem(src, classes, "m1x/p1=,m2x,m3x");
    90         testEmptyItem(src, classes, "m1/p1=m2,,m3");
    87         testEmptyItem(src, classes, "m1x/p1=m2x,,m3x");
    91         testEmptyItem(src, classes, "m1/p1=m2,m3,");
    88         testEmptyItem(src, classes, "m1x/p1=m2x,m3x,");
    92     }
    89     }
    93 
    90 
    94     void testEmptyItem(Path src, Path classes, String option) throws Exception {
    91     void testEmptyItem(Path src, Path classes, String option) throws Exception {
    95         new JavacTask(tb)
    92         new JavacTask(tb)
    96                 .options("--module-source-path", src.toString(),
    93                 .options("--module-source-path", src.toString(),
   102     }
    99     }
   103 
   100 
   104     @Test
   101     @Test
   105     public void testEmptyList(Path base) throws Exception {
   102     public void testEmptyList(Path base) throws Exception {
   106         Path src = base.resolve("src");
   103         Path src = base.resolve("src");
   107         Path src_m1 = src.resolve("m1");
   104         Path src_m1 = src.resolve("m1x");
   108         tb.writeJavaFiles(src_m1,
   105         tb.writeJavaFiles(src_m1,
   109                           "module m1 { exports p1; }",
   106                           "module m1x { exports p1; }",
   110                           "package p1; public class C1 { }");
   107                           "package p1; public class C1 { }");
   111         Path classes = base.resolve("classes");
   108         Path classes = base.resolve("classes");
   112         tb.createDirectories(classes);
   109         tb.createDirectories(classes);
   113 
   110 
   114         testEmptyList(src, classes, "m1/p1=");
   111         testEmptyList(src, classes, "m1x/p1=");
   115         testEmptyList(src, classes, "m1/p1=,");
   112         testEmptyList(src, classes, "m1x/p1=,");
   116     }
   113     }
   117 
   114 
   118     void testEmptyList(Path src, Path classes, String option) throws Exception {
   115     void testEmptyList(Path src, Path classes, String option) throws Exception {
   119         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   116         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   120                 .options("--module-source-path", src.toString(),
   117                 .options("--module-source-path", src.toString(),
   130     }
   127     }
   131 
   128 
   132     @Test
   129     @Test
   133     public void testMissingSourceParts(Path base) throws Exception {
   130     public void testMissingSourceParts(Path base) throws Exception {
   134         Path src = base.resolve("src");
   131         Path src = base.resolve("src");
   135         Path src_m1 = src.resolve("m1");
   132         Path src_m1 = src.resolve("m1x");
   136         tb.writeJavaFiles(src_m1,
   133         tb.writeJavaFiles(src_m1,
   137                           "module m1 { exports p1; }",
   134                           "module m1x { exports p1; }",
   138                           "package p1; public class C1 { }");
   135                           "package p1; public class C1 { }");
   139         Path src_m2 = src.resolve("m2");
   136         Path src_m2 = src.resolve("m2x");
   140         tb.writeJavaFiles(src_m2,
   137         tb.writeJavaFiles(src_m2,
   141                           "module m2 { }",
   138                           "module m2x { }",
   142                           "package p2; class C2 { p1.C1 c1; }");
   139                           "package p2; class C2 { p1.C1 c1; }");
   143         Path classes = base.resolve("classes");
   140         Path classes = base.resolve("classes");
   144         tb.createDirectories(classes);
   141         tb.createDirectories(classes);
   145 
   142 
   146         testMissingSourcePart(src, classes, "=m2");
   143         testMissingSourcePart(src, classes, "=m2x");
   147         testMissingSourcePart(src, classes, "/=m2");
   144         testMissingSourcePart(src, classes, "/=m2x");
   148         testMissingSourcePart(src, classes, "m1/=m2");
   145         testMissingSourcePart(src, classes, "m1x/=m2x");
   149         testMissingSourcePart(src, classes, "/p1=m2");
   146         testMissingSourcePart(src, classes, "/p1=m2x");
   150         testMissingSourcePart(src, classes, "m1p1=m2");
   147         testMissingSourcePart(src, classes, "m1xp1=m2x");
   151     }
   148     }
   152 
   149 
   153     private void testMissingSourcePart(Path src, Path classes, String option) throws Exception {
   150     private void testMissingSourcePart(Path src, Path classes, String option) throws Exception {
   154         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   151         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   155                 .options("--module-source-path", src.toString(),
   152                 .options("--module-source-path", src.toString(),
   165     }
   162     }
   166 
   163 
   167     @Test
   164     @Test
   168     public void testBadSourceParts(Path base) throws Exception {
   165     public void testBadSourceParts(Path base) throws Exception {
   169         Path src = base.resolve("src");
   166         Path src = base.resolve("src");
   170         Path src_m1 = src.resolve("m1");
   167         Path src_m1 = src.resolve("m1x");
   171         tb.writeJavaFiles(src_m1,
   168         tb.writeJavaFiles(src_m1,
   172                           "module m1 { exports p1; }",
   169                           "module m1x { exports p1; }",
   173                           "package p1; public class C1 { }");
   170                           "package p1; public class C1 { }");
   174         Path src_m2 = src.resolve("m2");
   171         Path src_m2 = src.resolve("m2x");
   175         tb.writeJavaFiles(src_m2,
   172         tb.writeJavaFiles(src_m2,
   176                           "module m2 { }",
   173                           "module m2x { }",
   177                           "package p2; class C2 { p1.C1 c1; }");
   174                           "package p2; class C2 { p1.C1 c1; }");
   178         Path classes = base.resolve("classes");
   175         Path classes = base.resolve("classes");
   179         tb.createDirectories(classes);
   176         tb.createDirectories(classes);
   180 
   177 
   181         testBadSourcePart(src, classes, "m!/p1=m2", "m!");
   178         testBadSourcePart(src, classes, "m!/p1=m2x", "m!");
   182         testBadSourcePart(src, classes, "m1/p!=m2", "p!");
   179         testBadSourcePart(src, classes, "m1x/p!=m2x", "p!");
   183     }
   180     }
   184 
   181 
   185     private void testBadSourcePart(Path src, Path classes, String option, String badName)
   182     private void testBadSourcePart(Path src, Path classes, String option, String badName)
   186                 throws Exception {
   183                 throws Exception {
   187         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   184         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   199     }
   196     }
   200 
   197 
   201     @Test
   198     @Test
   202     public void testBadTarget(Path base) throws Exception {
   199     public void testBadTarget(Path base) throws Exception {
   203         Path src = base.resolve("src");
   200         Path src = base.resolve("src");
   204         Path src_m1 = src.resolve("m1");
   201         Path src_m1 = src.resolve("m1x");
   205         tb.writeJavaFiles(src_m1,
   202         tb.writeJavaFiles(src_m1,
   206                           "module m1 { exports p1; }",
   203                           "module m1x { exports p1; }",
   207                           "package p1; public class C1 { }");
   204                           "package p1; public class C1 { }");
   208         Path classes = base.resolve("classes");
   205         Path classes = base.resolve("classes");
   209         tb.createDirectories(classes);
   206         tb.createDirectories(classes);
   210 
   207 
   211         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   208         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   212                 .options("-XDrawDiagnostics",
   209                 .options("-XDrawDiagnostics",
   213                          "--module-source-path", src.toString(),
   210                          "--module-source-path", src.toString(),
   214                          "--add-exports", "m1/p1=m!")
   211                          "--add-exports", "m1x/p1=m!")
   215                 .outdir(classes)
   212                 .outdir(classes)
   216                 .files(findJavaFiles(src))
   213                 .files(findJavaFiles(src))
   217                 .run()
   214                 .run()
   218                 .writeAll()
   215                 .writeAll()
   219                 .getOutput(Task.OutputKind.DIRECT);
   216                 .getOutput(Task.OutputKind.DIRECT);
   223     }
   220     }
   224 
   221 
   225     @Test
   222     @Test
   226     public void testSourceNotFound(Path base) throws Exception {
   223     public void testSourceNotFound(Path base) throws Exception {
   227         Path src = base.resolve("src");
   224         Path src = base.resolve("src");
   228         Path src_m1 = src.resolve("m1");
   225         Path src_m1 = src.resolve("m1x");
   229         tb.writeJavaFiles(src_m1,
   226         tb.writeJavaFiles(src_m1,
   230                           "module m1 { }");
   227                           "module m1x { }");
   231         Path classes = base.resolve("classes");
   228         Path classes = base.resolve("classes");
   232         tb.createDirectories(classes);
   229         tb.createDirectories(classes);
   233 
   230 
   234         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   231         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   235                 .options("-XDrawDiagnostics",
   232                 .options("-XDrawDiagnostics",
   236                          "--module-source-path", src.toString(),
   233                          "--module-source-path", src.toString(),
   237                          "--add-exports", "DoesNotExist/p=m1")
   234                          "--add-exports", "DoesNotExist/p=m1x")
   238                 .outdir(classes)
   235                 .outdir(classes)
   239                 .files(findJavaFiles(src))
   236                 .files(findJavaFiles(src))
   240                 .run()
   237                 .run()
   241                 .writeAll()
   238                 .writeAll()
   242                 .getOutput(Task.OutputKind.DIRECT);
   239                 .getOutput(Task.OutputKind.DIRECT);
   246     }
   243     }
   247 
   244 
   248     @Test
   245     @Test
   249     public void testTargetNotFound(Path base) throws Exception {
   246     public void testTargetNotFound(Path base) throws Exception {
   250         Path src = base.resolve("src");
   247         Path src = base.resolve("src");
   251         Path src_m1 = src.resolve("m1");
   248         Path src_m1 = src.resolve("m1x");
   252         tb.writeJavaFiles(src_m1,
   249         tb.writeJavaFiles(src_m1,
   253                           "module m1 { }",
   250                           "module m1x { }",
   254                           "package p1; class C1 { }");
   251                           "package p1; class C1 { }");
   255         Path classes = base.resolve("classes");
   252         Path classes = base.resolve("classes");
   256         tb.createDirectories(classes);
   253         tb.createDirectories(classes);
   257 
   254 
   258         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   255         String log = new JavacTask(tb, Task.Mode.CMDLINE)
   259                 .options("-XDrawDiagnostics",
   256                 .options("-XDrawDiagnostics",
   260                          "--module-source-path", src.toString(),
   257                          "--module-source-path", src.toString(),
   261                          "--add-exports", "m1/p1=DoesNotExist")
   258                          "--add-exports", "m1x/p1=DoesNotExist")
   262                 .outdir(classes)
   259                 .outdir(classes)
   263                 .files(findJavaFiles(src))
   260                 .files(findJavaFiles(src))
   264                 .run()
   261                 .run()
   265                 .writeAll()
   262                 .writeAll()
   266                 .getOutput(Task.OutputKind.DIRECT);
   263                 .getOutput(Task.OutputKind.DIRECT);
   270     }
   267     }
   271 
   268 
   272     @Test
   269     @Test
   273     public void testDuplicate(Path base) throws Exception {
   270     public void testDuplicate(Path base) throws Exception {
   274         Path src = base.resolve("src");
   271         Path src = base.resolve("src");
   275         Path src_m1 = src.resolve("m1");
   272         Path src_m1 = src.resolve("m1x");
   276         tb.writeJavaFiles(src_m1,
   273         tb.writeJavaFiles(src_m1,
   277                           "module m1 { }",
   274                           "module m1x { }",
   278                           "package p1; public class C1 { }");
   275                           "package p1; public class C1 { }");
   279         Path src_m2 = src.resolve("m2");
   276         Path src_m2 = src.resolve("m2x");
   280         tb.writeJavaFiles(src_m2,
   277         tb.writeJavaFiles(src_m2,
   281                           "module m2 { }",
   278                           "module m2x { }",
   282                           "package p2; class C2 { p1.C1 c1; }");
   279                           "package p2; class C2 { p1.C1 c1; }");
   283         Path classes = base.resolve("classes");
   280         Path classes = base.resolve("classes");
   284         tb.createDirectories(classes);
   281         tb.createDirectories(classes);
   285 
   282 
   286         new JavacTask(tb)
   283         new JavacTask(tb)
   287                 .options("--module-source-path", src.toString(),
   284                 .options("--module-source-path", src.toString(),
   288                          "--add-exports", "m1/p1=m2,m2")
   285                          "--add-exports", "m1x/p1=m2x,m2x")
   289                 .outdir(classes)
   286                 .outdir(classes)
   290                 .files(findJavaFiles(src))
   287                 .files(findJavaFiles(src))
   291                 .run()
   288                 .run()
   292                 .writeAll();
   289                 .writeAll();
   293     }
   290     }
   294 
   291 
   295     @Test
   292     @Test
   296     public void testRepeated_SameTarget(Path base) throws Exception {
   293     public void testRepeated_SameTarget(Path base) throws Exception {
   297         Path src = base.resolve("src");
   294         Path src = base.resolve("src");
   298         Path src_m1 = src.resolve("m1");
   295         Path src_m1 = src.resolve("m1x");
   299         tb.writeJavaFiles(src_m1,
   296         tb.writeJavaFiles(src_m1,
   300                           "module m1 { }",
   297                           "module m1x { }",
   301                           "package p1; public class C1 { }");
   298                           "package p1; public class C1 { }");
   302         Path src_m2 = src.resolve("m2");
   299         Path src_m2 = src.resolve("m2x");
   303         tb.writeJavaFiles(src_m2,
   300         tb.writeJavaFiles(src_m2,
   304                           "module m2 { }",
   301                           "module m2x { }",
   305                           "package p2; class C2 { p1.C1 c1; }");
   302                           "package p2; class C2 { p1.C1 c1; }");
   306         Path classes = base.resolve("classes");
   303         Path classes = base.resolve("classes");
   307         tb.createDirectories(classes);
   304         tb.createDirectories(classes);
   308 
   305 
   309         new JavacTask(tb)
   306         new JavacTask(tb)
   310                 .options("--module-source-path", src.toString(),
   307                 .options("--module-source-path", src.toString(),
   311                          "--add-exports", "m1/p1=m2",
   308                          "--add-exports", "m1x/p1=m2x",
   312                          "--add-exports", "m1/p1=m2")
   309                          "--add-exports", "m1x/p1=m2x")
   313                 .outdir(classes)
   310                 .outdir(classes)
   314                 .files(findJavaFiles(src))
   311                 .files(findJavaFiles(src))
   315                 .run()
   312                 .run()
   316                 .writeAll();
   313                 .writeAll();
   317     }
   314     }
   318 
   315 
   319     @Test
   316     @Test
   320     public void testRepeated_DifferentTarget(Path base) throws Exception {
   317     public void testRepeated_DifferentTarget(Path base) throws Exception {
   321         Path src = base.resolve("src");
   318         Path src = base.resolve("src");
   322         Path src_m1 = src.resolve("m1");
   319         Path src_m1 = src.resolve("m1x");
   323         tb.writeJavaFiles(src_m1,
   320         tb.writeJavaFiles(src_m1,
   324                           "module m1 { }",
   321                           "module m1x { }",
   325                           "package p1; public class C1 { }");
   322                           "package p1; public class C1 { }");
   326         Path src_m2 = src.resolve("m2");
   323         Path src_m2 = src.resolve("m2x");
   327         tb.writeJavaFiles(src_m2,
   324         tb.writeJavaFiles(src_m2,
   328                           "module m2 { }",
   325                           "module m2x { }",
   329                           "package p2; class C2 { p1.C1 c1; }");
   326                           "package p2; class C2 { p1.C1 c1; }");
   330         Path src_m3 = src.resolve("m3");
   327         Path src_m3 = src.resolve("m3x");
   331         tb.writeJavaFiles(src_m3,
   328         tb.writeJavaFiles(src_m3,
   332                           "module m3 { }",
   329                           "module m3x { }",
   333                           "package p3; class C3 { p1.C1 c1; }");
   330                           "package p3; class C3 { p1.C1 c1; }");
   334         Path classes = base.resolve("classes");
   331         Path classes = base.resolve("classes");
   335         tb.createDirectories(classes);
   332         tb.createDirectories(classes);
   336 
   333 
   337         new JavacTask(tb)
   334         new JavacTask(tb)
   338                 .options("--module-source-path", src.toString(),
   335                 .options("--module-source-path", src.toString(),
   339                          "--add-exports", "m1/p1=m2",
   336                          "--add-exports", "m1x/p1=m2x",
   340                          "--add-exports", "m1/p1=m3")
   337                          "--add-exports", "m1x/p1=m3x")
   341                 .outdir(classes)
   338                 .outdir(classes)
   342                 .files(findJavaFiles(src))
   339                 .files(findJavaFiles(src))
   343                 .run()
   340                 .run()
   344                 .writeAll();
   341                 .writeAll();
   345     }
   342     }