You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by "Henri Yandell (JIRA)" <ji...@apache.org> on 2007/04/17 16:57:15 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#action_12489419 ] 

Henri Yandell commented on COLLECTIONS-246:
-------------------------------------------

Yeah, this one is interesting. In COLLECTIONS-239, the way it works is (afaik) by design and so that one should be a WONTFIX.

In this case, I think the same kind of problem exists. The statement of 'here I am on "0"' in inaccurate, instead 'here' is the space between "0" and "1", not one of the elements. If we think of things as existing at an element and not the space between, then the example above begins pointing at "2", and in the non looping case it begins pointing at a null value that is prior to the list. That feels very odd.

I can see why these semantics don't give people what they want. Pointing at elements, while confusing at the boundaries, does make more sense in their use cases. I wonder if it would all be simpler if we didn't have the bad two-in-one next() previous() methods but used getNext() and moveToNext() semantics.



> 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
>
> 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.


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