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 }