From a6462b4d174f124e05aef1b98f9c64494a1fd7bb Mon Sep 17 00:00:00 2001 From: benjamin Date: Wed, 22 May 2013 15:55:14 +0200 Subject: [PATCH] subscription manager tests --- .../engio/mbassy/common/ReflectionUtils.java | 23 ++--- .../listener/MessageHandlerMetadata.java | 2 +- .../listener/MessageListenerMetadata.java | 4 +- .../mbassy/subscription/Subscription.java | 2 +- .../engio/mbassy/SubscriptionManagerTest.java | 87 ++++++++++++++++++- 5 files changed, 93 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/engio/mbassy/common/ReflectionUtils.java b/src/main/java/net/engio/mbassy/common/ReflectionUtils.java index f7a66cc..a56891a 100644 --- a/src/main/java/net/engio/mbassy/common/ReflectionUtils.java +++ b/src/main/java/net/engio/mbassy/common/ReflectionUtils.java @@ -1,9 +1,7 @@ package net.engio.mbassy.common; import java.lang.reflect.Method; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; +import java.util.*; /** * @author bennidi @@ -50,27 +48,18 @@ public class ReflectionUtils { return null; } - public static List withoutOverridenSuperclassMethods(final List allMethods) { - List filtered = new LinkedList(); - for (Method method : allMethods) { - if (!containsOverridingMethod(allMethods, method)) { - filtered.add(method); - } - } - return filtered; - } - - public static Collection getSuperclasses(Class from) { - Collection superclasses = new LinkedList(); + public static Set getSuperclasses(Class from) { + Set superclasses = new HashSet(); + collectInterfaces(from, superclasses); while (!from.equals(Object.class) && !from.isInterface()) { superclasses.add(from.getSuperclass()); - collectInterfaces(from, superclasses); + from = from.getSuperclass(); } return superclasses; } - public static void collectInterfaces(Class from, Collection accumulator){ + public static void collectInterfaces(Class from, Set accumulator){ for(Class intface : from.getInterfaces()){ accumulator.add(intface); collectInterfaces(intface, accumulator); diff --git a/src/main/java/net/engio/mbassy/listener/MessageHandlerMetadata.java b/src/main/java/net/engio/mbassy/listener/MessageHandlerMetadata.java index 673e16b..d052d4e 100644 --- a/src/main/java/net/engio/mbassy/listener/MessageHandlerMetadata.java +++ b/src/main/java/net/engio/mbassy/listener/MessageHandlerMetadata.java @@ -63,7 +63,7 @@ public class MessageHandlerMetadata { return listenerConfig.useStrongReferences(); } - public boolean isFromListener(Object listener){ + public boolean isFromListener(Class listener){ return listenerConfig.isFromListener(listener); } diff --git a/src/main/java/net/engio/mbassy/listener/MessageListenerMetadata.java b/src/main/java/net/engio/mbassy/listener/MessageListenerMetadata.java index 65c6f79..b854dc8 100644 --- a/src/main/java/net/engio/mbassy/listener/MessageListenerMetadata.java +++ b/src/main/java/net/engio/mbassy/listener/MessageListenerMetadata.java @@ -38,8 +38,8 @@ public class MessageListenerMetadata { } - public boolean isFromListener(Object listener){ - return listenerDefinition.equals(listener.getClass()); + public boolean isFromListener(Class listener){ + return listenerDefinition.equals(listener); } public boolean useStrongReferences(){ diff --git a/src/main/java/net/engio/mbassy/subscription/Subscription.java b/src/main/java/net/engio/mbassy/subscription/Subscription.java index 9fc53c8..e3cfeec 100644 --- a/src/main/java/net/engio/mbassy/subscription/Subscription.java +++ b/src/main/java/net/engio/mbassy/subscription/Subscription.java @@ -27,7 +27,7 @@ public class Subscription { this.listeners = listeners; } - public boolean isFromListener(Object listener){ + public boolean isFromListener(Class listener){ return context.getHandlerMetadata().isFromListener(listener); } diff --git a/src/test/java/net/engio/mbassy/SubscriptionManagerTest.java b/src/test/java/net/engio/mbassy/SubscriptionManagerTest.java index 296cf84..43370c8 100644 --- a/src/test/java/net/engio/mbassy/SubscriptionManagerTest.java +++ b/src/test/java/net/engio/mbassy/SubscriptionManagerTest.java @@ -1,6 +1,7 @@ package net.engio.mbassy; import net.engio.mbassy.common.ConcurrentExecutor; +import net.engio.mbassy.common.IPredicate; import net.engio.mbassy.common.UnitTest; import net.engio.mbassy.listener.Handler; import net.engio.mbassy.listener.MetadataReader; @@ -11,10 +12,7 @@ import net.engio.mbassy.subscription.SubscriptionFactory; import net.engio.mbassy.subscription.SubscriptionManager; import org.junit.Test; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** @@ -25,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap; */ public class SubscriptionManagerTest extends UnitTest{ + @Test public void testSimpleSynchronousHandler(){ final SubscriptionManager subMan = new SubscriptionManager(new MetadataReader(), new SubscriptionFactory()); @@ -72,6 +71,86 @@ public class SubscriptionManagerTest extends UnitTest{ } + class SubscriptionValidator{ + + + private List validations = new LinkedList(); + private Set messageTypes = new HashSet(); + private Set subsribers = new HashSet(); + + + public SubscriptionValidator expect(int numberOfSubscriber, Class subscriber, Class messageType){ + validations.add(new Entry(messageType, numberOfSubscriber, subscriber)); + messageTypes.add(messageType); + subsribers.add(subscriber); + return this; + } + + public void validate(SubscriptionManager manager){ + for(Class messageType : messageTypes){ + Collection subscriptions = manager.getSubscriptionsByMessageType(messageType); + Collection validationEntries = getEntries(EntriesByMessageType(messageType)); + assertEquals(subscriptions.size(), validationEntries.size()); + for(Entry validationEntry : validationEntries){ + Subscription matchingSub = null; + for(Subscription sub : subscriptions){ + if(sub.isFromListener(validationEntry.subscriber)); + } + } + } + + + } + + + private Collection getEntries(IPredicate filter){ + Collection matching = new LinkedList(); + for (Entry validationEntry : validations){ + if(filter.apply(validationEntry))matching.add(validationEntry); + } + return matching; + } + + private IPredicate EntriesByMessageType(final Class messageType){ + return new IPredicate() { + @Override + public boolean apply(Entry target) { + return target.messageType.equals(messageType); + } + }; + } + + private IPredicate EntriesBySubscriberType(final Class subscriberType){ + return new IPredicate() { + @Override + public boolean apply(Entry target) { + return target.subscriber.equals(subscriberType); + } + }; + } + + + + private class Entry{ + + private int numberOfSubscribers; + + private Class subscriber; + + private Class messageType; + + private Entry(Class messageType, int numberOfSubscribers, Class subscriber) { + this.messageType = messageType; + this.numberOfSubscribers = numberOfSubscribers; + this.subscriber = subscriber; + } + + + } + + } + + static class SimpleSynchronousMessageHandler{ @Handler