package net.i2p.router.util; import static org.junit.Assert.*; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.junit.Before; import org.junit.Test; public class CachedIteratorArrayListTest { private List<Character> l; private Iterator<Character> iter; @Before public void setUp() { l = new CachedIteratorArrayList<Character>(); l.add('a'); l.add('b'); l.add('c'); iter = l.iterator(); } /** test iterations work */ @Test public void test() { String total = ""; // two full for-each iterations for (char i : l) total += i; assertEquals("abc", total); for (char i : l) total += i; assertEquals("abcabc", total); // and one partial total = ""; iter = l.iterator(); total += iter.next(); total += iter.next(); iter = l.iterator(); total += iter.next(); assertEquals("aba",total); } @Test public void testSameness() { Iterator<Character> two = l.iterator(); Iterator<Character> one = l.iterator(); assertSame(one, two); } @Test public void testRemove() { iter.next(); iter.remove(); // test proper removal assertEquals(2,l.size()); assertEquals('b',l.get(0).charValue()); assertEquals('c',l.get(1).charValue()); // test iterator still workx after removal assertTrue(iter.hasNext()); assertEquals('b',iter.next().charValue()); assertEquals('c',iter.next().charValue()); assertFalse(iter.hasNext()); } /** * tests the Collections.sort method because that is used * in the router and internally creates iterators */ @Test public void testSorting() { List<Integer> li = new CachedIteratorArrayList<Integer>(); li.add(3); li.add(2); li.add(1); Collections.sort(li); Iterator<Integer> ii = li.iterator(); assertEquals(1,ii.next().intValue()); assertEquals(2,ii.next().intValue()); assertEquals(3,ii.next().intValue()); assertFalse(ii.hasNext()); } }