< prev index next >
test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java
Print this page
@@ -27,45 +27,46 @@
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Set;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import jdk.jpackage.test.Functional.ThrowingConsumer;
import jdk.jpackage.test.Functional.ThrowingSupplier;
+import jdk.jpackage.test.PackageTest.PackageHandlers;
import org.xml.sax.SAXException;
public class MacHelper {
public static void withExplodedDmg(JPackageCommand cmd,
ThrowingConsumer<Path> consumer) {
cmd.verifyIsOfType(PackageType.MAC_DMG);
- var plist = readPList(new Executor()
- .setExecutable("/usr/bin/hdiutil")
+ // Explode DMG assuming this can require interaction, thus use `yes`.
+ var plist = readPList(Executor.of("sh", "-c",
+ String.join(" ", "yes", "|", "/usr/bin/hdiutil", "attach",
+ JPackageCommand.escapeAndJoin(
+ cmd.outputBundle().toString()), "-plist"))
.dumpOutput()
- .addArguments("attach", cmd.outputBundle().toString(), "-plist")
.executeAndGetOutput());
final Path mountPoint = Path.of(plist.queryValue("mount-point"));
try {
Path dmgImage = mountPoint.resolve(cmd.name() + ".app");
TKit.trace(String.format("Exploded [%s] in [%s] directory",
cmd.outputBundle(), dmgImage));
ThrowingConsumer.toConsumer(consumer).accept(dmgImage);
} finally {
- new Executor()
- .setExecutable("/usr/bin/hdiutil")
- .addArgument("detach").addArgument(mountPoint)
- .execute().assertExitCodeIsZero();
+ Executor.of("/usr/bin/hdiutil", "detach").addArgument(mountPoint).execute();
}
}
public static PListWrapper readPListFromAppImage(Path appImage) {
return readPList(appImage.resolve("Contents/Info.plist"));
@@ -80,12 +81,66 @@
public static PListWrapper readPList(List<String> lines) {
return readPList(lines.stream());
}
public static PListWrapper readPList(Stream<String> lines) {
- return ThrowingSupplier.toSupplier(() -> new PListWrapper(lines.collect(
- Collectors.joining()))).get();
+ return ThrowingSupplier.toSupplier(() -> new PListWrapper(lines
+ // Skip leading lines before xml declaration
+ .dropWhile(Pattern.compile("\\s?<\\?xml\\b.+\\?>").asPredicate().negate())
+ .collect(Collectors.joining()))).get();
+ }
+
+ static PackageHandlers createDmgPackageHandlers() {
+ PackageHandlers dmg = new PackageHandlers();
+
+ dmg.installHandler = cmd -> {
+ withExplodedDmg(cmd, dmgImage -> {
+ Executor.of("sudo", "cp", "-r")
+ .addArgument(dmgImage)
+ .addArgument("/Applications")
+ .execute();
+ });
+ };
+ dmg.unpackHandler = (cmd, destinationDir) -> {
+ Path[] unpackedFolder = new Path[1];
+ withExplodedDmg(cmd, dmgImage -> {
+ Executor.of("cp", "-r")
+ .addArgument(dmgImage)
+ .addArgument(destinationDir)
+ .execute();
+ unpackedFolder[0] = destinationDir.resolve(dmgImage.getFileName());
+ });
+ return unpackedFolder[0];
+ };
+ dmg.uninstallHandler = cmd -> {
+ cmd.verifyIsOfType(PackageType.MAC_DMG);
+ Executor.of("sudo", "rm", "-rf")
+ .addArgument(cmd.appInstallationDirectory())
+ .execute();
+ };
+
+ return dmg;
+ }
+
+ static PackageHandlers createPkgPackageHandlers() {
+ PackageHandlers pkg = new PackageHandlers();
+
+ pkg.installHandler = cmd -> {
+ cmd.verifyIsOfType(PackageType.MAC_PKG);
+ Executor.of("sudo", "/usr/sbin/installer", "-allowUntrusted", "-pkg")
+ .addArgument(cmd.outputBundle())
+ .addArguments("-target", "/")
+ .execute();
+ };
+ pkg.uninstallHandler = cmd -> {
+ cmd.verifyIsOfType(PackageType.MAC_PKG);
+ Executor.of("sudo", "rm", "-rf")
+ .addArgument(cmd.appInstallationDirectory())
+ .execute();
+ };
+
+ return pkg;
}
static String getBundleName(JPackageCommand cmd) {
cmd.verifyIsOfType(PackageType.MAC);
return String.format("%s-%s%s", getPackageName(cmd), cmd.version(),
< prev index next >