View Javadoc

1   package com.atlassian.plugin.event.impl;
2   
3   import junit.framework.TestCase;
4   import com.atlassian.plugin.event.impl.DefaultPluginEventManager;
5   import com.atlassian.plugin.event.impl.ListenerMethodSelector;
6   import com.atlassian.plugin.event.impl.MethodNameListenerMethodSelector;
7   import com.atlassian.plugin.event.PluginEventListener;
8   import com.atlassian.event.api.EventListener;
9   
10  import java.lang.reflect.Method;
11  
12  public class TestPluginEventManagerImpl extends TestCase
13  {
14      private DefaultPluginEventManager eventManager;
15  
16      public void setUp()
17      {
18          eventManager = new DefaultPluginEventManager();
19      }
20  
21      public void tearDown()
22      {
23          eventManager = null;
24      }
25  
26      public void testRegister()
27      {
28          MethodTestListener methodTestListener = new MethodTestListener();
29          eventManager.register(methodTestListener);
30          eventManager.broadcast(new Object());
31          assertEquals(1, methodTestListener.called);
32      }
33  
34      public void testRegisterWithBroadcastSupertype()
35      {
36          MethodTestListener methodTestListener = new MethodTestListener();
37          eventManager.register(methodTestListener);
38          eventManager.broadcast(new String());
39          assertEquals(1, methodTestListener.called);
40      }
41  
42      public void testRegisterWithFooBroadcastSupertype()
43      {
44          MethodTestListener methodTestListener = new MethodTestListener();
45          eventManager.register(methodTestListener);
46          eventManager.broadcast(new MethodTestListener());
47          assertEquals(1, methodTestListener.fooCalled);
48          assertEquals(1, methodTestListener.called);
49      }
50  
51      public void testRegisterTwice()
52      {
53          MethodTestListener methodTestListener = new MethodTestListener();
54          eventManager.register(methodTestListener);
55          eventManager.register(methodTestListener);
56          eventManager.broadcast(new Object());
57          assertEquals(1, methodTestListener.called);
58      }
59  
60      public void testRegisterWithBadListener()
61      {
62          BadListener l = new BadListener();
63          try
64          {
65              eventManager.register(l);
66              fail();
67          }
68          catch (IllegalArgumentException ex)
69          {
70              // test passed
71          }
72          assertEquals(0, l.called);
73      }
74  
75      public void testRegisterWithCustomSelector()
76      {
77          eventManager = new DefaultPluginEventManager(new ListenerMethodSelector[]{
78                  new ListenerMethodSelector() {
79                      public boolean isListenerMethod(Method method)
80                      {
81                          return "onEvent".equals(method.getName());
82                      }
83                  }
84          });
85          MethodTestListener methodTestListener = new MethodTestListener();
86          eventManager.register(methodTestListener);
87          eventManager.broadcast("jim");
88          assertEquals(1, methodTestListener.jimCalled);
89      }
90  
91      public void testRegisterWithOverlappingSelectorsBroadcastsTwoMessages()
92      {
93          eventManager = new DefaultPluginEventManager(new ListenerMethodSelector[]{
94                  new MethodNameListenerMethodSelector(), new MethodNameListenerMethodSelector()});
95          MethodTestListener methodTestListener = new MethodTestListener();
96          eventManager.register(methodTestListener);
97          eventManager.broadcast(new Object());
98          assertEquals(2, methodTestListener.called);
99      }
100 
101     public void testRegisterWithCustom()
102     {
103         MethodTestListener methodTestListener = new MethodTestListener();
104         eventManager.register(methodTestListener);
105         eventManager.broadcast(new Object());
106         assertEquals(1, methodTestListener.called);
107     }
108 
109     public void testRegisterAnnotatedListener()
110     {
111         AnnotationTestListener listener = new AnnotationTestListener();
112         eventManager.register(listener);
113         eventManager.broadcast(new Object());
114         assertEquals(1, listener.eventListenerCalled);
115         assertEquals(1, listener.pluginEventListenerCalled);
116     }
117 
118     public void testUnregister()
119     {
120         MethodTestListener methodTestListener = new MethodTestListener();
121         eventManager.register(methodTestListener);
122         eventManager.broadcast(new Object());
123         eventManager.unregister(methodTestListener);
124         eventManager.broadcast(new Object());
125         assertEquals(1, methodTestListener.called);
126     }
127 
128     public void testSuperEvent()
129     {
130         MethodTestListener methodTestListener = new MethodTestListener();
131         eventManager.register(methodTestListener);
132         eventManager.broadcast(new MethodTestListener());
133         assertEquals(1, methodTestListener.called);
134     }
135 
136     public void testRegisterNull()
137     {
138         try
139         {
140             eventManager.register(null);
141             fail("should have thrown exception");
142         }
143         catch (IllegalArgumentException ex)
144         {
145             // test passed
146         }
147     }
148 
149     public void testUnregisterNull()
150     {
151         try
152         {
153             eventManager.unregister(null);
154             fail("should have thrown an exception");
155         }
156         catch (IllegalArgumentException e)
157         {
158             // passes
159         }
160     }
161 
162     public static class AnnotationTestListener
163     {
164         int pluginEventListenerCalled = 0;
165         int eventListenerCalled = 0;
166 
167         @PluginEventListener
168         public void doEventOld(Object obj)
169         {
170             ++pluginEventListenerCalled;
171         }
172 
173         @EventListener
174         public void doEventNew(Object obj)
175         {
176             ++eventListenerCalled;
177         }
178     }
179 
180     public static class MethodTestListener
181     {
182         int called = 0;
183         int fooCalled = 0;
184         int jimCalled = 0;
185 
186         public void channel(Object obj)
187         {
188             called++;
189         }
190 
191         public void channel(MethodTestListener obj)
192         {
193             fooCalled++;
194         }
195 
196         public void onEvent(String o)
197         {
198             jimCalled++;
199         }
200     }
201 
202     public static class BadListener
203     {
204         int called = 0;
205         public void somemethod() {
206             called++;
207         }
208     }
209 
210 
211 
212 }