From a925461395dc1bc81b70aa49e8869a143d170f31 Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Wed, 22 Oct 2025 18:08:19 +0000 Subject: [PATCH] 8370442: Compilation error in jpackage EntitlementsTest test Reviewed-by: almatvee --- .../jdk/jpackage/test/AnnotationsTest.java | 14 +++ .../jdk/jpackage/test/JPackageCommand.java | 11 ++ .../helpers/jdk/jpackage/test/MacHelper.java | 11 ++ .../jpackage/macosx/EntitlementsTest.java | 116 +++++++++++------- 4 files changed, 109 insertions(+), 43 deletions(-) diff --git a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/AnnotationsTest.java b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/AnnotationsTest.java index e16b175ab8a..f88d1f81a34 100644 --- a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/AnnotationsTest.java +++ b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/AnnotationsTest.java @@ -95,6 +95,18 @@ public class AnnotationsTest extends JUnitAdapter { recordTestCase(a, b, other); } + enum Tack { + STARBOARD, + PORTSIDE; + } + + @Test + @Parameter({"STARBOARD"}) + @Parameter({"PORTSIDE", "STARBOARD"}) + public void testEnumVarArg(Tack ... cource) { + recordTestCase((Object[]) cource); + } + @Test @ParameterSupplier("dateSupplier") @ParameterSupplier("jdk.jpackage.test.AnnotationsTest.dateSupplier") @@ -118,6 +130,8 @@ public class AnnotationsTest extends JUnitAdapter { "().testVarArg2(-89, bar, [more, moore](length=2))", "().testVarArg2(-89, bar, [more](length=1))", "().testVarArg2(12, foo, [](length=0))", + "().testEnumVarArg(STARBOARD)", + "().testEnumVarArg(PORTSIDE, STARBOARD)", "().testDates(2018-05-05)", "().testDates(2018-07-11)", "().testDates(2034-05-05)", diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java index 22e75a57911..b3729093ad2 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java @@ -203,6 +203,17 @@ public class JPackageCommand extends CommandArguments { return addArguments(name, value.toString()); } + public JPackageCommand mutate(Consumer mutator) { + return mutate(List.of(mutator)); + } + + public JPackageCommand mutate(Iterable> mutators) { + for (var mutator : mutators) { + mutator.accept(this); + } + return this; + } + public boolean isImagePackageType() { return PackageType.IMAGE == getArgumentValue("--type", () -> null, PACKAGE_TYPES::get); diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java index a7a69ef0329..3900851f810 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java @@ -54,6 +54,7 @@ import java.util.Properties; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -370,6 +371,16 @@ public final class MacHelper { }).run(); } + public static Consumer useKeychain(MacSign.ResolvedKeychain keychain) { + return useKeychain(keychain.spec().keychain()); + } + + public static Consumer useKeychain(MacSign.Keychain keychain) { + return cmd -> { + useKeychain(cmd, keychain); + }; + } + public static JPackageCommand useKeychain(JPackageCommand cmd, MacSign.ResolvedKeychain keychain) { return useKeychain(cmd, keychain.spec().keychain()); } diff --git a/test/jdk/tools/jpackage/macosx/EntitlementsTest.java b/test/jdk/tools/jpackage/macosx/EntitlementsTest.java index 1d6d86118a6..aa5879e0c61 100644 --- a/test/jdk/tools/jpackage/macosx/EntitlementsTest.java +++ b/test/jdk/tools/jpackage/macosx/EntitlementsTest.java @@ -21,20 +21,26 @@ * questions. */ +import static jdk.jpackage.internal.util.PListWriter.writeBoolean; import static jdk.jpackage.internal.util.PListWriter.writeDict; import static jdk.jpackage.internal.util.PListWriter.writePList; -import static jdk.jpackage.internal.util.PListWriter.writeBoolean; import static jdk.jpackage.internal.util.XmlUtils.createXml; import static jdk.jpackage.internal.util.XmlUtils.toXmlConsumer; +import static jdk.jpackage.internal.util.function.ThrowingConsumer.toConsumer; import java.io.IOException; import java.nio.file.Path; -import java.util.Date; - -import jdk.jpackage.test.JPackageCommand; -import jdk.jpackage.test.TKit; -import jdk.jpackage.test.Annotations.Test; +import java.util.function.Consumer; +import java.util.stream.Stream; +import jdk.jpackage.internal.util.function.ThrowingConsumer; +import jdk.jpackage.test.AdditionalLauncher; import jdk.jpackage.test.Annotations.Parameter; +import jdk.jpackage.test.Annotations.Test; +import jdk.jpackage.test.JPackageCommand; +import jdk.jpackage.test.MacHelper; +import jdk.jpackage.test.MacHelper.SignKeyOption; +import jdk.jpackage.test.MacSign; +import jdk.jpackage.test.TKit; /* * Test generates signed app-image with custom entitlements file from the @@ -61,7 +67,7 @@ import jdk.jpackage.test.Annotations.Parameter; */ public class EntitlementsTest { - void createEntitlementsFile(Path file, boolean microphone) throws IOException { + private static void createEntitlementsFile(Path file, boolean microphone) throws IOException { createXml(file, xml -> { writePList(xml, toXmlConsumer(() -> { writeDict(xml, toXmlConsumer(() -> { @@ -77,47 +83,71 @@ public class EntitlementsTest { }); } - @Test - // ({"--mac-app-store", doMacEntitlements", "doResources"}) - @Parameter({"false", "true", "false"}) - @Parameter({"false", "false", "true"}) - @Parameter({"false", "true", "true"}) - @Parameter({"true", "true", "false"}) - @Parameter({"true", "false", "true"}) - @Parameter({"true", "true", "true"}) - public void test(boolean appStore, boolean doMacEntitlements, boolean doResources) throws Exception { - final Path macEntitlementsFile; - final Path resourcesDir; - - if (doMacEntitlements) { - macEntitlementsFile = TKit.createTempFile("EntitlementsTest.plist"); + public enum EntitlementsSource implements Consumer { + CMDLINE(cmd -> { + var macEntitlementsFile = TKit.createTempFile("foo.plist"); createEntitlementsFile(macEntitlementsFile, true); - } else { - macEntitlementsFile = null; + cmd.addArguments("--mac-entitlements", macEntitlementsFile); + }), + RESOURCE_DIR(cmd -> { + if (!cmd.hasArgument("--resource-dir")) { + cmd.setArgumentValue("--resource-dir", TKit.createTempDirectory("resources")); + } + + var resourcesDir = Path.of(cmd.getArgumentValue("--resource-dir")); + createEntitlementsFile(resourcesDir.resolve(cmd.name() + ".entitlements"), false); + }), + ; + + EntitlementsSource(ThrowingConsumer initializer) { + this.initializer = toConsumer(initializer); } - if (doResources) { - resourcesDir = TKit.createTempDirectory("resources"); - createEntitlementsFile(resourcesDir.resolve("EntitlementsTest.entitlements"), false); - } else { - resourcesDir = null; + @Override + public void accept(JPackageCommand cmd) { + initializer.accept(cmd); } - JPackageCommand cmd = JPackageCommand.helloAppImage() - .addArguments("--mac-sign", "--mac-signing-keychain", - SigningBase.getKeyChain(), "--mac-app-image-sign-identity", - SigningBase.getAppCert(SigningBase.CertIndex.ASCII_INDEX.value())); - if (appStore) { - cmd.addArguments("--mac-app-store"); - } - if (doMacEntitlements) { - cmd.addArguments("--mac-entitlements", - macEntitlementsFile.toAbsolutePath().toString()); - } - if (doResources) { - cmd.addArguments("--resource-dir", - resourcesDir.toAbsolutePath().toString()); - } + private final Consumer initializer; + } + + @Test + @Parameter({"CMDLINE"}) + @Parameter({"RESOURCE_DIR"}) + @Parameter({"CMDLINE", "RESOURCE_DIR"}) + public static void test(EntitlementsSource... entitlementsSources) { + MacSign.withKeychain(toConsumer(keychain -> { + test(keychain, Stream.of(entitlementsSources)); + }), SigningBase.StandardKeychain.MAIN.keychain()); + } + + @Test + @Parameter({"CMDLINE"}) + @Parameter({"RESOURCE_DIR"}) + @Parameter({"CMDLINE", "RESOURCE_DIR"}) + public static void testAppStore(EntitlementsSource... entitlementsSources) { + MacSign.withKeychain(toConsumer(keychain -> { + test(keychain, Stream.concat(Stream.of(cmd -> { + cmd.addArguments("--mac-app-store"); + // Ignore externally supplied runtime as it may have the "bin" + // directory that will cause jpackage to bail out. + cmd.ignoreDefaultRuntime(true); + }), Stream.of(entitlementsSources))); + }), SigningBase.StandardKeychain.MAIN.keychain()); + } + + private static void test(MacSign.ResolvedKeychain keychain, Stream> mutators) { + + var cmd = JPackageCommand.helloAppImage(); + + cmd.mutate(MacHelper.useKeychain(keychain)).mutate(new SignKeyOption( + SignKeyOption.Type.SIGN_KEY_IDENTITY, + SigningBase.StandardCertificateRequest.CODESIGN.spec() + )::addTo); + + cmd.mutate(new AdditionalLauncher("x")::applyTo); + + mutators.forEach(cmd::mutate); cmd.executeAndAssertHelloAppImageCreated(); }