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