View Javadoc
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  }