View Javadoc

1   package com.atlassian.plugin.osgi.factory;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   import com.atlassian.plugin.ModuleDescriptorFactory;
5   import com.atlassian.plugin.descriptors.UnrecognisedModuleDescriptor;
6   import com.atlassian.plugin.osgi.external.ListableModuleDescriptorFactory;
7   import com.atlassian.plugin.osgi.factory.descriptor.ComponentModuleDescriptor;
8   import junit.framework.TestCase;
9   import org.osgi.util.tracker.ServiceTracker;
10  
11  import java.util.HashSet;
12  
13  import static java.util.Arrays.asList;
14  import static org.mockito.Mockito.mock;
15  import static org.mockito.Mockito.when;
16  
17  /**
18   *
19   */
20  public class TestOsgiChainedModuleDescriptorFactoryCreator extends TestCase
21  {
22      private OsgiChainedModuleDescriptorFactoryCreator.ServiceTrackerFactory serviceTrackerFactory;
23      private ServiceTracker tracker;
24      private OsgiChainedModuleDescriptorFactoryCreator.ResourceLocator resourceLocator;
25      private ModuleDescriptorFactory moduleDescriptorFactory;
26      private OsgiChainedModuleDescriptorFactoryCreator creator;
27      private ModuleDescriptor fooModuleDescriptor;
28  
29      public void testCreate() throws ClassNotFoundException, InstantiationException, IllegalAccessException
30      {
31          ModuleDescriptor dynModuleDescriptor = mock(ModuleDescriptor.class);
32          ModuleDescriptorFactory dynModuleDescriptorFactory = createModuleDescriptorFactory("dyn", dynModuleDescriptor);
33          when(tracker.getServices()).thenReturn(new Object[] {dynModuleDescriptorFactory});
34          ModuleDescriptorFactory createdFactory = creator.create(resourceLocator, moduleDescriptorFactory);
35          assertNotNull(createdFactory);
36          assertEquals(ComponentModuleDescriptor.class, createdFactory.getModuleDescriptor("component").getClass());
37          assertEquals(dynModuleDescriptor, createdFactory.getModuleDescriptor("dyn"));
38          assertEquals(fooModuleDescriptor, createdFactory.getModuleDescriptor("foo"));
39          assertEquals(UnrecognisedModuleDescriptor.class, createdFactory.getModuleDescriptor("unknown").getClass());
40      }
41  
42      public void testCreateWithOsgiDescriptorOverridingHost() throws ClassNotFoundException, InstantiationException, IllegalAccessException
43      {
44          fooModuleDescriptor = mock(ModuleDescriptor.class);
45          moduleDescriptorFactory = createModuleDescriptorFactory("component", fooModuleDescriptor);
46          when(tracker.getServices()).thenReturn(new Object[0]);
47          ModuleDescriptorFactory createdFactory = creator.create(resourceLocator, moduleDescriptorFactory);
48          assertNotNull(createdFactory);
49          assertEquals(ComponentModuleDescriptor.class, createdFactory.getModuleDescriptor("component").getClass());
50      }
51  
52      protected void setUp() throws Exception
53      {
54          super.setUp();
55          serviceTrackerFactory = mock(OsgiChainedModuleDescriptorFactoryCreator.ServiceTrackerFactory.class);
56          tracker = mock(ServiceTracker.class);
57          when(serviceTrackerFactory.create(ModuleDescriptorFactory.class.getName())).thenReturn(tracker);
58          resourceLocator = mock(OsgiChainedModuleDescriptorFactoryCreator.ResourceLocator.class);
59          fooModuleDescriptor = mock(ModuleDescriptor.class);
60          moduleDescriptorFactory = createModuleDescriptorFactory("foo", fooModuleDescriptor);
61          creator = new OsgiChainedModuleDescriptorFactoryCreator(serviceTrackerFactory);
62      }
63  
64      private ModuleDescriptorFactory createModuleDescriptorFactory(String prefix, ModuleDescriptor moduleDescriptor)
65              throws IllegalAccessException, InstantiationException, ClassNotFoundException
66      {
67          ModuleDescriptorFactory moduleDescriptorFactory = mock(ModuleDescriptorFactory.class);
68          when(moduleDescriptorFactory.hasModuleDescriptor(prefix)).thenReturn(true);
69          when(moduleDescriptorFactory.getModuleDescriptor(prefix)).thenReturn(moduleDescriptor);
70          return moduleDescriptorFactory;
71      }
72  }