diff --git a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/FromParams.java b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/FromParams.java index 92059b87590..201483c3a1f 100644 --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/FromParams.java +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/FromParams.java @@ -52,6 +52,7 @@ import java.io.IOException; import java.nio.file.Path; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -194,8 +195,14 @@ private static ApplicationLaunchers createLaunchers( // mainParams), APP_NAME.fetchFrom(launcherParams))); launcherParams.put(DESCRIPTION.getID(), DESCRIPTION.fetchFrom(mainParams)); } - return AddLauncherArguments.merge(mainParams, launcherParams, ICON.getID(), ADD_LAUNCHERS - .getID(), FILE_ASSOCIATIONS.getID()); + + var excludes = new ArrayList(List.of(ICON.getID(), ADD_LAUNCHERS.getID())); + if (!NAME.findIn(mainParams).equals(NAME.findIn(launcherParams))) { + // This is the additional launcher. It shouldn't have FA. + excludes.add(FILE_ASSOCIATIONS.getID()); + } + + return AddLauncherArguments.merge(mainParams, launcherParams, excludes.toArray(String[]::new)); } static final BundlerParamInfo APPLICATION = createApplicationBundlerParam(null); diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java index 17be2b9f196..56e09288997 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java @@ -272,9 +272,6 @@ static void withFileAssociationsTestRuns(FileAssociations fa, PackageTest addHelloAppFileAssociationsVerifier(FileAssociations fa) { Objects.requireNonNull(fa); - // Setup test app to have valid jpackage command line before running the check. - addHelloAppInitializer(null); - forTypes(LINUX, () -> { LinuxHelper.addFileAssociationsVerifier(this, fa); }); diff --git a/test/jdk/tools/jpackage/share/FileAssociationsTest.java b/test/jdk/tools/jpackage/share/FileAssociationsTest.java index 2257c5dbc65..7d84470fc9a 100644 --- a/test/jdk/tools/jpackage/share/FileAssociationsTest.java +++ b/test/jdk/tools/jpackage/share/FileAssociationsTest.java @@ -25,12 +25,14 @@ import java.nio.file.Path; import java.util.Map; +import jdk.jpackage.test.AdditionalLauncher; import jdk.jpackage.test.Annotations.Parameter; import jdk.jpackage.test.Annotations.Test; import jdk.jpackage.test.FileAssociations; import jdk.jpackage.test.JPackageCommand; import jdk.jpackage.test.PackageTest; import jdk.jpackage.test.PackageType; +import jdk.jpackage.test.RunnablePackageTest; import jdk.jpackage.test.TKit; /** @@ -64,7 +66,7 @@ * @requires jpackage.test.SQETest == null * @build jdk.jpackage.test.* * @compile -Xlint:all -Werror FileAssociationsTest.java - * @run main/othervm/timeout=540 -Xmx512m jdk.jpackage.test.Main + * @run main/othervm/timeout=1080 -Xmx512m jdk.jpackage.test.Main * --jpt-run=FileAssociationsTest */ @@ -85,7 +87,7 @@ public class FileAssociationsTest { @Parameter("true") @Parameter("false") public static void test(boolean includeDescription) { - PackageTest packageTest = new PackageTest(); + PackageTest packageTest = new PackageTest().configureHelloApp(); // Not supported packageTest.excludeTypes(PackageType.MAC_DMG); @@ -144,6 +146,34 @@ public static void testTooManyMimes() { }).run(); } + @Test + @Parameter("true") + @Parameter("false") + public static void testFromAppImage(boolean withAdditionalLauncher) { + + var appImageCmd = JPackageCommand.helloAppImage(); + + if (RunnablePackageTest.hasAction(RunnablePackageTest.Action.INSTALL)) { + // Ensure launchers are executable. + appImageCmd.ignoreFakeRuntime(); + } + + if (withAdditionalLauncher) { + new AdditionalLauncher("foo").applyTo(appImageCmd); + } + + var test = new PackageTest().excludeTypes(PackageType.MAC_DMG) + .addRunOnceInitializer(appImageCmd::execute) + .addInitializer(cmd -> { + cmd.removeArgumentWithValue("--input"); + cmd.setArgumentValue("--app-image", appImageCmd.outputBundle()); + }); + + new FileAssociations("jptest3").applyTo(test); + + test.run(); + } + private static PackageTest initPackageTest() { return new PackageTest() .excludeTypes(PackageType.MAC)