You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Yandell (JIRA)" <ji...@apache.org> on 2008/04/02 08:28:24 UTC
[jira] Commented: (COLLECTIONS-246) LoopingListIterator behaves
unexpected on next and previous mixed
[ https://issues.apache.org/jira/browse/COLLECTIONS-246?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12584429#action_12584429 ]
Henri Yandell commented on COLLECTIONS-246:
-------------------------------------------
The basic case that I think that has to be expected is:
{code:java}
Object o1 = it.next();
Object o2 = it.previous();
assertTrue(o1 == o2)
{code}
".next()" moves the current position. So it's right for the it.previous() to return "0" and not "2".
Previously I suggested that a different approach of getNext and moveToNext might be useful, but that would a) confuse by adding a duplicate layer and b) would not match the Collections API java.util.Iterator pattern. So I don't think there's anything to do here - the iterators work to the same pattern as the JDK's Iterator.
> LoopingListIterator behaves unexpected on next and previous mixed
> -----------------------------------------------------------------
>
> Key: COLLECTIONS-246
> URL: https://issues.apache.org/jira/browse/COLLECTIONS-246
> Project: Commons Collections
> Issue Type: Bug
> Components: Iterator
> Affects Versions: 3.2
> Environment: JDK 1.4.2_12
> Common Collections 3.2
> Reporter: Frank Hefter
> Priority: Blocker
> Fix For: 3.3
>
> Attachments: LoopingListIterator.java, LoopingListIterator.java, LoopingListIteratorTest.java
>
>
> Using ArrayList as the backing list.
> This combination at least returns unexpected results as you can see in the testcase below.
> I used this for a list navigator in a web frontend and had trouble with users.
> I suspect java.util.AbstrList$ListItr (role of "cursor" var seems to be wrong implemented ) to cause this problem. If so maybe we have to implement it in a different way.
> Testcase (it runs without hassle but the comments show whats wrong):
> -------------------------------------------
> import java.util.ArrayList;
> import junit.framework.TestCase;
> import org.apache.commons.collections.iterators.LoopingListIterator;
> public class SelectionControllerTest extends TestCase {
> public void testSelectorForApache() {
> ArrayList al = new ArrayList();
> al.add("0"); al.add("1"); al.add("2");
> LoopingListIterator it = new LoopingListIterator(al);
> assertEquals("0", it.next()); // This is OK
> // here I am on "0"
> assertEquals("0", it.previous()); // Wrong ! This should be 2!
> // here I am on "0" too! This is wrong.
> assertEquals("2", it.previous());
> assertEquals("1", it.previous());
> assertEquals("0", it.previous());
> assertEquals("2", it.previous());
> // here I am on "2"
> assertEquals("2", it.next()); // Wrong ! This should be 0!
> // here I am on "2" too! This is wrong.
> assertEquals("0", it.next());
> assertEquals("1", it.next());
> // here I am on "1"
> assertEquals("1", it.previous()); // Wrong ! This should be 0!
> }
> }
> -------------------------------------------
> Thanks for your help.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.