Just use a regular builder

This commit is contained in:
Nathan Adams
2014-09-16 14:47:19 +02:00
parent c73607ba36
commit dadedbb322
4 changed files with 28 additions and 72 deletions
@@ -10,16 +10,11 @@ import java.util.Map;
public class CommandDispatcher { public class CommandDispatcher {
private final Map<String, Runnable> commands = Maps.newHashMap(); private final Map<String, Runnable> commands = Maps.newHashMap();
public CommandBuilder createCommand(final String name) { public void register(CommandBuilder command) {
return new CommandBuilder() { if (commands.containsKey(command.getName())) {
@Override throw new IllegalArgumentException("New command " + command.getName() + " conflicts with existing command " + command.getName());
public void onFinish() { }
if (commands.containsKey(name)) { commands.put(command.getName(), command.getExecutor());
throw new IllegalArgumentException("New command " + name + " conflicts with existing command " + name);
}
commands.put(name, getCommandExecutor());
}
};
} }
public void execute(String command) throws CommandException { public void execute(String command) throws CommandException {
@@ -1,28 +1,27 @@
package net.minecraft.commands.builder; package net.minecraft.commands.builder;
public abstract class CommandBuilder { public class CommandBuilder {
private boolean finished; private final String name;
private Runnable commandExecutor; private Runnable executor;
public void finish() { protected CommandBuilder(String name) {
if (finished) { this.name = name;
throw new IllegalStateException("Cannot finish() multiple times!");
}
if (commandExecutor == null) {
throw new IllegalStateException("Cannot finish() without a command executor!");
}
onFinish();
finished = true;
} }
protected abstract void onFinish(); public static CommandBuilder command(String name) {
return new CommandBuilder(name);
}
public CommandBuilder executes(Runnable runnable) { public String getName() {
this.commandExecutor = runnable; return name;
}
public CommandBuilder executes(Runnable executor) {
this.executor = executor;
return this; return this;
} }
public Runnable getCommandExecutor() { public Runnable getExecutor() {
return commandExecutor; return executor;
} }
} }
@@ -5,9 +5,11 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner; import org.mockito.runners.MockitoJUnitRunner;
import static net.minecraft.commands.builder.CommandBuilder.command;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class) @RunWith(MockitoJUnitRunner.class)
public class CommandDispatcherTest { public class CommandDispatcherTest {
CommandDispatcher subject; CommandDispatcher subject;
@@ -20,16 +22,16 @@ public class CommandDispatcherTest {
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void testDuplicateCommand() throws Exception { public void testDuplicateCommand() throws Exception {
subject.createCommand("foo").executes(runnable).finish(); subject.register(command("foo").executes(runnable));
subject.createCommand("foo").executes(runnable).finish(); subject.register(command("foo").executes(runnable));
} }
@Test @Test
public void testCreateAndExecuteCommand() throws Exception { public void testCreateAndExecuteCommand() throws Exception {
subject.createCommand("foo").executes(runnable).finish(); subject.register(command("foo").executes(runnable));
subject.execute("foo"); subject.execute("foo");
Mockito.verify(runnable).run(); verify(runnable).run();
} }
@Test(expected = UnknownCommandException.class) @Test(expected = UnknownCommandException.class)
@@ -1,40 +0,0 @@
package net.minecraft.commands.builder;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class CommandBuilderTest {
@Mock(answer = Answers.CALLS_REAL_METHODS) CommandBuilder builder;
@Mock Runnable commandExecutor;
@Before
public void setUp() throws Exception {
Mockito.doNothing().when(builder).onFinish();
}
@Test
public void testFinish() throws Exception {
builder.executes(commandExecutor);
builder.finish();
Mockito.verify(builder).onFinish();
}
@Test(expected = IllegalStateException.class)
public void testFinishTwice() throws Exception {
builder.executes(commandExecutor);
builder.finish();
builder.finish();
}
@Test(expected = IllegalStateException.class)
public void testFinishWithoutCommandExecutor() throws Exception {
builder.finish();
}
}