From 0309d12540e8982e184118faba044accd21b078d Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 6 Jul 2022 11:12:08 +0200 Subject: [PATCH] Test loop/group arguments Signed-off-by: TheMode --- .../command/builder/CommandContext.java | 17 ++++++ .../command/CommandSyntaxSingleTest.java | 55 +++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/src/main/java/net/minestom/server/command/builder/CommandContext.java b/src/main/java/net/minestom/server/command/builder/CommandContext.java index a581a68fd..b7506ae64 100644 --- a/src/main/java/net/minestom/server/command/builder/CommandContext.java +++ b/src/main/java/net/minestom/server/command/builder/CommandContext.java @@ -7,6 +7,7 @@ import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.function.Supplier; /** @@ -108,4 +109,20 @@ public class CommandContext { } } } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CommandContext that)) return false; + return Objects.equals(input, that.input) && + Objects.equals(commandName, that.commandName) && + Objects.equals(args, that.args) && + Objects.equals(rawArgs, that.rawArgs) && + Objects.equals(returnData, that.returnData); + } + + @Override + public int hashCode() { + return Objects.hash(input, commandName, args, rawArgs, returnData); + } } diff --git a/src/test/java/net/minestom/server/command/CommandSyntaxSingleTest.java b/src/test/java/net/minestom/server/command/CommandSyntaxSingleTest.java index 29b470a7e..165fbe343 100644 --- a/src/test/java/net/minestom/server/command/CommandSyntaxSingleTest.java +++ b/src/test/java/net/minestom/server/command/CommandSyntaxSingleTest.java @@ -1,15 +1,18 @@ package net.minestom.server.command; import net.minestom.server.command.builder.Command; +import net.minestom.server.command.builder.CommandContext; import net.minestom.server.command.builder.arguments.Argument; import org.junit.jupiter.api.Test; +import java.lang.String; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import static net.minestom.server.command.builder.arguments.ArgumentType.Integer; import static net.minestom.server.command.builder.arguments.ArgumentType.String; +import static net.minestom.server.command.builder.arguments.ArgumentType.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; @@ -54,6 +57,58 @@ public class CommandSyntaxSingleTest { assertSyntax(args, "", ExpectedExecution.DEFAULT); } + @Test + public void singleGroup() { + List> args = List.of(Group("loop", Integer("first"), Integer("second"))); + // 1 2 + { + var context = new CommandContext("1 2"); + context.setArg("first", 1, "1"); + context.setArg("second", 2, "2"); + assertSyntax(args, "1 2", ExpectedExecution.SYNTAX, Map.of("loop", context)); + } + // Incomplete group + assertSyntax(args, "1", ExpectedExecution.DEFAULT); + } + + @Test + public void singleLoop() { + List> stringLoop = List.of(Loop("loop", String("value"))); + assertSyntax(stringLoop, "one two three", ExpectedExecution.SYNTAX, Map.of("loop", List.of("one", "two", "three"))); + + List> intLoop = List.of(Loop("loop", Integer("value"))); + assertSyntax(intLoop, "1 2 3", ExpectedExecution.SYNTAX, Map.of("loop", List.of(1, 2, 3))); + } + + @Test + public void singleLoopGroup() { + List> groupLoop = List.of(Loop("loop", Group("group", Integer("first"), Integer("second")))); + // 1 2 + { + var context = new CommandContext("1 2"); + context.setArg("first", 1, "1"); + context.setArg("second", 2, "2"); + assertSyntax(groupLoop, "1 2", ExpectedExecution.SYNTAX, Map.of("loop", List.of(context))); + } + // 1 2 3 4 + { + var context1 = new CommandContext("1 2"); + var context2 = new CommandContext("3 4"); + + context1.setArg("first", 1, "1"); + context1.setArg("second", 2, "2"); + + context2.setArg("first", 3, "3"); + context2.setArg("second", 4, "4"); + + assertSyntax(groupLoop, "1 2 3 4", ExpectedExecution.SYNTAX, Map.of("loop", List.of(context1, context2))); + } + // Incomplete loop + assertSyntax(groupLoop, "1", ExpectedExecution.DEFAULT); + assertSyntax(groupLoop, "1 2 3", ExpectedExecution.DEFAULT); + assertSyntax(groupLoop, "1 2 3 4 5", ExpectedExecution.DEFAULT); + } + private static void assertSyntax(List> args, String input, ExpectedExecution expectedExecution, Map expectedValues) { final String commandName = "name";