diff --git a/classes/META-INF/MANIFEST.MF b/classes/META-INF/MANIFEST.MF new file mode 100644 index 0000000..4512657 --- /dev/null +++ b/classes/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Created-By: 17.0.12 (Eclipse Adoptium) + diff --git a/classes/dev/mccue/tree/Tree.class b/classes/dev/mccue/tree/Tree.class new file mode 100644 index 0000000..77d34f1 Binary files /dev/null and b/classes/dev/mccue/tree/Tree.class differ diff --git a/classes/module-info.class b/classes/module-info.class new file mode 100644 index 0000000..647decb Binary files /dev/null and b/classes/module-info.class differ diff --git a/src/test/java/rife/bld/operations/TestJlinkOperation.java b/src/test/java/rife/bld/operations/TestJlinkOperation.java index 7845508..c47f02f 100644 --- a/src/test/java/rife/bld/operations/TestJlinkOperation.java +++ b/src/test/java/rife/bld/operations/TestJlinkOperation.java @@ -7,9 +7,12 @@ package rife.bld.operations; import org.junit.jupiter.api.Test; import rife.bld.operations.exceptions.ExitStatusException; +import rife.tools.FileUtils; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.HashMap; -import java.util.List; import static org.junit.jupiter.api.Assertions.*; @@ -68,8 +71,27 @@ public class TestJlinkOperation { .disablePlugin("system-modules") .listPlugins(); assertDoesNotThrow(jlink::execute); + } - assertTrue(jlink.toolArgs().containsAll(List.of("vm", "system-modules"))); + @Test + void testExecute() throws IOException { + var tmpdir = Files.createTempDirectory("bld-jlink-test").toFile(); + tmpdir.deleteOnExit(); + + var output = new File(tmpdir, "jlink"); + output.deleteOnExit(); + + var options = new JlinkOptions() + .modulePath("src/test/resources/jlink/build/jmod") + .addModules("dev.mccue.tree") + .launcher("tree", "dev.mccue.tree", "dev.mccue.tree.Tree") + .output(output.getAbsolutePath()); + var jlink = new JlinkOperation().jlinkOptions(options); + + assertDoesNotThrow(jlink::execute); + assertTrue(output.exists(), "Output dir does not exist"); + + FileUtils.deleteDirectory(tmpdir); } @Test @@ -88,7 +110,7 @@ public class TestJlinkOperation { @Test void testOptions() { - var jlink = new JlinkOperation().options("src/test/resources/options_verbose.txt"); + var jlink = new JlinkOperation().options("src/test/resources/jlink/options_verbose.txt"); assertDoesNotThrow(jlink::execute); } diff --git a/src/test/java/rife/bld/operations/TestJmodOperation.java b/src/test/java/rife/bld/operations/TestJmodOperation.java index 1dbbfaa..aa4550b 100644 --- a/src/test/java/rife/bld/operations/TestJmodOperation.java +++ b/src/test/java/rife/bld/operations/TestJmodOperation.java @@ -7,12 +7,17 @@ package rife.bld.operations; import org.junit.jupiter.api.Test; import rife.bld.operations.exceptions.ExitStatusException; +import rife.tools.FileUtils; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.HashMap; import static org.junit.jupiter.api.Assertions.*; +import static rife.bld.operations.JmodOperation.OperationMode; public class TestJmodOperation { @Test @@ -68,10 +73,60 @@ public class TestJmodOperation { } } + @Test + void testCreate() throws IOException { + var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile(); + tmpdir.deleteOnExit(); + + var mod = new File(tmpdir, "dev.mccue.tree.jmod"); + mod.deleteOnExit(); + + var options = new JmodOptions() + .legalNotices("src/test/resources/jlink/dev.mccue.apple/legal") + .classpath("src/test/resources/jlink/build/jar/dev.mccue.apple.jar"); + var jmod = new JmodOperation() + .operationMode(OperationMode.CREATE) + .jmodFile(mod.getAbsolutePath()) + .jmodOptions(options); + + assertDoesNotThrow(jmod::execute); + assertTrue(mod.exists(), "mod does not exist"); + + FileUtils.deleteDirectory(tmpdir); + } + + @Test + void testExecute() throws IOException { + var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile(); + tmpdir.deleteOnExit(); + + var mod = new File(tmpdir, "dev.mccue.tree.jmod"); + mod.deleteOnExit(); + + var options = new JmodOptions().classpath("src/test/resources/jlink/build/jar/dev.mccue.tree.jar"); + var jmod = new JmodOperation() + .operationMode(OperationMode.CREATE) + .jmodFile(mod.getAbsolutePath()) + .jmodOptions(options); + + assertDoesNotThrow(jmod::execute); + assertTrue(mod.exists(), "mod does not exist"); + + jmod.jmodOptions().clear(); + + jmod.operationMode(OperationMode.DESCRIBE); + assertDoesNotThrow(jmod::execute, "describe mod failed"); + + jmod.operationMode(OperationMode.LIST); + assertDoesNotThrow(jmod::execute, "list mod failed"); + + FileUtils.deleteDirectory(tmpdir); + } + @Test void testHelp() { var jmod = new JmodOperation() - .operationMode(JmodOperation.OperationMode.HASH) + .operationMode(OperationMode.HASH) .jmodFile("foo") .addArgs("--help-extra"); assertDoesNotThrow(jmod::execute); @@ -87,14 +142,14 @@ public class TestJmodOperation { @Test void testOptions() { - var jpackage = new JpackageOperation().options("src/test/resources/options_version.txt"); + var jpackage = new JpackageOperation().options("src/test/resources/jlink/options_version.txt"); assertDoesNotThrow(jpackage::execute); } @Test void testVersion() { var jmod = new JmodOperation() - .operationMode(JmodOperation.OperationMode.DESCRIBE) + .operationMode(OperationMode.DESCRIBE) .jmodFile("foo") .addArgs("--version"); assertDoesNotThrow(jmod::execute); diff --git a/src/test/java/rife/bld/operations/TestJpackageOperation.java b/src/test/java/rife/bld/operations/TestJpackageOperation.java index 8a1178b..4c32c01 100644 --- a/src/test/java/rife/bld/operations/TestJpackageOperation.java +++ b/src/test/java/rife/bld/operations/TestJpackageOperation.java @@ -13,6 +13,8 @@ import java.nio.file.Files; import java.util.HashMap; import static org.junit.jupiter.api.Assertions.*; +import static rife.bld.operations.JpackageOptions.Launcher; +import static rife.bld.operations.JpackageOptions.PackageType; public class TestJpackageOperation { @@ -82,7 +84,7 @@ public class TestJpackageOperation { var options = new JpackageOptions() .aboutUrl(args.get("--about-url")) - .addLauncher(new JpackageOptions.Launcher("name", "path")) + .addLauncher(new Launcher("name", "path")) .addModules(args.get("--add-modules").split(",")) .appContent(args.get("--app-content").split(",")) .appImage(args.get("--app-image")) @@ -128,7 +130,7 @@ public class TestJpackageOperation { .runtimeImage(args.get("--runtime-image")) .stripDebug(true) .temp(args.get("--temp")) - .type(JpackageOptions.PackageType.EXE) + .type(PackageType.EXE) .vendor(args.get("--vendor")) .verbose(true) .winConsole(true) @@ -166,7 +168,7 @@ public class TestJpackageOperation { var os = System.getProperty("os.version"); if (os.endsWith("MANJARO")) { - options.type(JpackageOptions.PackageType.DEB); + options.type(PackageType.DEB); } var jpackage = new JpackageOperation().jpackageOptions(options); @@ -197,7 +199,7 @@ public class TestJpackageOperation { @Test void testOptions() { - var jpackage = new JpackageOperation().options("src/test/resources/options_verbose.txt"); + var jpackage = new JpackageOperation().options("src/test/resources/jlink/options_verbose.txt"); assertDoesNotThrow(jpackage::execute); } diff --git a/src/test/resources/jlink/.gitignore b/src/test/resources/jlink/.gitignore new file mode 100644 index 0000000..edea9d9 --- /dev/null +++ b/src/test/resources/jlink/.gitignore @@ -0,0 +1,2 @@ +build/javac +build/jar \ No newline at end of file diff --git a/src/test/resources/jlink/Makefile b/src/test/resources/jlink/Makefile new file mode 100644 index 0000000..c7f0557 --- /dev/null +++ b/src/test/resources/jlink/Makefile @@ -0,0 +1,40 @@ +.PHONY: clean +clean: + rm -rf build + +.PHONY: compile +compile: clean + javac -d build/javac --module-source-path "./*/src" --module dev.mccue.tree,dev.mccue.apple + +.PHONY: package +package: compile + mkdir -p build/jar + + jar --create --file build/jar/dev.mccue.apple.jar \ + -C build/javac/dev.mccue.apple . \ + -C dev.mccue.apple/res . + jar --create --file build/jar/dev.mccue.tree.jar \ + -C build/javac/dev.mccue.tree . + +.PHONY: link +link: package + mkdir -p build/jmod + + jmod create \ + --legal-notices dev.mccue.apple/legal \ + --class-path build/jar/dev.mccue.apple.jar \ + build/jmod/dev.mccue.apple.jmod + + jmod create \ + --class-path build/jar/dev.mccue.tree.jar \ + build/jmod/dev.mccue.tree.jmod + + jlink \ + --module-path build/jmod \ + --add-modules dev.mccue.tree \ + --launcher tree=dev.mccue.tree/dev.mccue.tree.Tree \ + --output build/jlink + +.PHONY: test +test: link + ./build/jlink/bin/tree diff --git a/src/test/resources/jlink/dev.mccue.apple/dev.mccue.apple.iml b/src/test/resources/jlink/dev.mccue.apple/dev.mccue.apple.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/src/test/resources/jlink/dev.mccue.apple/dev.mccue.apple.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/jlink/dev.mccue.apple/legal/LICENSE b/src/test/resources/jlink/dev.mccue.apple/legal/LICENSE new file mode 100644 index 0000000..6a332dd --- /dev/null +++ b/src/test/resources/jlink/dev.mccue.apple/legal/LICENSE @@ -0,0 +1 @@ +Apples are GOD'S creation. You have no right to them. \ No newline at end of file diff --git a/src/test/resources/jlink/dev.mccue.apple/res/dev/mccue/apple/color.txt b/src/test/resources/jlink/dev.mccue.apple/res/dev/mccue/apple/color.txt new file mode 100644 index 0000000..46f29e8 --- /dev/null +++ b/src/test/resources/jlink/dev.mccue.apple/res/dev/mccue/apple/color.txt @@ -0,0 +1 @@ +red \ No newline at end of file diff --git a/src/test/resources/jlink/dev.mccue.apple/src/dev/mccue/apple/Apple.java b/src/test/resources/jlink/dev.mccue.apple/src/dev/mccue/apple/Apple.java new file mode 100644 index 0000000..8afbc8b --- /dev/null +++ b/src/test/resources/jlink/dev.mccue.apple/src/dev/mccue/apple/Apple.java @@ -0,0 +1,20 @@ +package dev.mccue.apple; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.Objects; + +public final class Apple { + public String color() { + try { + return new String( + Objects.requireNonNull( + Apple.class.getResourceAsStream("/dev/mccue/apple/color.txt") + ).readAllBytes() + ); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + + } +} diff --git a/src/test/resources/jlink/dev.mccue.apple/src/module-info.java b/src/test/resources/jlink/dev.mccue.apple/src/module-info.java new file mode 100644 index 0000000..1e2b64b --- /dev/null +++ b/src/test/resources/jlink/dev.mccue.apple/src/module-info.java @@ -0,0 +1,3 @@ +module dev.mccue.apple { + exports dev.mccue.apple; +} \ No newline at end of file diff --git a/src/test/resources/jlink/dev.mccue.tree/dev.mccue.tree.iml b/src/test/resources/jlink/dev.mccue.tree/dev.mccue.tree.iml new file mode 100644 index 0000000..3dcb8cc --- /dev/null +++ b/src/test/resources/jlink/dev.mccue.tree/dev.mccue.tree.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/jlink/dev.mccue.tree/src/dev/mccue/tree/Tree.java b/src/test/resources/jlink/dev.mccue.tree/src/dev/mccue/tree/Tree.java new file mode 100644 index 0000000..aa8ebe9 --- /dev/null +++ b/src/test/resources/jlink/dev.mccue.tree/src/dev/mccue/tree/Tree.java @@ -0,0 +1,15 @@ +package dev.mccue.tree; + +import dev.mccue.apple.Apple; + +public final class Tree { + public Apple bearFruit() { + return new Apple(); + } + + public static void main(String[] args) { + System.out.println( + new Tree().bearFruit().color() + ); + } +} diff --git a/src/test/resources/jlink/dev.mccue.tree/src/module-info.java b/src/test/resources/jlink/dev.mccue.tree/src/module-info.java new file mode 100644 index 0000000..e481ad5 --- /dev/null +++ b/src/test/resources/jlink/dev.mccue.tree/src/module-info.java @@ -0,0 +1,3 @@ +module dev.mccue.tree { + requires dev.mccue.apple; +} \ No newline at end of file diff --git a/src/test/resources/options_verbose.txt b/src/test/resources/jlink/options_verbose.txt similarity index 100% rename from src/test/resources/options_verbose.txt rename to src/test/resources/jlink/options_verbose.txt diff --git a/src/test/resources/options_version.txt b/src/test/resources/jlink/options_version.txt similarity index 100% rename from src/test/resources/options_version.txt rename to src/test/resources/jlink/options_version.txt