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