1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package libcore.java.util; 18 19 import java.util.ArrayList; 20 import java.util.Arrays; 21 import java.util.Collection; 22 import java.util.ConcurrentModificationException; 23 import java.util.Iterator; 24 import java.util.List; 25 import java.util.ListIterator; 26 import java.util.function.Supplier; 27 28 import static junit.framework.Assert.*; 29 30 /** 31 * This class contains general purpose test cases for the {@code forEachRemaining} method inherited 32 * from {@code Iterator}. 33 */ 34 public class ForEachRemainingTester { 35 runTests(Supplier<? extends Collection<T>> collectionSupplier, T[] initialData)36 public static <T> void runTests(Supplier<? extends Collection<T>> collectionSupplier, 37 T[] initialData) throws Exception { 38 test_forEachRemaining(collectionSupplier.get(), initialData); 39 test_forEachRemaining_NPE(collectionSupplier.get(), initialData); 40 test_forEachRemaining_CME(collectionSupplier.get(), initialData); 41 42 Collection<T> collection = collectionSupplier.get(); 43 if (collection instanceof List) { 44 List<T> asList = (List<T>) collection; 45 test_forEachRemaining_list(asList, initialData); 46 test_forEachRemaining_NPE_list(asList, initialData); 47 test_forEachRemaining_CME_list(asList, initialData); 48 } 49 } 50 test_forEachRemaining_list(List<T> collection, T[] initialData)51 public static <T> void test_forEachRemaining_list(List<T> collection, T[] initialData) 52 throws Exception { 53 test_forEachRemaining(collection, initialData); 54 55 ArrayList<T> recorder = new ArrayList<>(); 56 ListIterator<T> lit = collection.listIterator(1); 57 58 lit.forEachRemaining((T i) -> recorder.add(i)); 59 if (initialData.length > 0) { 60 assertEquals(initialData.length - 1, recorder.size()); 61 for (int i = 1; i < initialData.length; i++){ 62 assertEquals(initialData[i], recorder.get(i - 1)); 63 } 64 } 65 } 66 test_forEachRemaining(Collection<T> collection, T[] initialData)67 public static <T> void test_forEachRemaining(Collection<T> collection, T[] initialData) 68 throws Exception { 69 collection.addAll(Arrays.asList(initialData)); 70 71 ArrayList<T> recorder = new ArrayList<>(); 72 collection.iterator().forEachRemaining((T i) -> recorder.add(i)); 73 // Note that the collection may not override equals and hashCode. 74 assertEquals(new ArrayList<T>(collection), recorder); 75 76 recorder.clear(); 77 Iterator<T> it = collection.iterator(); 78 it.next(); 79 80 it.forEachRemaining((T i) -> recorder.add(i)); 81 if (initialData.length > 0) { 82 assertEquals(initialData.length - 1, recorder.size()); 83 for (int i = 1; i < initialData.length; i++){ 84 assertEquals(initialData[i], recorder.get(i - 1)); 85 } 86 } 87 } 88 test_forEachRemaining_NPE(Collection<T> collection, T[] initialData)89 public static <T> void test_forEachRemaining_NPE(Collection<T> collection, T[] initialData) 90 throws Exception { 91 try { 92 collection.iterator().forEachRemaining(null); 93 fail(); 94 } catch (NullPointerException expected) { 95 } 96 } 97 test_forEachRemaining_CME(Collection<T> collection, T[] initialData)98 public static <T> void test_forEachRemaining_CME(Collection<T> collection, T[] initialData) 99 throws Exception { 100 collection.add(initialData[0]); 101 try { 102 collection.iterator().forEachRemaining(i -> collection.add(i)); 103 fail(); 104 } catch (ConcurrentModificationException expected) { 105 } 106 } 107 test_forEachRemaining_NPE_list(Collection<T> collection, T[] initialData)108 public static <T> void test_forEachRemaining_NPE_list(Collection<T> collection, T[] initialData) 109 throws Exception { 110 try { 111 collection.iterator().forEachRemaining(null); 112 fail(); 113 } catch (NullPointerException expected) { 114 } 115 } 116 test_forEachRemaining_CME_list(Collection<T> collection, T[] initialData)117 public static <T> void test_forEachRemaining_CME_list(Collection<T> collection, T[] initialData) 118 throws Exception { 119 collection.add(initialData[0]); 120 try { 121 collection.iterator().forEachRemaining(i -> collection.add(i)); 122 fail(); 123 } catch (ConcurrentModificationException expected) { 124 } 125 } 126 } 127