1 package it.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.hostcontainer.DefaultHostContainer;
8 import com.atlassian.plugin.loaders.ClassPathPluginLoader;
9 import com.atlassian.plugin.mock.MockAnimalModuleDescriptor;
10 import com.atlassian.plugin.mock.MockMineralModuleDescriptor;
11 import org.dom4j.Element;
12 import org.dom4j.dom.DOMElement;
13 import org.junit.Before;
14 import org.junit.Test;
15
16 import static org.hamcrest.MatcherAssert.assertThat;
17 import static org.hamcrest.Matchers.is;
18 import static org.hamcrest.Matchers.notNullValue;
19 import static org.hamcrest.Matchers.nullValue;
20 import static org.mockito.Mockito.mock;
21
22 public class TestClassPathPluginLoader {
23 private ClassPathPluginLoader classPathPluginLoader;
24 private ModuleDescriptorFactory moduleDescriptorFactory;
25
26 @Before
27 public void before() {
28 classPathPluginLoader = new ClassPathPluginLoader("test-atlassian-plugin.xml");
29
30 final DefaultModuleDescriptorFactory defaultModuleDescriptorFactory = new DefaultModuleDescriptorFactory(new DefaultHostContainer());
31 defaultModuleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
32 defaultModuleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
33 defaultModuleDescriptorFactory.addModuleDescriptor("vegetable", MockMineralModuleDescriptor.class);
34
35 moduleDescriptorFactory = defaultModuleDescriptorFactory;
36 }
37
38 @Test
39 public void atlassianPlugin() {
40 Iterable plugins = classPathPluginLoader.loadAllPlugins(moduleDescriptorFactory);
41
42 Plugin plugin = (Plugin) plugins.iterator().next();
43 assertThat(plugin.getName(), is("Test Plugin"));
44 assertThat(plugin.getKey(), is("test.atlassian.plugin"));
45 assertThat(plugin.getPluginInformation().getDescription(), is("This plugin descriptor is just used for test purposes!"));
46 assertThat(plugin.getModuleDescriptors().size(), is(4));
47
48 assertThat(plugin.getModuleDescriptor("bear").getName(), is("Bear Animal"));
49 }
50
51 @Test
52 public void createModule() {
53 final Iterable plugins = classPathPluginLoader.loadAllPlugins(moduleDescriptorFactory);
54 final Plugin plugin = (Plugin) plugins.iterator().next();
55
56 final Element dynamicModule = new DOMElement("vegetable");
57 dynamicModule.addAttribute("key", "aubergine");
58 dynamicModule.addAttribute("class", "com.atlassian.plugin.mock.MockVegetable");
59
60 final ModuleDescriptor moduleDescriptor = classPathPluginLoader.createModule(plugin, dynamicModule, moduleDescriptorFactory);
61 assertThat(moduleDescriptor, notNullValue());
62 assertThat(moduleDescriptor.getKey(), is("aubergine"));
63 }
64
65 @Test
66 public void createModuleNoFactory() {
67 classPathPluginLoader.loadAllPlugins(moduleDescriptorFactory);
68
69 assertThat(classPathPluginLoader.createModule(mock(Plugin.class), mock(Element.class), moduleDescriptorFactory), nullValue());
70 }
71 }