From 5e57c3e97845254430ee6b73006cc3174db1ffc2 Mon Sep 17 00:00:00 2001 From: Philip Helger Date: Wed, 27 Aug 2025 18:14:09 +0200 Subject: [PATCH] Resolve "If the CLI is invoked without any parameter, the usage is shown twice" --- .../kosit/validationtool/cmd/CommandLineApplication.java | 7 +++---- .../validationtool/cmd/CommandlineApplicationTest.java | 8 ++++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java b/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java index b2a4fcd..09e3757 100644 --- a/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java +++ b/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java @@ -25,7 +25,6 @@ import org.fusesource.jansi.AnsiRenderer.Code; import de.kosit.validationtool.cmd.report.Line; import de.kosit.validationtool.impl.Printer; - import picocli.CommandLine; import picocli.CommandLine.ParseResult; @@ -79,11 +78,11 @@ public class CommandLineApplication { final CommandLine commandLine = new CommandLine(new CommandLineOptions()); try { commandLine.setExecutionExceptionHandler(CommandLineApplication::logExecutionException); - commandLine.execute(args); - if (commandLine.isUsageHelpRequested()) { + final int cmdlineRetVal = commandLine.execute(args); + if (commandLine.isUsageHelpRequested() || cmdlineRetVal == CommandLine.ExitCode.USAGE) { resultStatus = ReturnValue.HELP_REQUEST; } else { - resultStatus = ObjectUtils.defaultIfNull(commandLine.getExecutionResult(), ReturnValue.PARSING_ERROR); + resultStatus = ObjectUtils.getIfNull(commandLine.getExecutionResult(), ReturnValue.PARSING_ERROR); if (resultStatus.isError()) { commandLine.usage(System.out); } diff --git a/src/test/java/de/kosit/validationtool/cmd/CommandlineApplicationTest.java b/src/test/java/de/kosit/validationtool/cmd/CommandlineApplicationTest.java index 782d401..f8ce55d 100644 --- a/src/test/java/de/kosit/validationtool/cmd/CommandlineApplicationTest.java +++ b/src/test/java/de/kosit/validationtool/cmd/CommandlineApplicationTest.java @@ -84,6 +84,14 @@ public class CommandlineApplicationTest { assertThat(outputLines.stream().filter(l -> l.startsWith(CommandLineOptions.SYNOSIS_HEADING))).hasSize(1); } + @Test + public void testNoArguments() { + final String[] args = {}; + CommandLineApplication.mainProgram(args); + assertThat(CommandLine.getErrorOutput()).isNotEmpty(); + checkForHelp(CommandLine.getErrorLines()); + } + @Test public void testRequiredScenarioFile() { final String[] args = { "arguments", "egal welche", "argumente drin sind" };