1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.collections4.iterators;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertThrows;
23
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.function.Function;
29 import java.util.function.Predicate;
30
31 import org.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33
34 public class ExtendedIteratorTest {
35
36
37
38 private List<Integer> collectionA;
39
40 @BeforeEach
41 public void setUp() {
42 collectionA = new ArrayList<>();
43 collectionA.add(1);
44 collectionA.add(2);
45 collectionA.add(3);
46 collectionA.add(4);
47 collectionA.add(5);
48 collectionA.add(6);
49 }
50
51 @Test
52 public void testAddTo() {
53 final List<Integer> expected = new ArrayList<>(collectionA);
54 expected.addAll(collectionA);
55 final List<Integer> actual = ExtendedIterator.create(collectionA.iterator()).addTo(new ArrayList<>(collectionA));
56 assertEquals(expected, actual);
57 }
58
59 @Test
60 public void testAndThen() {
61 final Iterator<Integer> iter1 = Arrays.asList(1, 2, 3).iterator();
62 final Iterator<Integer> iter2 = Arrays.asList(4, 5, 6).iterator();
63
64 final ExtendedIterator<Integer> underTest = ExtendedIterator.create(iter1).andThen(iter2);
65 final List<Integer> actual = new ArrayList<>();
66 underTest.forEachRemaining(actual::add);
67 assertEquals(collectionA, actual);
68 }
69
70 @Test
71 public void testCreate() {
72 final Iterator<Integer> iter = ExtendedIterator.create(collectionA.iterator());
73 final List<Integer> actual = new ArrayList<>();
74 iter.forEachRemaining(actual::add);
75 assertEquals(collectionA, actual);
76 }
77
78 @Test
79 public void testCreateNoRemove() {
80 final Iterator<Integer> iter = ExtendedIterator.createNoRemove(collectionA.iterator());
81 assertThrows(UnsupportedOperationException.class, iter::remove);
82 }
83
84 @Test
85 public void testCreateWithStream() {
86 final Iterator<Integer> iter = ExtendedIterator.create(collectionA.stream());
87 assertThrows(UnsupportedOperationException.class, iter::remove);
88 final List<Integer> actual = new ArrayList<>();
89 iter.forEachRemaining(actual::add);
90 assertEquals(collectionA, actual);
91 }
92
93 @Test
94 public void testEmptyIterator() {
95 assertFalse(ExtendedIterator.emptyIterator().hasNext());
96 }
97
98 @Test
99 public void testFilter() {
100 final List<Integer> expected = Arrays.asList(2, 4, 6);
101 final Predicate<Integer> predicate = i -> i % 2 == 0;
102 final ExtendedIterator<Integer> underTest = ExtendedIterator.create(collectionA.iterator()).filter(predicate);
103 final List<Integer> actual = new ArrayList<>();
104 underTest.forEachRemaining(actual::add);
105 assertEquals(expected, actual);
106 }
107
108 @Test
109 public void testFlatten() {
110 final Iterator<Iterator<Integer>> iteratorIterator = Arrays.asList(
111 Arrays.asList(1, 2, 3).iterator(),
112 Arrays.asList(4, 5, 6).iterator()
113 ).iterator();
114 final Iterator<Integer> iter = ExtendedIterator.flatten(iteratorIterator);
115 final List<Integer> actual = new ArrayList<>();
116 iter.forEachRemaining(actual::add);
117 assertEquals(collectionA, actual);
118 }
119
120 @Test
121 public void testMap() {
122 final List<Double> expected = Arrays.asList(0.5, 1., 1.5, 2.0, 2.5, 3.0);
123 final Function<Integer, Double> function = i -> i / 2.0;
124 final ExtendedIterator<Double> underTest = ExtendedIterator.create(collectionA.iterator()).map(function);
125 final List<Double> actual = new ArrayList<>();
126 underTest.forEachRemaining(actual::add);
127 assertEquals(expected, actual);
128 }
129
130 @Test
131 public void testRemove() {
132 final Iterator<Integer> iter = ExtendedIterator.create(collectionA.iterator());
133 final Integer i = iter.next();
134 iter.remove();
135 assertFalse(collectionA.contains(i));
136 final List<Integer> actual = new ArrayList<>();
137 iter.forEachRemaining(actual::add);
138 assertEquals(collectionA, actual);
139 }
140
141 @Test
142 public void testRemoveNext() {
143 final ExtendedIterator<Integer> iter = ExtendedIterator.create(collectionA.iterator());
144 final Integer i = iter.removeNext();
145 assertFalse(collectionA.contains(i));
146 final List<Integer> actual = new ArrayList<>();
147 iter.forEachRemaining(actual::add);
148 assertEquals(collectionA, actual);
149 }
150 }