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