/******************************************************************************
* 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 org.eclipse.gemini.blueprint.service.importer.support.internal.collection.OsgiServiceCollection;
import org.eclipse.gemini.blueprint.service.importer.support.internal.collection.OsgiServiceSortedSet;
/**
* @author Costin Leau
*
*/
public class OsgiServiceSortedSetTest extends AbstractOsgiCollectionTest {
private OsgiServiceSortedSet col;
private Iterator iter;
protected void setUp() throws Exception {
super.setUp();
col = (OsgiServiceSortedSet) super.col;
iter = col.iterator();
}
protected void tearDown() throws Exception {
super.tearDown();
col = null;
iter = null;
}
OsgiServiceCollection createCollection() {
return new OsgiServiceSortedSet(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);
assertEquals(1, col.size());
assertEquals(date2.toString(), col.first().toString());
addService(date1);
assertEquals(2, col.size());
assertEquals(date1.toString(), col.first().toString());
addService(date3);
assertEquals(3, col.size());
assertEquals(date1.toString(), col.first().toString());
assertEquals(date3.toString(), col.last().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.first().toString());
assertEquals(date3.toString(), col.last().toString());
removeService(date1);
assertEquals(1, col.size());
assertEquals(date3.toString(), col.first().toString());
assertEquals(date3.toString(), col.last().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 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("collection should not accept duplicates", 3, 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());
}
}