.
This commit is contained in:
parent
ac804b6c5b
commit
8897579a12
7 changed files with 165 additions and 52 deletions
|
|
@ -10,9 +10,24 @@ repositories {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-api:6.1.1")
|
||||
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-engine:6.1.1")
|
||||
// https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher
|
||||
testImplementation("org.junit.platform:junit-platform-launcher:6.1.1")
|
||||
testImplementation("net.kyori:adventure-api:5.2.0")
|
||||
|
||||
compileOnly("net.kyori:adventure-api:5.2.0")
|
||||
}
|
||||
|
||||
tasks.test {
|
||||
useJUnitPlatform()
|
||||
testLogging {
|
||||
showStandardStreams = true
|
||||
}
|
||||
}
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
create<MavenPublication>("KenCommandAPI") {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
|||
import de.kentoj.kencommandapi.api.platform.HasPermissionMethod;
|
||||
import de.kentoj.kencommandapi.internal.ParsedArgumentImpl;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
|
@ -25,7 +26,7 @@ public class CommandParser<T> {
|
|||
final Iterator<String> argStrIter = Arrays.stream(args).iterator();
|
||||
final Map<String, ParsedArgument<T, ?>> parsedArguments = new HashMap<>();
|
||||
|
||||
while (argStrIter.hasNext()) {
|
||||
while (true) {
|
||||
for (var nodeArg : cur.getArguments()) {
|
||||
var parsed = parseArgument(rootNode, nodeArg, argStrIter, sender, parseArgs);
|
||||
if (parsed.hasFailure())
|
||||
|
|
@ -48,10 +49,6 @@ public class CommandParser<T> {
|
|||
return new ParseResult.NoPermission<>(cur, argStr);
|
||||
cur = nextNode;
|
||||
}
|
||||
|
||||
if (cur.getExecutor() == null)
|
||||
return new ParseResult.LiteralExpected<>(cur);
|
||||
return new ParseResult.Success<>(cur, parsedArguments);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
package de.kentoj.kencommandapi.api.parser;
|
||||
|
||||
import de.kentoj.kencommandapi.api.CommandHandler;
|
||||
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
||||
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||
import de.kentoj.kencommandapi.api.platform.MessageStyle;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class CommandHandlerTest {
|
||||
|
||||
@Test
|
||||
void testSuggestions() {
|
||||
var rootNode = CommandNode.rootNode(MessageStyle.PLAIN, "someRootNode");
|
||||
var arg = CommandArgument.arg("someArg", new StringArgumentType<>());
|
||||
arg.setSuggestionProvider(__ -> List.of("a", "b", "c"));
|
||||
rootNode.addArgument(arg);
|
||||
rootNode.setExecutor(ENV.EMPTY_EXECUTOR);
|
||||
|
||||
var handler = new CommandHandler<>(
|
||||
new CommandParser<>((__, ___) -> true),
|
||||
(__, ___) -> {},
|
||||
(__, ___) -> true
|
||||
);
|
||||
var suggestions = handler.getSuggestions(rootNode, ENV.SENDER, new String[0]);
|
||||
assertEquals(List.of("a", "b", "c"), suggestions);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package de.kentoj.kencommandapi.api.parser;
|
||||
|
||||
import com.leakyabstractions.result.core.Results;
|
||||
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
||||
import de.kentoj.kencommandapi.api.argument.types.StringArgumentType;
|
||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
||||
import de.kentoj.kencommandapi.api.invocation.ParsedArgument;
|
||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||
import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||
import de.kentoj.kencommandapi.api.platform.MessageStyle;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
||||
|
||||
public class CommandParserTest {
|
||||
|
||||
@Test
|
||||
void checkArgumentExpected() {
|
||||
RootCommandNode<Object> node = CommandNode.rootNode(MessageStyle.PLAIN, "someRootNode");
|
||||
var arg = CommandArgument.arg("someArg", new StringArgumentType<>(false));
|
||||
node.addArgument(arg);
|
||||
|
||||
var parsed = ENV.PARSER.parseLiteral(node, ENV.SENDER, new String[]{}, false);
|
||||
assertInstanceOf(ParseResult.ArgumentExpected.class, parsed);
|
||||
}
|
||||
|
||||
@Test
|
||||
void checkGreedyStrings() {
|
||||
RootCommandNode<Object> node = CommandNode.rootNode(MessageStyle.PLAIN, "someRootNode");
|
||||
var arg = CommandArgument.arg("someArg", new StringArgumentType<>(true));
|
||||
node.addArgument(arg);
|
||||
node.setExecutor(ENV.EMPTY_EXECUTOR);
|
||||
|
||||
var parsed = ENV.PARSER.parseLiteral(node, ENV.SENDER, new String[]{"part1", "part2"}, true);
|
||||
Map<String, ParsedArgument<Object, ?>> parsedStr = ((ParseResult.Success<Object>) parsed).getParsedArguments();
|
||||
String str = (String) parsedStr.get("someArg").getValue();
|
||||
assertEquals("part1 part2", str);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package de.kentoj.kencommandapi.api.parser;
|
||||
|
||||
import com.leakyabstractions.result.core.Results;
|
||||
import de.kentoj.kencommandapi.api.invocation.CommandExecutor;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class ENV {
|
||||
public static final CommandParser<Object> PARSER = new CommandParser<>((__, ___) -> true);
|
||||
public static final Object SENDER = new Object();
|
||||
public static final CommandExecutor<Object> EMPTY_EXECUTOR = __ ->
|
||||
CompletableFuture.completedFuture(Results.success(new Object()));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue