You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ps...@apache.org on 2003/09/29 05:56:12 UTC
cvs commit: jakarta-commons/collections/src/test/org/apache/commons/collections TestIteratorUtils.java
psteitz 2003/09/28 20:56:12
Modified: collections/src/java/org/apache/commons/collections/iterators
ObjectArrayIterator.java
ObjectArrayListIterator.java ArrayListIterator.java
collections/src/test/org/apache/commons/collections
TestIteratorUtils.java
Log:
Fixed previousIndex() and nextIndex() methods in ArrayListIterator and ObjectArrayListIterator to conform to ListIterator interface specification.
Modified ObjectArrayIterator constructor to throw ArrayOutOfBoundsException when start index is out of range (as advertised).
Added test cases to TestIteratorUtils.
Revision Changes Path
1.7 +7 -3 jakarta-commons/collections/src/java/org/apache/commons/collections/iterators/ObjectArrayIterator.java
Index: ObjectArrayIterator.java
===================================================================
RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/iterators/ObjectArrayIterator.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ObjectArrayIterator.java 31 Aug 2003 17:25:49 -0000 1.6
+++ ObjectArrayIterator.java 29 Sep 2003 03:56:12 -0000 1.7
@@ -60,7 +60,7 @@
import java.util.NoSuchElementException;
/**
- * An {@link Iterator Iterator} over an array of objects.
+ * An {@link Iterator} over an array of objects.
* <p>
* This iterator does not support {@link #remove}, as the object array cannot be
* structurally modified.
@@ -76,6 +76,7 @@
* @author <a href="mailto:mas@apache.org">Michael A. Smith</a>
* @author <a href="mailto:neilotoole@users.sourceforge.net">Neil O'Toole</a>
* @author Stephen Colebourne
+ * @author Phil Steitz
*/
public class ObjectArrayIterator implements ResetableIterator {
@@ -140,6 +141,9 @@
}
if (end > array.length) {
throw new ArrayIndexOutOfBoundsException("End index must not be greater than the array length");
+ }
+ if (start > array.length) {
+ throw new ArrayIndexOutOfBoundsException("Start index must not be greater than the array length");
}
if (end < start) {
throw new IllegalArgumentException("End index must not be less than start index");
1.7 +6 -5 jakarta-commons/collections/src/java/org/apache/commons/collections/iterators/ObjectArrayListIterator.java
Index: ObjectArrayListIterator.java
===================================================================
RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/iterators/ObjectArrayListIterator.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ObjectArrayListIterator.java 31 Aug 2003 17:25:49 -0000 1.6
+++ ObjectArrayListIterator.java 29 Sep 2003 03:56:12 -0000 1.7
@@ -60,7 +60,7 @@
import java.util.NoSuchElementException;
/**
- * Implements a {@link ListIterator ListIterator} over an array of objects.
+ * Implements a {@link ListIterator} over an array of objects.
* <p>
* This iterator does not support {@link #add} or {@link #remove}, as the object array
* cannot be structurally modified. The {@link #set} method is supported however.
@@ -77,6 +77,7 @@
*
* @author <a href="mailto:neilotoole@users.sourceforge.net">Neil O'Toole</a>
* @author Stephen Colebourne
+ * @author Phil Steitz
*/
public class ObjectArrayListIterator extends ObjectArrayIterator implements ResetableListIterator {
@@ -183,7 +184,7 @@
* @return the index of the item to be retrieved next
*/
public int nextIndex() {
- return this.index;
+ return this.index - this.startIndex;
}
/**
@@ -192,7 +193,7 @@
* @return the index of the item to be retrieved next
*/
public int previousIndex() {
- return this.index - 1;
+ return this.index - this.startIndex - 1;
}
/**
1.5 +5 -4 jakarta-commons/collections/src/java/org/apache/commons/collections/iterators/ArrayListIterator.java
Index: ArrayListIterator.java
===================================================================
RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/iterators/ArrayListIterator.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ArrayListIterator.java 31 Aug 2003 17:25:49 -0000 1.4
+++ ArrayListIterator.java 29 Sep 2003 03:56:12 -0000 1.5
@@ -81,6 +81,7 @@
*
* @author <a href="mailto:neilotoole@users.sourceforge.net">Neil O'Toole</a>
* @author Stephen Colebourne
+ * @author Phil Steitz
*/
public class ArrayListIterator extends ArrayIterator implements ResetableListIterator {
@@ -192,7 +193,7 @@
* @return the index of the item to be retrieved next
*/
public int nextIndex() {
- return this.index;
+ return this.index - this.startIndex;
}
/**
@@ -201,7 +202,7 @@
* @return the index of the item to be retrieved next
*/
public int previousIndex() {
- return this.index - 1;
+ return this.index - this.startIndex - 1;
}
/**
1.6 +285 -1 jakarta-commons/collections/src/test/org/apache/commons/collections/TestIteratorUtils.java
Index: TestIteratorUtils.java
===================================================================
RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestIteratorUtils.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestIteratorUtils.java 31 Aug 2003 17:28:43 -0000 1.5
+++ TestIteratorUtils.java 29 Sep 2003 03:56:12 -0000 1.6
@@ -62,6 +62,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
+import java.util.NoSuchElementException;
import junit.framework.Test;
@@ -110,6 +111,289 @@
String[] result = (String[]) IteratorUtils.toArray(list.iterator(), String.class);
assertEquals(list, Arrays.asList(result));
}
+
+ public void testArrayIterator() {
+ Object[] objArray = {"a", "b", "c"};
+ ResetableIterator iterator = IteratorUtils.arrayIterator(objArray);
+ assertTrue(iterator.next().equals("a"));
+ assertTrue(iterator.next().equals("b"));
+ iterator.reset();
+ assertTrue(iterator.next().equals("a"));
+
+ try {
+ iterator = IteratorUtils.arrayIterator(new Integer(0));
+ fail("Expecting IllegalArgumentException");
+ } catch (IllegalArgumentException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayIterator(null);
+ fail("Expecting NullPointerException");
+ } catch (NullPointerException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayIterator(objArray, 1);
+ assertTrue(iterator.next().equals("b"));
+
+ try {
+ iterator = IteratorUtils.arrayIterator(objArray, -1);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayIterator(objArray, 3);
+ assertTrue(!iterator.hasNext());
+ iterator.reset();
+
+ try {
+ iterator = IteratorUtils.arrayIterator(objArray, 4);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayIterator(objArray, 2, 3);
+ assertTrue(iterator.next().equals("c"));
+
+ try {
+ iterator = IteratorUtils.arrayIterator(objArray, 2, 4);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayIterator(objArray, -1, 1);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayIterator(objArray, 2, 1);
+ fail("Expecting IllegalArgumentException");
+ } catch (IllegalArgumentException ex) {
+ // expected
+ }
+
+ int[] intArray = {0, 1, 2};
+ iterator = IteratorUtils.arrayIterator(intArray);
+ assertTrue(iterator.next().equals(new Integer(0)));
+ assertTrue(iterator.next().equals(new Integer(1)));
+ iterator.reset();
+ assertTrue(iterator.next().equals(new Integer(0)));
+
+ iterator = IteratorUtils.arrayIterator(intArray, 1);
+ assertTrue(iterator.next().equals(new Integer(1)));
+
+ try {
+ iterator = IteratorUtils.arrayIterator(intArray, -1);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayIterator(intArray, 3);
+ assertTrue(!iterator.hasNext());
+ iterator.reset();
+
+ try {
+ iterator = IteratorUtils.arrayIterator(intArray, 4);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayIterator(intArray, 2, 3);
+ assertTrue(iterator.next().equals(new Integer(2)));
+
+ try {
+ iterator = IteratorUtils.arrayIterator(intArray, 2, 4);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayIterator(intArray, -1, 1);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayIterator(intArray, 2, 1);
+ fail("Expecting IllegalArgumentException");
+ } catch (IllegalArgumentException ex) {
+ // expected
+ }
+ }
+
+ public void testArrayListIterator() {
+ Object[] objArray = {"a", "b", "c", "d"};
+ ResetableListIterator iterator = IteratorUtils.arrayListIterator(objArray);
+ assertTrue(!iterator.hasPrevious());
+ assertTrue(iterator.previousIndex() == -1);
+ assertTrue(iterator.nextIndex() == 0);
+ assertTrue(iterator.next().equals("a"));
+ assertTrue(iterator.previous().equals("a"));
+ assertTrue(iterator.next().equals("a"));
+ assertTrue(iterator.previousIndex() == 0);
+ assertTrue(iterator.nextIndex() == 1);
+ assertTrue(iterator.next().equals("b"));
+ assertTrue(iterator.next().equals("c"));
+ assertTrue(iterator.next().equals("d"));
+ assertTrue(iterator.nextIndex() == 4); // size of list
+ assertTrue(iterator.previousIndex() == 3);
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(new Integer(0));
+ fail("Expecting IllegalArgumentException");
+ } catch (IllegalArgumentException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(null);
+ fail("Expecting NullPointerException");
+ } catch (NullPointerException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayListIterator(objArray, 1);
+ assertTrue(iterator.previousIndex() == -1);
+ assertTrue(!iterator.hasPrevious());
+ assertTrue(iterator.nextIndex() == 0);
+ assertTrue(iterator.next().equals("b"));
+ assertTrue(iterator.previousIndex() == 0);
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(objArray, -1);
+ fail("Expecting IndexOutOfBoundsException.");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayListIterator(objArray, 3);
+ assertTrue(iterator.hasNext());
+ try {
+ Object x = iterator.previous();
+ fail("Expecting NoSuchElementException.");
+ } catch (NoSuchElementException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(objArray, 5);
+ fail("Expecting IndexOutOfBoundsException.");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayListIterator(objArray, 2, 3);
+ assertTrue(iterator.next().equals("c"));
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(objArray, 2, 5);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(objArray, -1, 1);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(objArray, 2, 1);
+ fail("Expecting IllegalArgumentException");
+ } catch (IllegalArgumentException ex) {
+ // expected
+ }
+
+ int[] intArray = {0, 1, 2};
+ iterator = IteratorUtils.arrayListIterator(intArray);
+ assertTrue(iterator.previousIndex() == -1);
+ assertTrue(!iterator.hasPrevious());
+ assertTrue(iterator.nextIndex() == 0);
+ assertTrue(iterator.next().equals(new Integer(0)));
+ assertTrue(iterator.previousIndex() == 0);
+ assertTrue(iterator.nextIndex() == 1);
+ assertTrue(iterator.next().equals(new Integer(1)));
+ assertTrue(iterator.previousIndex() == 1);
+ assertTrue(iterator.nextIndex() == 2);
+ assertTrue(iterator.previous().equals(new Integer(1)));
+ assertTrue(iterator.next().equals(new Integer(1)));
+
+ iterator = IteratorUtils.arrayListIterator(intArray, 1);
+ assertTrue(iterator.previousIndex() == -1);
+ assertTrue(!iterator.hasPrevious());
+ assertTrue(iterator.nextIndex() == 0);
+ assertTrue(iterator.next().equals(new Integer(1)));
+ assertTrue(iterator.previous().equals(new Integer(1)));
+ assertTrue(iterator.next().equals(new Integer(1)));
+ assertTrue(iterator.previousIndex() == 0);
+ assertTrue(iterator.nextIndex() == 1);
+ assertTrue(iterator.next().equals(new Integer(2)));
+ assertTrue(iterator.previousIndex() == 1);
+ assertTrue(iterator.nextIndex() == 2);
+ assertTrue(iterator.previous().equals(new Integer(2)));
+ assertTrue(iterator.previousIndex() == 0);
+ assertTrue(iterator.nextIndex() == 1);
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(intArray, -1);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayListIterator(intArray, 3);
+ assertTrue(!iterator.hasNext());
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(intArray, 4);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ iterator = IteratorUtils.arrayListIterator(intArray, 2, 3);
+ assertTrue(!iterator.hasPrevious());
+ assertTrue(iterator.previousIndex() == -1);
+ assertTrue(iterator.next().equals(new Integer(2)));
+ assertTrue(iterator.hasPrevious());
+ assertTrue(!iterator.hasNext());
+
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(intArray, 2, 4);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(intArray, -1, 1);
+ fail("Expecting IndexOutOfBoundsException");
+ } catch (IndexOutOfBoundsException ex) {
+ // expected
+ }
+
+ try {
+ iterator = IteratorUtils.arrayListIterator(intArray, 2, 1);
+ fail("Expecting IllegalArgumentException");
+ } catch (IllegalArgumentException ex) {
+ // expected
+ }
+ }
+
/**
* Gets an immutable Iterator operating on the elements ["a", "b", "c", "d"].
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org