RFR: JDK-8289509 : Improve test coverage for XPath Axes: descendant, descendant-or-self, following, following-sibling
Bill Huang
bhuang at openjdk.org
Wed Oct 5 18:22:00 UTC 2022
On Tue, 4 Oct 2022 13:01:40 GMT, Mahendra Chhipa <mchhipa at openjdk.org> wrote:
> Added test cases for xpath Axis:
> 1. descendant
> 2. descendant-or-self
> 3. following
> 4. following-sibling
test/jaxp/javax/xml/jaxp/unittest/xpath/XPathExpDescendantTest.java line 59:
> 57: {"/Customers/Customer[@id='x1']/descendant::Address", "/Customers/Customer[@id='x1']/Address"},
> 58: {"/Customers/Customer[@id='x1']/descendant::*", "/Customers/Customer[@id='x1']//*"},
> 59: {"/Customers/foo:Customer/foo:Address/descendant::*", "/Customers/foo:Customer/foo:Address//*"},
It would be good to add a test case to address the grandchildren or grand-grandchildren nodes from the context node. e.g.
`/Customers/descendant::Street`
`/Customers//Street`
test/jaxp/javax/xml/jaxp/unittest/xpath/XPathExpDescendantTest.java line 65:
> 63: {"/Customers/Customer[@id='x1']/descendant-or-self::Address", "/Customers/Customer[@id = 'x1']/Address"},
> 64: {"/Customers/Customer[@id='x1']/descendant-or-self::*", "/Customers/Customer[@id='x1'] | /Customers/Customer[@id = 'x1']//*"},
> 65: {"/Customers/foo:Customer/foo:Address/descendant-or-self::*", "/Customers/foo:Customer/foo:Address | /Customers/foo:Customer/foo:Address//*"}
In the spec, there is a special note saying, "the location path //para[1] does not mean the same as the location path /descendant::para[1]". Based on this, it would be good to add a position test case for descendant. e.g.
`/Customers/descendant::Street[2]`
`/Customers/descendant::Street[position()=2]`
`//Street[2]`
`(//Street)[2]`
test/jaxp/javax/xml/jaxp/unittest/xpath/XPathExpDescendantTest.java line 108:
> 106: };
> 107: }
> 108:
It would be good to have a predicate test with descendant. e.g.
`//*[not(descendant::*)]`
`//*[descendant::Street and ancestor::Customer]`
test/jaxp/javax/xml/jaxp/unittest/xpath/XPathExpFollowingTest.java line 56:
> 54: {"/Customers/Customer[@id='x1']/following::Address", "/Customers/Customer[@id != 'x1']/Address"},
> 55: {"/Customers/Customer[@id='x1']/following::*", "/Customers/Customer[@id != 'x1']/descendant-or-self::* | /Customers/foo:Customer/descendant-or-self::*"},
> 56: {"/Customers/foo:Customer/foo:Address/following::*", "/Customers/foo:Customer/foo:Age | /Customers/foo:Customer/foo:ClubMember"},
It would be good to access the grandchildren or grand-grandchildren following nodes. e.g.
`//Customer/following::Street`
`//following::Street`
test/jaxp/javax/xml/jaxp/unittest/xpath/XPathExpFollowingTest.java line 64:
> 62: {"/Customers/Customer[@id='x1']/following-sibling::*", "/Customers/Customer[@id != 'x1'] | /Customers/foo:Customer"},
> 63: {"/Customers/foo:Customer/foo:Address/following-sibling::*", "/Customers/foo:Customer/foo:Age | /Customers/foo:Customer/foo:ClubMember"}
> 64: };
It would be good to add a position test. e.g.
`//Customer/following::Street[2]`
`//following::Street[2]`
`//Customer/following-sibling::Customer[2]`
`//following-sibling::Customer[2]`
test/jaxp/javax/xml/jaxp/unittest/xpath/XPathExpFollowingTest.java line 108:
> 106: };
> 107: }
> 108:
It would be good to add a predicate test for following. e.g.
`//foo:Customer/*[not(following::*)]`
`//*[not(following::*) and not(preceding::*)]`
`//Street[following::Street and preceding::Street]`
-------------
PR: https://git.openjdk.org/jdk/pull/10557
More information about the core-libs-dev
mailing list