View Javadoc
1   package com.atlassian.plugin.loaders;
2   
3   import com.atlassian.plugin.DefaultModuleDescriptorFactory;
4   import com.atlassian.plugin.ModuleDescriptor;
5   import com.atlassian.plugin.ModuleDescriptorFactory;
6   import com.atlassian.plugin.Plugin;
7   import com.atlassian.plugin.PluginParseException;
8   import com.atlassian.plugin.hostcontainer.DefaultHostContainer;
9   import com.atlassian.plugin.mock.MockAnimalModuleDescriptor;
10  import com.atlassian.plugin.mock.MockMineralModuleDescriptor;
11  import com.atlassian.plugin.util.ClassLoaderUtils;
12  import com.google.common.collect.ImmutableList;
13  import org.dom4j.Element;
14  import org.hamcrest.Matchers;
15  import org.junit.Before;
16  import org.junit.Rule;
17  import org.junit.Test;
18  import org.junit.rules.ExpectedException;
19  import org.junit.runner.RunWith;
20  import org.mockito.Mock;
21  import org.mockito.runners.MockitoJUnitRunner;
22  
23  import static org.hamcrest.MatcherAssert.assertThat;
24  import static org.hamcrest.Matchers.is;
25  import static org.hamcrest.Matchers.not;
26  import static org.hamcrest.Matchers.nullValue;
27  import static org.hamcrest.Matchers.sameInstance;
28  import static org.mockito.Matchers.anyString;
29  import static org.mockito.Mockito.verify;
30  import static org.mockito.Mockito.when;
31  
32  @RunWith(MockitoJUnitRunner.class)
33  public class TestSinglePluginLoader {
34      @Rule
35      public ExpectedException expectedException = ExpectedException.none();
36  
37      private SinglePluginLoader loader;
38  
39      @Mock
40      private Plugin plugin;
41      @Mock
42      private Element module;
43      @Mock
44      private ModuleDescriptorFactory moduleDescriptorFactory;
45      @Mock
46      private ModuleDescriptor moduleDescriptor;
47  
48      @Before
49      public void before() throws Exception {
50          loader = new SinglePluginLoader(ClassLoaderUtils.getResource("test-disabled-plugin.xml", SinglePluginLoader.class));
51      }
52  
53      @Test
54      public void pluginByUrl() throws PluginParseException {
55          // URL created should be reentrant and create a different stream each
56          // time
57          assertThat(loader.getSource(), not(sameInstance(loader.getSource())));
58          final DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory(new DefaultHostContainer());
59          moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
60          moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
61          final Iterable<Plugin> plugins = loader.loadAllPlugins(moduleDescriptorFactory);
62          assertThat(plugins, Matchers.<Plugin>iterableWithSize(1));
63          assertThat(plugins.iterator().next().isEnabledByDefault(), is(false));
64      }
65  
66      /**
67       * @deprecated testing deprecated behaviour
68       */
69      @Test
70      @Deprecated
71      public void pluginByInputStreamNotReentrant() throws PluginParseException {
72          final SinglePluginLoader loader = new SinglePluginLoader(ClassLoaderUtils.getResourceAsStream("test-disabled-plugin.xml", SinglePluginLoader.class));
73          loader.getSource();
74  
75          expectedException.expect(IllegalStateException.class);
76  
77          loader.getSource();
78      }
79  
80      @Test
81      public void createModule() throws IllegalAccessException, ClassNotFoundException, InstantiationException {
82          loader.plugins = ImmutableList.of(plugin);
83  
84          when(moduleDescriptorFactory.getModuleDescriptor(anyString())).thenReturn(moduleDescriptor);
85  
86          assertThat(loader.createModule(plugin, module, moduleDescriptorFactory), is(moduleDescriptor));
87  
88          verify(moduleDescriptor).init(plugin, module);
89      }
90  
91      @Test
92      public void createModuleNoFactory() {
93          loader.plugins = ImmutableList.of();
94  
95          assertThat(loader.createModule(plugin, module, moduleDescriptorFactory), nullValue());
96      }
97  }