blob: b02cffb60f1f61421fb4e71f46e75a876a55627a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 Frank Appel and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Frank Appel - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.rap.rwt.osgi.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.eclipse.rap.rwt.osgi.internal.ServiceContainer.ServiceHolder;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
public class ServiceContainer_Test {
private BundleContext bundleContext;
private ServiceContainer< Object > container;
private ServiceReference< Object > serviceReference;
@Before
public void setUp() {
bundleContext = mock( BundleContext.class );
container = new ServiceContainer< Object >( bundleContext );
}
@Test
public void testAddService() {
Object service = new Object();
ServiceHolder< Object > holder1 = container.add( service );
ServiceHolder< Object > holder2 = container.add( service );
assertEquals( 1, container.size() );
assertSame( holder1, holder2 );
assertSame( service, holder1.getService());
}
@Test
public void testAddServiceReference() {
Object service = new Object();
mockServiceReference( service );
ServiceHolder< Object > holder1 = container.add( serviceReference );
ServiceHolder< Object > holder2 = container.add( serviceReference );
ServiceHolder< Object > holder3 = container.add( service );
assertEquals( 1, container.size() );
assertSame( holder1, holder2 );
assertSame( holder1, holder3 );
assertSame( serviceReference, holder1.getReference() );
assertSame( service, holder1.getService());
}
@Test
public void testUpdateServiceReference() {
Object service = new Object();
mockServiceReference( service );
ServiceHolder< Object > holder1 = container.add( service );
ServiceReference< Object > reference = holder1.getReference();
ServiceHolder< Object > holder2 = container.add( serviceReference );
assertEquals( 1, container.size() );
assertSame( holder1, holder2 );
assertNull( reference );
assertSame( serviceReference, holder2.getReference() );
}
@Test
public void testFind() {
Object service = new Object();
container.add( service );
ServiceHolder< Object > holder = container.find( service );
assertSame( service, holder.getService() );
}
@Test
public void testClear() {
Object service = new Object();
container.add( service );
container.clear();
assertEquals( 0, container.size() );
}
@Test
public void testGetServices() {
Object service = new Object();
ServiceHolder< Object > holder = container.add( service );
ServiceHolder< Object >[] services = container.getServices();
assertEquals( 1, services.length );
assertSame( holder.getService(), services[ 0 ].getService() );
}
@Test
public void testRemove() {
Object service = new Object();
container.add( service );
container.remove( service );
assertEquals( 0, container.size() );
}
@SuppressWarnings( "unchecked" )
private void mockServiceReference( Object service ) {
serviceReference = mock( ServiceReference.class );
when( bundleContext.getService( serviceReference ) ).thenReturn( service );
}
}