You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2005/07/16 16:19:43 UTC

svn commit: r219330 - in /jakarta/commons/proper/collections/trunk: RELEASE-NOTES.html src/java/org/apache/commons/collections/list/CursorableLinkedList.java src/test/org/apache/commons/collections/list/TestCursorableLinkedList.java

Author: scolebourne
Date: Sat Jul 16 07:19:42 2005
New Revision: 219330

URL: http://svn.apache.org/viewcvs?rev=219330&view=rev
Log:
Fix CursorableLinkedList iterator remove/set not throwing IllegalStateException after next-previous-removeByIndex
bug 35766

Modified:
    jakarta/commons/proper/collections/trunk/RELEASE-NOTES.html
    jakarta/commons/proper/collections/trunk/src/java/org/apache/commons/collections/list/CursorableLinkedList.java
    jakarta/commons/proper/collections/trunk/src/test/org/apache/commons/collections/list/TestCursorableLinkedList.java

Modified: jakarta/commons/proper/collections/trunk/RELEASE-NOTES.html
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/collections/trunk/RELEASE-NOTES.html?rev=219330&r1=219329&r2=219330&view=diff
==============================================================================
--- jakarta/commons/proper/collections/trunk/RELEASE-NOTES.html (original)
+++ jakarta/commons/proper/collections/trunk/RELEASE-NOTES.html Sat Jul 16 07:19:42 2005
@@ -74,6 +74,7 @@
 <ul>
 <li>FastArrayList - Fix iterators and views to work better in multithreaded environments</li>
 <li>FastArrayList - Fix iterator remove where ConcurrentModificationException not as expected [34690]</li>
+<li>CursorableLinkedList (list subpackage) - Fix iterator remove/set not throwing IllegalStateException after next-previous-removeByIndex [35766]</li>
 <li>SetUniqueList.set(int,Object) - Destroyed set status in certain circumstances [33294]</li>
 <li>AbstractLinkedMap.init() - Now calls createEntry() to create the map entry object [33706]</li>
 <li>AbstractHashedMap deserialization - Fix to prevent doubling of internal data array [34265]</li>

Modified: jakarta/commons/proper/collections/trunk/src/java/org/apache/commons/collections/list/CursorableLinkedList.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/collections/trunk/src/java/org/apache/commons/collections/list/CursorableLinkedList.java?rev=219330&r1=219329&r2=219330&view=diff
==============================================================================
--- jakarta/commons/proper/collections/trunk/src/java/org/apache/commons/collections/list/CursorableLinkedList.java (original)
+++ jakarta/commons/proper/collections/trunk/src/java/org/apache/commons/collections/list/CursorableLinkedList.java Sat Jul 16 07:19:42 2005
@@ -445,9 +445,17 @@
          * @param node  the node that was removed
          */
         protected void nodeRemoved(Node node) {
-            if (node == next) {
+            if (node == next && node == current) {
+                // state where next() followed by previous()
+                next = node.next;
+                current = null;
+            } else if (node == next) {
+                // state where next() not followed by previous()
+                // and we are matching next node
                 next = node.next;
             } else if (node == current) {
+                // state where next() not followed by previous()
+                // and we are matching current (last returned) node
                 current = null;
                 nextIndex--;
             } else {

Modified: jakarta/commons/proper/collections/trunk/src/test/org/apache/commons/collections/list/TestCursorableLinkedList.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/collections/trunk/src/test/org/apache/commons/collections/list/TestCursorableLinkedList.java?rev=219330&r1=219329&r2=219330&view=diff
==============================================================================
--- jakarta/commons/proper/collections/trunk/src/test/org/apache/commons/collections/list/TestCursorableLinkedList.java (original)
+++ jakarta/commons/proper/collections/trunk/src/test/org/apache/commons/collections/list/TestCursorableLinkedList.java Sat Jul 16 07:19:42 2005
@@ -444,7 +444,78 @@
         assertEquals(1, c1.nextIndex());
         assertEquals("0", c1.next());
     }
-    
+
+    //-----------------------------------------------------------------------
+    public void testInternalState_CursorNextNextPreviousRemoveIndex1ByList() {
+        list.add("A");
+        list.add("B");
+        list.add("C");
+
+        CursorableLinkedList.Cursor c1 = list.cursor();
+        assertEquals("A", c1.next());
+        assertEquals("B", c1.next());
+        assertEquals("B", c1.previous());
+        
+        assertEquals("B", list.remove(1));
+        
+        assertEquals(true, c1.nextIndexValid);
+        assertEquals(1, c1.nextIndex);
+        assertEquals(null, c1.current);
+        assertEquals("C", c1.next.value);
+    }
+
+    public void testInternalState_CursorNextRemoveIndex1ByList() {
+        list.add("A");
+        list.add("B");
+        list.add("C");
+
+        CursorableLinkedList.Cursor c1 = list.cursor();
+        assertEquals("A", c1.next());
+        
+        assertEquals("B", list.remove(1));
+        
+        assertEquals(true, c1.nextIndexValid);
+        assertEquals(1, c1.nextIndex);
+        assertEquals("A", c1.current.value);
+        assertEquals("C", c1.next.value);
+    }
+
+    public void testInternalState_CursorNextNextRemoveIndex1ByList() {
+        list.add("A");
+        list.add("B");
+        list.add("C");
+
+        CursorableLinkedList.Cursor c1 = list.cursor();
+        assertEquals("A", c1.next());
+        assertEquals("B", c1.next());
+        
+        assertEquals("B", list.remove(1));
+        
+        assertEquals(true, c1.nextIndexValid);
+        assertEquals(1, c1.nextIndex);
+        assertEquals(null, c1.current);
+        assertEquals("C", c1.next.value);
+    }
+
+    public void testInternalState_CursorNextNextNextRemoveIndex1ByList() {
+        list.add("A");
+        list.add("B");
+        list.add("C");
+        list.add("D");
+
+        CursorableLinkedList.Cursor c1 = list.cursor();
+        assertEquals("A", c1.next());
+        assertEquals("B", c1.next());
+        assertEquals("C", c1.next());
+        
+        assertEquals("B", list.remove(1));
+        
+        assertEquals(false, c1.nextIndexValid);
+        assertEquals("C", c1.current.value);
+        assertEquals("D", c1.next.value);
+    }
+
+    //-----------------------------------------------------------------------
     public void testEqualsAndHashCode() {
         assertTrue(list.equals(list));
         assertEquals(list.hashCode(),list.hashCode());



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org