View Javadoc

1   package io.atlassian.fugue;
2   
3   import org.junit.Test;
4   
5   import java.util.ArrayList;
6   import java.util.Iterator;
7   import java.util.List;
8   import java.util.NoSuchElementException;
9   
10  import static io.atlassian.fugue.Iterators.emptyIterator;
11  import static io.atlassian.fugue.Iterators.peekingIterator;
12  import static io.atlassian.fugue.Iterators.singletonIterator;
13  import static java.util.Arrays.asList;
14  import static java.util.Collections.singletonList;
15  import static org.hamcrest.MatcherAssert.assertThat;
16  import static org.hamcrest.Matchers.is;
17  
18  public class IteratorsTest {
19  
20    @Test(expected = IllegalStateException.class) public void removeAfterPeeking() throws Exception {
21      final Iterators.Peeking<Integer> integerPeekingIterator = peekingIterator(asList(1, 2).iterator());
22      assertThat(integerPeekingIterator.peek(), is(1));
23      integerPeekingIterator.remove();
24    }
25  
26    @Test public void peekAfterRemoving() throws Exception {
27      final List<Integer> testList = new ArrayList<>();
28      testList.add(1);
29      testList.add(2);
30      final Iterators.Peeking<Integer> integerPeekingIterator = peekingIterator(testList.listIterator());
31      integerPeekingIterator.next();
32      integerPeekingIterator.remove();
33      assertThat(integerPeekingIterator.peek(), is(2));
34    }
35  
36    @Test public void testSingletonIterator() throws Exception {
37      final Iterator<Integer> integerIterator = singletonIterator(1);
38      assertThat(integerIterator.hasNext(), is(true));
39      assertThat(integerIterator.next(), is(1));
40      assertThat(integerIterator.hasNext(), is(false));
41    }
42  
43    @Test(expected = UnsupportedOperationException.class) public void iteratingTwiceFails() throws Exception {
44      final Iterator<Integer> integerIterator = singletonIterator(1);
45      assertThat(integerIterator.next(), is(1));
46      assertThat(integerIterator.hasNext(), is(false));
47      integerIterator.next();
48    }
49  
50    @Test public void testEmptyIterator() throws Exception {
51      final Iterator<Integer> intIter = emptyIterator();
52      assertThat(intIter.hasNext(), is(false));
53    }
54  
55    @Test(expected = NoSuchElementException.class) public void unsafeReferenceReuseExternalElementConsumption() {
56      final Iterator<Integer> i = asList(1, 2).iterator();
57      final Iterators.Peeking<Integer> peeking = peekingIterator(i);
58      assertThat(peeking.peek(), is(1));
59      assertThat(peeking.next(), is(1));
60      assertThat(peeking.hasNext(), is(true));
61      assertThat(i.hasNext(), is(true));
62      assertThat(i.next(), is(2));
63      peeking.next();
64    }
65  
66    @Test(expected = NoSuchElementException.class) public void unsafeReferenceReusePeekConsumesElement() {
67      final Iterator<Integer> i = singletonList(1).iterator();
68      final Iterators.Peeking<Integer> peeking = peekingIterator(i);
69      assertThat(peeking.peek(), is(1));
70      i.next();
71    }
72  }