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 junit.framework.TestCase;
10
11 import java.io.InputStream;
12 import java.net.URL;
13
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.verify;
16 import static org.mockito.Mockito.when;
17
18 public class TestBeanPrefixModuleFactory extends TestCase {
19 ModuleFactory moduleCreator;
20
21 @Override
22 protected void setUp() throws Exception {
23 super.setUp();
24 moduleCreator = new BeanPrefixModuleFactory();
25 }
26
27 @Override
28 protected void tearDown() throws Exception {
29 super.tearDown();
30 }
31
32 public void testCreateBeanFailedUsingHostContainer() throws Exception {
33 ModuleDescriptor moduleDescriptor = mock(ModuleDescriptor.class);
34 final Plugin plugin = mock(Plugin.class);
35 when(moduleDescriptor.getPlugin()).thenReturn(plugin);
36
37 try {
38 moduleCreator.createModule("someBean", moduleDescriptor);
39 fail("Container not available for non osgi plugins. Bean creation should have failed");
40 } catch (IllegalArgumentException e) {
41 assertEquals("Failed to resolve 'someBean'. You cannot use 'bean' prefix with non spring plugins", e.getMessage());
42 }
43 }
44
45 public void testCreateBeanUsingPluginContainer() throws Exception {
46 ModuleDescriptor moduleDescriptor = mock(ModuleDescriptor.class);
47 final ContainerAccessor pluginContainerAccessor = mock(ContainerAccessor.class);
48 final Plugin plugin = new MockContainerManagedPlugin(pluginContainerAccessor);
49 when(moduleDescriptor.getPlugin()).thenReturn(plugin);
50 final Object pluginBean = new Object();
51 when(pluginContainerAccessor.getBean("someBean")).thenReturn(pluginBean);
52 final Object obj = moduleCreator.createModule("someBean", moduleDescriptor);
53 verify(pluginContainerAccessor).getBean("someBean");
54 assertEquals(obj, pluginBean);
55 }
56
57 private class MockContainerManagedPlugin extends AbstractPlugin implements ContainerManagedPlugin {
58 private ContainerAccessor containerAccessor;
59
60 public MockContainerManagedPlugin(ContainerAccessor containerAccessor) {
61 super(null);
62 this.containerAccessor = containerAccessor;
63 }
64
65 public ContainerAccessor getContainerAccessor() {
66 return containerAccessor;
67 }
68
69 public boolean isUninstallable() {
70 return false;
71 }
72
73 public boolean isDeleteable() {
74 return false;
75 }
76
77 public boolean isDynamicallyLoaded() {
78 return false;
79 }
80
81 public <T> Class<T> loadClass(final String clazz, final Class<?> callingClass) throws ClassNotFoundException {
82 return (Class<T>) Class.forName(clazz);
83 }
84
85 public ClassLoader getClassLoader() {
86 return null;
87 }
88
89 public URL getResource(final String path) {
90 return null;
91 }
92
93 public InputStream getResourceAsStream(final String name) {
94 return null;
95 }
96 }
97
98 }