test/tools/jmod/JmodTest.java
Print this page
rev 16200 : 8166568: jmod tool needs extract option
8169492: jdk.internal.jmod.JmodFile.JMOD_MAGIC_NUMBER is a mutable array
Reviewed-by:
@@ -133,10 +133,33 @@
assertContains(r.output, CLASSES_PREFIX + "jdk/test/foo/resources/foo.properties");
});
}
@Test
+ public void testExtract() throws IOException {
+ Path cp = EXPLODED_DIR.resolve("foo").resolve("classes");
+ jmod("create",
+ "--class-path", cp.toString(),
+ MODS_DIR.resolve("fooExtract.jmod").toString())
+ .assertSuccess();
+
+ jmod("extract",
+ MODS_DIR.resolve("fooExtract.jmod").toString())
+ .assertSuccess()
+ .resultChecker(r -> {
+ // module-info should exist, but jmod will have added its Packages attr.
+ assertTrue(Files.exists(Paths.get("classes/module-info.class")));
+ assertSameContent(cp.resolve("jdk/test/foo/Foo.class"),
+ Paths.get("classes/jdk/test/foo/Foo.class"));
+ assertSameContent(cp.resolve("jdk/test/foo/internal/Message.class"),
+ Paths.get("classes/jdk/test/foo/internal/Message.class"));
+ assertSameContent(cp.resolve("jdk/test/foo/resources/foo.properties"),
+ Paths.get("classes/jdk/test/foo/resources/foo.properties"));
+ });
+ }
+
+ @Test
public void testMainClass() throws IOException {
Path jmod = MODS_DIR.resolve("fooMainClass.jmod");
FileUtils.deleteFileIfExistsWithRetry(jmod);
String cp = EXPLODED_DIR.resolve("foo").resolve("classes").toString();
@@ -530,10 +553,20 @@
sb.append("\t" + s + "\n");
assertTrue(false, "Jmod content check failed.\n" + sb.toString());
}
}
+ static void assertSameContent(Path p1, Path p2) {
+ try {
+ byte[] ba1 = Files.readAllBytes(p1);
+ byte[] ba2 = Files.readAllBytes(p2);
+ assertEquals(ba1, ba2);
+ } catch (IOException x) {
+ throw new UncheckedIOException(x);
+ }
+ }
+
static JmodResult jmod(String... args) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
System.out.println("jmod " + Arrays.asList(args));
int ec = JMOD_TOOL.run(ps, ps, args);