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 Class<T> listenerDefinition;
private Class<T> listenerClass;
private Listener listenerAnnotation;
public MessageListenerMetadata(Class<T> listenerDefinition) {
this.listenerDefinition = listenerDefinition;
Listener listenerAnnotation = listenerDefinition.getAnnotation(Listener.class);
public MessageListenerMetadata(Class<T> listenerClass) {
this.listenerClass = listenerClass;
this.listenerAnnotation = listenerClass.getAnnotation(Listener.class);
}
public boolean isFromListener(Object listener){
return listenerDefinition.equals(listener.getClass());
return listenerClass.equals(listener.getClass());
}
public boolean useStrongReferences(){
@ -74,6 +74,6 @@ public class MessageListenerMetadata<T> {
}
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.messages.ITestMessage;
import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.messages.TestMessage3;
import net.engio.mbassy.subscription.Subscription;
import net.engio.mbassy.subscription.SubscriptionFactory;
import net.engio.mbassy.subscription.SubscriptionManager;
@ -15,7 +16,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
* Todo: Add javadoc
@ -54,17 +54,25 @@ public class SubscriptionManagerTest extends UnitTest{
assertEquals(2, subscriptions.size());
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(ITestMessage.class);
assertEquals(2, subscriptions.size());
assertEquals(2 , subscriptions.size());
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){
if(sub.isFromListener(listener))assertTrue(sub.contains(listener));
}
@ -72,6 +80,9 @@ public class SubscriptionManagerTest extends UnitTest{
}
static class SimpleSynchronousMessageHandler{
@Handler
@ -81,6 +92,10 @@ public class SubscriptionManagerTest extends UnitTest{
@Handler
public void handle(ITestMessage message) {
}
@Handler
public void handle(TestMessage3 message) {
}
}
@ -93,5 +108,9 @@ public class SubscriptionManagerTest extends UnitTest{
@Handler
public void handle(ITestMessage message) {
}
@Handler
public void handle(TestMessage3 message) {
}
}
}

View File

@ -1,14 +1,18 @@
package net.engio.mbassy;
import net.engio.mbassy.bus.*;
import net.engio.mbassy.common.DeadMessage;
import net.engio.mbassy.common.MessageBusTest;
import net.engio.mbassy.common.TestUtil;
import net.engio.mbassy.dispatch.HandlerInvocation;
import net.engio.mbassy.messages.ITestMessage;
import net.engio.mbassy.messages.SubTestMessage;
import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.listener.*;
import net.engio.mbassy.listeners.*;
import net.engio.mbassy.messages.TestMessage3;
import net.engio.mbassy.subscription.SubscriptionContext;
import org.junit.Assert;
import org.junit.Test;
import java.util.List;
@ -61,7 +65,6 @@ public abstract class SyncBusTest extends MessageBusTest {
ISyncMessageBus bus = getSyncMessageBus();
for(int i = 0; i< 10000; i++){
bus.subscribe(new MessageListener2());
}
@ -84,6 +87,30 @@ public abstract class SyncBusTest extends MessageBusTest {
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 {
// every event of type TestEvent or any subtype will be delivered