[ 
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to