1 16 package org.apache.commons.collections.iterators; 17 18 import java.util.ArrayList ; 19 import java.util.Arrays ; 20 import java.util.Iterator ; 21 import java.util.List ; 22 import java.util.NoSuchElementException ; 23 24 import junit.framework.Test; 25 import junit.framework.TestSuite; 26 27 import org.apache.commons.collections.Predicate; 28 29 37 public class TestFilterIterator extends AbstractTestIterator { 38 39 40 public TestFilterIterator(String name) { 41 super(name); 42 } 43 44 private String [] array; 45 private List list; 46 private FilterIterator iterator; 47 50 public void setUp() { 51 array = new String [] { "a", "b", "c" }; 52 initIterator(); 53 } 54 55 58 public void tearDown() throws Exception { 59 iterator = null; 60 } 61 62 65 public static Test suite() { 66 return (new TestSuite(TestFilterIterator.class)); 67 } 68 69 75 public Iterator makeEmptyIterator() { 76 return makeBlockAllFilter(new ArrayIterator(array)); 77 } 78 79 85 public Iterator makeFullIterator() { 86 array = new String [] { "a", "b", "c" }; 87 list = new ArrayList (Arrays.asList(array)); 88 return makePassThroughFilter(list.iterator()); 89 } 90 91 public void testRepeatedHasNext() { 92 for (int i = 0; i <= array.length; i++) { 93 assertTrue(iterator.hasNext()); 94 } 95 } 96 97 public void testRepeatedNext() { 98 for (int i = 0; i < array.length; i++) 99 iterator.next(); 100 verifyNoMoreElements(); 101 } 102 103 public void testReturnValues() { 104 verifyElementsInPredicate(new String [0]); 105 verifyElementsInPredicate(new String [] { "a" }); 106 verifyElementsInPredicate(new String [] { "b" }); 107 verifyElementsInPredicate(new String [] { "c" }); 108 verifyElementsInPredicate(new String [] { "a", "b" }); 109 verifyElementsInPredicate(new String [] { "a", "c" }); 110 verifyElementsInPredicate(new String [] { "b", "c" }); 111 verifyElementsInPredicate(new String [] { "a", "b", "c" }); 112 } 113 114 private void verifyNoMoreElements() { 115 assertTrue(!iterator.hasNext()); 116 try { 117 iterator.next(); 118 fail("NoSuchElementException expected"); 119 } 120 catch (NoSuchElementException e) { 121 } 123 } 124 125 private void verifyElementsInPredicate(final String [] elements) { 126 Predicate pred = new Predicate() { 127 public boolean evaluate(Object x) { 128 for (int i = 0; i < elements.length; i++) 129 if (elements[i].equals(x)) 130 return true; 131 return false; 132 } 133 }; 134 initIterator(); 135 iterator.setPredicate(pred); 136 for (int i = 0; i < elements.length; i++) { 137 String s = (String )iterator.next(); 138 assertEquals(elements[i], s); 139 assertTrue(i == elements.length - 1 ? !iterator.hasNext() : iterator.hasNext()); 140 } 141 verifyNoMoreElements(); 142 143 initIterator(); 145 iterator.setPredicate(pred); 146 if (iterator.hasNext()) { 147 Object last = iterator.next(); 148 iterator.remove(); 149 assertTrue("Base of FilterIterator still contains removed element.", !list.contains(last)); 150 } 151 } 152 153 private void initIterator() { 154 iterator = (FilterIterator) makeFullIterator(); 155 } 156 157 164 protected FilterIterator makePassThroughFilter(Iterator i) { 165 Predicate pred = new Predicate() { 166 public boolean evaluate(Object x) { return true; } 167 }; 168 return new FilterIterator(i,pred); 169 } 170 171 178 protected FilterIterator makeBlockAllFilter(Iterator i) { 179 Predicate pred = new Predicate() { 180 public boolean evaluate(Object x) { return false; } 181 }; 182 return new FilterIterator(i,pred); 183 } 184 } 185 186 | Popular Tags |