2
0
Fork 0
mirror of https://github.com/ethauvin/bld.git synced 2025-04-25 00:07:12 -07:00

Added functional tests for jlink and jmod

This commit is contained in:
Erik C. Thauvin 2024-08-02 18:27:03 -07:00
parent b94b23af56
commit 0204cdff19
Signed by: erik
GPG key ID: 776702A6A2DA330E
18 changed files with 200 additions and 10 deletions

View file

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Created-By: 17.0.12 (Eclipse Adoptium)

Binary file not shown.

BIN
classes/module-info.class Normal file

Binary file not shown.

View file

@ -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);
}

View file

@ -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);

View file

@ -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);
}

2
src/test/resources/jlink/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
build/javac
build/jar

View file

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

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View file

@ -0,0 +1 @@
Apples are GOD'S creation. You have no right to them.

View file

@ -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);
}
}
}

View file

@ -0,0 +1,3 @@
module dev.mccue.apple {
exports dev.mccue.apple;
}

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="dev.mccue.apple" />
</component>
</module>

View file

@ -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()
);
}
}

View file

@ -0,0 +1,3 @@
module dev.mccue.tree {
requires dev.mccue.apple;
}