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