1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.collections4.iterators;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.List;
27 import java.util.NoSuchElementException;
28
29 import org.junit.jupiter.api.Test;
30
31
32
33
34 public class LoopingIteratorTest {
35
36
37
38
39 @Test
40 public void testConstructorEx() {
41 assertThrows(NullPointerException.class, () -> new LoopingIterator<>(null));
42 }
43
44
45
46
47 @Test
48 public void testLooping0() {
49 final List<Object> list = new ArrayList<>();
50 final LoopingIterator<Object> loop = new LoopingIterator<>(list);
51 assertFalse(loop.hasNext(), "hasNext should return false");
52
53 assertThrows(NoSuchElementException.class, () -> loop.next(),
54 "NoSuchElementException was not thrown during next() call.");
55 }
56
57
58
59
60 @Test
61 public void testLooping1() {
62 final List<String> list = Arrays.asList("a");
63 final LoopingIterator<String> loop = new LoopingIterator<>(list);
64
65 assertTrue(loop.hasNext(), "1st hasNext should return true");
66 assertEquals("a", loop.next());
67
68 assertTrue(loop.hasNext(), "2nd hasNext should return true");
69 assertEquals("a", loop.next());
70
71 assertTrue(loop.hasNext(), "3rd hasNext should return true");
72 assertEquals("a", loop.next());
73 }
74
75
76
77
78 @Test
79 public void testLooping2() {
80 final List<String> list = Arrays.asList("a", "b");
81 final LoopingIterator<String> loop = new LoopingIterator<>(list);
82
83 assertTrue(loop.hasNext(), "1st hasNext should return true");
84 assertEquals("a", loop.next());
85
86 assertTrue(loop.hasNext(), "2nd hasNext should return true");
87 assertEquals("b", loop.next());
88
89 assertTrue(loop.hasNext(), "3rd hasNext should return true");
90 assertEquals("a", loop.next());
91 }
92
93
94
95
96 @Test
97 public void testLooping3() {
98 final List<String> list = Arrays.asList("a", "b", "c");
99 final LoopingIterator<String> loop = new LoopingIterator<>(list);
100
101 assertTrue(loop.hasNext(), "1st hasNext should return true");
102 assertEquals("a", loop.next());
103
104 assertTrue(loop.hasNext(), "2nd hasNext should return true");
105 assertEquals("b", loop.next());
106
107 assertTrue(loop.hasNext(), "3rd hasNext should return true");
108 assertEquals("c", loop.next());
109
110 assertTrue(loop.hasNext(), "4th hasNext should return true");
111 assertEquals("a", loop.next());
112 }
113
114
115
116
117 @Test
118 public void testRemoving1() {
119 final List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
120 final LoopingIterator<String> loop = new LoopingIterator<>(list);
121 assertEquals(3, list.size(), "list should have 3 elements.");
122
123 assertTrue(loop.hasNext(), "1st hasNext should return true");
124 assertEquals("a", loop.next());
125 loop.remove();
126 assertEquals(2, list.size(), "list should have 2 elements.");
127
128 assertTrue(loop.hasNext(), "2nd hasNext should return true");
129 assertEquals("b", loop.next());
130 loop.remove();
131 assertEquals(1, list.size(), "list should have 1 elements.");
132
133 assertTrue(loop.hasNext(), "3rd hasNext should return true");
134 assertEquals("c", loop.next());
135 loop.remove();
136 assertEquals(0, list.size(), "list should have 0 elements.");
137
138 assertFalse(loop.hasNext(), "4th hasNext should return false");
139
140 assertThrows(NoSuchElementException.class, () -> loop.next(),
141 "Expected NoSuchElementException to be thrown.");
142 }
143
144
145
146
147 @Test
148 public void testReset() {
149 final List<String> list = Arrays.asList("a", "b", "c");
150 final LoopingIterator<String> loop = new LoopingIterator<>(list);
151
152 assertEquals("a", loop.next());
153 assertEquals("b", loop.next());
154 loop.reset();
155 assertEquals("a", loop.next());
156 loop.reset();
157 assertEquals("a", loop.next());
158 assertEquals("b", loop.next());
159 assertEquals("c", loop.next());
160 loop.reset();
161 assertEquals("a", loop.next());
162 assertEquals("b", loop.next());
163 assertEquals("c", loop.next());
164 }
165
166
167
168
169 @Test
170 public void testSize() {
171 final List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
172 final LoopingIterator<String> loop = new LoopingIterator<>(list);
173
174 assertEquals(3, loop.size());
175 loop.next();
176 loop.next();
177 assertEquals(3, loop.size());
178 loop.reset();
179 assertEquals(3, loop.size());
180 loop.next();
181 loop.remove();
182 assertEquals(2, loop.size());
183 }
184
185 }