test for handlers of interfaces

This commit is contained in:
bennidi 2013-05-22 00:06:44 +02:00
parent 16f92eee06
commit 1e445adb04
4 changed files with 58 additions and 48 deletions

View File

@ -28,18 +28,18 @@ public class MessageListenerMetadata<T> {
private List<MessageHandlerMetadata> handlers = new ArrayList<MessageHandlerMetadata>(); private List<MessageHandlerMetadata> handlers = new ArrayList<MessageHandlerMetadata>();
private Class<T> listenerDefinition; private Class<T> listenerClass;
private Listener listenerAnnotation; private Listener listenerAnnotation;
public MessageListenerMetadata(Class<T> listenerDefinition) { public MessageListenerMetadata(Class<T> listenerClass) {
this.listenerDefinition = listenerDefinition; this.listenerClass = listenerClass;
Listener listenerAnnotation = listenerDefinition.getAnnotation(Listener.class); this.listenerAnnotation = listenerClass.getAnnotation(Listener.class);
} }
public boolean isFromListener(Object listener){ public boolean isFromListener(Object listener){
return listenerDefinition.equals(listener.getClass()); return listenerClass.equals(listener.getClass());
} }
public boolean useStrongReferences(){ public boolean useStrongReferences(){
@ -74,6 +74,6 @@ public class MessageListenerMetadata<T> {
} }
public Class<T> getListerDefinition() { public Class<T> getListerDefinition() {
return listenerDefinition; return listenerClass;
} }
} }

View File

@ -1,36 +0,0 @@
package net.engio.mbassy;
import net.engio.mbassy.bus.BusConfiguration;
import net.engio.mbassy.bus.MBassador;
import net.engio.mbassy.common.DeadMessage;
import net.engio.mbassy.listener.Handler;
import net.engio.mbassy.messages.ITestMessage;
import net.engio.mbassy.messages.TestMessage3;
import org.junit.Assert;
import org.junit.Test;
/**
* A test to make sure that Interface subscriptions are working correctly
*
* @author durron597
*/
public class InterfaceTest {
@Test
public void testMBassador() {
MBassador<ITestMessage> bus = new MBassador<ITestMessage>(BusConfiguration.Default());
bus.subscribe(this);
TestMessage3 myFoo = new TestMessage3();
bus.publish(myFoo);
}
@Handler
public void handleFoo(ITestMessage f) {
Assert.assertTrue(f instanceof TestMessage3);
}
@Handler
public void handleDead(DeadMessage d) {
Assert.fail("This class should handle this message appropriately!");
}
}

View File

@ -6,6 +6,7 @@ import net.engio.mbassy.listener.Handler;
import net.engio.mbassy.listener.MetadataReader; import net.engio.mbassy.listener.MetadataReader;
import net.engio.mbassy.messages.ITestMessage; import net.engio.mbassy.messages.ITestMessage;
import net.engio.mbassy.messages.TestMessage; import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.messages.TestMessage3;
import net.engio.mbassy.subscription.Subscription; import net.engio.mbassy.subscription.Subscription;
import net.engio.mbassy.subscription.SubscriptionFactory; import net.engio.mbassy.subscription.SubscriptionFactory;
import net.engio.mbassy.subscription.SubscriptionManager; import net.engio.mbassy.subscription.SubscriptionManager;
@ -15,7 +16,6 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/** /**
* Todo: Add javadoc * Todo: Add javadoc
@ -54,17 +54,25 @@ public class SubscriptionManagerTest extends UnitTest{
assertEquals(2, subscriptions.size()); assertEquals(2, subscriptions.size());
for(Subscription sub : subscriptions){ for(Subscription sub : subscriptions){
assertEquals(numberOfListeners, sub.size()); assertEquals(numberOfListeners / 2, sub.size());
for(Object listener : listeners){ for(Object listener : listeners){
if(sub.isFromListener(listener))assertTrue(sub.contains(listener)); if(sub.isFromListener(listener))assertTrue(sub.contains(listener));
} }
} }
subscriptions = subMan.getSubscriptionsByMessageType(ITestMessage.class); subscriptions = subMan.getSubscriptionsByMessageType(ITestMessage.class);
assertEquals(2, subscriptions.size()); assertEquals(2 , subscriptions.size());
for(Subscription sub : subscriptions){ for(Subscription sub : subscriptions){
assertEquals(numberOfListeners, sub.size()); assertEquals(numberOfListeners / 2, sub.size());
for(Object listener : listeners){
if(sub.isFromListener(listener))assertTrue(sub.contains(listener));
}
}
subscriptions = subMan.getSubscriptionsByMessageType(TestMessage3.class);
assertEquals(4 , subscriptions.size());
for(Subscription sub : subscriptions){
assertEquals(numberOfListeners / 2, sub.size());
for(Object listener : listeners){ for(Object listener : listeners){
if(sub.isFromListener(listener))assertTrue(sub.contains(listener)); if(sub.isFromListener(listener))assertTrue(sub.contains(listener));
} }
@ -72,6 +80,9 @@ public class SubscriptionManagerTest extends UnitTest{
} }
static class SimpleSynchronousMessageHandler{ static class SimpleSynchronousMessageHandler{
@Handler @Handler
@ -81,6 +92,10 @@ public class SubscriptionManagerTest extends UnitTest{
@Handler @Handler
public void handle(ITestMessage message) { public void handle(ITestMessage message) {
} }
@Handler
public void handle(TestMessage3 message) {
}
} }
@ -93,5 +108,9 @@ public class SubscriptionManagerTest extends UnitTest{
@Handler @Handler
public void handle(ITestMessage message) { public void handle(ITestMessage message) {
} }
@Handler
public void handle(TestMessage3 message) {
}
} }
} }

View File

@ -1,14 +1,18 @@
package net.engio.mbassy; package net.engio.mbassy;
import net.engio.mbassy.bus.*; import net.engio.mbassy.bus.*;
import net.engio.mbassy.common.DeadMessage;
import net.engio.mbassy.common.MessageBusTest; import net.engio.mbassy.common.MessageBusTest;
import net.engio.mbassy.common.TestUtil; import net.engio.mbassy.common.TestUtil;
import net.engio.mbassy.dispatch.HandlerInvocation; import net.engio.mbassy.dispatch.HandlerInvocation;
import net.engio.mbassy.messages.ITestMessage;
import net.engio.mbassy.messages.SubTestMessage; import net.engio.mbassy.messages.SubTestMessage;
import net.engio.mbassy.messages.TestMessage; import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.listener.*; import net.engio.mbassy.listener.*;
import net.engio.mbassy.listeners.*; import net.engio.mbassy.listeners.*;
import net.engio.mbassy.messages.TestMessage3;
import net.engio.mbassy.subscription.SubscriptionContext; import net.engio.mbassy.subscription.SubscriptionContext;
import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import java.util.List; import java.util.List;
@ -61,7 +65,6 @@ public abstract class SyncBusTest extends MessageBusTest {
ISyncMessageBus bus = getSyncMessageBus(); ISyncMessageBus bus = getSyncMessageBus();
for(int i = 0; i< 10000; i++){ for(int i = 0; i< 10000; i++){
bus.subscribe(new MessageListener2()); bus.subscribe(new MessageListener2());
} }
@ -84,6 +87,30 @@ public abstract class SyncBusTest extends MessageBusTest {
protected abstract ISyncMessageBus getSyncMessageBus(); protected abstract ISyncMessageBus getSyncMessageBus();
@Test
public void testHandlerUsingInterface() {
MBassador<ITestMessage> bus = new MBassador<ITestMessage>(BusConfiguration.Default());
bus.subscribe(new InterfaceMessageListener());
bus.publish(new TestMessage3());
}
@Listener(references = References.Strong)
static class InterfaceMessageListener{
@Handler
public void handleFoo(ITestMessage f) {
Assert.assertTrue(f instanceof TestMessage3);
}
@Handler
public void handleDead(DeadMessage d) {
Assert.fail("This class should handle this message appropriately!");
}
}
public static class MessageListener1 { public static class MessageListener1 {
// every event of type TestEvent or any subtype will be delivered // every event of type TestEvent or any subtype will be delivered