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.junit.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.ArgumentMatchers.any;
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 final 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() {
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      @Test
67      public void createModule() throws IllegalAccessException, ClassNotFoundException, InstantiationException {
68          loader.plugins = ImmutableList.of(plugin);
69  
70          when(moduleDescriptorFactory.getModuleDescriptor(any())).thenReturn(moduleDescriptor);
71  
72          assertThat(loader.createModule(plugin, module, moduleDescriptorFactory), is(moduleDescriptor));
73  
74          verify(moduleDescriptor).init(plugin, module);
75      }
76  
77      @Test
78      public void createModuleNoFactory() {
79          loader.plugins = ImmutableList.of();
80  
81          assertThat(loader.createModule(plugin, module, moduleDescriptorFactory), nullValue());
82      }
83  }