# HG changeset patch # User herrick # Date 1572535121 14400 # Node ID d802578912f3666481f1bd8b58dbce2364c381a3 # Parent 920f6770d71c7865c77c57abc16bf2ae1d127ccf 8232186 : Add verification for pkg and dmg tests Submitted-by: almatvee Reviewed-by: aherrick, asemenyuk diff -r 920f6770d71c -r d802578912f3 src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppBundler.java --- a/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppBundler.java Thu Oct 31 11:11:42 2019 -0400 +++ b/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppBundler.java Thu Oct 31 11:18:41 2019 -0400 @@ -44,64 +44,6 @@ private static final String TEMPLATE_BUNDLE_ICON = "java.icns"; - public static Map getMacCategories() { - Map map = new HashMap<>(); - map.put("Business", "public.app-category.business"); - map.put("Developer Tools", "public.app-category.developer-tools"); - map.put("Education", "public.app-category.education"); - map.put("Entertainment", "public.app-category.entertainment"); - map.put("Finance", "public.app-category.finance"); - map.put("Games", "public.app-category.games"); - map.put("Graphics & Design", "public.app-category.graphics-design"); - map.put("Healthcare & Fitness", - "public.app-category.healthcare-fitness"); - map.put("Lifestyle", "public.app-category.lifestyle"); - map.put("Medical", "public.app-category.medical"); - map.put("Music", "public.app-category.music"); - map.put("News", "public.app-category.news"); - map.put("Photography", "public.app-category.photography"); - map.put("Productivity", "public.app-category.productivity"); - map.put("Reference", "public.app-category.reference"); - map.put("Social Networking", "public.app-category.social-networking"); - map.put("Sports", "public.app-category.sports"); - map.put("Travel", "public.app-category.travel"); - map.put("Utilities", "public.app-category.utilities"); - map.put("Video", "public.app-category.video"); - map.put("Weather", "public.app-category.weather"); - - map.put("Action Games", "public.app-category.action-games"); - map.put("Adventure Games", "public.app-category.adventure-games"); - map.put("Arcade Games", "public.app-category.arcade-games"); - map.put("Board Games", "public.app-category.board-games"); - map.put("Card Games", "public.app-category.card-games"); - map.put("Casino Games", "public.app-category.casino-games"); - map.put("Dice Games", "public.app-category.dice-games"); - map.put("Educational Games", "public.app-category.educational-games"); - map.put("Family Games", "public.app-category.family-games"); - map.put("Kids Games", "public.app-category.kids-games"); - map.put("Music Games", "public.app-category.music-games"); - map.put("Puzzle Games", "public.app-category.puzzle-games"); - map.put("Racing Games", "public.app-category.racing-games"); - map.put("Role Playing Games", "public.app-category.role-playing-games"); - map.put("Simulation Games", "public.app-category.simulation-games"); - map.put("Sports Games", "public.app-category.sports-games"); - map.put("Strategy Games", "public.app-category.strategy-games"); - map.put("Trivia Games", "public.app-category.trivia-games"); - map.put("Word Games", "public.app-category.word-games"); - - return map; - } - - public static final EnumeratedBundlerParam MAC_CATEGORY = - new EnumeratedBundlerParam<>( - Arguments.CLIOptions.MAC_APP_STORE_CATEGORY.getId(), - String.class, - params -> "Unknown", - (s, p) -> s, - getMacCategories(), - false //strict - for MacStoreBundler this should be strict - ); - public static final BundlerParamInfo MAC_CF_BUNDLE_NAME = new StandardBundlerParam<>( Arguments.CLIOptions.MAC_BUNDLE_NAME.getId(), diff -r 920f6770d71c -r d802578912f3 src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java --- a/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java Thu Oct 31 11:11:42 2019 -0400 +++ b/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java Thu Oct 31 11:18:41 2019 -0400 @@ -92,16 +92,6 @@ params -> Boolean.FALSE, (s, p) -> Boolean.valueOf(s)); - public static final EnumeratedBundlerParam MAC_CATEGORY = - new EnumeratedBundlerParam<>( - Arguments.CLIOptions.MAC_APP_STORE_CATEGORY.getId(), - String.class, - params -> "Unknown", - (s, p) -> s, - MacAppBundler.getMacCategories(), - false //strict - for MacStoreBundler this should be strict - ); - public static final BundlerParamInfo MAC_CF_BUNDLE_NAME = new StandardBundlerParam<>( Arguments.CLIOptions.MAC_BUNDLE_NAME.getId(), @@ -470,7 +460,6 @@ data.put("DEPLOY_BUNDLE_CFBUNDLE_VERSION", MAC_CF_BUNDLE_VERSION.fetchFrom(params) != null ? MAC_CF_BUNDLE_VERSION.fetchFrom(params) : "100"); - data.put("DEPLOY_BUNDLE_CATEGORY", MAC_CATEGORY.fetchFrom(params)); boolean hasMainJar = MAIN_JAR.fetchFrom(params) != null; boolean hasMainModule = diff -r 920f6770d71c -r d802578912f3 src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/resources/Info-lite.plist.template --- a/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/resources/Info-lite.plist.template Thu Oct 31 11:11:42 2019 -0400 +++ b/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/resources/Info-lite.plist.template Thu Oct 31 11:18:41 2019 -0400 @@ -26,7 +26,7 @@ ???? LSApplicationCategoryType - DEPLOY_BUNDLE_CATEGORY + Unknown CFBundleVersion DEPLOY_BUNDLE_CFBUNDLE_VERSION NSHumanReadableCopyright diff -r 920f6770d71c -r d802578912f3 src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java Thu Oct 31 11:11:42 2019 -0400 +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java Thu Oct 31 11:18:41 2019 -0400 @@ -272,9 +272,6 @@ MAC_BUNDLE_IDENTIFIER("mac-package-identifier", OptionCategories.PLATFORM_MAC), - MAC_APP_STORE_CATEGORY ("mac-app-store-category", - OptionCategories.PLATFORM_MAC), - MAC_BUNDLE_SIGNING_PREFIX ("mac-package-signing-prefix", OptionCategories.PLATFORM_MAC), diff -r 920f6770d71c -r d802578912f3 src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java Thu Oct 31 11:11:42 2019 -0400 +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java Thu Oct 31 11:18:41 2019 -0400 @@ -112,7 +112,6 @@ USE.ALL); options.put(CLIOptions.MAC_SIGNING_KEY_NAME.getId(), USE.ALL); options.put(CLIOptions.MAC_SIGNING_KEYCHAIN.getId(), USE.ALL); - options.put(CLIOptions.MAC_APP_STORE_CATEGORY.getId(), USE.ALL); options.put(CLIOptions.MAC_APP_STORE_ENTITLEMENTS.getId(), USE.ALL); } diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/apps/image/Hello.java --- a/test/jdk/tools/jpackage/apps/image/Hello.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/apps/image/Hello.java Thu Oct 31 11:18:41 2019 -0400 @@ -21,39 +21,157 @@ * questions. */ -import java.io.BufferedOutputStream; -import java.io.FileOutputStream; -import java.io.PrintStream; +import java.awt.AWTError; +import java.awt.Desktop; +import java.awt.GraphicsEnvironment; +import java.awt.desktop.OpenFilesEvent; +import java.awt.desktop.OpenFilesHandler; +import java.io.File; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.nio.file.Path; +import java.nio.file.Files; +import java.util.stream.Collectors; +import java.util.List; +import java.util.ArrayList; +import java.util.stream.Stream; +import java.util.Collections; -public class Hello { +public class Hello implements OpenFilesHandler { + + public static void main(String[] args) throws IOException, InterruptedException { + var faFiles = getFaFiles(); + if (faFiles != null) { + // Some files got opened through fa mechanizm. + // They are the arguments then. + args = faFiles.toArray(String[]::new); + } + + var lines = printArgs(args); + + lines.forEach(System.out::println); + + var outputFile = getOutputFile(args); + trace(String.format("Output file: [%s]", outputFile)); + Files.write(outputFile, lines); + } + + private static List printArgs(String[] args) { + List lines = new ArrayList<>(); + lines.add(MSG); + + lines.add("args.length: " + args.length); + + lines.addAll(List.of(args)); + + for (int index = 1; index <= EXPECTED_NUM_OF_PARAMS; index++) { + String value = System.getProperty("param" + index); + if (value != null) { + lines.add("-Dparam" + index + "=" + value); + } + } + + return lines; + } + + private static Path getOutputFile(String[] args) { + Path outputFilePath = Path.of("appOutput.txt"); + + // If first arg is a file (most likely from fa), then put output in the same folder as + // the file from fa. + if (args.length >= 1) { + Path faPath = Path.of(args[0]); + if (Files.exists(faPath)) { + return faPath.toAbsolutePath().getParent().resolve(outputFilePath); + } + } + + try { + // Try writing in the default output file. + Files.write(outputFilePath, Collections.emptyList()); + return outputFilePath; + } catch (IOException ex) { + // Log reason of a failure. + StringWriter errors = new StringWriter(); + ex.printStackTrace(new PrintWriter(errors)); + Stream.of(errors.toString().split("\\R")).forEachOrdered(Hello::trace); + } + + return Path.of(System.getProperty("user.home")).resolve(outputFilePath); + } + + @Override + public void openFiles(OpenFilesEvent e) { + synchronized(lock) { + trace("openFiles"); + files = e.getFiles().stream() + .map(File::toString) + .collect(Collectors.toList()); + + lock.notifyAll(); + } + } + + private static List getFaFiles() throws InterruptedException { + if (openFilesHandler == null) { + return null; + } + + synchronized(openFilesHandler.lock) { + trace("getFaFiles: wait"); + openFilesHandler.lock.wait(1000); + if (openFilesHandler.files == null) { + trace(String.format("getFaFiles: no files")); + return null; + } + // Return copy of `files` to keep access to `files` field synchronized. + trace(String.format("getFaFiles: file count %d", + openFilesHandler.files.size())); + return new ArrayList<>(openFilesHandler.files); + } + } + + private List files; + private final Object lock = new Object(); + private final static Hello openFilesHandler = createInstance(); + + private static Hello createInstance() { + if (GraphicsEnvironment.isHeadless()) { + return null; + } + + trace("Environment supports a display"); + + try { + // Disable JAB. + // Needed to suppress error: + // Exception in thread "main" java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridge + System.setProperty("javax.accessibility.assistive_technologies", ""); + } catch (SecurityException ex) { + ex.printStackTrace(); + } + + try { + var desktop = Desktop.getDesktop(); + if (desktop.isSupported(Desktop.Action.APP_OPEN_FILE)) { + trace("Set file handler"); + Hello instance = new Hello(); + desktop.setOpenFileHandler(instance); + return instance; + } + } catch (AWTError ex) { + trace("Set file handler failed"); + ex.printStackTrace(); + } + + return null; + } private static final String MSG = "jpackage test application"; private static final int EXPECTED_NUM_OF_PARAMS = 3; // Starts at 1 - public static void main(String[] args) throws IOException { - printArgs(args, System.out); - - try (PrintStream out = new PrintStream(new BufferedOutputStream( - new FileOutputStream("appOutput.txt")))) { - printArgs(args, out); - } - } - - private static void printArgs(String[] args, PrintStream out) { - out.println(MSG); - - out.println("args.length: " + args.length); - - for (String arg : args) { - out.println(arg); - } - - for (int index = 1; index <= EXPECTED_NUM_OF_PARAMS; index++) { - String value = System.getProperty("param" + index); - if (value != null) { - out.println("-Dparam" + index + "=" + value); - } - } + private static void trace(String msg) { + System.out.println("hello: " + msg); } } diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/helpers/JPackageHelper.java --- a/test/jdk/tools/jpackage/helpers/JPackageHelper.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/helpers/JPackageHelper.java Thu Oct 31 11:18:41 2019 -0400 @@ -34,7 +34,8 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; -import java.util.Arrays; +import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.spi.ToolProvider; @@ -569,21 +570,11 @@ return null; } - String[] result = output.split("\n"); - if (result == null || result.length == 0) { - return result; - } - - List origList = new ArrayList(Arrays.asList(result)); - List newlist = new ArrayList(); - origList.stream().filter((str) -> - (!str.startsWith("Picked up") && - !str.startsWith("WARNING: Using experimental"))) - .forEachOrdered((str) -> { - newlist.add(str); - }); - - return newlist.toArray(new String[newlist.size()]); + return Stream.of(output.split("\\R")) + .filter(str -> !str.startsWith("Picked up")) + .filter(str -> !str.startsWith("WARNING: Using experimental")) + .filter(str -> !str.startsWith("hello: ")) + .collect(Collectors.toList()).toArray(String[]::new); } private static String quote(String in, boolean toolProvider) { diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/helpers/jdk/jpackage/test/FileAssociations.java --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/FileAssociations.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/FileAssociations.java Thu Oct 31 11:18:41 2019 -0400 @@ -34,7 +34,7 @@ setDescription("jpackage test extention"); } - public void createFile() { + private void createFile() { Map entries = new HashMap<>(Map.of( "extension", suffixName, "mime-type", getMime(), @@ -65,18 +65,28 @@ return this; } - public Path getPropertiesFile() { + Path getPropertiesFile() { return file; } - public String getSuffix() { + String getSuffix() { return "." + suffixName; } - public String getMime() { + String getMime() { return "application/x-jpackage-" + suffixName; } + public void applyTo(PackageTest test) { + test.notForTypes(PackageType.MAC_DMG, () -> { + test.addInitializer(cmd -> { + createFile(); + cmd.addArguments("--file-associations", getPropertiesFile()); + }); + test.addHelloAppFileAssociationsVerifier(this); + }); + } + private Path file; final private String suffixName; private String description; diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/helpers/jdk/jpackage/test/HelloApp.java --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/HelloApp.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/HelloApp.java Thu Oct 31 11:18:41 2019 -0400 @@ -63,6 +63,7 @@ TKit.createTextFile(moduleInfoFile, List.of( String.format("module %s {", moduleName), String.format(" exports %s;", packageName), + " requires java.desktop;", "}" )); jarBuilder.addSourceFile(moduleInfoFile); @@ -72,7 +73,9 @@ // Add package directive and replace class name in java source file. // Works with simple test Hello.java. // Don't expect too much from these regexps! - Pattern classDeclaration = Pattern.compile("(^.*\\bclass\\s+)Hello(.*$)"); + Pattern classNameRegex = Pattern.compile("\\bHello\\b"); + Pattern classDeclaration = Pattern.compile( + "(^.*\\bclass\\s+)\\bHello\\b(.*$)"); Pattern importDirective = Pattern.compile( "(?<=import (?:static )?+)[^;]+"); AtomicBoolean classDeclared = new AtomicBoolean(); @@ -85,11 +88,14 @@ }); Files.write(srcFile, Files.readAllLines(HELLO_JAVA).stream().map(line -> { + Matcher m; if (classDeclared.getPlain()) { + if ((m = classNameRegex.matcher(line)).find()) { + line = m.replaceAll(className); + } return line; } - Matcher m; if (!packageInserted.getPlain() && importDirective.matcher(line).find()) { line = packageInserter.apply(line); } else if ((m = classDeclaration.matcher(line)).find()) { @@ -214,6 +220,7 @@ new Executor() .setDirectory(outputFile.getParent()) .setExecutable(helloAppLauncher) + .dumpOutput() .execute() .assertExitCodeIsZero(); diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java Thu Oct 31 11:18:41 2019 -0400 @@ -94,9 +94,8 @@ static Path getInstallationDirectory(JPackageCommand cmd) { cmd.verifyIsOfType(PackageType.MAC); - String installDir = Path.of(cmd.getArgumentValue("--install-dir", - () -> ""), cmd.name()).toString() + ".app"; - return Path.of("/Applications", installDir); + return Path.of(cmd.getArgumentValue("--install-dir", () -> "/Applications")) + .resolve(cmd.name() + ".app"); } private static String getPackageName(JPackageCommand cmd) { diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -23,12 +23,14 @@ package jdk.jpackage.test; import java.awt.Desktop; +import java.awt.GraphicsEnvironment; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -56,6 +58,7 @@ */ public PackageTest() { action = DEFAULT_ACTION; + excludeTypes = new HashSet<>(); forTypes(); setExpectedExitCode(0); handlers = new HashMap<>(); @@ -63,15 +66,26 @@ currentTypes.forEach(v -> handlers.put(v, new Handler(v))); } + public PackageTest excludeTypes(PackageType... types) { + excludeTypes.addAll(Stream.of(types).collect(Collectors.toSet())); + return forTypes(currentTypes); + } + + public PackageTest excludeTypes(Collection types) { + return excludeTypes(types.toArray(PackageType[]::new)); + } + public PackageTest forTypes(PackageType... types) { Collection newTypes; if (types == null || types.length == 0) { newTypes = PackageType.NATIVE; } else { - newTypes = Set.of(types); + newTypes = Stream.of(types).collect(Collectors.toSet()); } - currentTypes = newTypes.stream().filter(type -> type.isSupported()).collect( - Collectors.toUnmodifiableSet()); + currentTypes = newTypes.stream() + .filter(PackageType::isSupported) + .filter(Predicate.not(excludeTypes::contains)) + .collect(Collectors.toUnmodifiableSet()); return this; } @@ -79,6 +93,16 @@ return forTypes(types.toArray(PackageType[]::new)); } + public PackageTest notForTypes(PackageType... types) { + return notForTypes(List.of(types)); + } + + public PackageTest notForTypes(Collection types) { + Set workset = new HashSet<>(currentTypes); + workset.removeAll(types); + return forTypes(workset); + } + public PackageTest setExpectedExitCode(int v) { expectedJPackageExitCode = v; return this; @@ -163,19 +187,30 @@ }); } - public PackageTest addHelloAppFileAssociationsVerifier(FileAssociations fa, + PackageTest addHelloAppFileAssociationsVerifier(FileAssociations fa, String... faLauncherDefaultArgs) { + // Setup test app to have valid jpackage command line before + // running check of type of environment. addInitializer(cmd -> new HelloApp(null).addTo(cmd), "HelloApp"); + + String noActionMsg = "Not running file associations test"; + if (GraphicsEnvironment.isHeadless()) { + TKit.trace(String.format( + "%s because running in headless environment", noActionMsg)); + return this; + } + addInstallVerifier(cmd -> { - if (cmd.isFakeRuntime("Not running file associations test")) { + if (cmd.isFakeRuntime(noActionMsg)) { return; } withTestFileAssociationsFile(fa, testFile -> { testFile = testFile.toAbsolutePath().normalize(); - final Path appOutput = Path.of(HelloApp.OUTPUT_FILENAME); + final Path appOutput = testFile.getParent() + .resolve(HelloApp.OUTPUT_FILENAME); Files.deleteIfExists(appOutput); TKit.trace(String.format("Use desktop to open [%s] file", @@ -217,6 +252,16 @@ return forTypes(List.of(type), action); } + PackageTest notForTypes(Collection types, Runnable action) { + Set workset = new HashSet<>(currentTypes); + workset.removeAll(types); + return forTypes(workset, action); + } + + PackageTest notForTypes(PackageType type, Runnable action) { + return notForTypes(List.of(type), action); + } + public PackageTest configureHelloApp() { return configureHelloApp(null); } @@ -381,6 +426,7 @@ } private Collection currentTypes; + private Set excludeTypes; private int expectedJPackageExitCode; private Map handlers; private Set namedInitializers; diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TKit.java --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TKit.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TKit.java Thu Oct 31 11:18:41 2019 -0400 @@ -469,7 +469,8 @@ static void waitForFileCreated(Path fileToWaitFor, long timeoutSeconds) throws IOException { - trace(String.format("Wait for file [%s] to be available", fileToWaitFor)); + trace(String.format("Wait for file [%s] to be available", + fileToWaitFor.toAbsolutePath())); WatchService ws = FileSystems.getDefault().newWatchService(); diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/linux/ShortcutHintTest.java --- a/test/jdk/tools/jpackage/linux/ShortcutHintTest.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/linux/ShortcutHintTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -114,14 +114,11 @@ */ @Test public static void testFileAssociations() { - createTest().addInitializer(cmd -> { - cmd.setFakeRuntime(); - - FileAssociations fa = new FileAssociations( - "ShortcutHintTest_testFileAssociations"); - fa.createFile(); - cmd.addArguments("--file-associations", fa.getPropertiesFile()); - }).run(); + PackageTest test = createTest().addInitializer( + JPackageCommand::setFakeRuntime); + new FileAssociations("ShortcutHintTest_testFileAssociations").applyTo( + test); + test.run(); } /** diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/NameWithSpaceTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/tools/jpackage/macosx/NameWithSpaceTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -0,0 +1,62 @@ +/* + * 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 jdk.jpackage.test.PackageTest; +import jdk.jpackage.test.Annotations.Test; + +/** + * Name with space packaging test. Output of the test should be + * "Name With Space-*.*" package bundle. + * + * macOS only: + * + * Test should generates basic pkg and dmg. Name of packages and application itself + * should have name: "Name With Space". Package should be installed into "/Applications" + * folder and verified that it can be installed and run. + */ + +/* + * @test + * @summary jpackage test with name containing spaces + * @library ../helpers + * @build jdk.jpackage.test.* + * @modules jdk.jpackage/jdk.jpackage.internal + * @compile NameWithSpaceTest.java + * @requires (os.family == "mac") + * @key jpackagePlatformPackage + * @run main/othervm/timeout=360 -Xmx512m jdk.jpackage.test.Main + * --jpt-run=NameWithSpaceTest + */ +public class NameWithSpaceTest { + + @Test + public static void test() { + new PackageTest() + .configureHelloApp() + .addBundleDesktopIntegrationVerifier(false) + .addInitializer(cmd -> { + cmd.setArgumentValue("--name", "Name With Space"); + }) + .run(); + } +} diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/SigningPackageTest.java --- a/test/jdk/tools/jpackage/macosx/SigningPackageTest.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/macosx/SigningPackageTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -62,12 +62,11 @@ } private static void verifyAppImageInDMG(JPackageCommand cmd) { - MacHelper.withExplodedDmg(cmd, disk -> { - Path appImageInDMG = disk.resolve(cmd.name() + ".app"); - Path launcherPath = appImageInDMG.resolve(Path.of("Contents", "MacOS", cmd.name())); + MacHelper.withExplodedDmg(cmd, dmgImage -> { + Path launcherPath = dmgImage.resolve(Path.of("Contents", "MacOS", cmd.name())); SigningBase.verifyCodesign(launcherPath, true); - SigningBase.verifyCodesign(appImageInDMG, true); - SigningBase.verifySpctl(appImageInDMG, "exec"); + SigningBase.verifyCodesign(dmgImage, true); + SigningBase.verifySpctl(dmgImage, "exec"); }); } diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/base/OptionsBase.java --- a/test/jdk/tools/jpackage/macosx/base/OptionsBase.java Thu Oct 31 11:11:42 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* - * Copyright (c) 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 javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamConstants; -import javax.xml.stream.XMLStreamReader; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileReader; - -public class OptionsBase { - - static final String TEST_BUNDLE_NAME = "TestBundleName"; - static final String TEST_BUNDLE_IDENTIFIER = "net.java.openjdk.packagerTest"; - static final String TEST_CATECORY = "public.app-category.test"; - private static String TEST_NAME; - private static String EXT; - private static String OUTPUT; - private static String[] CMD; - - private static void testCreateInstaller() throws Exception { - JPackageHelper.executeCLI(true, CMD); - - if (EXT.equals("dmg")) { - String disk = null; - try { - var log = new File("hdiutil.log"); - JPackageHelper.execute(log, "/usr/bin/hdiutil", - "attach", OUTPUT); - try(var br = new BufferedReader(new FileReader(log))) { - var line = br.lines().reduce((a, b) -> b).orElse(null) - .split("\t"); - if ((line.length < 3) || !line[2].contains(TEST_NAME)) { - throw new AssertionError( - "expected attach output to contain test name: " - + TEST_NAME); - } - } - } finally { - if (disk != null) { - JPackageHelper.execute(null, - "/usr/bin/hdiutil", "detach", disk); - } - } - } else { - testPkg(OUTPUT); - } - } - - private static void testPkg(String path) throws Exception { - JPackageHelper.execute(null, "/usr/sbin/pkgutil", - "--expand-full", path, "expand"); - var info = new File("expand/" + TEST_NAME + "-app.pkg/Payload/" - + TEST_NAME + ".app/Contents/Info.plist"); - if (!info.exists()) { - throw new AssertionError("Info.plist not found"); - } - - String bundleName = null; - String bundleIdentifier = null; - String categoryType = null; - try (FileInputStream fis = new FileInputStream(info)) { - var xmlInFact = XMLInputFactory.newInstance(); - xmlInFact.setProperty(XMLInputFactory.SUPPORT_DTD, false); - xmlInFact.setProperty( - XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); - var reader = xmlInFact.createXMLStreamReader(fis); - while (reader.hasNext()) { - if (reader.next() == XMLStreamConstants.CHARACTERS) { - switch (reader.getText()) { - case "CFBundleName": { - bundleName = readValue(reader); - break; - } - case "CFBundleIdentifier" : { - bundleIdentifier = readValue(reader); - break; - } - case "LSApplicationCategoryType" : { - categoryType = readValue(reader); - break; - } - } - } - } - } - boolean passed = true; - if (!TEST_BUNDLE_NAME.equals(bundleName)) { - passed = false; - System.err.println("Wrong bundle name [" + bundleName + - "] expected [" + TEST_BUNDLE_NAME + "]" ); - } - if (!TEST_BUNDLE_IDENTIFIER.equals(bundleIdentifier)) { - passed = false; - System.err.println("Wrong bundle identifier [" + - bundleIdentifier + "] expected [" + TEST_BUNDLE_IDENTIFIER - + "]" ); - } - if (!TEST_CATECORY.equals(categoryType)) { - passed = false; - System.err.println("Wrong appstore category [" + categoryType + - "] expected [" + TEST_CATECORY + "]" ); - } - - if (!passed) { - throw new AssertionError("Test failed"); - } - } - - static private String readValue(XMLStreamReader reader) throws Exception { - while (reader.hasNext() && reader.next() != XMLStreamConstants.START_ELEMENT); - return reader.hasNext() ? reader.getElementText() : null; - } - - private static void verifyInstall() throws Exception { - String app = JPackagePath.getOSXInstalledApp("jpackage", TEST_NAME); - JPackageInstallerHelper.validateApp(app); - } - - private static void verifyUnInstall() throws Exception { - // Not needed on OS X, since we just deleting installed application - // without using generated installer. We keeping this for consistnency - // between platforms. - } - - private static void init(String name, String ext) { - TEST_NAME = name; - EXT = ext; - OUTPUT = "output" + File.separator + TEST_NAME + "-1.0." + EXT; - CMD = new String[] { - "--package-type", EXT, - "--input", "input", - "--dest", "output", - "--name", TEST_NAME, - "--main-jar", "hello.jar", - "--main-class", "Hello", - "--mac-package-name", TEST_BUNDLE_NAME, - "--mac-package-identifier", TEST_BUNDLE_IDENTIFIER, - "--mac-app-store-category", TEST_CATECORY - }; - } - - public static void run(String name, String ext) throws Exception { - init(name, ext); - - if (JPackageInstallerHelper.isVerifyInstall()) { - verifyInstall(); - } else if (JPackageInstallerHelper.isVerifyUnInstall()) { - verifyUnInstall(); - } else { - JPackageHelper.createHelloInstallerJar(); - testCreateInstaller(); - } - } -} diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/dmg/OptionsTest.java --- a/test/jdk/tools/jpackage/macosx/dmg/OptionsTest.java Thu Oct 31 11:11:42 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * Copyright (c) 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. - */ - -/* - * @test - * @summary jpackage create installer test - * @library ../../helpers - * @library ../base - * @build JPackageHelper - * @build JPackagePath - * @build JPackageInstallerHelper - * @build OptionsBase - * @requires (os.family == "mac") - * @modules jdk.jpackage - * @modules jdk.jpackage/jdk.jpackage.internal - * @run main/othervm -Xmx512m OptionsTest - */ -public class OptionsTest { - private static final String TEST_NAME = "OptionsTest"; - private static final String EXT = "dmg"; - - public static void main(String[] args) throws Exception { - if (jdk.jpackage.internal.MacDmgBundler.isSupported()) { - OptionsBase.run(TEST_NAME, EXT); - } - } -} diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/dmg/install.sh --- a/test/jdk/tools/jpackage/macosx/dmg/install.sh Thu Oct 31 11:11:42 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -echo "Note: This script will install DMG files silently. In order to verify UI, each .dmg needs to launched manually via Finder." - -# OptionsTest -hdiutil attach OptionsTest-1.0.dmg -sudo /usr/sbin/installer -pkg /Volumes/OptionsTest/OptionsTest-1.0.pkg -target / -hdiutil detach /Volumes/OptionsTest/ diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/dmg/uninstall.sh --- a/test/jdk/tools/jpackage/macosx/dmg/uninstall.sh Thu Oct 31 11:11:42 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -sudo rm -rf /Applications/OptionsTest.app diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/pkg/OptionsTest.java --- a/test/jdk/tools/jpackage/macosx/pkg/OptionsTest.java Thu Oct 31 11:11:42 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* - * Copyright (c) 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. - */ - -/* - * @test - * @summary jpackage create installer test - * @library ../../helpers - * @library ../base - * @build JPackageHelper - * @build JPackagePath - * @build JPackageInstallerHelper - * @build OptionsBase - * @requires (os.family == "mac") - * @modules jdk.jpackage - * @run main/othervm -Xmx512m OptionsTest - */ -public class OptionsTest { - private static final String TEST_NAME = "OptionsTest"; - private static final String EXT = "pkg"; - - public static void main(String[] args) throws Exception { - OptionsBase.run(TEST_NAME, EXT); - } -} diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/pkg/install.sh --- a/test/jdk/tools/jpackage/macosx/pkg/install.sh Thu Oct 31 11:11:42 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -echo Note: This script will install packages silently. In order to verify UI, each .pkg needs to launched manually via Finder. -sudo /usr/sbin/installer -pkg OptionsTest-1.0.pkg -target / diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/macosx/pkg/uninstall.sh --- a/test/jdk/tools/jpackage/macosx/pkg/uninstall.sh Thu Oct 31 11:11:42 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -sudo rm -rf /Applications/OptionsDirTest.app diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/manage_packages.sh --- a/test/jdk/tools/jpackage/manage_packages.sh Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/manage_packages.sh Thu Oct 31 11:18:41 2019 -0400 @@ -64,6 +64,12 @@ exit 1 } +# For macOS +if !(type "tac" &> /dev/null;) then + tac_cmd='tail -r' +else + tac_cmd=tac +fi # Directory where to look for package files. package_dir=$PWD @@ -101,10 +107,10 @@ function find_packages () { - local package_suffixes=(deb rpm msi exe) + local package_suffixes=(deb rpm msi exe pkg dmg) for suffix in "${package_suffixes[@]}"; do if [ "$mode" == "uninstall" ]; then - packages=$(find_packages_of_type $suffix | tac) + packages=$(find_packages_of_type $suffix | $tac_cmd) else packages=$(find_packages_of_type $suffix) fi @@ -158,6 +164,45 @@ error No implemented } +# PKG +install_cmd_pkg () +{ + echo sudo /usr/sbin/installer -allowUntrusted -pkg "\"$@\"" -target / +} +uninstall_cmd_pkg () +{ + local pname=`basename $@` + local appname="$(cut -d'-' -f1 <<<"$pname")" + if [ "$appname" = "CommonInstallDirTest" ]; then + echo sudo rm -rf "/Applications/jpackage/\"$appname.app\"" + else + echo sudo rm -rf "/Applications/\"$appname.app\"" + fi +} + +# DMG +install_cmd_dmg () +{ + local pname=`basename $@` + local appname="$(cut -d'-' -f1 <<<"$pname")" + local command=() + if [ "$appname" = "CommonLicenseTest" ]; then + command+=("{" yes "|" hdiutil attach "\"$@\"" ">" /dev/null) + else + command+=("{" hdiutil attach "\"$@\"" ">" /dev/null) + fi + + command+=(";" sudo cp -R "\"/Volumes/$appname/$appname.app\"" /Applications ">" /dev/null) + command+=(";" hdiutil detach "\"/Volumes/$appname\"" ">" /dev/null ";}") + + echo "${command[@]}" +} +uninstall_cmd_dmg () +{ + local pname=`basename $@` + local appname="$(cut -d'-' -f1 <<<"$pname")" + echo sudo rm -rf "/Applications/\"$appname.app\"" +} # Find packages packages= @@ -169,6 +214,7 @@ # Build list of commands to execute declare -a commands +IFS=$'\n' for p in $packages; do commands[${#commands[@]}]=$(${mode}_cmd_${package_type} "$p") done @@ -177,7 +223,7 @@ # Run commands for cmd in "${commands[@]}"; do echo Running: $cmd - $cmd || true; + eval $cmd || true; done else # Print commands diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/share/AddLaunchersTest.java --- a/test/jdk/tools/jpackage/share/AddLaunchersTest.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/share/AddLaunchersTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -42,7 +42,7 @@ "--main-jar", "hello.jar", "--main-class", "Hello", "--module-path", "module", - "--add-modules", "com.hello", + "--add-modules", "com.hello,java.desktop", "--add-launcher", "test3=j1.properties", "--add-launcher", "test4=m1.properties"}; diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/share/AdditionalLaunchersTest.java --- a/test/jdk/tools/jpackage/share/AdditionalLaunchersTest.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/share/AdditionalLaunchersTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -58,22 +58,19 @@ @Test public void test() { - 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()); + PackageTest packageTest = new PackageTest().configureHelloApp(); + packageTest.addInitializer(cmd -> { cmd.addArguments("--arguments", "Duke", "--arguments", "is", "--arguments", "the", "--arguments", "King"); }); - packageTest.addHelloAppFileAssociationsVerifier(fa); + new FileAssociations( + MethodHandles.lookup().lookupClass().getSimpleName()).applyTo( + packageTest); new AdditionalLauncher("Baz2").setArguments().applyTo(packageTest); new AdditionalLauncher("foo").setArguments("yep!").applyTo(packageTest); @@ -93,6 +90,8 @@ int lastDotIndex = fname.lastIndexOf("."); if (lastDotIndex != -1) { fname = newFileName + fname.substring(lastDotIndex); + } else { + fname = newFileName; } return path.getParent().resolve(fname); } @@ -156,4 +155,4 @@ private Path icon; private final String name; } -} +} \ No newline at end of file diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/share/FileAssociationsTest.java --- a/test/jdk/tools/jpackage/share/FileAssociationsTest.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/share/FileAssociationsTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -24,6 +24,7 @@ import java.nio.file.Path; import jdk.jpackage.test.TKit; import jdk.jpackage.test.PackageTest; +import jdk.jpackage.test.PackageType; import jdk.jpackage.test.FileAssociations; import jdk.jpackage.test.Annotations.Test; @@ -66,23 +67,21 @@ public static void test() { PackageTest packageTest = new PackageTest(); - applyFileAssociations(packageTest, new FileAssociations("jptest1")); + // Not supported + packageTest.excludeTypes(PackageType.MAC_DMG); + + new FileAssociations("jptest1").applyTo(packageTest); Path icon = TKit.TEST_SRC_ROOT.resolve(Path.of("resources", "icon" + TKit.ICON_SUFFIX)); icon = TKit.createRelativePathCopy(icon); - applyFileAssociations(packageTest, - new FileAssociations("jptest2").setFilename("fa2").setIcon(icon)); + new FileAssociations("jptest2") + .setFilename("fa2") + .setIcon(icon) + .applyTo(packageTest); + packageTest.run(); } - - private static void applyFileAssociations(PackageTest test, - FileAssociations fa) { - test.addInitializer(cmd -> { - fa.createFile(); - cmd.addArguments("--file-associations", fa.getPropertiesFile()); - }).addHelloAppFileAssociationsVerifier(fa); - } } diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/share/InstallDirTest.java --- a/test/jdk/tools/jpackage/share/InstallDirTest.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/share/InstallDirTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -89,13 +89,12 @@ reply.put(PackageType.LINUX_DEB, Path.of("/opt/jpackage")); reply.put(PackageType.LINUX_RPM, reply.get(PackageType.LINUX_DEB)); - reply.put(PackageType.MAC_PKG, Path.of("/Application/jpackage")); - reply.put(PackageType.MAC_DMG, reply.get(PackageType.MAC_PKG)); + reply.put(PackageType.MAC_PKG, Path.of("/Applications/jpackage")); return reply; }).get(); - new PackageTest().configureHelloApp() + new PackageTest().excludeTypes(PackageType.MAC_DMG).configureHelloApp() .addInitializer(cmd -> { cmd.addArguments("--install-dir", INSTALL_DIRS.get( cmd.packageType())); diff -r 920f6770d71c -r d802578912f3 test/jdk/tools/jpackage/share/jdk/jpackage/tests/BasicTest.java --- a/test/jdk/tools/jpackage/share/jdk/jpackage/tests/BasicTest.java Thu Oct 31 11:11:42 2019 -0400 +++ b/test/jdk/tools/jpackage/share/jdk/jpackage/tests/BasicTest.java Thu Oct 31 11:18:41 2019 -0400 @@ -307,13 +307,19 @@ cmd.executePrerequisiteActions(); } - TKit.withTempDirectory("runtime", runtimeDir -> { - TKit.deleteDirectoryRecursive(runtimeDir, String.format( - "Delete [%s] output directory for jlink command", runtimeDir)); + TKit.withTempDirectory("runtime", tempDir -> { + final Path runtimeDir = tempDir.resolve("data"); + + // List of modules required for test app. + final var modules = new String[] { + "java.base", + "java.desktop" + }; + Executor jlink = getToolProvider(JavaTool.JLINK) .saveOutput(false) .addArguments( - "--add-modules", "java.base", + "--add-modules", String.join(",", modules), "--output", runtimeDir.toString(), "--strip-debug", "--no-header-files", @@ -329,38 +335,6 @@ cmd.addArguments("--runtime-image", runtimeDir); cmd.executeAndAssertHelloAppImageCreated(); - - final Path appImageRuntimePath = cmd.appRuntimeDirectory(); - - // - // This is an overkill to list modules in jlink output as we have - // already verified that Java app is functional and thus app's runtime - // is likely to be OK, but let's double check. - // - // Filter out all first strings with whitespace. They are java - // launcher output like `Picked up ...` unrelated to module names. - // - Pattern whitespaceChar = Pattern.compile("\\s"); - List moduleList = new Executor().dumpOutput().setExecutable( - appImageRuntimePath.resolve( - JPackageCommand.relativePathInRuntime(JavaTool.JAVA))).addArguments( - "--list-modules").executeAndGetOutput().stream().dropWhile( - s -> whitespaceChar.matcher(s).find()).sorted().collect( - Collectors.toList()); - - List expectedModules = new ArrayList<>(); - expectedModules.add(String.format("java.base@%s", - System.getProperty("java.version"))); - if (moduleName != null) { - expectedModules.add(moduleName); - } - expectedModules = expectedModules.stream().sorted().collect( - Collectors.toList()); - - TKit.assertStringListEquals(expectedModules, moduleList, - String.format( - "Check modules in application image runtime directory at [%s]", - appImageRuntimePath)); }); }