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,142 **** --- 133,165 ---- 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,539 **** --- 553,572 ---- 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);