View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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       * Collection of {@link Integer}s
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 }