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 [EMAIL PROTECTED] Iterator Iterator} over an array of objects. + * An [EMAIL PROTECTED] Iterator} over an array of objects. * <p> * This iterator does not support [EMAIL PROTECTED] #remove}, as the object array cannot be * structurally modified. @@ -76,6 +76,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Michael A. Smith</a> * @author <a href="mailto:[EMAIL PROTECTED]">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 [EMAIL PROTECTED] ListIterator ListIterator} over an array of objects. + * Implements a [EMAIL PROTECTED] ListIterator} over an array of objects. * <p> * This iterator does not support [EMAIL PROTECTED] #add} or [EMAIL PROTECTED] #remove}, as the object array * cannot be structurally modified. The [EMAIL PROTECTED] #set} method is supported however. @@ -77,6 +77,7 @@ * * @author <a href="mailto:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]