2
0
Fork 0
mirror of https://github.com/ethauvin/bld.git synced 2025-04-25 00:07:12 -07:00
bld/src/test/java/rife/bld/operations/TestJmodOperation.java

327 lines
12 KiB
Java

/*
* Copyright 2024 Erik C. Thauvin (https://erik.thauvin.net/)
* Licensed under the Apache License, Version 2.0 (the "License")
*/
package rife.bld.operations;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import rife.bld.operations.exceptions.ExitStatusException;
import rife.tools.FileUtils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.file.Files;
import java.nio.file.Path;
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 {
private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream();
private final PrintStream stdout = System.out;
@AfterEach
public void tearDown() {
System.setOut(stdout);
}
@Test
void testArguments() {
var args = new HashMap<String, String>();
args.put("--class-path", "classpath");
args.put("--cmds", "cmds");
args.put("--config", "config");
args.put("--date", "1997-08-29T09:14:00Z");
args.put("--dir", "dir");
args.put("--do-not-resolve-by-default", null);
args.put("--dry-run", null);
args.put("--exclude", "glob:glob,regex:regex");
args.put("--hash-modules", "regex");
args.put("--header-files", "header-files");
args.put("--legal-notices", "legal-notices");
args.put("--libs", "libs");
args.put("--main-class", "main-class");
args.put("--man-pages", "man-pages");
args.put("--module-path", "module-path");
args.put("--module-version", "module-version");
args.put("--target-platform", "target-platform");
args.put("--warn-if-resolved", "deprecated");
var options = new JmodOptions()
.classpath(args.get("--class-path"))
.cmds(args.get("--cmds"))
.config(args.get("--config"))
.date(ZonedDateTime.of(1997, 8, 29, 2, 14, 0, 1, ZoneId.of("America/Los_Angeles")))
.dir(args.get("--dir"))
.doNotResolveByDefault(true)
.dryRun(true)
.exclude(new JmodOptions.FilePattern(JmodOptions.FilePatternType.GLOB, "glob"),
new JmodOptions.FilePattern(JmodOptions.FilePatternType.REGEX, "regex"))
.hashModules(args.get("--hash-modules"))
.headerFiles(args.get("--header-files"))
.legalNotices(args.get("--legal-notices"))
.libs(args.get("--libs"))
.mainClass(args.get("--main-class"))
.manPages(args.get("--man-pages"))
.modulePath(args.get("--module-path"))
.moduleVersion(args.get("--module-version"))
.targetPlatform(args.get("--target-platform"))
.warnIfResolved(JmodOptions.ResolvedReason.DEPRECATED);
assertEquals(options.size(), args.size(), "Wrong number of arguments");
for (var arg : args.entrySet()) {
assertTrue(options.containsKey(arg.getKey()), arg.getValue() + " not found");
assertEquals(arg.getValue(), options.get(arg.getKey()), arg.getKey());
}
}
@Test
void testCmdFiles() {
System.setOut(new PrintStream(outputStreamCaptor));
var jmod = new JmodOperation().cmdFiles(new File("src/test/resources/jlink/options_version.txt"));
assertDoesNotThrow(jmod::execute);
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
}
@Test
void testCmdFilesCreate() throws IOException {
var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile();
try {
var mod = new File(tmpdir, "dev.mccue.tree.jmod");
var jmod = new JmodOperation()
.cmdFiles("src/test/resources/jlink/options_jmod.txt")
.jmodFile(mod);
assertDoesNotThrow(jmod::execute);
assertTrue(mod.exists(), "mod does not exist");
} finally {
FileUtils.deleteDirectory(tmpdir);
}
}
@Test
void testCmdFilesPath() {
System.setOut(new PrintStream(outputStreamCaptor));
var jmod = new JmodOperation().cmdFiles(Path.of("src/test/resources/jlink/options_version.txt"));
assertDoesNotThrow(jmod::execute);
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
}
@Test
void testCmds() {
var options = new JmodOptions().cmds("foo");
assertEquals("foo", options.get("--cmds"));
var bar = Path.of("bar");
options = options.cmds(bar);
assertEquals(bar.toFile().getAbsolutePath(), options.get("--cmds"));
var foo = new File("foo");
options.cmds(foo);
assertEquals(foo.getAbsolutePath(), options.get("--cmds"));
}
@Test
void testConfig() {
var options = new JmodOptions().config("foo");
assertEquals("foo", options.get("--config"));
var bar = Path.of("bar");
options = options.config(bar);
assertEquals(bar.toFile().getAbsolutePath(), options.get("--config"));
var foo = new File("foo");
options = options.config(foo);
assertEquals(foo.getAbsolutePath(), options.get("--config"));
}
@Test
void testCreate() throws IOException {
var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile();
try {
var mod = new File(tmpdir, "dev.mccue.tree.jmod");
var options = new JmodOptions()
.date(ZonedDateTime.now())
.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)
.jmodOptions(options);
assertDoesNotThrow(jmod::execute);
assertTrue(mod.exists(), "mod does not exist");
} finally {
FileUtils.deleteDirectory(tmpdir);
}
}
@Test
void testDir() {
var options = new JmodOptions().dir("foo");
assertEquals("foo", options.get("--dir"));
var bar = Path.of("bar");
options = options.dir(bar);
assertEquals(bar.toFile().getAbsolutePath(), options.get("--dir"));
var foo = new File("foo");
options = options.dir(foo);
assertEquals(foo.getAbsolutePath(), options.get("--dir"));
}
@Test
void testExecute() throws IOException {
var tmpdir = Files.createTempDirectory("bld-jmod-test").toFile();
try {
var mod = new File(tmpdir, "dev.mccue.tree.jmod");
var options = new JmodOptions().classpath("src/test/resources/jlink/build/jar/dev.mccue.tree.jar");
if (Runtime.version().version().get(0) >= 20) {
options.compress(ZipCompression.ZIP_9);
}
var jmod = new JmodOperation()
.operationMode(OperationMode.CREATE)
.jmodFile(mod)
.jmodOptions(options);
assertDoesNotThrow(jmod::execute);
assertTrue(mod.exists(), "mod does not exist");
jmod.jmodOptions().clear();
System.setOut(new PrintStream(outputStreamCaptor));
jmod.operationMode(OperationMode.DESCRIBE);
assertDoesNotThrow(jmod::execute, "describe mod failed");
assertTrue(outputStreamCaptor.toString().contains("dev.mccue.tree"),
"missing dev.mccue.tee in:\n" + outputStreamCaptor);
jmod.operationMode(OperationMode.LIST);
assertDoesNotThrow(jmod::execute, "list mod failed");
assertTrue(outputStreamCaptor.toString().contains("module-info.class"),
"missing module-info.class in:\n" + outputStreamCaptor);
} finally {
FileUtils.deleteDirectory(tmpdir);
}
}
@Test
void testHeaderFiles() {
var options = new JmodOptions().headerFiles("foo");
assertEquals("foo", options.get("--header-files"));
var bar = Path.of("bar");
options = options.headerFiles(bar);
assertEquals(bar.toFile().getAbsolutePath(), options.get("--header-files"));
var foo = new File("foo");
options.headerFiles(foo);
assertEquals(foo.getAbsolutePath(), options.get("--header-files"));
}
@Test
void testHelp() {
var jmod = new JmodOperation().toolArgs("--help-extra");
assertDoesNotThrow(jmod::execute);
assertTrue(jmod.toolArgs().isEmpty(), "args not empty");
}
@Test
void testJmodFile() {
var op = new JmodOperation().jmodFile("foo");
assertEquals("foo", op.jmodFile());
var bar = Path.of("bar");
op = op.jmodFile(bar);
assertEquals(bar.toFile().getAbsolutePath(), op.jmodFile());
var foo = new File("foo");
op.jmodFile(foo);
assertEquals(foo.getAbsolutePath(), op.jmodFile());
}
@Test
void testLegalNotices() {
var options = new JmodOptions().legalNotices("foo");
assertEquals("foo", options.get("--legal-notices"));
var bar = Path.of("bar");
options = options.legalNotices(bar);
assertEquals(bar.toFile().getAbsolutePath(), options.get("--legal-notices"));
var foo = new File("foo");
options.legalNotices(foo);
assertEquals(foo.getAbsolutePath(), options.get("--legal-notices"));
}
@Test
void testLibs() {
var options = new JmodOptions().libs("foo");
assertEquals("foo", options.get("--libs"));
var bar = Path.of("bar");
options = options.libs(bar);
assertEquals(bar.toFile().getAbsolutePath(), options.get("--libs"));
var foo = new File("foo");
options.libs(foo);
assertEquals(foo.getAbsolutePath(), options.get("--libs"));
}
@Test
void testManPages() {
var options = new JmodOptions().manPages("foo");
assertEquals("foo", options.get("--man-pages"));
var bar = Path.of("bar");
options = options.manPages(bar);
assertEquals(bar.toFile().getAbsolutePath(), options.get("--man-pages"));
var foo = new File("foo");
options.manPages(foo);
assertEquals(foo.getAbsolutePath(), options.get("--man-pages"));
}
@Test
void testModulePath() {
var options = new JmodOptions().modulePath("foo");
assertEquals("foo", options.get("--module-path"));
var bar = Path.of("bar");
options = options.modulePath(bar);
assertEquals(bar.toFile().getAbsolutePath(), options.get("--module-path"));
var foo = new File("foo");
options = options.modulePath(foo);
assertEquals(foo.getAbsolutePath(), options.get("--module-path"));
}
@Test
void testNoArguments() {
var jmod = new JmodOperation();
assertTrue(jmod.cmdFiles().isEmpty(), "file options not empty");
assertTrue(jmod.jmodOptions().isEmpty(), "jmod options not empty");
assertThrows(ExitStatusException.class, jmod::execute);
}
@Test
void testVersion() {
System.setOut(new PrintStream(outputStreamCaptor));
var jmod = new JmodOperation().toolArgs("--version");
assertDoesNotThrow(jmod::execute);
var out = outputStreamCaptor.toString();
assertTrue(out.matches("[\\d.]+[\\r\\n]+"), out);
}
}