/******************************************************************************
* Copyright (c) 2006, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
* is available at http://www.opensource.org/licenses/apache2.0.php.
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
* VMware Inc.
*****************************************************************************/
package org.eclipse.gemini.blueprint.service.importer.support.internal.aop;
import java.util.Arrays;
import java.util.Properties;
import junit.framework.TestCase;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
import org.eclipse.gemini.blueprint.mock.MockBundle;
import org.eclipse.gemini.blueprint.mock.MockServiceReference;
/**
*
* @author Costin Leau
*
*/
public class SwappingServiceReferenceProxyTest extends TestCase {
private SwappingServiceReferenceProxy reference;
private ServiceReference serviceReference;
protected void setUp() throws Exception {
Properties props = new Properties();
props.setProperty("composer", "Rachmaninoff");
reference = new SwappingServiceReferenceProxy();
serviceReference = new MockServiceReference();
}
protected void tearDown() throws Exception {
reference = null;
serviceReference = null;
}
public void testHashCode() {
assertTrue(reference.hashCode() != 0);
}
public void testGetBundle() {
assertNull(reference.getBundle());
}
public void testGetProperty() {
assertNull(reference.getProperty("foo"));
}
public void testGetPropertyKeys() {
String[] array = reference.getPropertyKeys();
assertNotNull(array);
assertEquals(0, array.length);
}
public void testGetUsingBundles() {
Bundle[] array = reference.getUsingBundles();
assertNotNull(array);
assertEquals(0, array.length);
}
public void testIsAssignableTo() {
assertFalse(reference.isAssignableTo(new MockBundle(), "Object"));
}
public void testGetTargetServiceReference() {
assertNull(reference.getTargetServiceReference());
assertNull(reference.swapDelegates(serviceReference));
assertSame(serviceReference, reference.getTargetServiceReference());
}
public void testEqualsObject() {
SwappingServiceReferenceProxy anotherRef = new SwappingServiceReferenceProxy();
assertEquals(anotherRef, reference);
assertEquals(reference, anotherRef);
anotherRef.swapDelegates(serviceReference);
assertFalse(anotherRef.equals(reference));
assertFalse(reference.equals(anotherRef));
assertEquals(reference, reference);
}
public void testSwapDelegates() {
int originalHashCode = reference.hashCode();
assertNull(reference.swapDelegates(serviceReference));
assertSame(serviceReference, reference.getTargetServiceReference());
assertFalse(originalHashCode == reference.hashCode());
assertSame(serviceReference, reference.getTargetServiceReference());
}
public void testHashCodeWithNotNullDelegate() {
int originalHashCode = reference.hashCode();
reference.swapDelegates(serviceReference);
assertFalse(originalHashCode == reference.hashCode());
assertEquals(reference.hashCode(), reference.hashCode());
}
public void testGetBundleWithNotNullDelegate() {
reference.swapDelegates(serviceReference);
assertSame(serviceReference.getBundle(), reference.getBundle());
}
public void testGetPropertyWithNotNullDelegate() {
reference.swapDelegates(serviceReference);
assertSame(serviceReference.getProperty("composer"), reference.getProperty("composer"));
assertSame(serviceReference.getProperty("foo"), reference.getProperty("foo"));
}
public void testGetPropertyKeysWithNotNullDelegate() {
reference.swapDelegates(serviceReference);
assertTrue(Arrays.equals(serviceReference.getPropertyKeys(), reference.getPropertyKeys()));
}
public void testGetUsingBundlesWithNotNullDelegate() {
reference.swapDelegates(serviceReference);
assertTrue(Arrays.equals(serviceReference.getUsingBundles(), reference.getUsingBundles()));
}
public void testIsAssignableToWithNotNullDelegate() {
MockBundle bundle = new MockBundle();
String className = "Object";
reference.swapDelegates(serviceReference);
assertEquals(serviceReference.isAssignableTo(bundle, className), reference.isAssignableTo(bundle, className));
}
public void testEqualsObjectWithNotNullDelegate() {
reference.swapDelegates(serviceReference);
SwappingServiceReferenceProxy anotherRef = new SwappingServiceReferenceProxy();
assertFalse(anotherRef.equals(reference));
assertFalse(reference.equals(anotherRef));
assertEquals(reference, reference);
anotherRef.swapDelegates(serviceReference);
assertEquals(anotherRef, reference);
assertEquals(reference, anotherRef);
assertEquals(reference, reference);
}
public void testCompareToItself() throws Exception {
assertEquals(0, reference.compareTo(reference));
}
public void testDefaultCompareTo() throws Exception {
assertEquals(0, reference.compareTo(new SwappingServiceReferenceProxy()));
}
public void testCompareToDifferentService() throws Exception {
SwappingServiceReferenceProxy proxy = new SwappingServiceReferenceProxy();
proxy.swapDelegates(new MockServiceReference());
try {
reference.compareTo(proxy);
fail("expected CCE");
}
catch (Exception ex) {
}
}
}