Skip to content

Commit 45f4368

Browse files
committed
Fix qualified commands
1 parent adecd82 commit 45f4368

5 files changed

Lines changed: 62 additions & 8 deletions

File tree

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "io.github.vaperion.blade"
9-
version = "1.0.33"
9+
version = "1.0.34"
1010

1111
subprojects {
1212
apply(plugin = "io.freefair.lombok")

core/src/main/java/me/vaperion/blade/util/BladeHelper.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,8 @@ static String removeCommandQualifier(@NotNull String input) {
160160
return input;
161161
}
162162

163-
if (firstSpace == -1) {
164-
return (startsWithSlash ? "/" : "") +
165-
input.substring(colonIndex + 1);
166-
}
167-
168163
return (startsWithSlash ? "/" : "") +
169-
input.substring(colonIndex + 1) +
170-
input.substring(firstSpace);
164+
input.substring(colonIndex + 1);
171165
}
172166

173167
}

core/src/test/java/me/vaperion/blade/BladeHelperTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,27 @@
66

77
public class BladeHelperTest {
88

9+
@Test
10+
public void commandQualifierRemovalKeepsArgumentsOnce() {
11+
Assertions.assertEquals(
12+
"/lorem ipsum dolor",
13+
BladeHelper.removeCommandQualifier("/test:lorem ipsum dolor")
14+
);
15+
16+
Assertions.assertEquals(
17+
"lorem ipsum dolor",
18+
BladeHelper.removeCommandQualifier("test:lorem ipsum dolor")
19+
);
20+
}
21+
22+
@Test
23+
public void commandQualifierRemovalIgnoresArgumentColons() {
24+
Assertions.assertEquals(
25+
"/lorem ipsum foo:bar",
26+
BladeHelper.removeCommandQualifier("/lorem ipsum foo:bar")
27+
);
28+
}
29+
930
@Test
1031
public void suggestionArgumentsPreserveTrailingEmptyArgument() {
1132
Assertions.assertArrayEquals(

core/src/test/java/me/vaperion/blade/OverloadTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.util.List;
2222
import java.util.Objects;
2323

24+
import static me.vaperion.blade.util.BladeHelper.removeCommandQualifier;
25+
2426
public class OverloadTest {
2527

2628
@BeforeEach
@@ -206,6 +208,30 @@ public void suggestionsOnlyComeFromOverloadsMatchingTypedArguments() {
206208
);
207209
}
208210

211+
@Test
212+
public void classLevelMultiWordLabelDoesNotConsumeSubcommandAsArgument() {
213+
Blade blade = BladeTestPlatform.createInstance();
214+
blade.register(OverloadedCommands.LoremCommands.class);
215+
216+
ErrorMessage error = execute(blade, "lorem ipsum dolor");
217+
218+
Assertions.assertNotNull(error);
219+
Assertions.assertEquals(ErrorMessage.Type.SHOW_COMMAND_USAGE, error.type());
220+
Assertions.assertTrue(OverloadedCommands.INVOCATIONS.isEmpty());
221+
}
222+
223+
@Test
224+
public void qualifiedClassLevelMultiWordLabelDoesNotConsumeSubcommandAsArgument() {
225+
Blade blade = BladeTestPlatform.createInstance();
226+
blade.register(OverloadedCommands.LoremCommands.class);
227+
228+
ErrorMessage error = execute(blade, removeCommandQualifier("test:lorem ipsum dolor"));
229+
230+
Assertions.assertNotNull(error);
231+
Assertions.assertEquals(ErrorMessage.Type.SHOW_COMMAND_USAGE, error.type());
232+
Assertions.assertTrue(OverloadedCommands.INVOCATIONS.isEmpty());
233+
}
234+
209235
@Test
210236
public void unregisteringOneOverloadKeepsTheOthers() throws Exception {
211237
Blade blade = BladeTestPlatform.createInstance();

core/src/testFixtures/java/me/vaperion/blade/test/commands/OverloadedCommands.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,19 @@ public static void paintShapes(@Name("first") @NotNull Shape first,
8080
INVOCATIONS.add("shapes=" + first + "," + second);
8181
}
8282

83+
@Command("hello world")
84+
public static void helloWorld(@Name("arg") @NotNull String arg) {
85+
INVOCATIONS.add("helloWorld=" + arg);
86+
}
87+
88+
@Command("lorem")
89+
public static final class LoremCommands {
90+
@Command("ipsum dolor")
91+
public static void dolor(@Name("arg") @NotNull String arg) {
92+
INVOCATIONS.add("dolor=" + arg);
93+
}
94+
}
95+
8396
public enum Color {RED, GREEN}
8497

8598
public enum Shape {CIRCLE, SQUARE}

0 commit comments

Comments
 (0)