From 0204cdff19ce531457ebffb633cb439564719bc4 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 2 Aug 2024 18:27:03 -0700 Subject: [PATCH] Added functional tests for jlink and jmod --- classes/META-INF/MANIFEST.MF | 3 + classes/dev/mccue/tree/Tree.class | Bin 0 -> 604 bytes classes/module-info.class | Bin 0 -> 237 bytes .../bld/operations/TestJlinkOperation.java | 28 +++++++- .../bld/operations/TestJmodOperation.java | 61 +++++++++++++++++- .../bld/operations/TestJpackageOperation.java | 10 +-- src/test/resources/jlink/.gitignore | 2 + src/test/resources/jlink/Makefile | 40 ++++++++++++ .../jlink/dev.mccue.apple/dev.mccue.apple.iml | 11 ++++ .../jlink/dev.mccue.apple/legal/LICENSE | 1 + .../res/dev/mccue/apple/color.txt | 1 + .../src/dev/mccue/apple/Apple.java | 20 ++++++ .../dev.mccue.apple/src/module-info.java | 3 + .../jlink/dev.mccue.tree/dev.mccue.tree.iml | 12 ++++ .../src/dev/mccue/tree/Tree.java | 15 +++++ .../jlink/dev.mccue.tree/src/module-info.java | 3 + .../resources/{ => jlink}/options_verbose.txt | 0 .../resources/{ => jlink}/options_version.txt | 0 18 files changed, 200 insertions(+), 10 deletions(-) create mode 100644 classes/META-INF/MANIFEST.MF create mode 100644 classes/dev/mccue/tree/Tree.class create mode 100644 classes/module-info.class create mode 100644 src/test/resources/jlink/.gitignore create mode 100644 src/test/resources/jlink/Makefile create mode 100644 src/test/resources/jlink/dev.mccue.apple/dev.mccue.apple.iml create mode 100644 src/test/resources/jlink/dev.mccue.apple/legal/LICENSE create mode 100644 src/test/resources/jlink/dev.mccue.apple/res/dev/mccue/apple/color.txt create mode 100644 src/test/resources/jlink/dev.mccue.apple/src/dev/mccue/apple/Apple.java create mode 100644 src/test/resources/jlink/dev.mccue.apple/src/module-info.java create mode 100644 src/test/resources/jlink/dev.mccue.tree/dev.mccue.tree.iml create mode 100644 src/test/resources/jlink/dev.mccue.tree/src/dev/mccue/tree/Tree.java create mode 100644 src/test/resources/jlink/dev.mccue.tree/src/module-info.java rename src/test/resources/{ => jlink}/options_verbose.txt (100%) rename src/test/resources/{ => jlink}/options_version.txt (100%) 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 0000000000000000000000000000000000000000..77d34f1c431dad0fc0b405e1fcb2182b783158d2 GIT binary patch literal 604 zcmZuuTT22#7(L^v?qNjBmWMnV0?F#*?>Omo)AJC7A zzLCJ9Ue3&%Ip6utH}moN_730-2L=+*IFcq(NHgU6_RzLm+wWP|-M(-lhV-fQWpvJ< z)#@FN3`6Nb3@y)bVqw{Xfh(*Fg$6h@9a)$hb0+4o@XN0K^cV?`T!NTPORZ@m8CW-= z^rLnZ3fpUNEHV^k?!*e~mcT#`nu4N<63PsESJ+`Qj3s%k)atES&5uM46=~VT3RW3X zPT&S1Ly^?8A*r$Sdn8;(g=53SCaM(SpKuI(prX1yrLX<9sCO8Wm%)QzSZGOKT*Y2j zgtvCrB_`?FlIqH}`~M4#b`Xb-Xi6p4)x<|C0*-0q1bq~sfkr@@aEneAS{bdW!!g(k zZ5Xx*)isfX^hktCS|tO;W+vcwW9ZMc|EcECv4h=j^~tmmP<(|kL5>RYBNRqh8ewhL XCyyk#WMROhfLRpiw;A?`OJM&CXwP~$ literal 0 HcmV?d00001 diff --git a/classes/module-info.class b/classes/module-info.class new file mode 100644 index 0000000000000000000000000000000000000000..647decb36d5a02653defcfd61f2eb33ecfae1f8a GIT binary patch literal 237 zcmYk0F%E)25Jmq0ihu%%mR`X{Y^-eUOiVn%x~v8TAt2P8%fbVADB}V#I>pSNH$RjA zdOw~3Ht-2fnnhJ27xC?snIMAy2iS$zoZv>XW~mUBWcNbKDU6;49Sd4E!;oOLc6Q{Y zvWy63xMoWht_a@m0nhV9ogIRG$f`ofZJbELaM#69e|xd#;>ypmYyeF~?Muf*2@N`2 WHRl*~ScBC7HpbodZJrVaREQ7YS}~Xa literal 0 HcmV?d00001 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