🐛 Fix number suggestions. Again.
This commit is contained in:
parent
15526c95ed
commit
fd0658d320
2 changed files with 47 additions and 21 deletions
|
|
@ -35,9 +35,9 @@ import java.util.Collections;
|
|||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class IntegerArgument<C> extends CommandArgument<C, Integer> {
|
||||
|
|
@ -190,28 +190,29 @@ public final class IntegerArgument<C> extends CommandArgument<C, Integer> {
|
|||
}
|
||||
|
||||
static @NonNull List<@NonNull String> getSuggestions(final long min, final long max, final @NonNull String input) {
|
||||
if (input.isEmpty()) {
|
||||
return IntStream.range(0, MAX_SUGGESTIONS_INCREMENT).mapToObj(Integer::toString).collect(Collectors.toList());
|
||||
} else if (input.equals("-")) {
|
||||
return IntStream
|
||||
.range((MAX_SUGGESTIONS_INCREMENT - 1) * -1, 0)
|
||||
.mapToObj(Integer::toString)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
final Set<Long> numbers = new TreeSet<>();
|
||||
|
||||
try {
|
||||
final long inputNum = Long.parseLong(input);
|
||||
if (inputNum > max) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
if (inputNum < min) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
final List<String> suggestions = new LinkedList<>();
|
||||
suggestions.add(input); /* It's a valid number, so we suggest it */
|
||||
final long inputNum = Long.parseLong(input.equals("-") ? "-0" : input.isEmpty() ? "0" : input);
|
||||
final long inputNumAbsolute = Math.abs(inputNum);
|
||||
|
||||
numbers.add(inputNumAbsolute); /* It's a valid number, so we suggest it */
|
||||
for (int i = 0; i < MAX_SUGGESTIONS_INCREMENT
|
||||
&& (inputNum * NUMBER_SHIFT_MULTIPLIER) + i <= max; i++) {
|
||||
suggestions.add(Long.toString((inputNum * NUMBER_SHIFT_MULTIPLIER) + i));
|
||||
numbers.add((inputNumAbsolute * NUMBER_SHIFT_MULTIPLIER) + i);
|
||||
}
|
||||
|
||||
final List<String> suggestions = new LinkedList<>();
|
||||
for (long number : numbers) {
|
||||
if (input.startsWith("-")) {
|
||||
number = -number; /* Preserve sign */
|
||||
}
|
||||
if (number < min || number > max) {
|
||||
continue;
|
||||
}
|
||||
suggestions.add(String.valueOf(number));
|
||||
}
|
||||
|
||||
return suggestions;
|
||||
} catch (final Exception ignored) {
|
||||
return Collections.emptyList();
|
||||
|
|
|
|||
|
|
@ -79,6 +79,11 @@ public class CommandSuggestionsTest {
|
|||
.flag(manager.flagBuilder("static")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
manager.command(manager.commandBuilder("numbers").argument(IntegerArgument.of("num")));
|
||||
|
||||
manager.command(manager.commandBuilder("numberswithmin")
|
||||
.argument(IntegerArgument.<TestCommandSender>newBuilder("num").withMin(5).withMax(100)));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -124,7 +129,7 @@ public class CommandSuggestionsTest {
|
|||
Assertions.assertEquals(Arrays.asList("one", "two"), suggestions);
|
||||
final String input2 = "test comb one ";
|
||||
final List<String> suggestions2 = manager.suggest(new TestCommandSender(), input2);
|
||||
Assertions.assertEquals(Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"), suggestions2);
|
||||
Assertions.assertEquals(Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9"), suggestions2);
|
||||
final String input3 = "test comb one 9";
|
||||
final List<String> suggestions3 = manager.suggest(new TestCommandSender(), input3);
|
||||
Assertions.assertEquals(Arrays.asList("9", "90", "91", "92", "93", "94", "95"), suggestions3);
|
||||
|
|
@ -166,6 +171,26 @@ public class CommandSuggestionsTest {
|
|||
Assertions.assertEquals(Collections.singletonList("--static"), suggestions3);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNumbers() {
|
||||
final String input = "numbers ";
|
||||
final List<String> suggestions = manager.suggest(new TestCommandSender(), input);
|
||||
Assertions.assertEquals(Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"), suggestions);
|
||||
final String input2 = "numbers 1";
|
||||
final List<String> suggestions2 = manager.suggest(new TestCommandSender(), input2);
|
||||
Assertions.assertEquals(Arrays.asList("1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"), suggestions2);
|
||||
final String input3 = "numbers -";
|
||||
final List<String> suggestions3 = manager.suggest(new TestCommandSender(), input3);
|
||||
Assertions.assertEquals(Arrays.asList("-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9"), suggestions3);
|
||||
final String input4 = "numbers -1";
|
||||
final List<String> suggestions4 = manager.suggest(new TestCommandSender(), input4);
|
||||
Assertions.assertEquals(Arrays.asList("-1", "-10", "-11", "-12", "-13", "-14", "-15", "-16", "-17", "-18", "-19"),
|
||||
suggestions4);
|
||||
final String input5 = "numberswithmin ";
|
||||
final List<String> suggestions5 = manager.suggest(new TestCommandSender(), input5);
|
||||
Assertions.assertEquals(Arrays.asList("5", "6", "7", "8", "9"), suggestions5);
|
||||
}
|
||||
|
||||
|
||||
public enum TestEnum {
|
||||
FOO,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue