View Javadoc
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  }