#990: Use Mockito instead of InvocationHandler for test mocking
By: DerFrZocker <derrieple@gmail.com>
This commit is contained in:
@@ -2,19 +2,20 @@ package org.bukkit.plugin;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import org.bukkit.TestServer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.TestEvent;
|
||||
import org.bukkit.permissions.Permission;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.After;
|
||||
import org.junit.Test;
|
||||
|
||||
public class PluginManagerTest {
|
||||
public class PluginManagerTest extends AbstractTestingBase {
|
||||
private class MutableObject {
|
||||
volatile Object value = null;
|
||||
}
|
||||
|
||||
private static final PluginManager pm = TestServer.getInstance().getPluginManager();
|
||||
private static final PluginManager pm = Bukkit.getServer().getPluginManager();
|
||||
|
||||
private final MutableObject store = new MutableObject();
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.bukkit.plugin.messaging;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
import java.util.Collection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.TestPlugin;
|
||||
@@ -73,7 +74,7 @@ public class StandardMessengerTest {
|
||||
Messenger messenger = getMessenger();
|
||||
TestPlugin plugin = getPlugin();
|
||||
TestMessageListener listener = new TestMessageListener("test:foo", "test:bar".getBytes());
|
||||
Player player = TestPlayer.getInstance();
|
||||
Player player = mock();
|
||||
PluginMessageListenerRegistration registration = messenger.registerIncomingPluginChannel(plugin, "test:foo", listener);
|
||||
|
||||
assertTrue(registration.isValid());
|
||||
@@ -114,7 +115,7 @@ public class StandardMessengerTest {
|
||||
TestPlugin plugin = getPlugin();
|
||||
TestMessageListener listener1 = new TestMessageListener("test:foo", "test:bar".getBytes());
|
||||
TestMessageListener listener2 = new TestMessageListener("test:baz", "test:qux".getBytes());
|
||||
Player player = TestPlayer.getInstance();
|
||||
Player player = mock();
|
||||
PluginMessageListenerRegistration registration1 = messenger.registerIncomingPluginChannel(plugin, "test:foo", listener1);
|
||||
PluginMessageListenerRegistration registration2 = messenger.registerIncomingPluginChannel(plugin, "test:baz", listener2);
|
||||
|
||||
@@ -143,7 +144,7 @@ public class StandardMessengerTest {
|
||||
TestPlugin plugin = getPlugin();
|
||||
TestMessageListener listener1 = new TestMessageListener("test:foo", "test:bar".getBytes());
|
||||
TestMessageListener listener2 = new TestMessageListener("test:baz", "test:qux".getBytes());
|
||||
Player player = TestPlayer.getInstance();
|
||||
Player player = mock();
|
||||
PluginMessageListenerRegistration registration1 = messenger.registerIncomingPluginChannel(plugin, "test:foo", listener1);
|
||||
PluginMessageListenerRegistration registration2 = messenger.registerIncomingPluginChannel(plugin, "test:baz", listener2);
|
||||
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
package org.bukkit.plugin.messaging;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.HashMap;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
public final class TestPlayer implements InvocationHandler {
|
||||
private static interface MethodHandler {
|
||||
Object handle(TestPlayer server, Object[] args);
|
||||
}
|
||||
private static final Constructor<? extends Player> constructor;
|
||||
private static final HashMap<Method, MethodHandler> methods = new HashMap<Method, MethodHandler>();
|
||||
static {
|
||||
try {
|
||||
/*
|
||||
methods.put(Player.class.getMethod("methodName"),
|
||||
new MethodHandler() {
|
||||
public Object handle(TestPlayer server, Object[] args) {
|
||||
}
|
||||
});
|
||||
*/
|
||||
constructor = Proxy.getProxyClass(Player.class.getClassLoader(), Player.class).asSubclass(Player.class).getConstructor(InvocationHandler.class);
|
||||
} catch (Throwable t) {
|
||||
throw new Error(t);
|
||||
}
|
||||
}
|
||||
|
||||
private TestPlayer() {};
|
||||
|
||||
public static Player getInstance() {
|
||||
try {
|
||||
return constructor.newInstance(new TestPlayer());
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException(t);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) {
|
||||
MethodHandler handler = methods.get(method);
|
||||
if (handler != null) {
|
||||
return handler.handle(this, args);
|
||||
}
|
||||
throw new UnsupportedOperationException(String.valueOf(method));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user