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]

Reply via email to