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.factory.descriptor.ComponentModuleDescriptor;
7 import junit.framework.TestCase;
8 import org.osgi.util.tracker.ServiceTracker;
9
10 import static org.mockito.Mockito.mock;
11 import static org.mockito.Mockito.when;
12
13
14
15
16 public class TestOsgiChainedModuleDescriptorFactoryCreator extends TestCase {
17 private OsgiChainedModuleDescriptorFactoryCreator.ServiceTrackerFactory serviceTrackerFactory;
18 private ServiceTracker tracker;
19 private OsgiChainedModuleDescriptorFactoryCreator.ResourceLocator resourceLocator;
20 private ModuleDescriptorFactory moduleDescriptorFactory;
21 private OsgiChainedModuleDescriptorFactoryCreator creator;
22 private ModuleDescriptor fooModuleDescriptor;
23
24 public void testCreate() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
25 ModuleDescriptor dynModuleDescriptor = mock(ModuleDescriptor.class);
26 ModuleDescriptorFactory dynModuleDescriptorFactory = createModuleDescriptorFactory("dyn", dynModuleDescriptor);
27 when(tracker.getServices()).thenReturn(new Object[]{dynModuleDescriptorFactory});
28 ModuleDescriptorFactory createdFactory = creator.create(resourceLocator, moduleDescriptorFactory);
29 assertNotNull(createdFactory);
30 assertEquals(ComponentModuleDescriptor.class, createdFactory.getModuleDescriptor("component").getClass());
31 assertEquals(dynModuleDescriptor, createdFactory.getModuleDescriptor("dyn"));
32 assertEquals(fooModuleDescriptor, createdFactory.getModuleDescriptor("foo"));
33 assertEquals(UnrecognisedModuleDescriptor.class, createdFactory.getModuleDescriptor("unknown").getClass());
34 }
35
36 public void testCreateWithOsgiDescriptorOverridingHost() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
37 fooModuleDescriptor = mock(ModuleDescriptor.class);
38 moduleDescriptorFactory = createModuleDescriptorFactory("component", fooModuleDescriptor);
39 when(tracker.getServices()).thenReturn(new Object[0]);
40 ModuleDescriptorFactory createdFactory = creator.create(resourceLocator, moduleDescriptorFactory);
41 assertNotNull(createdFactory);
42 assertEquals(ComponentModuleDescriptor.class, createdFactory.getModuleDescriptor("component").getClass());
43 }
44
45 protected void setUp() throws Exception {
46 super.setUp();
47 serviceTrackerFactory = mock(OsgiChainedModuleDescriptorFactoryCreator.ServiceTrackerFactory.class);
48 tracker = mock(ServiceTracker.class);
49 when(serviceTrackerFactory.create(ModuleDescriptorFactory.class.getName())).thenReturn(tracker);
50 resourceLocator = mock(OsgiChainedModuleDescriptorFactoryCreator.ResourceLocator.class);
51 fooModuleDescriptor = mock(ModuleDescriptor.class);
52 moduleDescriptorFactory = createModuleDescriptorFactory("foo", fooModuleDescriptor);
53 creator = new OsgiChainedModuleDescriptorFactoryCreator(serviceTrackerFactory);
54 }
55
56 private ModuleDescriptorFactory createModuleDescriptorFactory(String prefix, ModuleDescriptor moduleDescriptor)
57 throws IllegalAccessException, InstantiationException, ClassNotFoundException {
58 ModuleDescriptorFactory moduleDescriptorFactory = mock(ModuleDescriptorFactory.class);
59 when(moduleDescriptorFactory.hasModuleDescriptor(prefix)).thenReturn(true);
60 when(moduleDescriptorFactory.getModuleDescriptor(prefix)).thenReturn(moduleDescriptor);
61 return moduleDescriptorFactory;
62 }
63 }