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 } |