View Javadoc

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  }