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