/* * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import java.nio.file.Path; 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.Test; /** * 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 * installer in SimplePackageTest.java) plus install three extra application * launchers. */ /* * @test * @summary jpackage with --add-launcher * @library ../helpers * @modules jdk.jpackage/jdk.jpackage.internal * @run main/othervm/timeout=360 -Xmx512m AdditionalLaunchersTest */ public class AdditionalLaunchersTest { public static void main(String[] args) { Test.run(args, () -> { FileAssociations fa = new FileAssociations( MethodHandles.lookup().lookupClass().getSimpleName()); // Configure a bunch of additional launchers and also setup // file association to make sure it will be linked only to the main // launcher. PackageTest packageTest = new PackageTest().configureHelloApp() .addInitializer(cmd -> { fa.createFile(); cmd.addArguments("--file-associations", fa.getPropertiesFile()); cmd.addArguments("--arguments", "Duke", "--arguments", "is", "--arguments", "the", "--arguments", "King"); }); packageTest.addHelloAppFileAssociationsVerifier(fa); new AdditionalLauncher("Baz2").setArguments().applyTo(packageTest); new AdditionalLauncher("foo").setArguments("yep!").applyTo(packageTest); AdditionalLauncher barLauncher = new AdditionalLauncher("Bar").setArguments( "one", "two", "three"); packageTest.forTypes(PackageType.LINUX).addInitializer(cmd -> { barLauncher.setIcon(Test.TEST_SRC_ROOT.resolve("apps/dukeplug.png")); }); barLauncher.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); } return path.getParent().resolve(fname); } static class AdditionalLauncher { AdditionalLauncher(String name) { this.name = name; } AdditionalLauncher setArguments(String... args) { arguments = List.of(args); return this; } AdditionalLauncher setIcon(Path iconPath) { icon = iconPath; return this; } void applyTo(PackageTest test) { final Path propsFile = Test.workDir().resolve(name + ".properties"); test.addInitializer(cmd -> { cmd.addArguments("--add-launcher", String.format("%s=%s", name, propsFile)); Map properties = new HashMap<>(); if (arguments != null) { properties.put("arguments", String.join(" ", arguments.toArray(String[]::new))); } if (icon != null) { properties.put("icon", icon.toAbsolutePath().toString()); } Test.createPropertiesFile(propsFile, properties); }); test.addInstallVerifier(cmd -> { Path launcherPath = replaceFileName( cmd.launcherInstallationPath(), name); Test.assertExecutableFileExists(launcherPath, true); if (cmd.isFakeRuntimeInstalled(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.launcherInstallationPath(), name); Test.assertExecutableFileExists(launcherPath, false); }); } private List arguments; private Path icon; private final String name; } }