You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ba...@apache.org on 2009/09/15 07:57:10 UTC
svn commit: r815116 -
/commons/proper/collections/trunk/src/test/org/apache/commons/collections/iterators/TestListIteratorWrapper.java
Author: bayard
Date: Tue Sep 15 05:57:09 2009
New Revision: 815116
URL: http://svn.apache.org/viewvc?rev=815116&view=rev
Log:
Merging from -r468106:814127 of collections_jdk5_branch - namely where this code was generified; mostly in r738956.
Also see the following revisions:
------------------------------------------------------------------------
r751857 | mbenson | 2009-03-09 14:43:53 -0700 (Mon, 09 Mar 2009) | 1 line
handle more ListIterator functionality when possible
------------------------------------------------------------------------
Modified:
commons/proper/collections/trunk/src/test/org/apache/commons/collections/iterators/TestListIteratorWrapper.java
Modified: commons/proper/collections/trunk/src/test/org/apache/commons/collections/iterators/TestListIteratorWrapper.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/org/apache/commons/collections/iterators/TestListIteratorWrapper.java?rev=815116&r1=815115&r2=815116&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/test/org/apache/commons/collections/iterators/TestListIteratorWrapper.java (original)
+++ commons/proper/collections/trunk/src/test/org/apache/commons/collections/iterators/TestListIteratorWrapper.java Tue Sep 15 05:57:09 2009
@@ -17,7 +17,6 @@
package org.apache.commons.collections.iterators;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
@@ -34,13 +33,13 @@
*
* @author Morgan Delagrange
*/
-public class TestListIteratorWrapper extends AbstractTestIterator {
+public class TestListIteratorWrapper<E> extends AbstractTestIterator<E> {
protected String[] testArray = {
"One", "Two", "Three", "Four", "Five", "Six"
};
- protected List list1 = null;
+ protected List<E> list1 = null;
public static Test suite() {
return new TestSuite(TestListIteratorWrapper.class);
@@ -50,49 +49,48 @@
super(testName);
}
+ @SuppressWarnings("unchecked")
public void setUp() {
- list1 = new ArrayList();
- list1.add("One");
- list1.add("Two");
- list1.add("Three");
- list1.add("Four");
- list1.add("Five");
- list1.add("Six");
+ list1 = new ArrayList<E>();
+ list1.add((E) "One");
+ list1.add((E) "Two");
+ list1.add((E) "Three");
+ list1.add((E) "Four");
+ list1.add((E) "Five");
+ list1.add((E) "Six");
+ }
+
+ public ResettableListIterator<E> makeEmptyIterator() {
+ ArrayList<E> list = new ArrayList<E>();
+ return new ListIteratorWrapper<E>(list.iterator());
}
- public Iterator makeEmptyIterator() {
- ArrayList list = new ArrayList();
- return new ListIteratorWrapper(list.iterator());
- }
-
- public Iterator makeFullIterator() {
- Iterator i = list1.iterator();
-
- return new ListIteratorWrapper(i);
+ public ResettableListIterator<E> makeObject() {
+ return new ListIteratorWrapper<E>(list1.iterator());
}
public void testIterator() {
- ListIterator iter = (ListIterator) makeFullIterator();
- for ( int i = 0; i < testArray.length; i++ ) {
- Object testValue = testArray[i];
+ ListIterator<E> iter = makeObject();
+ for (int i = 0; i < testArray.length; i++) {
+ Object testValue = testArray[i];
Object iterValue = iter.next();
- assertEquals( "Iteration value is correct", testValue, iterValue );
+ assertEquals("Iteration value is correct", testValue, iterValue);
}
- assertTrue("Iterator should now be empty", ! iter.hasNext() );
+ assertTrue("Iterator should now be empty", !iter.hasNext());
try {
iter.next();
} catch (Exception e) {
- assertTrue("NoSuchElementException must be thrown",
+ assertTrue("NoSuchElementException must be thrown",
e.getClass().equals((new NoSuchElementException()).getClass()));
}
// now, read it backwards
for (int i = testArray.length - 1; i > -1; --i) {
Object testValue = testArray[i];
- Object iterValue = iter.previous();
+ E iterValue = iter.previous();
assertEquals( "Iteration value is correct", testValue, iterValue );
}
@@ -100,50 +98,136 @@
try {
iter.previous();
} catch (Exception e) {
- assertTrue("NoSuchElementException must be thrown",
+ assertTrue("NoSuchElementException must be thrown",
e.getClass().equals((new NoSuchElementException()).getClass()));
}
// now, read it forwards again
- for ( int i = 0; i < testArray.length; i++ ) {
- Object testValue = testArray[i];
+ for (int i = 0; i < testArray.length; i++) {
+ Object testValue = testArray[i];
Object iterValue = iter.next();
- assertEquals( "Iteration value is correct", testValue, iterValue );
+ assertEquals("Iteration value is correct", testValue, iterValue);
}
}
public void testRemove() {
- Iterator iter = (Iterator) makeFullIterator();
+ ListIterator<E> iter = makeObject();
+
+ //initial state:
+ assertEquals(-1, iter.previousIndex());
+ assertEquals(0, iter.nextIndex());
try {
iter.remove();
- fail("FilterIterator does not support the remove() method");
- } catch (UnsupportedOperationException e) {
+ fail("ListIteratorWrapper#remove() should fail; must be initially positioned first");
+ } catch (IllegalStateException e) {
+ }
+ //no change from invalid op:
+ assertEquals(-1, iter.previousIndex());
+ assertEquals(0, iter.nextIndex());
+
+ //establish size:
+ int sz = list1.size();
+
+ //verify initial next() call:
+ assertEquals(list1.get(0), iter.next());
+ assertEquals(0, iter.previousIndex());
+ assertEquals(1, iter.nextIndex());
+
+ //verify remove():
+ iter.remove();
+ assertEquals(--sz, list1.size());
+ //like we never started iterating:
+ assertEquals(-1, iter.previousIndex());
+ assertEquals(0, iter.nextIndex());
+
+ try {
+ iter.remove();
+ fail("ListIteratorWrapper#remove() should fail; must be repositioned first");
+ } catch (IllegalStateException e) {
+ }
+
+ //no change from invalid op:
+ assertEquals(-1, iter.previousIndex());
+ assertEquals(0, iter.nextIndex());
+
+ //two consecutive next() calls:
+ assertEquals(list1.get(0), iter.next());
+ assertEquals(0, iter.previousIndex());
+ assertEquals(1, iter.nextIndex());
+
+ assertEquals(list1.get(1), iter.next());
+ assertEquals(1, iter.previousIndex());
+ assertEquals(2, iter.nextIndex());
+
+ //call previous():
+ assertEquals(list1.get(1), iter.previous());
+ assertEquals(0, iter.previousIndex());
+ assertEquals(1, iter.nextIndex());
+
+ //should support remove() after calling previous() once from tip because we haven't changed the underlying iterator's position:
+ iter.remove();
+ assertEquals(--sz, list1.size());
+ assertEquals(0, iter.previousIndex());
+ assertEquals(1, iter.nextIndex());
+
+ //dig into cache
+ assertEquals(list1.get(0), iter.previous());
+ assertEquals(-1, iter.previousIndex());
+ assertEquals(0, iter.nextIndex());
+
+ try {
+ iter.remove();
+ fail("ListIteratorWrapper does not support the remove() method while dug into the cache via previous()");
+ } catch (IllegalStateException e) {
}
+ //no change from invalid op:
+ assertEquals(-1, iter.previousIndex());
+ assertEquals(0, iter.nextIndex());
+
+ //dig out of cache, first next() maintains current position:
+ assertEquals(list1.get(0), iter.next());
+ assertEquals(0, iter.previousIndex());
+ assertEquals(1, iter.nextIndex());
+ //continue traversing underlying iterator with this next() call, and we're out of the hole, so to speak:
+ assertEquals(list1.get(1), iter.next());
+ assertEquals(1, iter.previousIndex());
+ assertEquals(2, iter.nextIndex());
+
+ //verify remove() works again:
+ iter.remove();
+ assertEquals(--sz, list1.size());
+ assertEquals(0, iter.previousIndex());
+ assertEquals(1, iter.nextIndex());
+
+ assertEquals(list1.get(1), iter.next());
+ assertEquals(1, iter.previousIndex());
+ assertEquals(2, iter.nextIndex());
+
}
public void testReset() {
- ResettableListIterator iter = (ResettableListIterator) makeFullIterator();
- Object first = iter.next();
- Object second = iter.next();
-
+ ResettableListIterator<E> iter = makeObject();
+ E first = iter.next();
+ E second = iter.next();
+
iter.reset();
-
+
// after reset, there shouldn't be any previous elements
assertFalse("No previous elements after reset()", iter.hasPrevious());
// after reset, the results should be the same as before
assertEquals("First element should be the same", first, iter.next());
assertEquals("Second elment should be the same", second, iter.next());
-
+
// after passing the point, where we resetted, continuation should work as expected
for (int i = 2; i < testArray.length; i++) {
Object testValue = testArray[i];
- Object iterValue = iter.next();
+ E iterValue = iter.next();
assertEquals("Iteration value is correct", testValue, iterValue);
}