17dd252788645e940eada959bdde927426e2531c9Paul Duffin/* 27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2012 The Guava Authors 37dd252788645e940eada959bdde927426e2531c9Paul Duffin * 47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 57dd252788645e940eada959bdde927426e2531c9Paul Duffin * you may not use this file except in compliance with the License. 67dd252788645e940eada959bdde927426e2531c9Paul Duffin * You may obtain a copy of the License at 77dd252788645e940eada959bdde927426e2531c9Paul Duffin * 87dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 97dd252788645e940eada959bdde927426e2531c9Paul Duffin * 107dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software 117dd252788645e940eada959bdde927426e2531c9Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 127dd252788645e940eada959bdde927426e2531c9Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137dd252788645e940eada959bdde927426e2531c9Paul Duffin * See the License for the specific language governing permissions and 147dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License. 157dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 167dd252788645e940eada959bdde927426e2531c9Paul Duffin 177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.eventbus.outside; 187dd252788645e940eada959bdde927426e2531c9Paul Duffin 193ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffinimport static com.google.common.truth.Truth.assertThat; 207dd252788645e940eada959bdde927426e2531c9Paul Duffin 217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.Lists; 227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.eventbus.EventBus; 237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.eventbus.Subscribe; 247dd252788645e940eada959bdde927426e2531c9Paul Duffin 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.TestCase; 267dd252788645e940eada959bdde927426e2531c9Paul Duffin 270888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.List; 287dd252788645e940eada959bdde927426e2531c9Paul Duffin 297dd252788645e940eada959bdde927426e2531c9Paul Duffin/** 300888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Test that EventBus finds the correct subscribers. 317dd252788645e940eada959bdde927426e2531c9Paul Duffin * 327dd252788645e940eada959bdde927426e2531c9Paul Duffin * This test must be outside the c.g.c.eventbus package to test correctly. 337dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Louis Wasserman 347dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 350888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic class AnnotatedSubscriberFinderTests { 367dd252788645e940eada959bdde927426e2531c9Paul Duffin 377dd252788645e940eada959bdde927426e2531c9Paul Duffin private static final Object EVENT = new Object(); 387dd252788645e940eada959bdde927426e2531c9Paul Duffin 397dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract static class AbstractEventBusTest<H> extends TestCase { 400888a09821a98ac0680fad765217302858e70fa4Paul Duffin abstract H createSubscriber(); 417dd252788645e940eada959bdde927426e2531c9Paul Duffin 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin private H subscriber; 437dd252788645e940eada959bdde927426e2531c9Paul Duffin 440888a09821a98ac0680fad765217302858e70fa4Paul Duffin H getSubscriber() { 450888a09821a98ac0680fad765217302858e70fa4Paul Duffin return subscriber; 467dd252788645e940eada959bdde927426e2531c9Paul Duffin } 477dd252788645e940eada959bdde927426e2531c9Paul Duffin 487dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 497dd252788645e940eada959bdde927426e2531c9Paul Duffin protected void setUp() throws Exception { 500888a09821a98ac0680fad765217302858e70fa4Paul Duffin subscriber = createSubscriber(); 517dd252788645e940eada959bdde927426e2531c9Paul Duffin EventBus bus = new EventBus(); 520888a09821a98ac0680fad765217302858e70fa4Paul Duffin bus.register(subscriber); 537dd252788645e940eada959bdde927426e2531c9Paul Duffin bus.post(EVENT); 547dd252788645e940eada959bdde927426e2531c9Paul Duffin } 557dd252788645e940eada959bdde927426e2531c9Paul Duffin 567dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 577dd252788645e940eada959bdde927426e2531c9Paul Duffin protected void tearDown() throws Exception { 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin subscriber = null; 597dd252788645e940eada959bdde927426e2531c9Paul Duffin } 607dd252788645e940eada959bdde927426e2531c9Paul Duffin } 617dd252788645e940eada959bdde927426e2531c9Paul Duffin 627dd252788645e940eada959bdde927426e2531c9Paul Duffin /* 637dd252788645e940eada959bdde927426e2531c9Paul Duffin * We break the tests up based on whether they are annotated or abstract in the superclass. 647dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static class BaseSubscriberFinderTest extends 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin AbstractEventBusTest<BaseSubscriberFinderTest.Subscriber> { 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin static class Subscriber { 687dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> nonSubscriberEvents = Lists.newArrayList(); 697dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> subscriberEvents = Lists.newArrayList(); 707dd252788645e940eada959bdde927426e2531c9Paul Duffin 717dd252788645e940eada959bdde927426e2531c9Paul Duffin public void notASubscriber(Object o) { 727dd252788645e940eada959bdde927426e2531c9Paul Duffin nonSubscriberEvents.add(o); 737dd252788645e940eada959bdde927426e2531c9Paul Duffin } 747dd252788645e940eada959bdde927426e2531c9Paul Duffin 757dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 767dd252788645e940eada959bdde927426e2531c9Paul Duffin public void subscriber(Object o) { 777dd252788645e940eada959bdde927426e2531c9Paul Duffin subscriberEvents.add(o); 787dd252788645e940eada959bdde927426e2531c9Paul Duffin } 797dd252788645e940eada959bdde927426e2531c9Paul Duffin } 807dd252788645e940eada959bdde927426e2531c9Paul Duffin 817dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNonSubscriber() { 823ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().nonSubscriberEvents).isEmpty(); 837dd252788645e940eada959bdde927426e2531c9Paul Duffin } 847dd252788645e940eada959bdde927426e2531c9Paul Duffin 857dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testSubscriber() { 863ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().subscriberEvents).has().item(EVENT); 877dd252788645e940eada959bdde927426e2531c9Paul Duffin } 887dd252788645e940eada959bdde927426e2531c9Paul Duffin 897dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 900888a09821a98ac0680fad765217302858e70fa4Paul Duffin Subscriber createSubscriber() { 910888a09821a98ac0680fad765217302858e70fa4Paul Duffin return new Subscriber(); 927dd252788645e940eada959bdde927426e2531c9Paul Duffin } 937dd252788645e940eada959bdde927426e2531c9Paul Duffin } 947dd252788645e940eada959bdde927426e2531c9Paul Duffin 957dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class AnnotatedAndAbstractInSuperclassTest extends 967dd252788645e940eada959bdde927426e2531c9Paul Duffin AbstractEventBusTest<AnnotatedAndAbstractInSuperclassTest.SubClass> { 977dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract static class SuperClass { 987dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 997dd252788645e940eada959bdde927426e2531c9Paul Duffin public abstract void overriddenAndAnnotatedInSubclass(Object o); 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin 1017dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin public abstract void overriddenInSubclass(Object o); 1037dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1047dd252788645e940eada959bdde927426e2531c9Paul Duffin 1057dd252788645e940eada959bdde927426e2531c9Paul Duffin static class SubClass extends SuperClass { 1067dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> overriddenAndAnnotatedInSubclassEvents = Lists.newArrayList(); 1077dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> overriddenInSubclassEvents = Lists.newArrayList(); 1087dd252788645e940eada959bdde927426e2531c9Paul Duffin 1097dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1107dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1117dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenAndAnnotatedInSubclass(Object o) { 1127dd252788645e940eada959bdde927426e2531c9Paul Duffin overriddenAndAnnotatedInSubclassEvents.add(o); 1137dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1147dd252788645e940eada959bdde927426e2531c9Paul Duffin 1157dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1167dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenInSubclass(Object o) { 1177dd252788645e940eada959bdde927426e2531c9Paul Duffin overriddenInSubclassEvents.add(o); 1187dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1197dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1207dd252788645e940eada959bdde927426e2531c9Paul Duffin 1217dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testOverriddenAndAnnotatedInSubclass() { 1223ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().overriddenAndAnnotatedInSubclassEvents).has().item(EVENT); 1237dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1247dd252788645e940eada959bdde927426e2531c9Paul Duffin 1257dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testOverriddenNotAnnotatedInSubclass() { 1263ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().overriddenInSubclassEvents).has().item(EVENT); 1277dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1287dd252788645e940eada959bdde927426e2531c9Paul Duffin 1297dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1300888a09821a98ac0680fad765217302858e70fa4Paul Duffin SubClass createSubscriber() { 1317dd252788645e940eada959bdde927426e2531c9Paul Duffin return new SubClass(); 1327dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1337dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1347dd252788645e940eada959bdde927426e2531c9Paul Duffin 1357dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class AnnotatedNotAbstractInSuperclassTest extends 1367dd252788645e940eada959bdde927426e2531c9Paul Duffin AbstractEventBusTest<AnnotatedNotAbstractInSuperclassTest.SubClass> { 1377dd252788645e940eada959bdde927426e2531c9Paul Duffin static class SuperClass { 1387dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> notOverriddenInSubclassEvents = Lists.newArrayList(); 1397dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> overriddenNotAnnotatedInSubclassEvents = Lists.newArrayList(); 1407dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> overriddenAndAnnotatedInSubclassEvents = Lists.newArrayList(); 1417dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> differentlyOverriddenNotAnnotatedInSubclassBadEvents = Lists 1427dd252788645e940eada959bdde927426e2531c9Paul Duffin .newArrayList(); 1437dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> differentlyOverriddenAnnotatedInSubclassBadEvents = Lists.newArrayList(); 1447dd252788645e940eada959bdde927426e2531c9Paul Duffin 1457dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1467dd252788645e940eada959bdde927426e2531c9Paul Duffin public void notOverriddenInSubclass(Object o) { 1477dd252788645e940eada959bdde927426e2531c9Paul Duffin notOverriddenInSubclassEvents.add(o); 1487dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1497dd252788645e940eada959bdde927426e2531c9Paul Duffin 1507dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1517dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenNotAnnotatedInSubclass(Object o) { 1527dd252788645e940eada959bdde927426e2531c9Paul Duffin overriddenNotAnnotatedInSubclassEvents.add(o); 1537dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1547dd252788645e940eada959bdde927426e2531c9Paul Duffin 1557dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1567dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenAndAnnotatedInSubclass(Object o) { 1577dd252788645e940eada959bdde927426e2531c9Paul Duffin overriddenAndAnnotatedInSubclassEvents.add(o); 1587dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1597dd252788645e940eada959bdde927426e2531c9Paul Duffin 1607dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1617dd252788645e940eada959bdde927426e2531c9Paul Duffin public void differentlyOverriddenNotAnnotatedInSubclass(Object o) { 1627dd252788645e940eada959bdde927426e2531c9Paul Duffin // the subclass overrides this and does *not* call super.dONAIS(o) 1637dd252788645e940eada959bdde927426e2531c9Paul Duffin differentlyOverriddenNotAnnotatedInSubclassBadEvents.add(o); 1647dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1657dd252788645e940eada959bdde927426e2531c9Paul Duffin 1667dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1677dd252788645e940eada959bdde927426e2531c9Paul Duffin public void differentlyOverriddenAnnotatedInSubclass(Object o) { 1687dd252788645e940eada959bdde927426e2531c9Paul Duffin // the subclass overrides this and does *not* call super.dOAIS(o) 1697dd252788645e940eada959bdde927426e2531c9Paul Duffin differentlyOverriddenAnnotatedInSubclassBadEvents.add(o); 1707dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1717dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1727dd252788645e940eada959bdde927426e2531c9Paul Duffin 1737dd252788645e940eada959bdde927426e2531c9Paul Duffin static class SubClass extends SuperClass { 1747dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> differentlyOverriddenNotAnnotatedInSubclassGoodEvents = Lists 1757dd252788645e940eada959bdde927426e2531c9Paul Duffin .newArrayList(); 1767dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> differentlyOverriddenAnnotatedInSubclassGoodEvents = Lists.newArrayList(); 1777dd252788645e940eada959bdde927426e2531c9Paul Duffin 1787dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1797dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenNotAnnotatedInSubclass(Object o) { 1807dd252788645e940eada959bdde927426e2531c9Paul Duffin super.overriddenNotAnnotatedInSubclass(o); 1817dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1827dd252788645e940eada959bdde927426e2531c9Paul Duffin 1837dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1847dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1857dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenAndAnnotatedInSubclass(Object o) { 1867dd252788645e940eada959bdde927426e2531c9Paul Duffin super.overriddenAndAnnotatedInSubclass(o); 1877dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1887dd252788645e940eada959bdde927426e2531c9Paul Duffin 1897dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1907dd252788645e940eada959bdde927426e2531c9Paul Duffin public void differentlyOverriddenNotAnnotatedInSubclass(Object o) { 1917dd252788645e940eada959bdde927426e2531c9Paul Duffin differentlyOverriddenNotAnnotatedInSubclassGoodEvents.add(o); 1927dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1937dd252788645e940eada959bdde927426e2531c9Paul Duffin 1947dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 1957dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 1967dd252788645e940eada959bdde927426e2531c9Paul Duffin public void differentlyOverriddenAnnotatedInSubclass(Object o) { 1977dd252788645e940eada959bdde927426e2531c9Paul Duffin differentlyOverriddenAnnotatedInSubclassGoodEvents.add(o); 1987dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1997dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2007dd252788645e940eada959bdde927426e2531c9Paul Duffin 2017dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNotOverriddenInSubclass() { 2023ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().notOverriddenInSubclassEvents).has().item(EVENT); 2037dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2047dd252788645e940eada959bdde927426e2531c9Paul Duffin 2057dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testOverriddenNotAnnotatedInSubclass() { 2063ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().overriddenNotAnnotatedInSubclassEvents).has().item(EVENT); 2077dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2087dd252788645e940eada959bdde927426e2531c9Paul Duffin 2097dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDifferentlyOverriddenNotAnnotatedInSubclass() { 2103ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().differentlyOverriddenNotAnnotatedInSubclassGoodEvents) 2117dd252788645e940eada959bdde927426e2531c9Paul Duffin .has().item(EVENT); 2123ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().differentlyOverriddenNotAnnotatedInSubclassBadEvents).isEmpty(); 2137dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2147dd252788645e940eada959bdde927426e2531c9Paul Duffin 2157dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testOverriddenAndAnnotatedInSubclass() { 2163ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().overriddenAndAnnotatedInSubclassEvents).has().item(EVENT); 2177dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2187dd252788645e940eada959bdde927426e2531c9Paul Duffin 2197dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDifferentlyOverriddenAndAnnotatedInSubclass() { 2203ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().differentlyOverriddenAnnotatedInSubclassGoodEvents) 2217dd252788645e940eada959bdde927426e2531c9Paul Duffin .has().item(EVENT); 2223ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().differentlyOverriddenAnnotatedInSubclassBadEvents).isEmpty(); 2237dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2247dd252788645e940eada959bdde927426e2531c9Paul Duffin 2257dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2260888a09821a98ac0680fad765217302858e70fa4Paul Duffin SubClass createSubscriber() { 2277dd252788645e940eada959bdde927426e2531c9Paul Duffin return new SubClass(); 2287dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2297dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2307dd252788645e940eada959bdde927426e2531c9Paul Duffin 2317dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class AbstractNotAnnotatedInSuperclassTest extends 2327dd252788645e940eada959bdde927426e2531c9Paul Duffin AbstractEventBusTest<AbstractNotAnnotatedInSuperclassTest.SubClass> { 2337dd252788645e940eada959bdde927426e2531c9Paul Duffin abstract static class SuperClass { 2347dd252788645e940eada959bdde927426e2531c9Paul Duffin public abstract void overriddenInSubclassNowhereAnnotated(Object o); 2357dd252788645e940eada959bdde927426e2531c9Paul Duffin 2367dd252788645e940eada959bdde927426e2531c9Paul Duffin public abstract void overriddenAndAnnotatedInSubclass(Object o); 2377dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2387dd252788645e940eada959bdde927426e2531c9Paul Duffin 2397dd252788645e940eada959bdde927426e2531c9Paul Duffin static class SubClass extends SuperClass { 2407dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> overriddenInSubclassNowhereAnnotatedEvents = Lists.newArrayList(); 2417dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> overriddenAndAnnotatedInSubclassEvents = Lists.newArrayList(); 2427dd252788645e940eada959bdde927426e2531c9Paul Duffin 2437dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2447dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenInSubclassNowhereAnnotated(Object o) { 2457dd252788645e940eada959bdde927426e2531c9Paul Duffin overriddenInSubclassNowhereAnnotatedEvents.add(o); 2467dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2477dd252788645e940eada959bdde927426e2531c9Paul Duffin 2487dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 2497dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2507dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenAndAnnotatedInSubclass(Object o) { 2517dd252788645e940eada959bdde927426e2531c9Paul Duffin overriddenAndAnnotatedInSubclassEvents.add(o); 2527dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2537dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2547dd252788645e940eada959bdde927426e2531c9Paul Duffin 2557dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testOverriddenAndAnnotatedInSubclass() { 2563ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().overriddenAndAnnotatedInSubclassEvents).has().item(EVENT); 2577dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2587dd252788645e940eada959bdde927426e2531c9Paul Duffin 2597dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testOverriddenInSubclassNowhereAnnotated() { 2603ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().overriddenInSubclassNowhereAnnotatedEvents).isEmpty(); 2617dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2627dd252788645e940eada959bdde927426e2531c9Paul Duffin 2637dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2640888a09821a98ac0680fad765217302858e70fa4Paul Duffin SubClass createSubscriber() { 2657dd252788645e940eada959bdde927426e2531c9Paul Duffin return new SubClass(); 2667dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2677dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2687dd252788645e940eada959bdde927426e2531c9Paul Duffin 2697dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class NeitherAbstractNorAnnotatedInSuperclassTest extends 2707dd252788645e940eada959bdde927426e2531c9Paul Duffin AbstractEventBusTest<NeitherAbstractNorAnnotatedInSuperclassTest.SubClass> { 2717dd252788645e940eada959bdde927426e2531c9Paul Duffin static class SuperClass { 2727dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> neitherOverriddenNorAnnotatedEvents = Lists.newArrayList(); 2737dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> overriddenInSubclassNowhereAnnotatedEvents = Lists.newArrayList(); 2747dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> overriddenAndAnnotatedInSubclassEvents = Lists.newArrayList(); 2757dd252788645e940eada959bdde927426e2531c9Paul Duffin 2767dd252788645e940eada959bdde927426e2531c9Paul Duffin public void neitherOverriddenNorAnnotated(Object o) { 2777dd252788645e940eada959bdde927426e2531c9Paul Duffin neitherOverriddenNorAnnotatedEvents.add(o); 2787dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2797dd252788645e940eada959bdde927426e2531c9Paul Duffin 2807dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenInSubclassNowhereAnnotated(Object o) { 2817dd252788645e940eada959bdde927426e2531c9Paul Duffin overriddenInSubclassNowhereAnnotatedEvents.add(o); 2827dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2837dd252788645e940eada959bdde927426e2531c9Paul Duffin 2847dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenAndAnnotatedInSubclass(Object o) { 2857dd252788645e940eada959bdde927426e2531c9Paul Duffin overriddenAndAnnotatedInSubclassEvents.add(o); 2867dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2877dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2887dd252788645e940eada959bdde927426e2531c9Paul Duffin 2897dd252788645e940eada959bdde927426e2531c9Paul Duffin static class SubClass extends SuperClass { 2907dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2917dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenInSubclassNowhereAnnotated(Object o) { 2927dd252788645e940eada959bdde927426e2531c9Paul Duffin super.overriddenInSubclassNowhereAnnotated(o); 2937dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2947dd252788645e940eada959bdde927426e2531c9Paul Duffin 2957dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 2967dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2977dd252788645e940eada959bdde927426e2531c9Paul Duffin public void overriddenAndAnnotatedInSubclass(Object o) { 2987dd252788645e940eada959bdde927426e2531c9Paul Duffin super.overriddenAndAnnotatedInSubclass(o); 2997dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3007dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3017dd252788645e940eada959bdde927426e2531c9Paul Duffin 3027dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNeitherOverriddenNorAnnotated() { 3033ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().neitherOverriddenNorAnnotatedEvents).isEmpty(); 3047dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3057dd252788645e940eada959bdde927426e2531c9Paul Duffin 3067dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testOverriddenInSubclassNowhereAnnotated() { 3073ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().overriddenInSubclassNowhereAnnotatedEvents).isEmpty(); 3087dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3097dd252788645e940eada959bdde927426e2531c9Paul Duffin 3107dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testOverriddenAndAnnotatedInSubclass() { 3113ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().overriddenAndAnnotatedInSubclassEvents).has().item(EVENT); 3127dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3137dd252788645e940eada959bdde927426e2531c9Paul Duffin 3147dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3150888a09821a98ac0680fad765217302858e70fa4Paul Duffin SubClass createSubscriber() { 3167dd252788645e940eada959bdde927426e2531c9Paul Duffin return new SubClass(); 3177dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3187dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3197dd252788645e940eada959bdde927426e2531c9Paul Duffin 3207dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class DeepInterfaceTest extends 3210888a09821a98ac0680fad765217302858e70fa4Paul Duffin AbstractEventBusTest<DeepInterfaceTest.SubscriberClass> { 3227dd252788645e940eada959bdde927426e2531c9Paul Duffin interface Interface1 { 3237dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3247dd252788645e940eada959bdde927426e2531c9Paul Duffin void annotatedIn1(Object o); 3257dd252788645e940eada959bdde927426e2531c9Paul Duffin 3267dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3277dd252788645e940eada959bdde927426e2531c9Paul Duffin void annotatedIn1And2(Object o); 3287dd252788645e940eada959bdde927426e2531c9Paul Duffin 3297dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3307dd252788645e940eada959bdde927426e2531c9Paul Duffin void annotatedIn1And2AndClass(Object o); 3317dd252788645e940eada959bdde927426e2531c9Paul Duffin 3327dd252788645e940eada959bdde927426e2531c9Paul Duffin void declaredIn1AnnotatedIn2(Object o); 3337dd252788645e940eada959bdde927426e2531c9Paul Duffin 3347dd252788645e940eada959bdde927426e2531c9Paul Duffin void declaredIn1AnnotatedInClass(Object o); 3357dd252788645e940eada959bdde927426e2531c9Paul Duffin 3367dd252788645e940eada959bdde927426e2531c9Paul Duffin void nowhereAnnotated(Object o); 3377dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3387dd252788645e940eada959bdde927426e2531c9Paul Duffin 3397dd252788645e940eada959bdde927426e2531c9Paul Duffin interface Interface2 extends Interface1 { 3407dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3417dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3427dd252788645e940eada959bdde927426e2531c9Paul Duffin void declaredIn1AnnotatedIn2(Object o); 3437dd252788645e940eada959bdde927426e2531c9Paul Duffin 3447dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3457dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3467dd252788645e940eada959bdde927426e2531c9Paul Duffin void annotatedIn1And2(Object o); 3477dd252788645e940eada959bdde927426e2531c9Paul Duffin 3487dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3497dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3507dd252788645e940eada959bdde927426e2531c9Paul Duffin void annotatedIn1And2AndClass(Object o); 3517dd252788645e940eada959bdde927426e2531c9Paul Duffin 3527dd252788645e940eada959bdde927426e2531c9Paul Duffin void declaredIn2AnnotatedInClass(Object o); 3537dd252788645e940eada959bdde927426e2531c9Paul Duffin 3547dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3557dd252788645e940eada959bdde927426e2531c9Paul Duffin void annotatedIn2(Object o); 3567dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3577dd252788645e940eada959bdde927426e2531c9Paul Duffin 3580888a09821a98ac0680fad765217302858e70fa4Paul Duffin static class SubscriberClass implements Interface2 { 3597dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> annotatedIn1Events = Lists.newArrayList(); 3607dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> annotatedIn1And2Events = Lists.newArrayList(); 3617dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> annotatedIn1And2AndClassEvents = Lists.newArrayList(); 3627dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> declaredIn1AnnotatedIn2Events = Lists.newArrayList(); 3637dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> declaredIn1AnnotatedInClassEvents = Lists.newArrayList(); 3647dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> declaredIn2AnnotatedInClassEvents = Lists.newArrayList(); 3657dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> annotatedIn2Events = Lists.newArrayList(); 3667dd252788645e940eada959bdde927426e2531c9Paul Duffin final List<Object> nowhereAnnotatedEvents = Lists.newArrayList(); 3677dd252788645e940eada959bdde927426e2531c9Paul Duffin 3687dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3697dd252788645e940eada959bdde927426e2531c9Paul Duffin public void annotatedIn1(Object o) { 3707dd252788645e940eada959bdde927426e2531c9Paul Duffin annotatedIn1Events.add(o); 3717dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3727dd252788645e940eada959bdde927426e2531c9Paul Duffin 3737dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3747dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3757dd252788645e940eada959bdde927426e2531c9Paul Duffin public void declaredIn1AnnotatedInClass(Object o) { 3767dd252788645e940eada959bdde927426e2531c9Paul Duffin declaredIn1AnnotatedInClassEvents.add(o); 3777dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3787dd252788645e940eada959bdde927426e2531c9Paul Duffin 3797dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3807dd252788645e940eada959bdde927426e2531c9Paul Duffin public void declaredIn1AnnotatedIn2(Object o) { 3817dd252788645e940eada959bdde927426e2531c9Paul Duffin declaredIn1AnnotatedIn2Events.add(o); 3827dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3837dd252788645e940eada959bdde927426e2531c9Paul Duffin 3847dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3857dd252788645e940eada959bdde927426e2531c9Paul Duffin public void annotatedIn1And2(Object o) { 3867dd252788645e940eada959bdde927426e2531c9Paul Duffin annotatedIn1And2Events.add(o); 3877dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3887dd252788645e940eada959bdde927426e2531c9Paul Duffin 3897dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3907dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3917dd252788645e940eada959bdde927426e2531c9Paul Duffin public void annotatedIn1And2AndClass(Object o) { 3927dd252788645e940eada959bdde927426e2531c9Paul Duffin annotatedIn1And2AndClassEvents.add(o); 3937dd252788645e940eada959bdde927426e2531c9Paul Duffin } 3947dd252788645e940eada959bdde927426e2531c9Paul Duffin 3957dd252788645e940eada959bdde927426e2531c9Paul Duffin @Subscribe 3967dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 3977dd252788645e940eada959bdde927426e2531c9Paul Duffin public void declaredIn2AnnotatedInClass(Object o) { 3987dd252788645e940eada959bdde927426e2531c9Paul Duffin declaredIn2AnnotatedInClassEvents.add(o); 3997dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4007dd252788645e940eada959bdde927426e2531c9Paul Duffin 4017dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 4027dd252788645e940eada959bdde927426e2531c9Paul Duffin public void annotatedIn2(Object o) { 4037dd252788645e940eada959bdde927426e2531c9Paul Duffin annotatedIn2Events.add(o); 4047dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4057dd252788645e940eada959bdde927426e2531c9Paul Duffin 4067dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 4077dd252788645e940eada959bdde927426e2531c9Paul Duffin public void nowhereAnnotated(Object o) { 4087dd252788645e940eada959bdde927426e2531c9Paul Duffin nowhereAnnotatedEvents.add(o); 4097dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4107dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4117dd252788645e940eada959bdde927426e2531c9Paul Duffin 4127dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testAnnotatedIn1() { 4133ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().annotatedIn1Events).has().item(EVENT); 4147dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4157dd252788645e940eada959bdde927426e2531c9Paul Duffin 4167dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testAnnotatedIn2() { 4173ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().annotatedIn2Events).has().item(EVENT); 4187dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4197dd252788645e940eada959bdde927426e2531c9Paul Duffin 4207dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testAnnotatedIn1And2() { 4213ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().annotatedIn1And2Events).has().item(EVENT); 4227dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4237dd252788645e940eada959bdde927426e2531c9Paul Duffin 4247dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testAnnotatedIn1And2AndClass() { 4253ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().annotatedIn1And2AndClassEvents).has().item(EVENT); 4267dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4277dd252788645e940eada959bdde927426e2531c9Paul Duffin 4287dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDeclaredIn1AnnotatedIn2() { 4293ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().declaredIn1AnnotatedIn2Events).has().item(EVENT); 4307dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4317dd252788645e940eada959bdde927426e2531c9Paul Duffin 4327dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDeclaredIn1AnnotatedInClass() { 4333ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().declaredIn1AnnotatedInClassEvents).has().item(EVENT); 4347dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4357dd252788645e940eada959bdde927426e2531c9Paul Duffin 4367dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDeclaredIn2AnnotatedInClass() { 4373ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().declaredIn2AnnotatedInClassEvents).has().item(EVENT); 4387dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4397dd252788645e940eada959bdde927426e2531c9Paul Duffin 4407dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNowhereAnnotated() { 4413ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(getSubscriber().nowhereAnnotatedEvents).isEmpty(); 4427dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4437dd252788645e940eada959bdde927426e2531c9Paul Duffin 4447dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 4450888a09821a98ac0680fad765217302858e70fa4Paul Duffin SubscriberClass createSubscriber() { 4460888a09821a98ac0680fad765217302858e70fa4Paul Duffin return new SubscriberClass(); 4477dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4487dd252788645e940eada959bdde927426e2531c9Paul Duffin } 4497dd252788645e940eada959bdde927426e2531c9Paul Duffin} 450