1 package io.atlassian.fugue;
2
3 import org.junit.Test;
4
5 import java.util.Iterator;
6 import java.util.function.Supplier;
7
8 import static org.hamcrest.Matchers.is;
9 import static org.junit.Assert.assertThat;
10
11 public class IteratorAbstractTest {
12
13 public <A> Iterator<A> newIterator(final Supplier<A> s) {
14 return new Iterators.Abstract<A>() {
15 @Override protected A computeNext() {
16 return s.get();
17 }
18 };
19 }
20
21 @Test(expected = IllegalStateException.class) public void testComputeNextThrows() {
22 final Iterator<Object> objectIterator = newIterator(() -> {
23 throw new RuntimeException();
24 });
25 try {
26 objectIterator.next();
27 } catch (final RuntimeException ignored) {}
28 objectIterator.next();
29 }
30
31 @Test public void testEndOfData() {
32 final Iterator<String> stopingIterator = new Iterators.Abstract<String>() {
33 boolean secondTime = false;
34
35 @Override protected String computeNext() {
36 if (!secondTime) {
37 secondTime = true;
38 return "first";
39 }
40 return endOfData();
41 }
42 };
43 assertThat(stopingIterator.hasNext(), is(true));
44 assertThat(stopingIterator.next(), is("first"));
45 assertThat(stopingIterator.hasNext(), is(false));
46 }
47
48 @Test public void testHasNext() {
49 final Iterator<Integer> integerIterator = newIterator(() -> 1);
50 assertThat(integerIterator.hasNext(), is(true));
51 }
52
53 @Test public void testNext() {
54 final Iterator<Integer> integerIterator = newIterator(() -> 1);
55 assertThat(integerIterator.next(), is(1));
56 }
57 }