View Javadoc

1   package com.atlassian.plugin.tracker;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   import com.atlassian.plugin.Plugin;
5   import com.atlassian.plugin.PluginAccessor;
6   import com.atlassian.plugin.event.PluginEventManager;
7   import com.atlassian.plugin.event.events.PluginDisabledEvent;
8   import com.atlassian.plugin.event.events.PluginModuleDisabledEvent;
9   import com.atlassian.plugin.event.events.PluginModuleEnabledEvent;
10  import com.atlassian.plugin.event.impl.DefaultPluginEventManager;
11  import junit.framework.TestCase;
12  
13  import java.util.Arrays;
14  import java.util.Collections;
15  import java.util.concurrent.atomic.AtomicBoolean;
16  
17  import static org.mockito.Mockito.mock;
18  import static org.mockito.Mockito.when;
19  
20  /**
21   *
22   */
23  public class TestDefaultPluginModuleTracker extends TestCase
24  {
25      private PluginAccessor pluginAccessor;
26      private PluginEventManager pluginEventManager;
27      private DefaultPluginModuleTracker tracker;
28  
29      @Override
30      protected void setUp() throws Exception
31      {
32          pluginAccessor = mock(PluginAccessor.class);
33          when(pluginAccessor.getEnabledPlugins()).thenReturn(Collections.<Plugin>emptyList());
34          pluginEventManager = new DefaultPluginEventManager();
35          tracker = new DefaultPluginModuleTracker<Object, MyModuleDescriptor>(pluginAccessor, pluginEventManager, MyModuleDescriptor.class);
36      }
37  
38      public void testAddModule()
39      {
40          assertFalse(tracker.getModuleDescriptors().iterator().hasNext());
41          assertEquals(0, tracker.size());
42          MyModuleDescriptor descriptor = mock(MyModuleDescriptor.class);
43          pluginEventManager.broadcast(new PluginModuleEnabledEvent(descriptor));
44          assertEquals(1, tracker.size());
45          assertEquals(descriptor, tracker.getModuleDescriptors().iterator().next());
46      }
47  
48      public void testAddModuleThenRemove()
49      {
50          assertFalse(tracker.getModuleDescriptors().iterator().hasNext());
51          assertEquals(0, tracker.size());
52          MyModuleDescriptor descriptor = mock(MyModuleDescriptor.class);
53          pluginEventManager.broadcast(new PluginModuleEnabledEvent(descriptor));
54          assertEquals(1, tracker.size());
55          assertEquals(descriptor, tracker.getModuleDescriptors().iterator().next());
56          pluginEventManager.broadcast(new PluginModuleDisabledEvent(descriptor, true));
57          assertFalse(tracker.getModuleDescriptors().iterator().hasNext());
58          assertEquals(0, tracker.size());
59      }
60  
61      public void testRemovePlugin()
62      {
63          MyModuleDescriptor descriptor = mock(MyModuleDescriptor.class);
64          Plugin plugin = mock(Plugin.class);
65          when(descriptor.getPlugin()).thenReturn(plugin);
66          when(plugin.getModuleDescriptors()).thenReturn(Arrays.<ModuleDescriptor<?>>asList(descriptor));
67  
68          pluginEventManager.broadcast(new PluginModuleEnabledEvent(descriptor));
69          assertEquals(1, tracker.size());
70          pluginEventManager.broadcast(new PluginDisabledEvent(plugin));
71          assertEquals(0, tracker.size());
72      }
73  
74      public void testAddModuleWithCustomizer()
75      {
76          MyModuleDescriptor oldDescriptor = mock(MyModuleDescriptor.class);
77          final MyModuleDescriptor newDescriptor = mock(MyModuleDescriptor.class);
78          PluginModuleTracker tracker = new DefaultPluginModuleTracker<Object, MyModuleDescriptor>(
79                  pluginAccessor, pluginEventManager,
80                  MyModuleDescriptor.class,
81                  new PluginModuleTracker.Customizer<Object, MyModuleDescriptor>()
82                  {
83                      public MyModuleDescriptor adding(MyModuleDescriptor descriptor)
84                      {
85                          return newDescriptor;
86                      }
87  
88                      public void removed(MyModuleDescriptor descriptor)
89                      {
90                      }
91                  });
92          pluginEventManager.broadcast(new PluginModuleEnabledEvent(oldDescriptor));
93          assertEquals(1, tracker.size());
94          assertEquals(newDescriptor, tracker.getModuleDescriptors().iterator().next());
95      }
96  
97      public void testRemoveModuleWithCustomizer()
98      {
99          MyModuleDescriptor descriptor = mock(MyModuleDescriptor.class);
100         final AtomicBoolean removedCalled = new AtomicBoolean();
101         PluginModuleTracker tracker = new DefaultPluginModuleTracker<Object, MyModuleDescriptor>(
102                 pluginAccessor, pluginEventManager,
103                 MyModuleDescriptor.class,
104                 new PluginModuleTracker.Customizer<Object, MyModuleDescriptor>()
105                 {
106                     public MyModuleDescriptor adding(MyModuleDescriptor descriptor)
107                     {
108                         return descriptor;
109                     }
110 
111                     public void removed(MyModuleDescriptor descriptor)
112                     {
113                         removedCalled.set(true);
114                     }
115                 });
116         pluginEventManager.broadcast(new PluginModuleEnabledEvent(descriptor));
117         assertEquals(1, tracker.size());
118         pluginEventManager.broadcast(new PluginModuleDisabledEvent(descriptor, true));
119         assertTrue(removedCalled.get());
120     }
121 
122     public interface MyModuleDescriptor extends ModuleDescriptor<Object>
123     {
124     }
125 
126 }