< prev index next >

test/tools/javac/modules/AutomaticModules.java

Print this page




  65                 .run()
  66                 .writeAll()
  67                 .getOutput(Task.OutputKind.DIRECT);
  68 
  69         if (!log.isEmpty()) {
  70             throw new Exception("unexpected output: " + log);
  71         }
  72 
  73         Path modulePath = base.resolve("module-path");
  74 
  75         Files.createDirectories(modulePath);
  76 
  77         Path jar = modulePath.resolve("test-api-1.0.jar");
  78 
  79         new JarTask(tb, jar)
  80           .baseDir(legacyClasses)
  81           .files("api/Api.class")
  82           .run();
  83 
  84         Path moduleSrc = base.resolve("module-src");
  85         Path m1 = moduleSrc.resolve("m1");
  86 
  87         Path classes = base.resolve("classes");
  88 
  89         Files.createDirectories(classes);
  90 
  91         tb.writeJavaFiles(m1,
  92                           "module m1 { requires test.api; requires java.desktop; }",
  93                           "package impl; public class Impl { public void e(api.Api api) { api.actionPerformed(null); } }");
  94 
  95         new JavacTask(tb)
  96                 .options("--module-source-path", moduleSrc.toString(), "--module-path", modulePath.toString())
  97                 .outdir(classes)
  98                 .files(findJavaFiles(moduleSrc))
  99                 .run()
 100                 .writeAll();
 101     }
 102 
 103     @Test
 104     public void testUnnamedModule(Path base) throws Exception {
 105         Path legacySrc = base.resolve("legacy-src");
 106         tb.writeJavaFiles(legacySrc,
 107                           "package api; public abstract class Api { public void run(CharSequence str) { } private void run(base.Base base) { } }",
 108                           "package base; public interface Base { public void run(); }");
 109         Path legacyClasses = base.resolve("legacy-classes");
 110         Files.createDirectories(legacyClasses);
 111 
 112         String log = new JavacTask(tb)


 123 
 124         Path modulePath = base.resolve("module-path");
 125 
 126         Files.createDirectories(modulePath);
 127 
 128         Path apiJar = modulePath.resolve("test-api-1.0.jar");
 129 
 130         new JarTask(tb, apiJar)
 131           .baseDir(legacyClasses)
 132           .files("api/Api.class")
 133           .run();
 134 
 135         Path baseJar = base.resolve("base.jar");
 136 
 137         new JarTask(tb, baseJar)
 138           .baseDir(legacyClasses)
 139           .files("base/Base.class")
 140           .run();
 141 
 142         Path moduleSrc = base.resolve("module-src");
 143         Path m1 = moduleSrc.resolve("m1");
 144 
 145         Path classes = base.resolve("classes");
 146 
 147         Files.createDirectories(classes);
 148 
 149         tb.writeJavaFiles(m1,
 150                           "module m1 { requires test.api; }",
 151                           "package impl; public class Impl { public void e(api.Api api) { api.run(\"\"); } }");
 152 
 153         new JavacTask(tb)
 154                 .options("--module-source-path", moduleSrc.toString(), "--module-path", modulePath.toString(), "--class-path", baseJar.toString())
 155                 .outdir(classes)
 156                 .files(findJavaFiles(moduleSrc))
 157                 .run()
 158                 .writeAll();
 159     }
 160 
 161     @Test
 162     public void testModuleInfoFromClassFileDependsOnAutomatic(Path base) throws Exception {
 163         Path automaticSrc = base.resolve("automaticSrc");
 164         tb.writeJavaFiles(automaticSrc, "package api; public class Api {}");
 165         Path automaticClasses = base.resolve("automaticClasses");
 166         tb.createDirectories(automaticClasses);
 167 
 168         String automaticLog = new JavacTask(tb)
 169                                 .outdir(automaticClasses)
 170                                 .files(findJavaFiles(automaticSrc))


 176             throw new Exception("expected output not found: " + automaticLog);
 177 
 178         Path modulePath = base.resolve("module-path");
 179 
 180         Files.createDirectories(modulePath);
 181 
 182         Path automaticJar = modulePath.resolve("automatic-1.0.jar");
 183 
 184         new JarTask(tb, automaticJar)
 185           .baseDir(automaticClasses)
 186           .files("api/Api.class")
 187           .run();
 188 
 189         Path depSrc = base.resolve("depSrc");
 190         Path depClasses = base.resolve("depClasses");
 191 
 192         Files.createDirectories(depSrc);
 193         Files.createDirectories(depClasses);
 194 
 195         tb.writeJavaFiles(depSrc,
 196                           "module m1 { requires transitive automatic; }",
 197                           "package dep; public class Dep { api.Api api; }");
 198 
 199         new JavacTask(tb)
 200                 .options("--module-path", modulePath.toString())
 201                 .outdir(depClasses)
 202                 .files(findJavaFiles(depSrc))
 203                 .run()
 204                 .writeAll();
 205 
 206         Path moduleJar = modulePath.resolve("m1.jar");
 207 
 208         new JarTask(tb, moduleJar)
 209           .baseDir(depClasses)
 210           .files("module-info.class", "dep/Dep.class")
 211           .run();
 212 
 213         Path testSrc = base.resolve("testSrc");
 214         Path testClasses = base.resolve("testClasses");
 215 
 216         Files.createDirectories(testSrc);
 217         Files.createDirectories(testClasses);
 218 
 219         tb.writeJavaFiles(testSrc,
 220                           "module m2 { requires automatic; }",
 221                           "package test; public class Test { }");
 222 
 223         new JavacTask(tb)
 224                 .options("--module-path", modulePath.toString())
 225                 .outdir(testClasses)
 226                 .files(findJavaFiles(testSrc))
 227                 .run()
 228                 .writeAll();
 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);


 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 static 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("--module-source-path", moduleSrc.toString(),
 277                          "--module-path", modulePath.toString(),
 278                          "--add-modules", "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("--module-source-path", moduleSrc.toString(),
 295                          "--module-path", 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     }
 311 
 312     @Test
 313     public void testDropTrailingVersion(Path base) throws Exception {
 314         Path legacySrc = base.resolve("legacy-src");
 315         tb.writeJavaFiles(legacySrc,
 316                           "package api; public class Api {}");
 317         Path legacyClasses = base.resolve("legacy-classes");
 318         Files.createDirectories(legacyClasses);
 319 
 320         String log = new JavacTask(tb)
 321                 .options()
 322                 .outdir(legacyClasses)
 323                 .files(findJavaFiles(legacySrc))
 324                 .run()




  65                 .run()
  66                 .writeAll()
  67                 .getOutput(Task.OutputKind.DIRECT);
  68 
  69         if (!log.isEmpty()) {
  70             throw new Exception("unexpected output: " + log);
  71         }
  72 
  73         Path modulePath = base.resolve("module-path");
  74 
  75         Files.createDirectories(modulePath);
  76 
  77         Path jar = modulePath.resolve("test-api-1.0.jar");
  78 
  79         new JarTask(tb, jar)
  80           .baseDir(legacyClasses)
  81           .files("api/Api.class")
  82           .run();
  83 
  84         Path moduleSrc = base.resolve("module-src");
  85         Path m1 = moduleSrc.resolve("m1x");
  86 
  87         Path classes = base.resolve("classes");
  88 
  89         Files.createDirectories(classes);
  90 
  91         tb.writeJavaFiles(m1,
  92                           "module m1x { requires test.api; requires java.desktop; }",
  93                           "package impl; public class Impl { public void e(api.Api api) { api.actionPerformed(null); } }");
  94 
  95         new JavacTask(tb)
  96                 .options("--module-source-path", moduleSrc.toString(), "--module-path", modulePath.toString())
  97                 .outdir(classes)
  98                 .files(findJavaFiles(moduleSrc))
  99                 .run()
 100                 .writeAll();
 101     }
 102 
 103     @Test
 104     public void testUnnamedModule(Path base) throws Exception {
 105         Path legacySrc = base.resolve("legacy-src");
 106         tb.writeJavaFiles(legacySrc,
 107                           "package api; public abstract class Api { public void run(CharSequence str) { } private void run(base.Base base) { } }",
 108                           "package base; public interface Base { public void run(); }");
 109         Path legacyClasses = base.resolve("legacy-classes");
 110         Files.createDirectories(legacyClasses);
 111 
 112         String log = new JavacTask(tb)


 123 
 124         Path modulePath = base.resolve("module-path");
 125 
 126         Files.createDirectories(modulePath);
 127 
 128         Path apiJar = modulePath.resolve("test-api-1.0.jar");
 129 
 130         new JarTask(tb, apiJar)
 131           .baseDir(legacyClasses)
 132           .files("api/Api.class")
 133           .run();
 134 
 135         Path baseJar = base.resolve("base.jar");
 136 
 137         new JarTask(tb, baseJar)
 138           .baseDir(legacyClasses)
 139           .files("base/Base.class")
 140           .run();
 141 
 142         Path moduleSrc = base.resolve("module-src");
 143         Path m1 = moduleSrc.resolve("m1x");
 144 
 145         Path classes = base.resolve("classes");
 146 
 147         Files.createDirectories(classes);
 148 
 149         tb.writeJavaFiles(m1,
 150                           "module m1x { requires test.api; }",
 151                           "package impl; public class Impl { public void e(api.Api api) { api.run(\"\"); } }");
 152 
 153         new JavacTask(tb)
 154                 .options("--module-source-path", moduleSrc.toString(), "--module-path", modulePath.toString(), "--class-path", baseJar.toString())
 155                 .outdir(classes)
 156                 .files(findJavaFiles(moduleSrc))
 157                 .run()
 158                 .writeAll();
 159     }
 160 
 161     @Test
 162     public void testModuleInfoFromClassFileDependsOnAutomatic(Path base) throws Exception {
 163         Path automaticSrc = base.resolve("automaticSrc");
 164         tb.writeJavaFiles(automaticSrc, "package api; public class Api {}");
 165         Path automaticClasses = base.resolve("automaticClasses");
 166         tb.createDirectories(automaticClasses);
 167 
 168         String automaticLog = new JavacTask(tb)
 169                                 .outdir(automaticClasses)
 170                                 .files(findJavaFiles(automaticSrc))


 176             throw new Exception("expected output not found: " + automaticLog);
 177 
 178         Path modulePath = base.resolve("module-path");
 179 
 180         Files.createDirectories(modulePath);
 181 
 182         Path automaticJar = modulePath.resolve("automatic-1.0.jar");
 183 
 184         new JarTask(tb, automaticJar)
 185           .baseDir(automaticClasses)
 186           .files("api/Api.class")
 187           .run();
 188 
 189         Path depSrc = base.resolve("depSrc");
 190         Path depClasses = base.resolve("depClasses");
 191 
 192         Files.createDirectories(depSrc);
 193         Files.createDirectories(depClasses);
 194 
 195         tb.writeJavaFiles(depSrc,
 196                           "module m1x { requires transitive automatic; }",
 197                           "package dep; public class Dep { api.Api api; }");
 198 
 199         new JavacTask(tb)
 200                 .options("--module-path", modulePath.toString())
 201                 .outdir(depClasses)
 202                 .files(findJavaFiles(depSrc))
 203                 .run()
 204                 .writeAll();
 205 
 206         Path moduleJar = modulePath.resolve("m1x.jar");
 207 
 208         new JarTask(tb, moduleJar)
 209           .baseDir(depClasses)
 210           .files("module-info.class", "dep/Dep.class")
 211           .run();
 212 
 213         Path testSrc = base.resolve("testSrc");
 214         Path testClasses = base.resolve("testClasses");
 215 
 216         Files.createDirectories(testSrc);
 217         Files.createDirectories(testClasses);
 218 
 219         tb.writeJavaFiles(testSrc,
 220                           "module m2x { requires automatic; }",
 221                           "package test; public class Test { }");
 222 
 223         new JavacTask(tb)
 224                 .options("--module-path", modulePath.toString())
 225                 .outdir(testClasses)
 226                 .files(findJavaFiles(testSrc))
 227                 .run()
 228                 .writeAll();
 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);


 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("m1x"),
 264                           "module m1x { requires static automaticA; }",
 265                           "package impl; public class Impl { apiA.Api a; apiB.Api b; m2x.M2 m;}");
 266 
 267         tb.writeJavaFiles(moduleSrc.resolve("m2x"),
 268                           "module m2x { exports m2x; }",
 269                           "package m2x; 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("--module-source-path", moduleSrc.toString(),
 277                          "--module-path", modulePath.toString(),
 278                          "--add-modules", "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:62: compiler.err.not.def.access.package.cant.access: m2x.M2, m2x",
 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("--module-source-path", moduleSrc.toString(),
 295                          "--module-path", 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:62: compiler.err.not.def.access.package.cant.access: m2x.M2, m2x",
 305                                  "2 errors");
 306 
 307         if (!expected.equals(log)) {
 308             throw new Exception("expected output not found: " + log);
 309         }
 310     }
 311 
 312     @Test
 313     public void testDropTrailingVersion(Path base) throws Exception {
 314         Path legacySrc = base.resolve("legacy-src");
 315         tb.writeJavaFiles(legacySrc,
 316                           "package api; public class Api {}");
 317         Path legacyClasses = base.resolve("legacy-classes");
 318         Files.createDirectories(legacyClasses);
 319 
 320         String log = new JavacTask(tb)
 321                 .options()
 322                 .outdir(legacyClasses)
 323                 .files(findJavaFiles(legacySrc))
 324                 .run()


< prev index next >