< prev index next >

test/jdk/tools/jpackage/share/AdditionalLaunchersTest.java

Print this page

        

@@ -25,16 +25,12 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.List;
 import java.util.Optional;
 import java.lang.invoke.MethodHandles;
-import jdk.jpackage.test.HelloApp;
-import jdk.jpackage.test.PackageTest;
-import jdk.jpackage.test.PackageType;
-import jdk.jpackage.test.FileAssociations;
-import jdk.jpackage.test.Annotations.Test;
-import jdk.jpackage.test.TKit;
+import jdk.jpackage.test.*;
+import jdk.jpackage.test.Annotations.*;
 
 /**
  * Test --add-launcher parameter. Output of the test should be
  * additionallauncherstest*.* installer. The output installer should provide the
  * same functionality as the default installer (see description of the default

@@ -44,15 +40,29 @@
 
 /*
  * @test
  * @summary jpackage with --add-launcher
  * @key jpackagePlatformPackage
+ * @requires (jpackage.test.SQETest != null)
  * @library ../helpers
  * @build jdk.jpackage.test.*
  * @modules jdk.incubator.jpackage/jdk.incubator.jpackage.internal
  * @compile AdditionalLaunchersTest.java
  * @run main/othervm/timeout=360 -Xmx512m jdk.jpackage.test.Main
+ *  --jpt-run=AdditionalLaunchersTest.test
+ */
+
+/*
+ * @test
+ * @summary jpackage with --add-launcher
+ * @key jpackagePlatformPackage
+ * @requires (jpackage.test.SQETest == null)
+ * @library ../helpers
+ * @build jdk.jpackage.test.*
+ * @modules jdk.jpackage/jdk.jpackage.internal
+ * @compile AdditionalLaunchersTest.java
+ * @run main/othervm/timeout=540 -Xmx512m jdk.jpackage.test.Main
  *  --jpt-run=AdditionalLaunchersTest
  */
 
 public class AdditionalLaunchersTest {
 

@@ -70,89 +80,124 @@
 
         new FileAssociations(
                 MethodHandles.lookup().lookupClass().getSimpleName()).applyTo(
                 packageTest);
 
-        new AdditionalLauncher("Baz2").setArguments().applyTo(packageTest);
-        new AdditionalLauncher("foo").setArguments("yep!").applyTo(packageTest);
-
-        AdditionalLauncher barLauncher = new AdditionalLauncher("Bar").setArguments(
-                "one", "two", "three");
-        if (TKit.isLinux()) {
-            barLauncher.setIcon(TKit.TEST_SRC_ROOT.resolve("apps/dukeplug.png"));
-        }
-        barLauncher.applyTo(packageTest);
+        new AdditionalLauncher("Baz2")
+                .setDefaultArguments()
+                .applyTo(packageTest);
+
+        new AdditionalLauncher("foo")
+                .setDefaultArguments("yep!")
+                .applyTo(packageTest);
+
+        new AdditionalLauncher("Bar")
+                .setDefaultArguments("one", "two", "three")
+                .setIcon(GOLDEN_ICON)
+                .applyTo(packageTest);
 
         packageTest.run();
     }
 
-    private static Path replaceFileName(Path path, String newFileName) {
-        String fname = path.getFileName().toString();
-        int lastDotIndex = fname.lastIndexOf(".");
-        if (lastDotIndex != -1) {
-            fname = newFileName + fname.substring(lastDotIndex);
-        } else {
-            fname = newFileName;
-        }
-        return path.getParent().resolve(fname);
-    }
+    @Test
+    public void bug8230933() {
+        PackageTest packageTest = new PackageTest().configureHelloApp();
 
-    static class AdditionalLauncher {
+        new AdditionalLauncher("default_icon")
+                .applyTo(packageTest);
 
-        AdditionalLauncher(String name) {
-            this.name = name;
-        }
+        new AdditionalLauncher("no_icon")
+                .setNoIcon().applyTo(packageTest);
 
-        AdditionalLauncher setArguments(String... args) {
-            arguments = List.of(args);
-            return this;
-        }
+        new AdditionalLauncher("custom_icon")
+                .setIcon(GOLDEN_ICON)
+                .applyTo(packageTest);
 
-        AdditionalLauncher setIcon(Path iconPath) {
-            icon = iconPath;
-            return this;
+        packageTest.run();
         }
 
-        void applyTo(PackageTest test) {
-            final Path propsFile = TKit.workDir().resolve(name + ".properties");
+    @Test
+    // Regular app
+    @Parameter("Hello")
+    // Modular app
+    @Parameter("com.other/com.other.CiaoBella")
+    public void testJavaOptions(String javaAppDesc) {
+        JPackageCommand cmd = JPackageCommand.helloAppImage(javaAppDesc)
+        .addArguments("--arguments", "courageous")
+        .addArguments("--java-options", "-Dparam1=xxx")
+        .addArguments("--java-options", "-Dparam2=yyy")
+        .addArguments("--java-options", "-Dparam3=zzz");
+
+        new AdditionalLauncher("Jack")
+                .addDefaultArguments("Jack of All Trades", "Master of None")
+                .setJavaOptions("-Dparam1=Contractor")
+                .applyTo(cmd);
+
+        new AdditionalLauncher("Monday")
+                .addDefaultArguments("Knock Your", "Socks Off")
+                .setJavaOptions("-Dparam2=Surprise workers!")
+                .applyTo(cmd);
 
-            test.addInitializer(cmd -> {
-                cmd.addArguments("--add-launcher", String.format("%s=%s", name,
-                        propsFile));
-
-                Map<String, String> properties = new HashMap<>();
-                if (arguments != null) {
-                    properties.put("arguments", String.join(" ",
-                            arguments.toArray(String[]::new)));
-                }
+        // Should inherit default arguments and java options from the main launcher
+        new AdditionalLauncher("void").applyTo(cmd);
 
-                if (icon != null) {
-                    properties.put("icon", icon.toAbsolutePath().toString());
+        cmd.executeAndAssertHelloAppImageCreated();
                 }
 
-                TKit.createPropertiesFile(propsFile, properties);
-            });
-            test.addInstallVerifier(cmd -> {
-                Path launcherPath = replaceFileName(cmd.appLauncherPath(), name);
-
-                TKit.assertExecutableFileExists(launcherPath);
+    /**
+     * Test usage of modular and non modular apps in additional launchers.
+     */
+    @Test
+    @Parameter("true")
+    @Parameter("fase")
+    public void testMainLauncherIsModular(boolean mainLauncherIsModular) {
+        final var nonModularAppDesc = JavaAppDesc.parse("a.b.c.Hello");
+        final var modularAppDesc = JavaAppDesc.parse(
+                "module.jar:com.that/com.that.main.Florence");
+
+        final var nonModularJarCmd = JPackageCommand.helloAppImage(nonModularAppDesc);
+        final var modularJarCmd = JPackageCommand.helloAppImage(modularAppDesc);
+
+        final JPackageCommand cmd;
+        if (mainLauncherIsModular) {
+            // Create non modular jar.
+            nonModularJarCmd.executePrerequisiteActions();
+
+            cmd = modularJarCmd;
+            cmd.addArguments("--description",
+                    "Test modular app with multiple add-launchers where one is modular app and other is non modular app");
+            cmd.addArguments("--input", nonModularJarCmd.getArgumentValue(
+                    "--input"));
+        } else {
+            // Create modular jar.
+            modularJarCmd.executePrerequisiteActions();
 
-                if (cmd.isFakeRuntime(String.format(
-                        "Not running %s launcher", launcherPath))) {
-                    return;
-                }
-                HelloApp.executeAndVerifyOutput(launcherPath,
-                        Optional.ofNullable(arguments).orElse(List.of()).toArray(
-                                String[]::new));
-            });
-            test.addUninstallVerifier(cmd -> {
-                Path launcherPath = replaceFileName(cmd.appLauncherPath(), name);
+            cmd = nonModularJarCmd;
+            cmd.addArguments("--description",
+                    "Test non modular app with multiple add-launchers where one is modular app and other is non modular app");
+            cmd.addArguments("--module-path", modularJarCmd.getArgumentValue(
+                    "--module-path"));
+            cmd.addArguments("--add-modules", modularAppDesc.moduleName());
+        }
+
+        new AdditionalLauncher("ModularAppLauncher")
+        .addRawProperties(Map.entry("module", JavaAppDesc.parse(
+                modularAppDesc.toString()).setJarFileName(null).toString()))
+        .addRawProperties(Map.entry("main-jar", ""))
+        .applyTo(cmd);
+
+        new AdditionalLauncher("NonModularAppLauncher")
+        // Use space ( ) character instead of equality sign (=) as
+        // a key/value separator
+        .setPersistenceHandler((path, properties) -> TKit.createTextFile(path,
+                properties.stream().map(entry -> String.join(" ", entry.getKey(),
+                        entry.getValue()))))
+        .addRawProperties(Map.entry("main-class", nonModularAppDesc.className()))
+        .addRawProperties(Map.entry("main-jar", nonModularAppDesc.jarFileName()))
+        .applyTo(cmd);
 
-                TKit.assertPathExists(launcherPath, false);
-            });
+        cmd.executeAndAssertHelloAppImageCreated();
         }
 
-        private List<String> arguments;
-        private Path icon;
-        private final String name;
-    }
+    private final static Path GOLDEN_ICON = TKit.TEST_SRC_ROOT.resolve(Path.of(
+            "resources", "icon" + TKit.ICON_SUFFIX));
 }
< prev index next >