mirror of https://github.com/Minestom/Minestom.git
130 lines
4.2 KiB
Java
130 lines
4.2 KiB
Java
package net.minestom.server.command;
|
|
|
|
import net.minestom.server.command.builder.Command;
|
|
import net.minestom.server.command.builder.CommandContext;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static net.minestom.server.command.builder.arguments.ArgumentType.Enum;
|
|
import static net.minestom.server.command.builder.arguments.ArgumentType.Integer;
|
|
import static net.minestom.server.command.builder.arguments.ArgumentType.*;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
public class GraphConversionTest {
|
|
@Test
|
|
public void empty() {
|
|
final Command foo = new Command("foo");
|
|
var graph = Graph.builder(Literal("foo")).build();
|
|
assertEqualsGraph(graph, foo);
|
|
}
|
|
|
|
@Test
|
|
public void singleLiteral() {
|
|
final Command foo = new Command("foo");
|
|
var first = Literal("first");
|
|
foo.addSyntax(GraphConversionTest::dummyExecutor, first);
|
|
var graph = Graph.builder(Literal("foo"))
|
|
.append(first).build();
|
|
assertEqualsGraph(graph, foo);
|
|
}
|
|
|
|
@Test
|
|
public void literalsPath() {
|
|
final Command foo = new Command("foo");
|
|
var first = Literal("first");
|
|
var second = Literal("second");
|
|
|
|
foo.addSyntax(GraphConversionTest::dummyExecutor, first);
|
|
foo.addSyntax(GraphConversionTest::dummyExecutor, second);
|
|
|
|
var graph = Graph.builder(Literal("foo"))
|
|
.append(first).append(second)
|
|
.build();
|
|
assertEqualsGraph(graph, foo);
|
|
}
|
|
|
|
@Test
|
|
public void doubleSyntax() {
|
|
enum A {A, B, C, D, E}
|
|
final Command foo = new Command("foo");
|
|
|
|
var bar = Literal("bar");
|
|
|
|
var baz = Literal("baz");
|
|
var a = Enum("a", A.class);
|
|
|
|
foo.addSyntax(GraphConversionTest::dummyExecutor, bar);
|
|
foo.addSyntax(GraphConversionTest::dummyExecutor, baz, a);
|
|
|
|
var graph = Graph.builder(Literal("foo"))
|
|
.append(bar)
|
|
.append(baz, builder ->
|
|
builder.append(a))
|
|
.build();
|
|
assertEqualsGraph(graph, foo);
|
|
}
|
|
|
|
@Test
|
|
public void doubleSyntaxMerge() {
|
|
final Command foo = new Command("foo");
|
|
|
|
var bar = Literal("bar");
|
|
var number = Integer("number");
|
|
|
|
foo.addSyntax(GraphConversionTest::dummyExecutor, bar);
|
|
foo.addSyntax(GraphConversionTest::dummyExecutor, bar, number);
|
|
|
|
// The two syntax shall start from the same node
|
|
var graph = Graph.builder(Literal("foo"))
|
|
.append(bar, builder -> builder.append(number))
|
|
.build();
|
|
assertEqualsGraph(graph, foo);
|
|
}
|
|
|
|
@Test
|
|
public void subcommand() {
|
|
final Command main = new Command("main");
|
|
final Command sub = new Command("sub");
|
|
|
|
var bar = Literal("bar");
|
|
var number = Integer("number");
|
|
|
|
sub.addSyntax(GraphConversionTest::dummyExecutor, bar);
|
|
sub.addSyntax(GraphConversionTest::dummyExecutor, bar, number);
|
|
|
|
main.addSubcommand(sub);
|
|
|
|
// The two syntax shall start from the same node
|
|
var graph = Graph.builder(Literal("main"))
|
|
.append(Literal("sub"), builder ->
|
|
builder.append(bar, builder1 -> builder1.append(number)))
|
|
.build();
|
|
assertEqualsGraph(graph, main);
|
|
}
|
|
|
|
@Test
|
|
public void alias() {
|
|
final Command main = new Command("main", "alias");
|
|
var graph = Graph.builder(Word("main").from("main", "alias")).build();
|
|
assertEqualsGraph(graph, main);
|
|
}
|
|
|
|
@Test
|
|
public void aliases() {
|
|
final Command main = new Command("main", "first", "second");
|
|
var graph = Graph.builder(Word("main").from("main", "first", "second")).build();
|
|
assertEqualsGraph(graph, main);
|
|
}
|
|
|
|
private static void assertEqualsGraph(Graph expected, Command command) {
|
|
final Graph actual = Graph.fromCommand(command);
|
|
assertTrue(expected.compare(actual, Graph.Comparator.TREE), () -> {
|
|
System.out.println("Expected: " + expected);
|
|
System.out.println("Actual: " + actual);
|
|
return "";
|
|
});
|
|
}
|
|
|
|
private static void dummyExecutor(CommandSender sender, CommandContext context) {
|
|
}
|
|
}
|