< prev index next >

test/tools/jar/mmrjar/Basic.java

Print this page




 314     }
 315 
 316     // root and versioned module-info entries have different main-class, version
 317     // attributes
 318     @Test
 319     public void test6() throws IOException {
 320         // create a directory for this tests special files
 321         Files.createDirectory(Paths.get("test6"));
 322         Files.createDirectory(Paths.get("test6-v9"));
 323 
 324         // compile the classes directory
 325         Path src = testsrc.resolve("src").resolve("classes");
 326         Path dst = Paths.get("test6");
 327         javac(src, dst);
 328 
 329         byte[] mdBytes = Files.readAllBytes(Paths.get("module-info.class"));
 330 
 331         ModuleInfoExtender mie = ModuleInfoExtender.newExtender(
 332             new ByteArrayInputStream(mdBytes));
 333 
 334         mie.mainClass("foo.main");
 335         mie.version(Version.parse("1.0"));
 336 
 337         ByteArrayOutputStream baos = new ByteArrayOutputStream();
 338         mie.write(baos);
 339         Files.write(Paths.get("test6", "module-info.class"), baos.toByteArray());
 340         Files.write(Paths.get("test6-v9", "module-info.class"), baos.toByteArray());
 341 
 342         int rc = jar("--create --file mmr.jar -C test6 . --release 9 -C test6-v9 .");
 343         Assert.assertEquals(rc, 0);
 344 
 345 
 346         // different main-class
 347         mie = ModuleInfoExtender.newExtender(new ByteArrayInputStream(mdBytes));
 348         mie.mainClass("foo.main2");
 349         mie.version(Version.parse("1.0"));
 350         baos.reset();
 351         mie.write(baos);
 352         Files.write(Paths.get("test6-v9", "module-info.class"), baos.toByteArray());
 353 
 354         rc = jar("--create --file mmr.jar -C test6 . --release 9 -C test6-v9 .");
 355         Assert.assertEquals(rc, 1);
 356 
 357         Assert.assertTrue(Message.CONTAINS_DIFFERENT_MAINCLASS.match(
 358             new String(errbytes.toByteArray()),
 359             "META-INF/versions/9/module-info.class"));
 360 
 361         // different version
 362         mie = ModuleInfoExtender.newExtender(new ByteArrayInputStream(mdBytes));
 363         mie.mainClass("foo.main");
 364         mie.version(Version.parse("2.0"));
 365         baos.reset();
 366         mie.write(baos);
 367         Files.write(Paths.get("test6-v9", "module-info.class"), baos.toByteArray());
 368 
 369         rc = jar("--create --file mmr.jar -C test6 . --release 9 -C test6-v9 .");
 370         Assert.assertEquals(rc, 1);
 371 
 372         Assert.assertTrue(Message.CONTAINS_DIFFERENT_VERSION.match(
 373             new String(errbytes.toByteArray()),
 374             "META-INF/versions/9/module-info.class"));
 375 
 376     }
 377 
 378     // versioned mmr without root module-info.class
 379     @Test
 380     public void test7() throws IOException {
 381         // create a directory for this tests special files
 382         Files.createDirectory(Paths.get("test7"));
 383         Files.createDirectory(Paths.get("test7-v9"));
 384         Files.createDirectory(Paths.get("test7-v10"));
 385 
 386         // compile the classes directory
 387         Path src = testsrc.resolve("src").resolve("classes");
 388         Path dst = Paths.get("test7");
 389         javac(src, dst);
 390 
 391         // move module-info.class to v9 later use
 392         Files.copy(Paths.get("module-info.class"),
 393                    Paths.get("test7-v9", "module-info.class"));
 394 
 395         Files.copy(Paths.get("test7-v9", "module-info.class"),
 396                    Paths.get("test7-v10", "module-info.class"));
 397 
 398         int rc = jar("--create --file mmr.jar --main-class=foo.main -C test7 . --release 9 -C test7-v9 . --release 10 -C test7-v10 .");
 399 
 400 System.out.println("-----------------------");
 401 System.out.println( new String(errbytes.toByteArray()));
 402 
 403 
 404         Assert.assertEquals(rc, 0);
 405 
 406 
 407         jar("-tf mmr.jar");
 408 
 409 System.out.println("-----------------------");
 410 System.out.println( new String(outbytes.toByteArray()));
 411 
 412         Optional<String> exp = Optional.of("foo.main");
 413         try (ZipFile zf = new ZipFile("mmr.jar")) {
 414             Assert.assertTrue(zf.getEntry("module-info.class") == null);
 415 
 416             ModuleDescriptor md = ModuleDescriptor.read(
 417                 zf.getInputStream(zf.getEntry("META-INF/versions/9/module-info.class")));
 418             Assert.assertEquals(md.mainClass(), exp);
 419 
 420             md = ModuleDescriptor.read(
 421                 zf.getInputStream(zf.getEntry("META-INF/versions/10/module-info.class")));
 422             Assert.assertEquals(md.mainClass(), exp);
 423         }
 424     }
 425 
 426     private static Set<String> lines(ByteArrayOutputStream baos) {
 427         String s = new String(baos.toByteArray());
 428         return Arrays.stream(s.split("\\R"))
 429                      .map(l -> l.trim())
 430                      .filter(l -> l.length() > 0)
 431                      .collect(Collectors.toSet());
 432     }




 314     }
 315 
 316     // root and versioned module-info entries have different main-class, version
 317     // attributes
 318     @Test
 319     public void test6() throws IOException {
 320         // create a directory for this tests special files
 321         Files.createDirectory(Paths.get("test6"));
 322         Files.createDirectory(Paths.get("test6-v9"));
 323 
 324         // compile the classes directory
 325         Path src = testsrc.resolve("src").resolve("classes");
 326         Path dst = Paths.get("test6");
 327         javac(src, dst);
 328 
 329         byte[] mdBytes = Files.readAllBytes(Paths.get("module-info.class"));
 330 
 331         ModuleInfoExtender mie = ModuleInfoExtender.newExtender(
 332             new ByteArrayInputStream(mdBytes));
 333 
 334         mie.mainClass("p.Main");
 335         mie.version(Version.parse("1.0"));
 336 
 337         ByteArrayOutputStream baos = new ByteArrayOutputStream();
 338         mie.write(baos);
 339         Files.write(Paths.get("test6", "module-info.class"), baos.toByteArray());
 340         Files.write(Paths.get("test6-v9", "module-info.class"), baos.toByteArray());
 341 
 342         int rc = jar("--create --file mmr.jar -C test6 . --release 9 -C test6-v9 .");
 343         Assert.assertEquals(rc, 0);
 344 
 345 
 346         // different main-class
 347         mie = ModuleInfoExtender.newExtender(new ByteArrayInputStream(mdBytes));
 348         mie.mainClass("p.Main2");
 349         mie.version(Version.parse("1.0"));
 350         baos.reset();
 351         mie.write(baos);
 352         Files.write(Paths.get("test6-v9", "module-info.class"), baos.toByteArray());
 353 
 354         rc = jar("--create --file mmr.jar -C test6 . --release 9 -C test6-v9 .");
 355         Assert.assertEquals(rc, 1);
 356 
 357         Assert.assertTrue(Message.CONTAINS_DIFFERENT_MAINCLASS.match(
 358             new String(errbytes.toByteArray()),
 359             "META-INF/versions/9/module-info.class"));
 360 
 361         // different version
 362         mie = ModuleInfoExtender.newExtender(new ByteArrayInputStream(mdBytes));
 363         mie.mainClass("p.Main");
 364         mie.version(Version.parse("2.0"));
 365         baos.reset();
 366         mie.write(baos);
 367         Files.write(Paths.get("test6-v9", "module-info.class"), baos.toByteArray());
 368 
 369         rc = jar("--create --file mmr.jar -C test6 . --release 9 -C test6-v9 .");
 370         Assert.assertEquals(rc, 1);
 371 
 372         Assert.assertTrue(Message.CONTAINS_DIFFERENT_VERSION.match(
 373             new String(errbytes.toByteArray()),
 374             "META-INF/versions/9/module-info.class"));
 375 
 376     }
 377 
 378     // versioned mmr without root module-info.class
 379     @Test
 380     public void test7() throws IOException {
 381         // create a directory for this tests special files
 382         Files.createDirectory(Paths.get("test7"));
 383         Files.createDirectory(Paths.get("test7-v9"));
 384         Files.createDirectory(Paths.get("test7-v10"));
 385 
 386         // compile the classes directory
 387         Path src = testsrc.resolve("src").resolve("classes");
 388         Path dst = Paths.get("test7");
 389         javac(src, dst);
 390 
 391         // move module-info.class to v9 later use
 392         Files.copy(Paths.get("module-info.class"),
 393                    Paths.get("test7-v9", "module-info.class"));
 394 
 395         Files.copy(Paths.get("test7-v9", "module-info.class"),
 396                    Paths.get("test7-v10", "module-info.class"));
 397 
 398         int rc = jar("--create --file mmr.jar --main-class=p.Main -C test7 . --release 9 -C test7-v9 . --release 10 -C test7-v10 .");
 399 
 400 System.out.println("-----------------------");
 401 System.out.println( new String(errbytes.toByteArray()));
 402 
 403 
 404         Assert.assertEquals(rc, 0);
 405 
 406 
 407         jar("-tf mmr.jar");
 408 
 409 System.out.println("-----------------------");
 410 System.out.println( new String(outbytes.toByteArray()));
 411 
 412         Optional<String> exp = Optional.of("p.Main");
 413         try (ZipFile zf = new ZipFile("mmr.jar")) {
 414             Assert.assertTrue(zf.getEntry("module-info.class") == null);
 415 
 416             ModuleDescriptor md = ModuleDescriptor.read(
 417                 zf.getInputStream(zf.getEntry("META-INF/versions/9/module-info.class")));
 418             Assert.assertEquals(md.mainClass(), exp);
 419 
 420             md = ModuleDescriptor.read(
 421                 zf.getInputStream(zf.getEntry("META-INF/versions/10/module-info.class")));
 422             Assert.assertEquals(md.mainClass(), exp);
 423         }
 424     }
 425 
 426     private static Set<String> lines(ByteArrayOutputStream baos) {
 427         String s = new String(baos.toByteArray());
 428         return Arrays.stream(s.split("\\R"))
 429                      .map(l -> l.trim())
 430                      .filter(l -> l.length() > 0)
 431                      .collect(Collectors.toSet());
 432     }


< prev index next >