.
This commit is contained in:
parent
ac804b6c5b
commit
8897579a12
7 changed files with 165 additions and 52 deletions
105
.idea/workspace.xml
generated
105
.idea/workspace.xml
generated
|
|
@ -5,23 +5,15 @@
|
|||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="6414223f-1761-4683-97f5-9dab59d6c44a" name="Changes" comment=".">
|
||||
<change afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/ScrowPublishConvention.kt" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/configureScrowRepo.kt" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/CommandHandlerTest.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/CommandParserTest.java" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/kencommandapi-core/src/test/java/de/kentoj/kencommandapi/api/parser/ENV.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/TODO" beforeDir="false" afterPath="$PROJECT_DIR$/TODO" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-bukkit/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-bukkit/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-core/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/CommandHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/CommandHandler.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/argument/CommandArgument.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/argument/CommandArgument.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/CommandParser.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/CommandParser.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/ParseResult.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/ParseResult.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/SuggestionProvider.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/SuggestionProvider.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/internal/CommandArgumentImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/internal/CommandArgumentImpl.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/kencommandapi-velocity/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/kencommandapi-velocity/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/settings.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/settings.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../build-logic/convention/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/../build-logic/convention/build.gradle.kts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/ScrowRepositoryConvention.kt" beforeDir="false" afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/ScrowRepositoryConvention.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/BaseDependenciesConvention.kt" beforeDir="false" afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/BaseDependenciesConvention.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/ScrowPublishConvention.kt" beforeDir="false" afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/ScrowPublishConvention.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/configureScrowRepo.kt" beforeDir="false" afterPath="$PROJECT_DIR$/../build-logic/convention/src/main/kotlin/scrow/configureScrowRepo.kt" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
|
@ -73,6 +65,19 @@
|
|||
<item name="Tasks" type="e4a08cd1:TasksNode" />
|
||||
<item name="publishing" type="c8890929:TasksNode$1" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
|
||||
<item name="KenCommandAPI" type="f1a62948:ProjectNode" />
|
||||
<item name="KenCommandAPI" type="2d1252cf:ModuleNode" />
|
||||
<item name="kencommandapi-bukkit" type="2d1252cf:ModuleNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
|
||||
<item name="KenCommandAPI" type="f1a62948:ProjectNode" />
|
||||
<item name="KenCommandAPI" type="2d1252cf:ModuleNode" />
|
||||
<item name="kencommandapi-bukkit" type="2d1252cf:ModuleNode" />
|
||||
<item name="Tasks" type="e4a08cd1:TasksNode" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</tree_state>
|
||||
|
|
@ -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 @@
|
|||
<command value="publishAll" />
|
||||
<command value="KenCommandAPI [publishAllPublicationsToScrowRepository]" />
|
||||
<command value="gradlew buildEnvironment" />
|
||||
<command value="./gradlew clean test" />
|
||||
<command value="gradlew test" />
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager" selected="Gradle.KenCommandAPI [publish]">
|
||||
<configuration name="KenCommandAPI [buildEnvironment]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
|
||||
<component name="RunManager" selected="Gradle.KenCommandAPI [test]">
|
||||
<configuration name="CommandParserTest.checkArgumentExpected" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
|
|
@ -184,51 +194,32 @@
|
|||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="buildEnvironment" />
|
||||
<option value=":kencommandapi-core:test" />
|
||||
<option value="--tests" />
|
||||
<option value=""de.kentoj.kencommandapi.api.parser.CommandParserTest.checkArgumentExpected"" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" />
|
||||
</ExternalSystemSettings>
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemDebugServerProcess>false</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<RunAsTest>false</RunAsTest>
|
||||
<RunAsTest>true</RunAsTest>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="KenCommandAPI [build]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
|
||||
<configuration name="KenCommandAPI [clean test]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="build" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" />
|
||||
</ExternalSystemSettings>
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<RunAsTest>false</RunAsTest>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="KenCommandAPI [clean]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" />
|
||||
<option name="scriptParameters" value="" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="clean" />
|
||||
<option value="test" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" />
|
||||
|
|
@ -283,13 +274,35 @@
|
|||
<RunAsTest>false</RunAsTest>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<configuration name="KenCommandAPI [test]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
|
||||
<ExternalSystemSettings>
|
||||
<option name="executionName" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="externalSystemIdString" value="GRADLE" />
|
||||
<option name="scriptParameters" value="" />
|
||||
<option name="taskDescriptions">
|
||||
<list />
|
||||
</option>
|
||||
<option name="taskNames">
|
||||
<list>
|
||||
<option value="test" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="vmOptions" />
|
||||
</ExternalSystemSettings>
|
||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||
<DebugAllEnabled>false</DebugAllEnabled>
|
||||
<RunAsTest>false</RunAsTest>
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="Gradle.KenCommandAPI [test]" />
|
||||
<item itemvalue="Gradle.KenCommandAPI [clean test]" />
|
||||
<item itemvalue="Gradle.CommandParserTest.checkArgumentExpected" />
|
||||
<item itemvalue="Gradle.KenCommandAPI [publish]" />
|
||||
<item itemvalue="Gradle.KenCommandAPI [publishAllPublicationsToScrowRepository]" />
|
||||
<item itemvalue="Gradle.KenCommandAPI [build]" />
|
||||
<item itemvalue="Gradle.KenCommandAPI [buildEnvironment]" />
|
||||
<item itemvalue="Gradle.KenCommandAPI [clean]" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
group = "de.kentoj.scrow"
|
||||
version = "0.31"
|
||||
version = "0.32"
|
||||
|
||||
subprojects {
|
||||
group = rootProject.group
|
||||
|
|
|
|||
|
|
@ -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