diff --git a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java index 907798a735b89..e5f9ad97cfcb0 100644 --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java @@ -551,16 +551,13 @@ public boolean processArguments() { generateBundle(bp.getBundleParamsAsMap()); return true; } catch (Exception e) { - if (Log.isVerbose()) { - Log.verbose(e); - } else { - String msg1 = e.getMessage(); - Log.fatalError(msg1); - if (e.getCause() != null && e.getCause() != e) { - String msg2 = e.getCause().getMessage(); - if (msg2 != null && !msg1.contains(msg2)) { - Log.fatalError(msg2); - } + Log.verbose(e); + String msg1 = e.getMessage(); + Log.fatalError(msg1); + if (e.getCause() != null && e.getCause() != e) { + String msg2 = e.getCause().getMessage(); + if (msg2 != null && !msg1.contains(msg2)) { + Log.fatalError(msg2); } } return false; diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java index fc5adf7fdea64..77e3b772cfadf 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java @@ -42,7 +42,6 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; -import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -1174,16 +1173,20 @@ public static String escapeAndJoin(List args) { } public static Stream stripTimestamps(Stream stream) { - // [HH:mm:ss.SSS] - final Pattern timestampRegexp = Pattern.compile( - "^\\[\\d\\d:\\d\\d:\\d\\d.\\d\\d\\d\\] "); - return stream.map(str -> { - Matcher m = timestampRegexp.matcher(str); - if (m.find()) { - str = str.substring(m.end()); - } + return stream.map(JPackageCommand::stripTimestamp); + } + + public static String stripTimestamp(String str) { + final var m = TIMESTAMP_REGEXP.matcher(str); + if (m.find()) { + return str.substring(m.end()); + } else { return str; - }); + } + } + + public static boolean withTimestamp(String str) { + return TIMESTAMP_REGEXP.matcher(str).find(); } @Override @@ -1279,4 +1282,8 @@ public void run() { }).get(); private static final String UNPACKED_PATH_ARGNAME = "jpt-unpacked-folder"; + + // [HH:mm:ss.SSS] + private static final Pattern TIMESTAMP_REGEXP = Pattern.compile( + "^\\[\\d\\d:\\d\\d:\\d\\d.\\d\\d\\d\\] "); } diff --git a/test/jdk/tools/jpackage/share/BasicTest.java b/test/jdk/tools/jpackage/share/BasicTest.java index fe988533a28bd..68c1b2c76cb0d 100644 --- a/test/jdk/tools/jpackage/share/BasicTest.java +++ b/test/jdk/tools/jpackage/share/BasicTest.java @@ -22,32 +22,34 @@ */ +import static jdk.jpackage.test.RunnablePackageTest.Action.CREATE_AND_UNPACK; + import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.List; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Optional; import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Stream; -import jdk.jpackage.test.TKit; +import jdk.jpackage.internal.util.function.ThrowingConsumer; +import jdk.jpackage.test.Annotations.Parameter; +import jdk.jpackage.test.Annotations.ParameterSupplier; +import jdk.jpackage.test.Annotations.Test; +import jdk.jpackage.test.CannedFormattedString; +import jdk.jpackage.test.Executor; +import jdk.jpackage.test.HelloApp; import jdk.jpackage.test.JPackageCommand; import jdk.jpackage.test.JPackageStringBundle; import jdk.jpackage.test.JavaAppDesc; -import jdk.jpackage.test.PackageTest; -import jdk.jpackage.test.HelloApp; -import jdk.jpackage.test.Executor; import jdk.jpackage.test.JavaTool; -import jdk.jpackage.test.Annotations.Test; -import jdk.jpackage.test.Annotations.Parameter; -import jdk.jpackage.test.Annotations.ParameterSupplier; -import jdk.jpackage.internal.util.function.ThrowingConsumer; +import jdk.jpackage.test.PackageTest; +import jdk.jpackage.test.TKit; import jdk.tools.jlink.internal.LinkableRuntimeImage; -import static jdk.jpackage.test.RunnablePackageTest.Action.CREATE_AND_UNPACK; /* * @test @@ -228,6 +230,29 @@ public void testVerbose() { }); } + @Test + @Parameter("false") + @Parameter("true") + public void testErrorsAlwaysPrinted(boolean verbose) { + final var cmd = JPackageCommand.helloAppImage() + .ignoreDefaultVerbose(true) + .useToolProvider(false) + .removeArgumentWithValue("--main-class"); + + if (verbose) { + cmd.addArgument("--verbose"); + } + + final var textVerifier = Stream.of( + List.of("error.no-main-class-with-main-jar", "hello.jar"), + List.of("error.no-main-class-with-main-jar.advice", "hello.jar") + ).map(args -> { + return JPackageStringBundle.MAIN.cannedFormattedString(args.getFirst(), args.subList(1, args.size()).toArray()); + }).map(CannedFormattedString::getValue).map(TKit::assertTextStream).reduce(TKit.TextStreamVerifier::andThen).orElseThrow(); + + textVerifier.apply(cmd.saveConsoleOutput(true).execute(1).getOutput().stream().filter(Predicate.not(JPackageCommand::withTimestamp))); + } + @Test public void testNoName() { final String mainClassName = "Greetings";