View Javadoc

1   package com.atlassian.plugin.metadata;
2   
3   import com.atlassian.plugin.MockModuleDescriptor;
4   import com.atlassian.plugin.ModuleDescriptor;
5   import com.atlassian.plugin.Plugin;
6   import com.atlassian.plugin.descriptors.CannotDisable;
7   
8   import junit.framework.TestCase;
9   
10  public class TestDefaultPluginMetadataManager extends TestCase
11  {
12      public void testIsUserInstalledPlugin()
13      {
14          final Plugin plugin = new MockPlugin("my.plugin");
15          assertTrue(new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isUserInstalled(plugin));
16      }
17  
18      public void testIsNotUserInstalledPluginIfApplicationSupplied()
19      {
20          final Plugin plugin = new MockPlugin("my.plugin");
21          assertFalse(new DefaultPluginMetadataManager(new ApplicationPluginMetadata()).isUserInstalled(plugin));
22      }
23  
24      public void testPluginIsNotUserInstalledBecauseItIsBundled()
25      {
26          final Plugin plugin = new MockBundledPlugin("my.plugin");
27          assertFalse(new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isUserInstalled(plugin));
28      }
29  
30      public void testPluginIsRequired()
31      {
32          final Plugin plugin = new MockPlugin("my.plugin");
33          assertFalse(new DefaultPluginMetadataManager(new RequiredPluginMetadata()).isOptional(plugin));
34      }
35  
36      public void testPluginIsOptional()
37      {
38          final Plugin plugin = new MockPlugin("my.plugin");
39          assertTrue(new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isOptional(plugin));
40      }
41  
42      public void testPluginWithModulesIsOptional()
43      {
44          final Plugin plugin = new MockPlugin("my.plugin");
45          final ModuleDescriptor<?> moduleDescriptor = new MockModuleDescriptor<Object>(plugin, "my.plugin.c-mod3", null);
46          plugin.addModuleDescriptor(moduleDescriptor);
47          assertTrue(new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isOptional(plugin));
48      }
49  
50      public void testPluginIsRequiredBecauseOfRequiredModule()
51      {
52          final Plugin plugin = new MockPlugin("my.plugin");
53          final ModuleDescriptor<?> moduleDescriptor = new MockModuleDescriptor<Object>(plugin, "my.plugin.c-mod3", null);
54          plugin.addModuleDescriptor(moduleDescriptor);
55          assertFalse(new DefaultPluginMetadataManager(new ModuleRequiredPluginMetadata()).isOptional(plugin));
56      }
57  
58      public void testModuleIsRequired()
59      {
60          final ModuleDescriptor<?> moduleDescriptor = new MockModuleDescriptor<Object>(null, "my.plugin.c-mod3", null);
61          assertFalse(new DefaultPluginMetadataManager(new ModuleRequiredPluginMetadata()).isOptional(moduleDescriptor));
62      }
63  
64      public void testModuleIsRequiredBecauseParentPluginIsRequired()
65      {
66          final Plugin plugin = new MockPlugin("my.plugin");
67          final ModuleDescriptor<?> moduleDescriptor = new MockModuleDescriptor<Object>(plugin, "my.plugin.c-mod3", null);
68          plugin.addModuleDescriptor(moduleDescriptor);
69          assertFalse(new DefaultPluginMetadataManager(new RequiredPluginMetadata()).isOptional(moduleDescriptor));
70      }
71  
72      public void testModuleIsNotMadeRequiredBecauseSiblingModuleIsRequired()
73      {
74          final Plugin plugin = new MockPlugin("my.plugin");
75          final MockModuleDescriptor<Object> required = new MockModuleDescriptor<Object>(plugin, "required", null);
76          plugin.addModuleDescriptor(required);
77          final ModuleDescriptor<?> moduleDescriptor = new MockModuleDescriptor<Object>(plugin, "not-required", null);
78          plugin.addModuleDescriptor(moduleDescriptor);
79          assertTrue(new DefaultPluginMetadataManager(new EmptyPluginMetadata()
80          {
81              @Override
82              public boolean required(final ModuleDescriptor<?> descriptor)
83              {
84                  return descriptor == required;
85              }
86          }).isOptional(moduleDescriptor));
87      }
88  
89      public void testModuleIsRequiredTypeMarkedByAnnotation()
90      {
91          final Plugin plugin = new MockPlugin("my.plugin");
92          // Looked a bit, do not think mockito can create a mock such that it has a class-level annotation
93          final ModuleDescriptor<?> moduleDescriptor = new CannotDisableModuleDescriptorType(plugin, "my.plugin.c-mod3");
94  
95          assertFalse(new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isOptional(moduleDescriptor));
96      }
97  
98      public void testModuleIsOptional()
99      {
100         final Plugin plugin = new MockPlugin("my.plugin");
101         final ModuleDescriptor<?> moduleDescriptor = new MockModuleDescriptor<Object>(plugin, "my.plugin.c-mod3", null);
102         plugin.addModuleDescriptor(moduleDescriptor);
103         assertTrue(new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isOptional(moduleDescriptor));
104     }
105 
106     public void testIsOptionalPluginNullPlugin()
107     {
108         try
109         {
110             new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isOptional((Plugin) null);
111             fail("Expected NPE");
112         }
113         catch (final NullPointerException expected)
114         {}
115     }
116 
117     public void testIsOptionalModuleNullModule()
118     {
119         try
120         {
121             new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isOptional((ModuleDescriptor<?>) null);
122             fail("Expected NPE");
123         }
124         catch (final NullPointerException expected)
125         {}
126     }
127 
128     public void testIsUserInstalledPluginNullPlugin()
129     {
130         try
131         {
132             new DefaultPluginMetadataManager(new EmptyPluginMetadata()).isUserInstalled(null);
133             fail("Expected NPE");
134         }
135         catch (final NullPointerException expected)
136         {}
137     }
138 
139     class MockPlugin extends com.atlassian.plugin.MockPlugin
140     {
141         MockPlugin(final String key)
142         {
143             super(key, TestDefaultPluginMetadataManager.this.getClass().getClassLoader());
144         }
145     }
146 
147     class MockBundledPlugin extends MockPlugin
148     {
149         public MockBundledPlugin(final String key)
150         {
151             super(key);
152         }
153 
154         @Override
155         public boolean isBundledPlugin()
156         {
157             return true;
158         }
159     }
160 
161     @CannotDisable
162     class CannotDisableModuleDescriptorType extends MockModuleDescriptor<Object> implements ModuleDescriptor<Object>
163     {
164         CannotDisableModuleDescriptorType(final Plugin plugin, final String completeKey)
165         {
166             super(plugin, completeKey, null);
167         }
168     }
169 
170     class EmptyPluginMetadata implements PluginMetadata
171     {
172         public boolean applicationProvided(final Plugin plugin)
173         {
174             return false;
175         }
176 
177         public boolean required(final Plugin plugin)
178         {
179             return false;
180         }
181 
182         public boolean required(final ModuleDescriptor<?> descriptor)
183         {
184             return false;
185         }
186     }
187 
188     class ApplicationPluginMetadata extends EmptyPluginMetadata
189     {
190         @Override
191         public boolean applicationProvided(final Plugin plugin)
192         {
193             return true;
194         }
195     }
196 
197     class RequiredPluginMetadata extends EmptyPluginMetadata
198     {
199         @Override
200         public boolean required(final Plugin plugin)
201         {
202             return true;
203         }
204     }
205 
206     class ModuleRequiredPluginMetadata extends EmptyPluginMetadata
207     {
208         @Override
209         public boolean required(final ModuleDescriptor<?> descriptor)
210         {
211             return true;
212         }
213     }
214 }