diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 360226d..4ba5097 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,23 +5,15 @@
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -73,6 +65,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -114,14 +119,17 @@
"Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [:kencommandapi-core:de.kentoj.kencommandapi.Main.main()].executor": "Run",
"Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [build].executor": "Run",
"Gradle./home/a/src/kento2/KenCommandAPI/kencommandapi-core [publish].executor": "Run",
+ "Gradle.CommandParserTest.checkArgumentExpected.executor": "Run",
"Gradle.Download Sources.executor": "Run",
"Gradle.KenCommandAPI [:de.kencommand.Main.main()].executor": "Run",
"Gradle.KenCommandAPI [assemble].executor": "Run",
"Gradle.KenCommandAPI [buildEnvironment].executor": "Run",
"Gradle.KenCommandAPI [build].executor": "Run",
+ "Gradle.KenCommandAPI [clean test].executor": "Run",
"Gradle.KenCommandAPI [clean].executor": "Run",
"Gradle.KenCommandAPI [publishAllPublicationsToScrowRepository].executor": "Run",
"Gradle.KenCommandAPI [publish].executor": "Run",
+ "Gradle.KenCommandAPI [test].executor": "Run",
"Gradle.KenCommandAPI:kencommandapi-bukkit [build].executor": "Run",
"Gradle.KenCommandAPI:kencommandapi-bukkit [generatePomFileForKenCommandAPIBukkitPublication].executor": "Run",
"Gradle.KenCommandAPI:kencommandapi-bukkit [publishAllPublicationsToScrowRepository].executor": "Run",
@@ -170,10 +178,12 @@
+
+
-
-
+
+
@@ -184,51 +194,32 @@
- true
+ false
true
false
- false
+ true
-
+
-
-
-
-
-
-
-
-
-
-
-
- true
- true
- false
- false
-
-
-
-
-
-
-
-
+
+
@@ -283,13 +274,35 @@
false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+ false
+
+
+
+
+
-
-
-
diff --git a/build.gradle.kts b/build.gradle.kts
index 98b647e..8c27e8d 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,5 +1,5 @@
group = "de.kentoj.scrow"
-version = "0.31"
+version = "0.32"
subprojects {
group = rootProject.group
diff --git a/kencommandapi-core/build.gradle.kts b/kencommandapi-core/build.gradle.kts
index 3e72210..b88b7c4 100644
--- a/kencommandapi-core/build.gradle.kts
+++ b/kencommandapi-core/build.gradle.kts
@@ -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("KenCommandAPI") {
diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/CommandParser.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/CommandParser.java
index 638b9c5..030e4d2 100644
--- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/CommandParser.java
+++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/CommandParser.java
@@ -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 {
final Iterator argStrIter = Arrays.stream(args).iterator();
final Map> 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 {
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")
diff --git a/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/CommandHandlerTest.java b/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/CommandHandlerTest.java
new file mode 100644
index 0000000..28d9542
--- /dev/null
+++ b/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/CommandHandlerTest.java
@@ -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);
+ }
+}
diff --git a/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/CommandParserTest.java b/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/CommandParserTest.java
new file mode 100644
index 0000000..eb0ef57
--- /dev/null
+++ b/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/CommandParserTest.java
@@ -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