1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.functor.core.collection;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertNull;
21 import static org.junit.Assert.assertSame;
22 import static org.junit.Assert.assertTrue;
23 import static org.junit.Assert.fail;
24
25 import java.util.ArrayList;
26 import java.util.Collections;
27 import java.util.Iterator;
28 import java.util.List;
29 import java.util.NoSuchElementException;
30
31 import org.apache.commons.functor.BaseFunctorTest;
32 import org.apache.commons.functor.UnaryPredicate;
33 import org.apache.commons.functor.core.Constant;
34 import org.junit.After;
35 import org.junit.Before;
36 import org.junit.Test;
37
38
39
40
41
42 @SuppressWarnings("unchecked")
43 public class TestFilteredIterator extends BaseFunctorTest {
44
45 public Object makeFunctor() {
46 List list = new ArrayList();
47 list.add("xyzzy");
48 return FilteredIterator.filter(list.iterator(),Constant.truePredicate());
49 }
50
51 @Before
52 public void setUp() throws Exception {
53 list = new ArrayList();
54 evens = new ArrayList();
55 for (int i=0;i<10;i++) {
56 list.add(new Integer(i));
57 if (i%2 == 0) {
58 evens.add(new Integer(i));
59 }
60 }
61 }
62
63 @After
64 public void tearDown() throws Exception {
65 list = null;
66 evens = null;
67 }
68
69
70
71
72 @Test
73 public void testSomePass() {
74 Iterator expected = evens.iterator();
75 Iterator testing = new FilteredIterator(list.iterator(),isEven);
76 while(expected.hasNext()) {
77 assertTrue(testing.hasNext());
78 assertEquals(expected.next(),testing.next());
79 }
80 assertTrue(!testing.hasNext());
81 }
82
83 @Test
84 public void testAllPass() {
85 Iterator expected = evens.iterator();
86 Iterator testing = new FilteredIterator(evens.iterator(),isEven);
87 while(expected.hasNext()) {
88 assertTrue(testing.hasNext());
89 assertEquals(expected.next(),testing.next());
90 }
91 assertTrue(!testing.hasNext());
92 }
93
94 @Test
95 public void testAllPass2() {
96 Iterator expected = list.iterator();
97 Iterator testing = new FilteredIterator(list.iterator(),Constant.truePredicate());
98 while(expected.hasNext()) {
99 assertTrue(testing.hasNext());
100 assertEquals(expected.next(),testing.next());
101 }
102 assertTrue(!testing.hasNext());
103 }
104
105 @Test
106 public void testEmptyList() {
107 Iterator testing = new FilteredIterator(Collections.EMPTY_LIST.iterator(),isEven);
108 assertTrue(!testing.hasNext());
109 }
110
111 @Test
112 public void testNonePass() {
113 Iterator testing = new FilteredIterator(Collections.EMPTY_LIST.iterator(),Constant.falsePredicate());
114 assertTrue(!testing.hasNext());
115 }
116
117 @Test
118 public void testNextWithoutHasNext() {
119 Iterator testing = new FilteredIterator(list.iterator(),isEven);
120 Iterator expected = evens.iterator();
121 while(expected.hasNext()) {
122 assertEquals(expected.next(),testing.next());
123 }
124 assertTrue(!(testing.hasNext()));
125 }
126
127 @Test
128 public void testNextAfterEndOfList() {
129 Iterator testing = new FilteredIterator(list.iterator(),isEven);
130 Iterator expected = evens.iterator();
131 while(expected.hasNext()) {
132 assertEquals(expected.next(),testing.next());
133 }
134 try {
135 testing.next();
136 fail("ExpectedNoSuchElementException");
137 } catch(NoSuchElementException e) {
138
139 }
140 }
141
142 @Test
143 public void testNextOnEmptyList() {
144 Iterator testing = new FilteredIterator(Collections.EMPTY_LIST.iterator(),isEven);
145 try {
146 testing.next();
147 fail("ExpectedNoSuchElementException");
148 } catch(NoSuchElementException e) {
149
150 }
151 }
152
153 @Test
154 public void testRemoveBeforeNext() {
155 Iterator testing = new FilteredIterator(list.iterator(),isEven);
156 try {
157 testing.remove();
158 fail("IllegalStateException");
159 } catch(IllegalStateException e) {
160
161 }
162 }
163
164 @Test
165 public void testRemoveAfterNext() {
166 Iterator testing = new FilteredIterator(list.iterator(),isEven);
167 testing.next();
168 testing.remove();
169 try {
170 testing.remove();
171 fail("IllegalStateException");
172 } catch(IllegalStateException e) {
173
174 }
175 }
176
177 @Test
178 public void testRemoveSome() {
179 Iterator testing = new FilteredIterator(list.iterator(),isEven);
180 while(testing.hasNext()) {
181 testing.next();
182 testing.remove();
183 }
184 for (Iterator iter = list.iterator(); iter.hasNext();) {
185 assertTrue(! isEven.test(iter.next()) );
186 }
187 }
188
189 @Test
190 public void testRemoveAll() {
191 Iterator testing = new FilteredIterator(list.iterator(),Constant.truePredicate());
192 while(testing.hasNext()) {
193 testing.next();
194 testing.remove();
195 }
196 assertTrue(list.isEmpty());
197 }
198
199 @Test
200 public void testRemoveWithoutHasNext() {
201 Iterator testing = new FilteredIterator(list.iterator(),Constant.truePredicate());
202 for (int i=0,m = list.size();i<m;i++) {
203 testing.next();
204 testing.remove();
205 }
206 assertTrue(list.isEmpty());
207 }
208
209 @Test
210 public void testFilterWithNullIteratorReturnsNull() {
211 assertNull(FilteredIterator.filter(null,Constant.truePredicate()));
212 }
213
214 @Test
215 public void testFilterWithNullPredicateReturnsIdentity() {
216 Iterator iter = list.iterator();
217 assertSame(iter,FilteredIterator.filter(iter,null));
218 }
219
220 @Test
221 public void testConstructorProhibitsNull() {
222 try {
223 new FilteredIterator(null,null);
224 fail("ExpectedNullPointerException");
225 } catch(IllegalArgumentException e) {
226
227 }
228 try {
229 new FilteredIterator(null,Constant.truePredicate());
230 fail("ExpectedNullPointerException");
231 } catch(IllegalArgumentException e) {
232
233 }
234 try {
235 new FilteredIterator(list.iterator(),null);
236 fail("ExpectedNullPointerException");
237 } catch(IllegalArgumentException e) {
238
239 }
240 }
241
242
243
244
245 private List list = null;
246 private List evens = null;
247 private UnaryPredicate isEven = new UnaryPredicate() {
248 public boolean test(Object obj) {
249 return ((Number) obj).intValue() % 2 == 0;
250 }
251 };
252
253 }