mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-05 23:36:06 +00:00
235 lines
7.8 KiB
Java
235 lines
7.8 KiB
Java
package command;
|
|
|
|
import com.dfsek.terra.api.command.CommandManager;
|
|
import com.dfsek.terra.api.command.CommandTemplate;
|
|
import com.dfsek.terra.api.command.TerraCommandManager;
|
|
import com.dfsek.terra.api.command.annotation.Argument;
|
|
import com.dfsek.terra.api.command.annotation.Command;
|
|
import com.dfsek.terra.api.command.annotation.Subcommand;
|
|
import com.dfsek.terra.api.command.annotation.Switch;
|
|
import com.dfsek.terra.api.command.annotation.inject.ArgumentTarget;
|
|
import com.dfsek.terra.api.command.annotation.inject.SwitchTarget;
|
|
import com.dfsek.terra.api.command.arg.DoubleArgumentParser;
|
|
import com.dfsek.terra.api.command.arg.IntegerArgumentParser;
|
|
import com.dfsek.terra.api.command.exception.CommandException;
|
|
import com.dfsek.terra.api.command.exception.InvalidArgumentsException;
|
|
import com.dfsek.terra.api.command.exception.MalformedCommandException;
|
|
import com.dfsek.terra.api.platform.CommandSender;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import static org.junit.jupiter.api.Assertions.fail;
|
|
|
|
public class CommandTest {
|
|
@Test
|
|
public void subcommand() throws CommandException {
|
|
CommandManager manager = new TerraCommandManager(null);
|
|
manager.register("test", DemoParentCommand.class);
|
|
|
|
manager.execute("test", null, Arrays.asList("subcommand1", "first", "2"));
|
|
manager.execute("test", null, Arrays.asList("subcommand2", "first", "2"));
|
|
manager.execute("test", null, Arrays.asList("s1", "first", "2", "3.4"));
|
|
manager.execute("test", null, Arrays.asList("s2", "first", "2"));
|
|
manager.execute("test", null, Arrays.asList("sub1", "first", "2", "3.4"));
|
|
manager.execute("test", null, Arrays.asList("sub2", "first", "2"));
|
|
manager.execute("test", null, Arrays.asList("first", "2")); // Parent command args
|
|
}
|
|
|
|
@Test
|
|
public void args() throws CommandException {
|
|
CommandManager manager = new TerraCommandManager(null);
|
|
manager.register("test", DemoCommand.class);
|
|
|
|
manager.execute("test", null, Arrays.asList("first", "2"));
|
|
manager.execute("test", null, Arrays.asList("first", "2", "3.4"));
|
|
}
|
|
|
|
@Test
|
|
public void argsBeforeFlags() throws CommandException {
|
|
CommandManager manager = new TerraCommandManager(null);
|
|
manager.register("test", DemoCommand.class);
|
|
|
|
try {
|
|
manager.execute("test", null, Arrays.asList("first", "-flag", "2"));
|
|
fail();
|
|
} catch(InvalidArgumentsException ignore) {
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void requiredArgsFirst() throws CommandException {
|
|
CommandManager manager = new TerraCommandManager(null);
|
|
manager.register("test", DemoInvalidCommand.class);
|
|
|
|
try {
|
|
manager.execute("test", null, Arrays.asList("first", "2"));
|
|
fail();
|
|
} catch(MalformedCommandException ignore) {
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void switches() throws CommandException {
|
|
CommandManager manager = new TerraCommandManager(null);
|
|
manager.register("test", DemoSwitchCommand.class);
|
|
|
|
manager.execute("test", null, Arrays.asList("first", "2"));
|
|
manager.execute("test", null, Arrays.asList("first", "2", "3.4"));
|
|
|
|
manager.execute("test", null, Arrays.asList("first", "2", "-a"));
|
|
manager.execute("test", null, Arrays.asList("first", "2", "3.4", "-b"));
|
|
|
|
manager.execute("test", null, Arrays.asList("first", "2", "-aSwitch"));
|
|
manager.execute("test", null, Arrays.asList("first", "2", "3.4", "-bSwitch"));
|
|
|
|
manager.execute("test", null, Arrays.asList("first", "2", "-aSwitch", "-b"));
|
|
manager.execute("test", null, Arrays.asList("first", "2", "3.4", "-bSwitch", "-a"));
|
|
}
|
|
|
|
@Command(
|
|
arguments = {
|
|
@Argument(value = "arg0"),
|
|
@Argument(value = "arg1", argumentParser = IntegerArgumentParser.class),
|
|
@Argument(value = "arg2", required = false, argumentParser = DoubleArgumentParser.class)
|
|
}
|
|
)
|
|
public static final class DemoCommand implements CommandTemplate {
|
|
|
|
@ArgumentTarget("arg0")
|
|
private String arg0;
|
|
|
|
@ArgumentTarget("arg1")
|
|
private Integer arg1;
|
|
|
|
@ArgumentTarget("arg2")
|
|
private Double arg2;
|
|
|
|
|
|
@Override
|
|
public void execute(CommandSender sender) {
|
|
System.out.println(arg0);
|
|
System.out.println(arg1);
|
|
System.out.println(arg2);
|
|
}
|
|
}
|
|
|
|
@Command(
|
|
arguments = {
|
|
@Argument(value = "arg0"),
|
|
@Argument(value = "arg1"),
|
|
@Argument(value = "arg2", required = false)
|
|
},
|
|
switches = {
|
|
@Switch(value = "a", aliases = {"aSwitch"}),
|
|
@Switch(value = "b", aliases = {"bSwitch"})
|
|
}
|
|
)
|
|
public static final class DemoSwitchCommand implements CommandTemplate {
|
|
@ArgumentTarget("arg0")
|
|
private String arg0;
|
|
|
|
@ArgumentTarget("arg1")
|
|
private String arg1;
|
|
|
|
@ArgumentTarget("arg2")
|
|
private String arg2;
|
|
|
|
@SwitchTarget("a")
|
|
private boolean a;
|
|
|
|
@SwitchTarget("b")
|
|
private boolean b;
|
|
|
|
|
|
@Override
|
|
public void execute(CommandSender sender) {
|
|
System.out.println(arg0);
|
|
System.out.println(arg1);
|
|
System.out.println(arg2);
|
|
|
|
System.out.println("A: " + a);
|
|
System.out.println("B: " + b);
|
|
}
|
|
}
|
|
|
|
@Command(
|
|
arguments = {
|
|
@Argument(value = "arg0"),
|
|
@Argument(value = "arg2", required = false), // optional arguments must be last. this command is invalid.
|
|
@Argument(value = "arg1")
|
|
}
|
|
)
|
|
public static final class DemoInvalidCommand implements CommandTemplate {
|
|
|
|
@Override
|
|
public void execute(CommandSender sender) {
|
|
throw new Error("this should never be reached");
|
|
}
|
|
}
|
|
|
|
@Command(
|
|
arguments = {
|
|
@Argument(value = "arg0"),
|
|
@Argument(value = "arg1"),
|
|
@Argument(value = "arg2", required = false),
|
|
},
|
|
subcommands = {
|
|
@Subcommand(
|
|
value = "subcommand1",
|
|
aliases = {"s1", "sub1"},
|
|
clazz = DemoChildCommand.class
|
|
),
|
|
@Subcommand(
|
|
value = "subcommand2",
|
|
aliases = {"s2", "sub2"},
|
|
clazz = DemoChildCommand.class // Duplicate command intentional.
|
|
)
|
|
}
|
|
)
|
|
public static final class DemoParentCommand implements CommandTemplate {
|
|
@ArgumentTarget("arg0")
|
|
private String arg0;
|
|
|
|
@ArgumentTarget("arg1")
|
|
private String arg1;
|
|
|
|
@ArgumentTarget("arg2")
|
|
private String arg2;
|
|
|
|
|
|
@Override
|
|
public void execute(CommandSender sender) {
|
|
System.out.println(arg0);
|
|
System.out.println(arg1);
|
|
System.out.println(arg2);
|
|
}
|
|
}
|
|
|
|
@Command(
|
|
arguments = {
|
|
@Argument(value = "arg0"),
|
|
@Argument(value = "arg1"),
|
|
@Argument(value = "arg2", required = false),
|
|
}
|
|
)
|
|
public static final class DemoChildCommand implements CommandTemplate {
|
|
@ArgumentTarget("arg0")
|
|
private String arg0;
|
|
|
|
@ArgumentTarget("arg1")
|
|
private String arg1;
|
|
|
|
@ArgumentTarget("arg2")
|
|
private String arg2;
|
|
|
|
|
|
@Override
|
|
public void execute(CommandSender sender) {
|
|
System.out.println(arg0);
|
|
System.out.println(arg1);
|
|
System.out.println(arg2);
|
|
}
|
|
}
|
|
}
|