diff -r 2c43b89b1679 -r 3bf53ffa9ae7 test/jdk/tools/jpackage/share/jdk/jpackage/tests/BasicTest.java --- a/test/jdk/tools/jpackage/share/jdk/jpackage/tests/BasicTest.java Wed Oct 16 09:57:23 2019 -0400 +++ b/test/jdk/tools/jpackage/share/jdk/jpackage/tests/BasicTest.java Wed Oct 16 10:32:08 2019 -0400 @@ -28,13 +28,12 @@ import java.nio.file.Path; import java.util.List; import java.util.ArrayList; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; -import jdk.jpackage.test.Executor; -import jdk.jpackage.test.JPackageCommand; -import jdk.jpackage.test.TKit; -import jdk.jpackage.test.JavaTool; -import jdk.jpackage.test.HelloApp; +import java.util.stream.Stream; +import jdk.jpackage.test.*; import jdk.jpackage.test.Annotations.*; /* @@ -42,13 +41,13 @@ * @summary jpackage basic testing * @library ../../../../helpers * @build jdk.jpackage.test.* - * @modules jdk.jpackage + * @modules jdk.jpackage/jdk.jpackage.internal * @compile BasicTest.java * @run main/othervm/timeout=360 -Xmx512m jdk.jpackage.test.Main * --jpt-run=jdk.jpackage.tests.BasicTest */ -public class BasicTest { +public final class BasicTest { @Test public void testNoArgs() { List output = JPackageCommand.filterOutput( @@ -69,11 +68,101 @@ } @Test + public void testHelp() { + List hOutput = getJPackageToolProvider() + .addArgument("-h").executeAndGetOutput(); + List helpOutput = getJPackageToolProvider() + .addArgument("--help").executeAndGetOutput(); + + TKit.assertStringListEquals(hOutput, helpOutput, + "Check -h and --help parameters produce the same output"); + + final String windowsPrefix = "--win-"; + final String linuxPrefix = "--linux-"; + final String osxPrefix = "--mac-"; + + final String expectedPrefix; + final List unexpectedPrefixes; + + if (TKit.isWindows()) { + expectedPrefix = windowsPrefix; + unexpectedPrefixes = List.of(osxPrefix, linuxPrefix); + } else if (TKit.isLinux()) { + expectedPrefix = linuxPrefix; + unexpectedPrefixes = List.of(windowsPrefix, osxPrefix); + } else if (TKit.isOSX()) { + expectedPrefix = osxPrefix; + unexpectedPrefixes = List.of(linuxPrefix, windowsPrefix); + } else { + throw TKit.throwUnknownPlatformError(); + } + + Function> createPattern = (prefix) -> { + return Pattern.compile("^ " + prefix).asPredicate(); + }; + + Function, Long> countStrings = (prefixes) -> { + return hOutput.stream().filter( + prefixes.stream().map(createPattern).reduce(x -> false, + Predicate::or)).peek(TKit::trace).count(); + }; + + TKit.trace("Check parameters in help text"); + TKit.assertNotEquals(0, countStrings.apply(List.of(expectedPrefix)), + "Check help text contains plaform specific parameters"); + TKit.assertEquals(0, countStrings.apply(unexpectedPrefixes), + "Check help text doesn't contain unexpected parameters"); + } + + @Test + public void testVerbose() { + JPackageCommand cmd = JPackageCommand.helloAppImage() + .setFakeRuntime().executePrerequisiteActions(); + + List expectedVerboseOutputStrings = new ArrayList<>(); + expectedVerboseOutputStrings.add("Creating app package:"); + if (TKit.isWindows()) { + expectedVerboseOutputStrings.add("Result application bundle:"); + expectedVerboseOutputStrings.add( + "Succeeded in building Windows Application Image package"); + } else if (TKit.isLinux()) { + expectedVerboseOutputStrings.add( + "Succeeded in building Linux Application Image package"); + } else if (TKit.isOSX()) { + expectedVerboseOutputStrings.add("Preparing Info.plist:"); + expectedVerboseOutputStrings.add( + "Succeeded in building Mac Application Image package"); + } else { + TKit.throwUnknownPlatformError(); + } + + TKit.deleteDirectoryContentsRecursive(cmd.outputDir()); + List nonVerboseOutput = cmd.createExecutor().executeAndGetOutput(); + + TKit.deleteDirectoryContentsRecursive(cmd.outputDir()); + List verboseOutput = cmd.createExecutor().addArgument( + "--verbose").executeAndGetOutput(); + + TKit.assertTrue(nonVerboseOutput.size() < verboseOutput.size(), + "Check verbose output is longer than regular"); + + expectedVerboseOutputStrings.forEach(str -> { + TKit.assertTextStream(str).label("regular output") + .predicate(String::contains).negate() + .apply(nonVerboseOutput.stream()); + }); + + expectedVerboseOutputStrings.forEach(str -> { + TKit.assertTextStream(str).label("verbose output") + .apply(verboseOutput.stream()); + }); + } + + @Test public void testNoName() { final String mainClassName = "Greetings"; - JPackageCommand cmd = new JPackageCommand() - .helloAppImage(mainClassName) + JPackageCommand cmd = JPackageCommand.helloAppImage(mainClassName) .removeArgumentWithValue("--name"); Path expectedImageDir = cmd.outputDir().resolve(mainClassName); @@ -84,51 +173,60 @@ cmd.executeAndAssertHelloAppImageCreated(); TKit.assertEquals(expectedImageDir.toAbsolutePath().normalize().toString(), - cmd.appImage().toAbsolutePath().normalize().toString(), + cmd.outputBundle().toAbsolutePath().normalize().toString(), String.format( "Check [%s] directory is filled with application image data", expectedImageDir)); } @Test - public void testApp() { - new JPackageCommand() - .helloAppImage() + // Regular app + @Parameter("Hello") + // Modular app + @Parameter("com.other/com.other.Hello") + public void testApp(String javaAppDesc) { + JPackageCommand.helloAppImage(javaAppDesc) .executeAndAssertHelloAppImageCreated(); } @Test - public void testModularApp() { - new JPackageCommand() - .helloAppImage("com.other/com.other.Hello") + public void testWhitespaceInPaths() { + JPackageCommand.helloAppImage("a/b c.jar:Hello") + .setArgumentValue("--input", TKit.workDir().resolve("The quick brown fox")) + .setArgumentValue("--dest", TKit.workDir().resolve("jumps over the lazy dog")) .executeAndAssertHelloAppImageCreated(); } @Test @Parameter("ALL-MODULE-PATH") @Parameter("ALL-DEFAULT") - @Parameter("jdk.desktop,jdk.jartool") - public void testAddModules(String addModulesArg) { - JPackageCommand cmd = new JPackageCommand() - .helloAppImage("com.other/com.other.Hello"); - if (!addModulesArg.isEmpty()) { - cmd.addArguments("--add-modules", addModulesArg); - } + @Parameter("java.desktop") + @Parameter("java.desktop,jdk.jartool") + @Parameter({ "java.desktop", "jdk.jartool" }) + public void testAddModules(String... addModulesArg) { + JPackageCommand cmd = JPackageCommand + .helloAppImage("goodbye.jar:com.other/com.other.Hello"); + Stream.of(addModulesArg).map(v -> Stream.of("--add-modules", v)).flatMap( + s -> s).forEachOrdered(cmd::addArgument); cmd.executeAndAssertHelloAppImageCreated(); } /** * Test --temp option. Doesn't make much sense for app image as temporary - * directory is used only on Windows. + * directory is used only on Windows. Test it in packaging mode. * @throws IOException */ -// @Test + @Test public void testTemp() throws IOException { - JPackageCommand cmd = new JPackageCommand().helloAppImage(); + JPackageCommand cmd = JPackageCommand.helloAppImage() + .removeArgumentWithValue("--package-type") + .addArguments("--verbose") + .setFakeRuntime(); + TKit.withTempDirectory("temp-root", tempDir -> { cmd.addArguments("--temp", tempDir); - cmd.executeAndAssertHelloAppImageCreated(); + cmd.execute().assertExitCodeIsZero(); // Check jpackage actually used the supplied directory. TKit.assertNotEquals(0, tempDir.toFile().list().length, @@ -144,7 +242,7 @@ @Test public void testAtFile() throws IOException { - JPackageCommand cmd = new JPackageCommand().helloAppImage(); + JPackageCommand cmd = JPackageCommand.helloAppImage(); // Init options file with the list of options configured // for JPackageCommand instance. @@ -211,8 +309,7 @@ cmd.addArguments("--runtime-image", runtimeDir); cmd.executeAndAssertHelloAppImageCreated(); - final Path appImageRuntimePath = cmd.appImage().resolve( - cmd.appRuntimeDirectoryInAppImage()); + final Path appImageRuntimePath = cmd.appRuntimeDirectory(); // // This is an overkill to list modules in jlink output as we have @@ -251,8 +348,6 @@ } private static Executor getToolProvider(JavaTool tool) { - return new Executor() - .dumpOutput().saveOutput() - .setToolProvider(tool.asToolProvider()); + return new Executor().dumpOutput().saveOutput().setToolProvider(tool); } }