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
56
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
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 }