blob: 837564d8d9849c8c4ab0fe5265a03e99fbce4df0 [file] [log] [blame]
/******************************************************************************
* 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.internal.service.collection;
import java.util.Comparator;
import java.util.Dictionary;
import java.util.Properties;
import junit.framework.TestCase;
import org.eclipse.gemini.blueprint.service.importer.support.internal.util.ServiceReferenceComparator;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.eclipse.gemini.blueprint.mock.MockServiceReference;
/**
* @author Costin Leau
*
*/
public class ServiceReferenceComparatorTest extends TestCase {
private Comparator comparator;
protected void setUp() throws Exception {
comparator = new ServiceReferenceComparator();
}
protected void tearDown() throws Exception {
comparator = null;
}
public void testServiceRefsWithTheSameId() throws Exception {
ServiceReference refA = createReference(new Long(1), null);
ServiceReference refB = createReference(new Long(1), null);
// refA is higher then refB
assertEquals(0, comparator.compare(refA, refB));
}
public void testServiceRefsWithDifferentIdAndNoRanking() throws Exception {
ServiceReference refA = createReference(new Long(1), null);
ServiceReference refB = createReference(new Long(2), null);
// refA is higher then refB
// default ranking is equal
assertTrue(comparator.compare(refA, refB) > 0);
}
public void testServiceRefsWithDifferentIdAndDifferentRanking() throws Exception {
ServiceReference refA = createReference(new Long(1), new Integer(0));
ServiceReference refB = createReference(new Long(2), new Integer(1));
// refB is higher then refA (due to ranking)
assertTrue(comparator.compare(refA, refB) < 0);
}
public void testServiceRefsWithSameRankAndDifId() throws Exception {
ServiceReference refA = createReference(new Long(1), new Integer(5));
ServiceReference refB = createReference(new Long(2), new Integer(5));
// same ranking, means id equality applies
assertTrue(comparator.compare(refA, refB) > 0);
}
public void testNullObjects() throws Exception {
assertEquals(0, comparator.compare(null, null));
}
public void testNonNullWithNull() throws Exception {
try {
comparator.compare(new MockServiceReference(), null);
fail("should have thrown exception");
}
catch (ClassCastException cce) {
}
}
private ServiceReference createReference(Long id, Integer ranking) {
Dictionary dict = new Properties();
dict.put(Constants.SERVICE_ID, id);
if (ranking != null)
dict.put(Constants.SERVICE_RANKING, ranking);
return new MockServiceReference(null, dict);
}
}