package ch.akuhn.util; import static org.junit.Assert.assertEquals; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.junit.Before; import org.junit.Test; public class IteratorAsListTest { private List<String> words; @Before public void setup() { words = new LinkedList<String>(); words.add("Lorem"); words.add("ipsum"); words.add("dolor"); words.add("sit"); words.add("amit"); }; @Test public void testLazyGet() { IteratorAsList<String> ll = new IteratorAsList<String>(words); assertEquals(words.get(1), ll.get(1)); assertEquals(2, ll.size()); assertEquals(words.get(3), ll.get(3)); assertEquals(4, ll.size()); assertEquals(words.get(2), ll.get(2)); assertEquals(4, ll.size()); } @Test public void testIsEmpty() { IteratorAsList<String> ll = new IteratorAsList<String>(words); assertEquals(false, ll.isEmpty()); ll.upTo(2); assertEquals(false, ll.isEmpty()); ll.upToEnd(); assertEquals(false, ll.isEmpty()); } @Test public void testIsEmpty2() { IteratorAsList<String> ll = new IteratorAsList<String>(Collections.<String>emptyList()); assertEquals(true, ll.isEmpty()); ll.upToEnd(); assertEquals(true, ll.isEmpty()); } @Test public void testSize() { IteratorAsList<String> ll = new IteratorAsList<String>(words); assertEquals(0, ll.size()); ll.upTo(2); assertEquals(3, ll.size()); ll.upToEnd(); assertEquals(5, ll.size()); } @Test(expected=IndexOutOfBoundsException.class) public void testGetBeyond() { IteratorAsList<String> ll = new IteratorAsList<String>(words); ll.get(words.size()); } @Test public void testLazyIterator() { IteratorAsList<String> ll = new IteratorAsList<String>(words); ll.upTo(1); assertEquals(2, ll.size()); Iterator<String> it = ll.iterator(); assertEquals(true, it.hasNext()); assertEquals(words.get(0), it.next()); assertEquals(2, ll.size()); assertEquals(true, it.hasNext()); assertEquals(words.get(1), it.next()); assertEquals(2, ll.size()); assertEquals(true, it.hasNext()); assertEquals(words.get(2), it.next()); // strike! assertEquals(3, ll.size()); assertEquals(true, it.hasNext()); assertEquals(words.get(3), it.next()); assertEquals(4, ll.size()); assertEquals(true, it.hasNext()); assertEquals(words.get(4), it.next()); assertEquals(5, ll.size()); assertEquals(false, it.hasNext()); } @Test public void testLazyRemove() { IteratorAsList<String> ll = new IteratorAsList<String>(words); boolean found = ll.remove(words.get(2)); assertEquals(true,found); assertEquals(2, ll.size()); assertEquals(words.get(0), ll.get(0)); assertEquals(words.get(1), ll.get(1)); assertEquals(words.get(2+1), ll.get(2)); assertEquals(words.get(3+1), ll.get(3)); } @Test public void testLazyRemove2() { IteratorAsList<String> ll = new IteratorAsList<String>(words); boolean found = ll.remove("zork"); assertEquals(false,found); assertEquals(words.size(), ll.size()); } @Test public void testIndexOf() { IteratorAsList<String> ll = new IteratorAsList<String>(words); int found = ll.indexOf(words.get(2)); assertEquals(2,found); assertEquals(3, ll.size()); } @Test public void testIndexOf2() { IteratorAsList<String> ll = new IteratorAsList<String>(words); int found = ll.indexOf("zork"); assertEquals(-1,found); assertEquals(words.size(), ll.size()); } @Test public void testContains() { IteratorAsList<String> ll = new IteratorAsList<String>(words); boolean found = ll.contains(words.get(2)); assertEquals(true,found); assertEquals(3, ll.size()); } @Test public void testContains2() { IteratorAsList<String> ll = new IteratorAsList<String>(words); boolean found = ll.contains("zork"); assertEquals(false,found); assertEquals(words.size(), ll.size()); } @Test public void testLastIndexOf() { IteratorAsList<String> ll = new IteratorAsList<String>(words); int found = ll.lastIndexOf(words.get(2)); assertEquals(2,found); assertEquals(words.size(), ll.size()); } @Test public void testLastIndexOf2() { IteratorAsList<String> ll = new IteratorAsList<String>(words); int found = ll.lastIndexOf("zork"); assertEquals(-1,found); assertEquals(words.size(), ll.size()); } @Test public void testToString() { IteratorAsList<String> ll = new IteratorAsList<String>(words); assertEquals("[Lorem, ...]", ll.toString()); ll.upTo(2); assertEquals("[Lorem, ipsum, dolor, ...]", ll.toString()); ll.upToEnd(); assertEquals("[Lorem, ipsum, dolor, sit, amit]", ll.toString()); } }