Skip to content

Commit fe806a0

Browse files
czpilarfmbenhassine
authored andcommitted
Fix regression in command help options
The regression was introduced in 84abfda Signed-off-by: David Pilar <david@czpilar.net>
1 parent 6c4035d commit fe806a0

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

spring-shell-core/src/main/java/org/springframework/shell/core/command/DefaultCommandParser.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,20 @@ public ParsedInput parse(String input) {
5959

6060
// the first word is the (root) command name
6161
String commandName = words.get(0);
62+
ParsedInput.Builder parsedInputBuilder = ParsedInput.builder().commandName(commandName);
63+
if (words.size() == 1) {
64+
ParsedInput parsedInput = parsedInputBuilder.build();
65+
log.debug("Parsed input: " + parsedInput);
66+
return parsedInput;
67+
}
68+
69+
if (words.size() == 2 && (words.get(1).equals("--help") || words.get(1).equals("-h"))) {
70+
parsedInputBuilder.addOption(CommandOption.with().shortName('h').longName("help").value("true").build());
71+
ParsedInput parsedInput = parsedInputBuilder.build();
72+
log.debug("Parsed input: " + parsedInput);
73+
return parsedInput;
74+
}
75+
6276
List<String> remainingWords = words.subList(1, words.size());
6377

6478
int firstNonCommandWordIndex = 1;
@@ -76,7 +90,6 @@ public ParsedInput parse(String input) {
7690
: words.subList(1, firstNonCommandWordIndex);
7791

7892
// add command and sub commands
79-
ParsedInput.Builder parsedInputBuilder = ParsedInput.builder().commandName(commandName);
8093
for (String subCommand : subCommands) {
8194
parsedInputBuilder.addSubCommand(subCommand);
8295
}

spring-shell-core/src/test/java/org/springframework/shell/core/command/DefaultCommandParserTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.junit.jupiter.params.ParameterizedTest;
2222
import org.junit.jupiter.params.provider.Arguments;
2323
import org.junit.jupiter.params.provider.MethodSource;
24+
import org.junit.jupiter.params.provider.ValueSource;
2425

2526
import java.util.stream.Stream;
2627

@@ -314,6 +315,24 @@ static Stream<Arguments> parseWithBooleanOptionData() {
314315
Arguments.of("mycommand -o", "", 'o', Boolean.class, "true"));
315316
}
316317

318+
@ParameterizedTest
319+
@ValueSource(strings = { "mycommand --help", "mycommand -h" })
320+
void testParseWithHelpOption(String input) {
321+
// given
322+
Command command = createCommand("mycommand", "My test command");
323+
command.getOptions().add(CommandOption.with().longName("option").shortName('o').build());
324+
commandRegistry.registerCommand(command);
325+
// when
326+
ParsedInput parsedInput = parser.parse(input);
327+
328+
// then
329+
assertEquals("mycommand", parsedInput.commandName());
330+
assertEquals(1, parsedInput.options().size());
331+
assertEquals("help", parsedInput.options().get(0).longName());
332+
assertEquals('h', parsedInput.options().get(0).shortName());
333+
assertEquals("true", parsedInput.options().get(0).value());
334+
}
335+
317336
private static Command createCommand(String name, String description) {
318337
return new AbstractCommand(name, description) {
319338
@Override

0 commit comments

Comments
 (0)