/******************************************************************************
* 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.Iterator;
import java.util.ListIterator;
import org.eclipse.gemini.blueprint.service.importer.support.internal.collection.OsgiServiceCollection;
import org.eclipse.gemini.blueprint.service.importer.support.internal.collection.OsgiServiceSortedList;
/**
* @author Costin Leau
*
*/
public class OsgiServiceSortedListTest extends AbstractOsgiCollectionTest {
private OsgiServiceSortedList col;
private Iterator iter;
protected void setUp() throws Exception {
super.setUp();
col = (OsgiServiceSortedList) super.col;
iter = col.iterator();
}
protected void tearDown() throws Exception {
super.tearDown();
col = null;
iter = null;
}
OsgiServiceCollection createCollection() {
return new OsgiServiceSortedList(null, context, getClass().getClassLoader(), createProxyCreator(new Class<?>[] {
Wrapper.class, Comparable.class }), false);
}
public void testOrderingWhileAdding() {
Wrapper date1 = new DateWrapper(1);
Wrapper date2 = new DateWrapper(2);
Wrapper date3 = new DateWrapper(3);
addService(date2);
assertEquals(1, col.size());
addService(date2);
// duplicates accepted
assertEquals("collection should accept duplicates", 2, col.size());
assertEquals(date2.toString(), col.get(0).toString());
addService(date1);
assertEquals("collection should accept duplicates", 3, col.size());
assertEquals(date1.toString(), col.get(0).toString());
addService(date3);
assertEquals("collection should accept duplicates", 4, col.size());
assertEquals(date1.toString(), col.get(0).toString());
assertEquals(date3.toString(), col.get(col.size() - 1).toString());
}
public void testOrderingWhileRemoving() {
Wrapper date1 = new DateWrapper(1);
Wrapper date2 = new DateWrapper(2);
Wrapper date3 = new DateWrapper(3);
addService(date1);
addService(date2);
addService(date3);
removeService(date2);
assertEquals(2, col.size());
assertEquals(date1.toString(), col.get(0).toString());
assertEquals(date3.toString(), col.get(col.size() - 1).toString());
removeService(date1);
assertEquals(1, col.size());
assertEquals(date3.toString(), col.get(0).toString());
assertEquals(date3.toString(), col.get(col.size() - 1).toString());
}
public void testOrderingWhileIterating() {
Wrapper date1 = new DateWrapper(1);
Wrapper date2 = new DateWrapper(2);
Wrapper date3 = new DateWrapper(3);
addService(date2);
assertTrue(iter.hasNext());
assertEquals(date2.toString(), iter.next().toString());
addService(date1);
assertFalse(iter.hasNext());
addService(date3);
assertTrue(iter.hasNext());
assertEquals(date3.toString(), iter.next().toString());
}
public void testOrderingAndDuplicatesWhileIterating() {
Wrapper date1 = new DateWrapper(1);
Wrapper date2 = new DateWrapper(2);
Wrapper date3 = new DateWrapper(3);
addService(date2);
assertTrue(iter.hasNext());
assertEquals(date2.toString(), iter.next().toString());
assertEquals(1, col.size());
// check next duplicate
addService(date2);
assertEquals(2, col.size());
assertEquals(date2.toString(), iter.next().toString());
addService(date1);
assertFalse(iter.hasNext());
assertEquals("collection should accept duplicates", 3, col.size());
addService(date1);
assertFalse(iter.hasNext());
assertEquals("collection should accept duplicates", 4, col.size());
addService(date3);
assertTrue(iter.hasNext());
assertEquals(date3.toString(), iter.next().toString());
}
public void testRemovalWhileIterating() {
Wrapper date1 = new DateWrapper(1);
Wrapper date2 = new DateWrapper(2);
Wrapper date3 = new DateWrapper(3);
addService(date2);
addService(date3);
addService(date1);
addService(date2);
addService(date1);
assertEquals(5, col.size());
// date1
assertEquals(date1.toString(), iter.next().toString());
removeService(date1);
// date2
assertEquals(date2.toString(), iter.next().toString());
removeService(date2);
// date 3
assertEquals(date3.toString(), iter.next().toString());
}
public void testHeadDeadProxy() {
ListIterator iterator = col.listIterator();
Wrapper date1 = new DateWrapper(1);
Wrapper date2 = new DateWrapper(2);
Wrapper date3 = new DateWrapper(3);
addService(date2);
addService(date1);
addService(date3);
// date1
assertEquals(date1.toString(), iterator.next().toString());
assertTrue(iterator.hasPrevious());
removeService(date1);
}
}