commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dmitri Plotnikov" <dmi...@apache.org>
Subject Re: [jira] Created: (JXPATH-71) Ponter.asPath() return values not always correct
Date Tue, 10 Oct 2006 12:43:28 GMT
John,

A similar bug was reported and fixed a long time ago.  Are you sure this is 
still an issue with the current build of JXPath?

Thank you,

- Dmitri

----- Original Message ----- 
From: "John Attwood (JIRA)" <jira@apache.org>
To: <commons-dev@jakarta.apache.org>
Sent: Monday, October 09, 2006 9:57 AM
Subject: [jira] Created: (JXPATH-71) Ponter.asPath() return values not 
always correct


> Ponter.asPath() return values not always correct
> ------------------------------------------------
>
>                 Key: JXPATH-71
>                 URL: http://issues.apache.org/jira/browse/JXPATH-71
>             Project: Commons JXPath
>          Issue Type: Bug
>    Affects Versions: 1.2 Final
>         Environment: WInXP, Java 1.5, Eclipse 3.2
>            Reporter: John Attwood
>
>
> String returned by Pointer.asPath() is incorrect when path starts with 
> '//' and target is a collection. The path returned always has a final 
> subscript equal to the size of the collection, although Pointer.getValue() 
> still returns the correct element  in each case. Below are two classes and 
> a JUnit testcase which reproduce the bug and isolate it to the case where 
> the path starts with '//' and the target is a collection.
>
> I found this problem whilst trying to write the equivalent of 
> XPathExplorer for my JXPath-based object trees. It does't affect the main 
> app, as getValue() always returns the correct node, but in my explorer it 
> only ever highlights the last element in any collection (the objects in my 
> trees aren't always unique so the path is only way to identify them 
> individually and allow the matching nodes to be highlighted).
>
> Otherwise an excellent, easy-to-use and really useful package.
>
> ///////////////////////////////////////  Parent.java 
> //////////////////////////////////////////////////////////////////////////////////
> package test;
>
> import java.util.ArrayList;
>
> public class Parent {
> private int id;
>
> private ArrayList<Child> kids;
>
> public Parent(int id) {
> this.id = id;
> this.kids = new ArrayList<Child>();
> }
>
> public int getId() {
> return id;
> }
>
> public ArrayList<Child> getKids() {
> return kids;
> }
>
> public void addKid(Child kid) {
> kids.add(kid);
> }
>
> public void setId(int id) {
> this.id = id;
> }
>
> public void setKids(ArrayList<Child> kids) {
> this.kids = kids;
> }
> }
>
> /////////////////////////////////////////////////////////// Child.java 
> /////////////////////////////////////////////////////////////////////////////////////////////////////////////
> package test;
>
> public class Child {
> private int id;
>
> public Child(int id) {
> this.id = id;
> }
>
> public int getId() {
> return id;
> }
>
> public void setId(int id) {
> this.id = id;
> }
> }
>
> /////////////////////////////////////////////////////////// 
> TestPointerToPath.java 
> ///////////////////////////////////////////////////////////////////////////
> package test;
>
> import java.util.HashSet;
> import java.util.Iterator;
> import java.util.Set;
>
> import junit.framework.TestCase;
>
> import org.apache.commons.jxpath.JXPathContext;
> import org.apache.commons.jxpath.Pointer;
>
> public class TestPonterToPath extends TestCase {
> private Parent parent;
> private Set<String> expectedPaths, actualPaths;
> private Set<Object> actualObjects, expectedObjects;
> private JXPathContext ctx;
>
> private static final int SIZE = 4;
>
> public void setUp() {
> parent = new Parent(1);
> for (int i = 1; i <= SIZE; i++) {
> parent.addKid(new Child(i));
> }
> expectedPaths = new HashSet<String>();
> expectedObjects = new HashSet<Object>();
> actualPaths = new HashSet<String>();
> actualObjects = new HashSet<Object>();
> ctx = JXPathContext.newContext(parent);
> }
>
> private void doExpected(String path1, String path2) {
> for (int i = 1; i <= SIZE; i++) {
> Pointer p = ctx.getPointer(path1 + i + path2);
> expectedPaths.add(p.asPath());
> expectedObjects.add(p.getValue());
> }
> assertEquals(SIZE, expectedPaths.size());
> assertEquals(SIZE, expectedObjects.size());
> }
>
> private void doActual(String path) {
> Iterator it = ctx.iteratePointers(path);
> while (it.hasNext()) {
> Pointer p = (Pointer) it.next();
> actualPaths.add(p.asPath());
> actualObjects.add(p.getValue());
> }
> assertEquals(SIZE, actualObjects.size());
> }
>
> public void testToPathLeafAbs() {
> doExpected("/kids[", "]/id");
> doActual("/kids/id");
> assertEquals(expectedObjects, actualObjects);
> assertEquals(expectedPaths, actualPaths);
> }
>
> public void testToPathLeafRel() {
> doExpected("//kids[", "]/id");
> doActual("//kids/id");
> assertEquals(expectedObjects, actualObjects);
> assertEquals(expectedPaths, actualPaths);
> }
>
> public void testToPathCollectionAbs() {
> doExpected("/kids[", "]");
> doActual("/kids");
> assertEquals(expectedObjects, actualObjects);
> assertEquals(expectedPaths, actualPaths);
> }
>
> public void testToPathCollectionRel() {
> doExpected("//kids[", "]");
> doActual("//kids");
> assertEquals(expectedObjects, actualObjects);
> /* next test fails as all actualPaths are /kids[SIZE] */
> assertEquals(expectedPaths, actualPaths);
> }
>
> }
>
>
>
> -- 
> This message is automatically generated by JIRA.
> -
> If you think it was sent incorrectly contact one of the administrators: 
> http://issues.apache.org/jira/secure/Administrators.jspa
> -
> For more information on JIRA, see: http://www.atlassian.com/software/jira
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>
>
> 


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


Mime
View raw message