1 package com.atlassian.plugin.osgi.module;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.Plugin;
5 import com.atlassian.plugin.impl.AbstractPlugin;
6 import com.atlassian.plugin.module.ContainerAccessor;
7 import com.atlassian.plugin.module.ContainerManagedPlugin;
8 import com.atlassian.plugin.module.ModuleFactory;
9 import org.junit.Before;
10 import org.junit.Rule;
11 import org.junit.Test;
12 import org.junit.rules.ExpectedException;
13 import org.junit.runner.RunWith;
14 import org.mockito.junit.MockitoJUnitRunner;
15
16 import java.io.InputStream;
17 import java.net.URL;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.mockito.Mockito.mock;
21 import static org.mockito.Mockito.verify;
22 import static org.mockito.Mockito.when;
23
24 @RunWith(MockitoJUnitRunner.class)
25 public class TestBeanPrefixModuleFactory {
26
27 @Rule
28 public final ExpectedException expectedException = ExpectedException.none();
29
30 private ModuleFactory moduleCreator;
31
32 @Before
33 public void setUp() {
34 moduleCreator = new BeanPrefixModuleFactory();
35 }
36
37 @Test
38 public void testCreateBeanFailedUsingHostContainer() {
39 expectedException.expect(IllegalArgumentException.class);
40 expectedException.expectMessage("Failed to resolve 'someBean'. You cannot use 'bean' prefix with non spring plugins");
41
42 ModuleDescriptor moduleDescriptor = mock(ModuleDescriptor.class);
43 final Plugin plugin = mock(Plugin.class);
44 when(moduleDescriptor.getPlugin()).thenReturn(plugin);
45
46 moduleCreator.createModule("someBean", moduleDescriptor);
47 }
48
49 @Test
50 public void testCreateBeanUsingPluginContainer() {
51 ModuleDescriptor moduleDescriptor = mock(ModuleDescriptor.class);
52 final ContainerAccessor pluginContainerAccessor = mock(ContainerAccessor.class);
53 final Plugin plugin = new MockContainerManagedPlugin(pluginContainerAccessor);
54 when(moduleDescriptor.getPlugin()).thenReturn(plugin);
55 final Object pluginBean = new Object();
56 when(pluginContainerAccessor.getBean("someBean")).thenReturn(pluginBean);
57 final Object obj = moduleCreator.createModule("someBean", moduleDescriptor);
58 verify(pluginContainerAccessor).getBean("someBean");
59 assertEquals(obj, pluginBean);
60 }
61
62 private class MockContainerManagedPlugin extends AbstractPlugin implements ContainerManagedPlugin {
63 private ContainerAccessor containerAccessor;
64
65 MockContainerManagedPlugin(ContainerAccessor containerAccessor) {
66 super(null);
67 this.containerAccessor = containerAccessor;
68 }
69
70 public ContainerAccessor getContainerAccessor() {
71 return containerAccessor;
72 }
73
74 public boolean isUninstallable() {
75 return false;
76 }
77
78 public boolean isDeleteable() {
79 return false;
80 }
81
82 public boolean isDynamicallyLoaded() {
83 return false;
84 }
85
86 public <T> Class<T> loadClass(final String clazz, final Class<?> callingClass) throws ClassNotFoundException {
87 return (Class<T>) Class.forName(clazz);
88 }
89
90 public ClassLoader getClassLoader() {
91 return null;
92 }
93
94 public URL getResource(final String path) {
95 return null;
96 }
97
98 public InputStream getResourceAsStream(final String name) {
99 return null;
100 }
101 }
102
103 }