1 package com.atlassian.plugin.osgi.bridge.external;
2
3 import junit.framework.TestCase;
4 import org.mockito.ArgumentCaptor;
5 import static org.mockito.Matchers.anyObject;
6 import static org.mockito.Mockito.mock;
7 import static org.mockito.Mockito.verify;
8 import static org.mockito.Mockito.when;
9 import org.osgi.framework.BundleContext;
10 import org.osgi.framework.ServiceListener;
11 import org.osgi.framework.ServiceReference;
12 import org.osgi.framework.ServiceEvent;
13
14 import java.util.concurrent.Callable;
15
16 public class TestHostComponentFactoryBean extends TestCase
17 {
18 public void testGetService() throws Exception
19 {
20 BundleContext ctx = mock(BundleContext.class);
21 ServiceReference ref = mock(ServiceReference.class);
22 when(ctx.getServiceReferences((String) null, "(foo=bar)")).thenReturn(new ServiceReference[] {ref});
23 when(ctx.getService(ref)).thenReturn(new Callable()
24 {
25 public Object call() throws Exception
26 {
27 return "foo";
28 }
29 });
30
31 ArgumentCaptor<ServiceListener> serviceListener = new ArgumentCaptor<ServiceListener>();
32
33 HostComponentFactoryBean bean = new HostComponentFactoryBean();
34 bean.setBundleContext(ctx);
35 bean.setFilter("(foo=bar)");
36 bean.setInterfaces(new Class[] {Callable.class});
37 bean.afterPropertiesSet();
38
39 assertEquals("foo", ((Callable)bean.getObject()).call());
40
41 verify(ctx).addServiceListener(serviceListener.capture(), (String)anyObject());
42 ServiceReference updatedRef = mock(ServiceReference.class);
43 when(ctx.getService(updatedRef)).thenReturn(new Callable()
44 {
45 public Object call() throws Exception
46 {
47 return "boo";
48 }
49 });
50 serviceListener.getValue().serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, updatedRef));
51
52 assertEquals("boo", ((Callable)bean.getObject()).call());
53 }
54
55 }