/*
* Copyright (C) 2005, 2006 Joe Walnes.
* Copyright (C) 2006, 2007 XStream Committers.
* All rights reserved.
*
* The software in this package is published under the terms of the BSD
* style license a copy of which has been included with this distribution in
* the LICENSE.txt file.
*
* Created on 06. February 2005 by Joe Walnes
*/
package com.thoughtworks.xstream.core.util;
import junit.framework.TestCase;
import java.util.Iterator;
public class PrioritizedListTest extends TestCase {
private void assertNextEquals(Object expected, Iterator iterator) {
assertTrue("Expected to pull of another item from iterator : " + expected, iterator.hasNext());
assertEquals(expected, iterator.next());
}
private void assertNoMore(Iterator iterator) {
assertFalse("Should be no more items in iterator", iterator.hasNext());
}
public void testIteratesOverElementsInReverseOrderTheyWereAdded() {
PrioritizedList list = new PrioritizedList();
list.add("one", 0);
list.add("two", 0);
list.add("three", 0);
Iterator iterator = list.iterator();
assertNextEquals("three", iterator);
assertNextEquals("two", iterator);
assertNextEquals("one", iterator);
assertNoMore(iterator);
}
public void testHandlesMultipleIsolatedIterators() {
PrioritizedList list = new PrioritizedList();
list.add("one", 0);
list.add("two", 0);
Iterator iteratorOne = list.iterator();
assertNextEquals("two", iteratorOne);
Iterator iteratorTwo = list.iterator();
assertNextEquals("one", iteratorOne);
assertNextEquals("two", iteratorTwo);
assertNextEquals("one", iteratorTwo);
assertNoMore(iteratorTwo);
assertNoMore(iteratorOne);
}
public void testIteratesOverHighestPriorityItemsFirst() {
PrioritizedList list = new PrioritizedList();
list.add("medium one", 0);
list.add("high one", 1);
list.add("low one", -1);
list.add("very high", 4);
list.add("low two", -1);
list.add("medium two", 0);
list.add("VERY VERY high", 100);
list.add("high two", 1);
list.add("very low", -4);
list.add("VERY VERY low", -100);
Iterator iterator = list.iterator();
assertNextEquals("VERY VERY high", iterator);
assertNextEquals("very high", iterator);
assertNextEquals("high two", iterator);
assertNextEquals("high one", iterator);
assertNextEquals("medium two", iterator);
assertNextEquals("medium one", iterator);
assertNextEquals("low two", iterator);
assertNextEquals("low one", iterator);
assertNextEquals("very low", iterator);
assertNextEquals("VERY VERY low", iterator);
assertNoMore(iterator);
}
}