View Javadoc
1   package com.atlassian.event.internal;
2   
3   
4   import com.atlassian.event.Event;
5   import com.atlassian.event.api.EventListener;
6   import com.atlassian.event.api.EventPublisher;
7   import com.google.common.collect.Lists;
8   import org.junit.Before;
9   import org.junit.Test;
10  import org.junit.runner.RunWith;
11  import org.mockito.junit.MockitoJUnitRunner;
12  
13  import java.util.Collections;
14  import java.util.List;
15  
16  import static com.atlassian.event.internal._TestEvent.TestInterface;
17  import static com.atlassian.event.internal._TestEvent.TestInterfacedEvent;
18  import static com.atlassian.event.internal._TestEvent.TestSubEvent;
19  import static com.atlassian.event.internal._TestEvent.TestSubInterface;
20  import static com.atlassian.event.internal._TestEvent.TestSubSubEvent;
21  import static junit.framework.Assert.assertEquals;
22  
23  @RunWith(MockitoJUnitRunner.class)
24  @SuppressWarnings("deprecation")
25  public class EventPublisherImplOrderingTest {
26  
27      private static final String OBJECT_LISTENER = "Object listener";
28      private static final String SUBSUBEVENT_LISTENER = "TestSubSubEvent listener";
29      private static final String SUBEVENT_LISTENER = "TestSubEvent listener";
30      private static final String TESTEVENT_LISTENER = "TestEvent listener";
31      private static final String EVENT_LISTENER = "Event listener";
32      private static final String INTERFACEIMPL_LISTENER = "TestInterfacedEvent listener";
33      private static final String INTERFACE_LISTENER = "TestInterface listener";
34      private static final String SUBINTERFACE_LISTENER = "TestSubInterface listener";
35  
36      private static class TestListener {
37          protected final List<String> testEvents = Lists.newArrayList();
38  
39          @SuppressWarnings("unused")
40          @EventListener
41          public void onObjectEvent(final Object event) {
42              testEvents.add(OBJECT_LISTENER);
43          }
44  
45          @SuppressWarnings("unused")
46          @EventListener
47          public void onSubSubEvent(final TestSubSubEvent event) {
48              testEvents.add(SUBSUBEVENT_LISTENER);
49          }
50  
51          @SuppressWarnings("unused")
52          @EventListener
53          public void onSubEvent(final TestSubEvent event) {
54              testEvents.add(SUBEVENT_LISTENER);
55          }
56  
57          @SuppressWarnings("unused")
58          @EventListener
59          public void onEvent(final _TestEvent event) {
60              testEvents.add(TESTEVENT_LISTENER);
61          }
62  
63          @SuppressWarnings("unused")
64          @EventListener
65          public void onInterfacedEvent(final TestInterfacedEvent event) {
66              testEvents.add(INTERFACEIMPL_LISTENER);
67          }
68  
69          @SuppressWarnings("unused")
70          @EventListener
71          public void onInterface(final TestInterface event) {
72              testEvents.add(INTERFACE_LISTENER);
73          }
74  
75          @SuppressWarnings("unused")
76          @EventListener
77          public void onInterface(final TestSubInterface event) {
78              testEvents.add(SUBINTERFACE_LISTENER);
79          }
80  
81          @SuppressWarnings("unused")
82          @EventListener
83          public void onEvent(final Event event) {
84              testEvents.add(EVENT_LISTENER);
85          }
86      }
87  
88      private final TestListener listener = new TestListener();
89  
90      private EventPublisher eventPublisher = new EventPublisherImpl(
91              new StubEventDispatcher(),
92              () -> Collections.singletonList(new AnnotatedMethodsListenerHandler()));
93  
94      @Before
95      public final void setUp() {
96          eventPublisher.register(listener);
97      }
98  
99      @Test
100     public final void testInterfaceOrder() {
101         List<String> expectedEvents = Lists.newArrayList(INTERFACEIMPL_LISTENER, EVENT_LISTENER, OBJECT_LISTENER, SUBINTERFACE_LISTENER, INTERFACE_LISTENER);
102         testOrder(new TestInterfacedEvent(this), expectedEvents);
103     }
104 
105     @Test
106     public final void testEventOrder() {
107         List<String> expectedEvents = Lists.newArrayList(SUBSUBEVENT_LISTENER, SUBEVENT_LISTENER, TESTEVENT_LISTENER, EVENT_LISTENER, OBJECT_LISTENER);
108         testOrder(new TestSubSubEvent(this), expectedEvents);
109     }
110 
111     private void testOrder(Event testEvent, List<String> orderedListeners) {
112         eventPublisher.publish(testEvent);
113 
114         assertEquals(orderedListeners.size(), listener.testEvents.size());
115         assertEquals(orderedListeners, listener.testEvents);
116     }
117 }