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