/**
*
*/
package xapi.test.collect;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import org.junit.Test;
import xapi.collect.impl.SimpleLinkedList;
/**
* @author "James X. Nelson (james@wetheinter.net)"
*
*/
public class SimpleLinkedListTest extends
AbstractLinkedListTest<SimpleLinkedList<String>> {
@Test
public void testListIterator_Add() {
final ListIterator<String> listItr = stack.listIterator();
listItr.next();
listItr.add("one.five");
assertIteratorContents(stack.iterator(), "one", "one.five", "two");
assertIteratorContents(stack.listIterator(), "one", "one.five", "two");
assertIteratorContents(stack.iteratorReverse(), "two", "one.five", "one");
assertEquals("one", stack.head());
assertEquals("two", stack.tail());
}
@Test
public void testListIterator_AddEnd() {
ListIterator<String> listItr = stack.listIterator();
assertIteratorContents(listItr, "one", "two");
listItr.add("three");
assertIteratorContents(stack.iterator(), "one", "two", "three");
assertIteratorContents(stack.listIterator(), "one", "two", "three");
assertIteratorContents(stack.iteratorReverse(), "three", "two", "one");
assertEquals("one", stack.head());
assertEquals("three", stack.tail());
// Verify the java.util implementation
final List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
listItr = list.listIterator();
assertIteratorContents(listItr, "one", "two");
listItr.add("three");
assertIteratorContents(list.listIterator(), "one", "two", "three");
}
@Test
public void testListIterator_AddToBeginning() {
stack.listIterator().add("zero");
assertIteratorContents(stack.iterator(), "zero", "one", "two");
assertIteratorContents(stack.listIterator(), "zero", "one", "two");
assertIteratorContents(stack.iteratorReverse(), "two", "one", "zero");
assertEquals("zero", stack.head());
assertEquals("two", stack.tail());
}
@Test
public void testListIterator_ManyOperations() {
ListIterator<String> listItr = stack.listIterator();
listItr.next();
listItr.add("one.five");
listItr.add("one.seven.five");
listItr.previous();
listItr.previous();
listItr.add("one.two.five");
listItr.next();
listItr.previous();
listItr.previous();
listItr.previous();
listItr.previous();
assertIteratorContents(listItr, "one", "one.two.five", "one.five",
"one.seven.five", "two");
assertIteratorContents(stack.iterator(), "one", "one.two.five", "one.five",
"one.seven.five", "two");
assertIteratorContents(stack.listIterator(), "one", "one.two.five",
"one.five", "one.seven.five", "two");
assertIteratorContents(stack.iteratorReverse(), "two", "one.seven.five",
"one.five", "one.two.five", "one");
assertEquals("one", stack.head());
assertEquals("two", stack.tail());
// Verify the java.util implementation
final List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
listItr = list.listIterator();
listItr.next();
listItr.add("one.five");
listItr.add("one.seven.five");
listItr.previous();
listItr.previous();
listItr.add("one.two.five");
listItr.previous();
listItr.previous();
assertIteratorContents(listItr, "one", "one.two.five", "one.five",
"one.seven.five", "two");
assertIteratorContents(list.iterator(), "one", "one.two.five", "one.five",
"one.seven.five", "two");
}
@Test
public void testListIterator_Remove() {
stack.add("three");
final ListIterator<String> listItr = stack.listIterator();
listItr.next();
listItr.remove();
listItr.next();
assertIteratorContents(stack.iterator(), "one", "three");
assertIteratorContents(stack.listIterator(), "one", "three");
assertIteratorContents(stack.iteratorReverse(), "three", "one");
assertEquals("one", stack.head());
assertEquals("three", stack.tail());
}
@Test
public void testListIterator_RemoveAtBeginning() {
stack.add("three");
final ListIterator<String> listItr = stack.listIterator();
listItr.remove();
assertIteratorContents(stack.iterator(), "two", "three");
assertIteratorContents(stack.listIterator(), "two", "three");
assertIteratorContents(stack.iteratorReverse(), "three", "two");
assertEquals("two", stack.head());
assertEquals("three", stack.tail());
}
@Test
public void testListIterator_RemoveAtEnd() {
stack.add("three");
final ListIterator<String> listItr = stack.listIterator();
listItr.next();
listItr.next();
listItr.remove();
assertIteratorContents(stack.iterator(), "one", "two");
assertIteratorContents(stack.listIterator(), "one", "two");
assertIteratorContents(stack.iteratorReverse(), "two", "one");
assertEquals("one", stack.head());
assertEquals("two", stack.tail());
}
@Test
public void testReverseForEach() {
final String[] expected = new String[] {
"two"
};
final Iterator<String> reverse = stack.iteratorReverse();
while (reverse.hasNext()) {
final String s = reverse.next();
assertEquals(expected[0], s);
expected[0] = "one";
}
}
@Test
public void testReverseIterate() {
assertIteratorContents(stack.iteratorReverse(), "two", "one");
}
@Override
protected SimpleLinkedList<String> newList() {
return new SimpleLinkedList<String>();
}
}