package ch.akuhn.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; import java.util.Iterator; import org.junit.Test; public class ProvidableTest { private Providable<Integer> newDummy() { return new Providable<Integer>() { private Integer number; public void initialize() { number = 42; } public Integer provide() { return number < 45 ? number++ : done(); } }; } @Test public void testIterator() { Iterator<Integer> iter = newDummy().iterator(); assertEquals(42, (int)iter.next()); assertEquals(43, (int)iter.next()); assertEquals(44, (int)iter.next()); assertEquals(false, iter.hasNext()); } @Test public void testFirstIsNotClone() { Iterable<Integer> dummy = newDummy(); Iterator<Integer> first = dummy.iterator(); Iterator<Integer> second = dummy.iterator(); assertSame(dummy, first); assertNotSame(dummy, second); } @Test public void testTwoIterator() { Iterable<Integer> dummy = newDummy(); Iterator<Integer> iter_A = dummy.iterator(); Iterator<Integer> iter_B = dummy.iterator(); assertNotSame(iter_A,iter_B); assertEquals(42, (int)iter_A.next()); assertEquals(43, (int)iter_A.next()); assertEquals(42, (int)iter_B.next()); assertEquals(44, (int)iter_A.next()); assertEquals(43, (int)iter_B.next()); assertEquals(false, iter_A.hasNext()); assertEquals(44, (int)iter_B.next()); assertEquals(false, iter_A.hasNext()); } @Test(expected=IllegalStateException.class) public void testProvidableIsNotAnIteratorNext() { newDummy().next(); } @Test(expected=IllegalStateException.class) public void testProvidableIsNotAnIteratorHasNext() { newDummy().hasNext(); } }