You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2020/05/19 20:10:56 UTC

svn commit: r1877931 [9/9] - in /xmlbeans: site/src/documentation/content/xdocs/ trunk/ trunk/lib/ trunk/src/jamsupport/ trunk/src/store/org/apache/xmlbeans/impl/store/ trunk/src/xmlconfig/org/apache/xmlbeans/impl/config/ trunk/src/xpath_xquery/org/apa...

Modified: xmlbeans/trunk/test/src/xmlcursor/xpath/complex/detailed/XPathTest.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/xmlcursor/xpath/complex/detailed/XPathTest.java?rev=1877931&r1=1877930&r2=1877931&view=diff
==============================================================================
--- xmlbeans/trunk/test/src/xmlcursor/xpath/complex/detailed/XPathTest.java (original)
+++ xmlbeans/trunk/test/src/xmlcursor/xpath/complex/detailed/XPathTest.java Tue May 19 20:10:55 2020
@@ -16,1180 +16,206 @@
 package xmlcursor.xpath.complex.detailed;
 
 import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlObject;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
 import tools.util.JarUtil;
 import xmlcursor.common.BasicCursorTestCase;
 import xmlcursor.xpath.common.XPathCommon;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
 /**
  * Verifies XPath impl using examples from
  * http://www.zvon.org/xxl/XPathTutorial/Output/example1.html
  * includes expanded notations as well
  *
  */
+@RunWith(Parameterized.class)
 public class XPathTest extends BasicCursorTestCase {
 
-    static String fixPath(String path)
-    {
-        // return "$this" + path;
-        return path;
-    }
-
-    @Test
-    public void testZvonExample1() throws Exception {
-        System.out.println("====== Example-1 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon1.xml"));
-
-        String ex1Simple = "/AAA";
-        String ex1Expanded = "";
-
-        String ex1R1 = "<AAA><BBB/><CCC/><BBB/><BBB/><DDD><BBB/></DDD><CCC/></AAA>";
-        XmlObject[] exXml1 = new XmlObject[]{XmlObject.Factory.parse(ex1R1)};
-
-        String ex2Simple = "/AAA/CCC";
-        String ex2Expanded = "";
-
-        String ex2R1 = "<CCC/>";
-
-        XmlObject[] exXml2 = new XmlObject[]{XmlObject.Factory.parse(ex2R1),
-                                             XmlObject.Factory.parse(ex2R1)};
-
-
-        String ex3Simple = "/AAA/DDD/BBB";
-        String ex3Expanded = "";
-
-        //<BBB/><CCC/></AAA>
-        String ex3R1 = "<BBB/>";
-        XmlObject[] exXml3 = new XmlObject[]{XmlObject.Factory.parse(ex3R1)};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        XPathCommon.compare(x1, exXml1);
-        x1.dispose();
-
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        XPathCommon.compare(x2, exXml2);
-        x2.dispose();
-
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        XPathCommon.compare(x3, exXml3);
-        x3.dispose();
-    }
-
-    @Test
-    public void testZvonExample2() throws Exception {
-        System.out.println("====== Example-2 ==========");
-
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon2.xml"));
-        String ex1Simple = "//BBB";
-        String ex1Expanded = "";
-
-        String ex1R1 = "<BBB/>"; // * 5
-        XmlObject[] exXml1 = new XmlObject[]{XmlObject.Factory.parse(ex1R1),
-                                             XmlObject.Factory.parse(ex1R1),
-                                             XmlObject.Factory.parse(ex1R1),
-                                             XmlObject.Factory.parse(ex1R1),
-                                             XmlObject.Factory.parse(ex1R1)};
-
-        String ex2Simple = "//DDD/BBB";
-        String ex2Expanded = "";
-        XmlObject[] exXml2 = new XmlObject[]{XmlObject.Factory.parse(ex1R1),
-                                             XmlObject.Factory.parse(ex1R1),
-                                             XmlObject.Factory.parse(ex1R1)};
+    @Parameter
+    public int dataset;
+    @Parameter(value = 1)
+    public String xpath;
+    @Parameter(value = 2)
+    public String[] expected = null;
+
+    @Parameterized.Parameters(name = "{index}: zvon{0}.xml {1}")
+    public static Collection<Object[]> data() {
+        final List<Object[]> data = new ArrayList<>();
+        add(data, 1, "/AAA", "<AAA><BBB/><CCC/><BBB/><BBB/><DDD><BBB/></DDD><CCC/></AAA>");
+        add(data, 1, "/AAA/CCC", "<CCC/>", "<CCC/>");
+        add(data, 1, "/AAA/DDD/BBB", "<BBB/>");
 
+        add(data, 2, "//BBB", "<BBB/>", "<BBB/>", "<BBB/>", "<BBB/>", "<BBB/>");
+        add(data, 2, "//DDD/BBB", "<BBB/>", "<BBB/>", "<BBB/>");
 
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        XPathCommon.compare(x1, exXml1);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        XPathCommon.compare(x2, exXml2);
-        x2.dispose();
-    }
+        add(data, 3, "/AAA/CCC/DDD/*", "<BBB/>", "<BBB/>", "<EEE/>", "<FFF/>");
+        add(data, 3, "/*/*/*/BBB", "<BBB/>", "<BBB/>", "<BBB/>", "<BBB/>", "<BBB><BBB/></BBB>");
 
-    @Test
-    public void testZvonExample3() throws Exception {
-        System.out.println("====== Example-3 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon3.xml"));
-        String ex1Simple = "/AAA/CCC/DDD/*";
-        String ex1R1 = "<BBB/>"; // * 5
-        String ex1R2 = "<EEE/>";
-        String ex1R3 = "<FFF/>";
-
-        XmlObject[] exXml1 = new XmlObject[]{XmlObject.Factory.parse(ex1R1),
-                                             XmlObject.Factory.parse(ex1R1),
-                                             XmlObject.Factory.parse(ex1R2),
-                                             XmlObject.Factory.parse(ex1R3)};
-        String ex2Simple = "/*/*/*/BBB";
-        String ex2R1 = "<BBB/>"; // * 5
-        String ex2R2 = "<BBB><BBB/></BBB>";
-        XmlObject[] exXml2 = new XmlObject[]{XmlObject.Factory.parse(ex2R1),
-                                             XmlObject.Factory.parse(ex2R1),
-                                             XmlObject.Factory.parse(ex2R1),
-                                             XmlObject.Factory.parse(ex2R1),
-                                             XmlObject.Factory.parse(ex2R2)};
-        String ex3Simple = "//*";
-        /* String ex3R0 = "<AAA><XXX><DDD><BBB/><BBB/><EEE/><FFF/></DDD></XXX><CCC><DDD><BBB/><BBB/><EEE/><FFF/></DDD></CCC><CCC><BBB><BBB><BBB/></BBB></BBB></CCC></AAA>";
-         String ex3R1 = "<XXX><DDD><BBB/><BBB/><EEE/><FFF/></DDD></XXX>";
-         String ex3R2 = "<CCC><DDD><BBB/><BBB/><EEE/><FFF/></DDD></CCC>";
-         String ex3R3 = "<CCC><BBB><BBB><BBB/></BBB></BBB></CCC>";
-         String ex3R4 = "<DDD><BBB/><BBB/><EEE/><FFF/></DDD>";
-         String ex3R5 = "<DDD><BBB/><BBB/><EEE/><FFF/></DDD>";
-         String ex3R6 = "<BBB><BBB><BBB/></BBB></BBB>";
-         String ex3R7 = "<BBB/>";
-         String ex3R8 = "<BBB/>";
-         String ex3R9 = "<EEE/>";
-         String ex3R10 = "<FFF/>";
-         String ex3R11 = "<BBB/>";
-         String ex3R12 = "<BBB/>";
-         String ex3R13 = "<EEE/>";
-         String ex3R14 = "<FFF/>";
-         String ex3R15 = "<BBB><BBB/></BBB>";
-         String ex3R16 = "<BBB/>";
-        */
         //according to Galax the document order is :
-        String ex3R0 = "<AAA><XXX><DDD><BBB/><BBB/><EEE/><FFF/></DDD></XXX><CCC><DDD><BBB/><BBB/><EEE/><FFF/></DDD></CCC><CCC><BBB><BBB><BBB/></BBB></BBB></CCC></AAA>";
-        String ex3R1 = "<XXX><DDD><BBB/><BBB/><EEE/><FFF/></DDD></XXX>";
-
-        String ex3R2 = "<DDD><BBB/><BBB/><EEE/><FFF/></DDD>";
-        String ex3R3 = "<BBB/>";
-        String ex3R4 = "<BBB/>";
-        String ex3R5 = "<EEE/>";
-        String ex3R6 = "<FFF/>";
-        String ex3R7 = "<CCC><DDD><BBB/><BBB/><EEE/><FFF/></DDD></CCC>";
-
-        String ex3R8 = "<DDD><BBB/><BBB/><EEE/><FFF/></DDD>";
-
-        String ex3R9 = "<BBB/>";
-        String ex3R10 = "<BBB/>";
-        String ex3R11 = "<EEE/>";
-        String ex3R12 = "<FFF/>";
-        String ex3R13 = "<CCC><BBB><BBB><BBB/></BBB></BBB></CCC>";
-        String ex3R14 = "<BBB><BBB><BBB/></BBB></BBB>";
-        String ex3R15 = "<BBB><BBB/></BBB>";
-        String ex3R16 = "<BBB/>";
-        XmlObject[] exXml3 = new XmlObject[]{XmlObject.Factory.parse(ex3R0),
-                                             XmlObject.Factory.parse(ex3R1),
-                                             XmlObject.Factory.parse(ex3R2),
-                                             XmlObject.Factory.parse(ex3R3),
-                                             XmlObject.Factory.parse(ex3R4),
-                                             XmlObject.Factory.parse(ex3R5),
-                                             XmlObject.Factory.parse(ex3R6),
-                                             XmlObject.Factory.parse(ex3R7),
-                                             XmlObject.Factory.parse(ex3R8),
-                                             XmlObject.Factory.parse(ex3R9),
-                                             XmlObject.Factory.parse(ex3R10),
-                                             XmlObject.Factory.parse(ex3R11),
-                                             XmlObject.Factory.parse(ex3R12),
-                                             XmlObject.Factory.parse(ex3R13),
-                                             XmlObject.Factory.parse(ex3R14),
-                                             XmlObject.Factory.parse(ex3R15),
-                                             XmlObject.Factory.parse(ex3R16)};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, exXml1);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, exXml2);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        System.out.println(x3.xmlText());
-        XPathCommon.compare(x3, exXml3);
-        x3.dispose();
-
-    }
-
-    @Test
-    public void testZvonExample4() throws Exception {
-        System.out.println("====== Example-4 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon4.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/AAA/BBB[1]";
-        String ex2Simple = "/AAA/BBB[last()]";
-        String exR = "<BBB/>";
-        XmlObject[] exXml = new XmlObject[]{XmlObject.Factory.parse(exR)};
-
-
-        System.out.println("Test 1: " + fixPath(ex1Simple));
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, exXml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, exXml);
-        x2.dispose();
-    }
-
-    @Test
-    public void testZvonExample5() throws Exception {
-        System.out.println("====== Example-5 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon5.xml"));
-        XmlCursor xc = xDoc.newCursor();
-
-        String ex1Simple = "//@id";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<xml-fragment id=\"b1\"/>"),
-            XmlObject.Factory.parse("<xml-fragment id=\"b2\"/>")};
-
-        String ex2Simple = "//BBB[@id]";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB id = \"b1\"/>"),
-            XmlObject.Factory.parse("<BBB id = \"b2\"/>")};
-
-        String ex3Simple = "//BBB[@name]";
-        XmlObject[] ex3Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB name=\"bbb\"/>")};
-
-        String ex4Simple = "//BBB[@*]";
-        XmlObject[] ex4Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB id = \"b1\"/>"),
-            XmlObject.Factory.parse("<BBB id = \"b2\"/>"),
-            XmlObject.Factory.parse("<BBB name=\"bbb\"/>")};
-
-        String ex5Simple = "//BBB[not(@*)]";
-        XmlObject[] ex5Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB/>")
-        };
+        add(data, 3, "//*",
+            "<AAA><XXX><DDD><BBB/><BBB/><EEE/><FFF/></DDD></XXX><CCC><DDD><BBB/><BBB/><EEE/><FFF/></DDD></CCC><CCC><BBB><BBB><BBB/></BBB></BBB></CCC></AAA>",
+            "<XXX><DDD><BBB/><BBB/><EEE/><FFF/></DDD></XXX>", "<DDD><BBB/><BBB/><EEE/><FFF/></DDD>", "<BBB/>", "<BBB/>",
+            "<EEE/>", "<FFF/>", "<CCC><DDD><BBB/><BBB/><EEE/><FFF/></DDD></CCC>", "<DDD><BBB/><BBB/><EEE/><FFF/></DDD>",
+            "<BBB/>", "<BBB/>", "<EEE/>", "<FFF/>", "<CCC><BBB><BBB><BBB/></BBB></BBB></CCC>",
+            "<BBB><BBB><BBB/></BBB></BBB>", "<BBB><BBB/></BBB>", "<BBB/>");
+
+        add(data, 4, "/AAA/BBB[1]", "<BBB/>");
+        add(data, 4, "/AAA/BBB[last()]", "<BBB/>");
+
+        add(data, 5, "//@id", "<xml-fragment id=\"b1\"/>", "<xml-fragment id=\"b2\"/>");
+        add(data, 5, "//BBB[@id]", "<BBB id = \"b1\"/>", "<BBB id = \"b2\"/>");
+        add(data, 5, "//BBB[@name]", "<BBB name=\"bbb\"/>");
+        add(data, 5, "//BBB[@*]", "<BBB id = \"b1\"/>", "<BBB id = \"b2\"/>", "<BBB name=\"bbb\"/>");
+        add(data, 5, "//BBB[not(@*)]", "<BBB/>");
+
+        add(data, 6, "//BBB[@id='b1']", "<BBB id = \"b1\"/>");
+        add(data, 6, "//BBB[@name='bbb']", "<BBB name=\"bbb\"/>");
+        add(data, 6, "//BBB[normalize-space(@name)='bbb']", "<BBB name=\" bbb \"/>", "<BBB name=\"bbb\"/>");
+
+        add(data, 7, "//*[count(BBB)=2]", "<DDD><BBB/><BBB/></DDD>");
+        add(data, 7, "//*[count(*)=2]", "<DDD><BBB/><BBB/></DDD>", "<EEE><CCC/><DDD/></EEE>");
+        add(data, 7, "//*[count(*)=3]",
+            "<AAA><CCC><BBB/><BBB/><BBB/></CCC><DDD><BBB/><BBB/></DDD><EEE><CCC/><DDD/></EEE></AAA>", "<CCC><BBB/><BBB/><BBB/></CCC>");
+
+        add(data, 8, "//*[name()='BBB']", "<BBB/>", "<BBB/>", "<BBB/>", "<BBB/>", "<BBB/>");
+        add(data, 8, "//*[starts-with(name(),'B')]", "<BCC><BBB/><BBB/><BBB/></BCC>",
+            "<BBB/>", "<BBB/>", "<BBB/>", "<BBB/>", "<BBB/>", "<BEC><CCC/><DBD/></BEC>");
+
+        // ykadiysk: Jaxen prints in BF left-to-right order but XPath wants doc order
+        // add(data, "zvon8.xml", "//*[starts-with(name(),'B')]", "<BCC><BBB/><BBB/><BBB/></BCC>",
+        //    "<BBB/>", "<BBB/>", "<BEC><CCC/><DBD/></BEC>", "<BBB/>", "<BBB/>", "<BBB/>");
+
+        add(data, 8, "//*[contains(name(),'C')]", "<BCC><BBB/><BBB/><BBB/></BCC>", "<BEC><CCC/><DBD/></BEC>", "<CCC/>");
+
+        add(data, 9, "//*[string-length(name()) = 3]", "<AAA><Q/><SSSS/><BB/><CCC/><DDDDDDDD/><EEEE/></AAA>", "<CCC/>");
+        add(data, 9, "//*[string-length(name()) < 3]", "<Q/>", "<BB/>");
+        add(data, 9, "//*[string-length(name()) > 3]", "<SSSS/>", "<DDDDDDDD/>", "<EEEE/>");
 
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-
-        System.out.println("Test 4: " + ex4Simple);
-        XmlCursor x4 = xDoc.newCursor();
-        x4.selectPath(fixPath(ex4Simple));
-        //XPathCommon.display(x4);
-        XPathCommon.compare(x4, ex4Xml);
-        x4.dispose();
-
-        System.out.println("Test 5: " + ex5Simple);
-        XmlCursor x5 = xDoc.newCursor();
-        x5.selectPath(fixPath(ex5Simple));
-        //XPathCommon.display(x5);
-        XPathCommon.compare(x5, ex5Xml);
-
-        x5.dispose();
-    }
-
-    @Test
-    public void testZvonExample6() throws Exception {
-        System.out.println("====== Example-16 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon6.xml"));
-        XmlCursor xc = xDoc.newCursor();
-
-        String ex1Simple = "//BBB[@id='b1']";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB id = \"b1\"/>")};
-
-        String ex2Simple = "//BBB[@name='bbb']";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB name=\"bbb\"/>")};
-        String ex3Simple = "//BBB[normalize-space(@name)='bbb']";
-        XmlObject[] ex3Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB name=\" bbb \"/>")
-            ,
-            XmlObject.Factory.parse("<BBB name=\"bbb\"/>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-    }
-
-    @Test
-    public void testZvonExample7() throws Exception {
-        System.out.println("====== Example-7 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon7.xml"));
-        XmlCursor xc = xDoc.newCursor();
-
-        String ex1Simple = "//*[count(BBB)=2]";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<DDD><BBB/><BBB/></DDD>")};
-        String ex2Simple = "//*[count(*)=2]";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<DDD><BBB/><BBB/></DDD>"),
-            XmlObject.Factory.parse("<EEE><CCC/><DDD/></EEE>")};
-        String ex3Simple = "//*[count(*)=3]";
-        XmlObject[] ex3Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<AAA><CCC><BBB/><BBB/><BBB/></CCC><DDD><BBB/><BBB/></DDD><EEE><CCC/><DDD/></EEE></AAA>"),
-            XmlObject.Factory.parse("<CCC><BBB/><BBB/><BBB/></CCC>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-    }
-
-    @Test
-    public void testZvonExample8() throws Exception {
-        System.out.println("====== Example-8 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon8.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "//*[name()='BBB']";
-        XmlObject[] ex1Xml = new XmlObject[]{XmlObject.Factory.parse("<BBB/>"),
-                                             XmlObject.Factory.parse("<BBB/>"),
-                                             XmlObject.Factory.parse("<BBB/>"),
-                                             XmlObject.Factory.parse("<BBB/>"),
-                                             XmlObject.Factory.parse("<BBB/>"),
-        };
-        String ex2Simple = "//*[starts-with(name(),'B')]";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BCC><BBB/><BBB/><BBB/></BCC>"),
-            XmlObject.Factory.parse("<BBB/>"),
-            XmlObject.Factory.parse("<BBB/>"),
-            XmlObject.Factory.parse("<BBB/>"),
-            XmlObject.Factory.parse("<BBB/>"),
-            XmlObject.Factory.parse("<BBB/>"),
-            XmlObject.Factory.parse("<BEC><CCC/><DBD/></BEC>")};
-
-        /**ykadiysk: Jaxen prints in BF left-to-right order
-         * but XPath wants doc order
-         XmlObject[] ex2Xml = new XmlObject[]{XmlObject.Factory.parse("<BCC><BBB/><BBB/><BBB/></BCC>"),
-
-         XmlObject.Factory.parse("<BBB/>"),
-         XmlObject.Factory.parse("<BBB/>"),
-         XmlObject.Factory.parse("<BEC><CCC/><DBD/></BEC>"),
-         XmlObject.Factory.parse("<BBB/>"),
-         XmlObject.Factory.parse("<BBB/>"),
-         XmlObject.Factory.parse("<BBB/>")};
-         */
-
-        String ex3Simple = "//*[contains(name(),'C')]";
-        XmlObject[] ex3Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BCC><BBB/><BBB/><BBB/></BCC>"),
-            XmlObject.Factory.parse("<BEC><CCC/><DBD/></BEC>"),
-            XmlObject.Factory.parse("<CCC/>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        System.out.println("Zvon8 Test 2");
-        XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-    }
-
-    @Test
-    public void testZvonExample9() throws Exception {
-        System.out.println("====== Example-9 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon9.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "//*[string-length(name()) = 3]";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<AAA><Q/><SSSS/><BB/><CCC/><DDDDDDDD/><EEEE/></AAA>"),
-            XmlObject.Factory.parse("<CCC/>")};
-        String ex2Simple = "//*[string-length(name()) < 3]";
-        XmlObject[] ex2Xml = new XmlObject[]{XmlObject.Factory.parse("<Q/>"),
-                                             XmlObject.Factory.parse("<BB/>")};
-        String ex3Simple = "//*[string-length(name()) > 3]";
-        XmlObject[] ex3Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<SSSS/>"),
-            XmlObject.Factory.parse("<DDDDDDDD/>"),
-            XmlObject.Factory.parse("<EEEE/>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-    }
-
-    @Test
-    public void testZvonExample10() throws Exception {
-        System.out.println("====== Example-10 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon10.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "$this//CCC | $this//BBB";
-        //document order
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB/>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<CCC/>")
-
-        };
+        add(data, 10, "$this//CCC | $this//BBB", "<BBB/>", "<CCC/>", "<CCC/>");
         // Nodes are returned in document order
-        String ex2Simple = "$this/AAA/EEE | $this//BBB";
-
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB/>"),
-            XmlObject.Factory.parse("<EEE/>")
-
-        };
-
-        String ex3Simple = "./AAA/EEE |.//DDD/CCC | ./AAA | .//BBB";
-        XmlObject[] ex3Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                            "<AAA><BBB/><CCC/><DDD><CCC/></DDD><EEE/></AAA>"),            
-            XmlObject.Factory.parse("<BBB/>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<EEE/>")
-        };
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(ex1Simple);
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(ex2Simple);
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-    }
-
-    @Test
-    public void testZvonExample11() throws Exception {
-        System.out.println("====== Example-11 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon11.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/AAA";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<AAA><BBB/><CCC/></AAA>")};
-
-        String ex2Simple = "/child::AAA";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<AAA><BBB/><CCC/></AAA>")};
-
-        String ex3Simple = "/AAA/BBB";
-        XmlObject[] ex3Xml = new XmlObject[]{XmlObject.Factory.parse("<BBB/>")};
-
-        String ex4Simple = "/child::AAA/child::BBB";
-        XmlObject[] ex4Xml = new XmlObject[]{XmlObject.Factory.parse("<BBB/>")};
-
-        String ex5Simple = "/child::AAA/BBB";
-        XmlObject[] ex5Xml = new XmlObject[]{XmlObject.Factory.parse("<BBB/>")};
-
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-
-        System.out.println("Test 4: " + ex4Simple);
-        XmlCursor x4 = xDoc.newCursor();
-        x4.selectPath(fixPath(ex4Simple));
-        XPathCommon.display(x4);
-        XPathCommon.display(ex4Xml);
-        XPathCommon.compare(x4, ex4Xml);
-        x4.dispose();
-
-        System.out.println("Test 5: " + ex5Simple);
-        XmlCursor x5 = xDoc.newCursor();
-        x5.selectPath(fixPath(ex5Simple));
-        //XPathCommon.display(x5);
-        XPathCommon.compare(x5, ex5Xml);
-        x5.dispose();
-    }
-
-    @Test
-    public void testZvonExample12() throws Exception {
-        System.out.println("====== Example-12 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon12.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/descendant::*";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<AAA><BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB><CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC></AAA>"),
-            XmlObject.Factory.parse(
-                "<BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB>"),
-
-            XmlObject.Factory.parse("<DDD><CCC><DDD/><EEE/></CCC></DDD>"),
-
-            XmlObject.Factory.parse("<CCC><DDD/><EEE/></CCC>"),
-
-
-            XmlObject.Factory.parse("<DDD/>"),
-
-
-            XmlObject.Factory.parse("<EEE/>"),
-            XmlObject.Factory.parse(
-                "<CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC>"),
-            XmlObject.Factory.parse("<DDD><EEE><DDD><FFF/></DDD></EEE></DDD>"),
-            XmlObject.Factory.parse("<EEE><DDD><FFF/></DDD></EEE>"),
-            XmlObject.Factory.parse("<DDD><FFF/></DDD>"),
-            XmlObject.Factory.parse("<FFF/>")};
-
-        String ex2Simple = "/AAA/BBB/descendant::*";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<DDD><CCC><DDD/><EEE/></CCC></DDD>"),
-            XmlObject.Factory.parse("<CCC><DDD/><EEE/></CCC>"),
-            XmlObject.Factory.parse("<DDD/>"),
-            XmlObject.Factory.parse("<EEE/>")};
-
-        String ex3Simple = "//CCC/descendant::*";
-        XmlObject[] ex3Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<DDD/>"),
-            XmlObject.Factory.parse("<EEE/>"),
-            XmlObject.Factory.parse("<DDD><EEE><DDD><FFF/></DDD></EEE></DDD>"),
-            XmlObject.Factory.parse("<EEE><DDD><FFF/></DDD></EEE>"),
-            XmlObject.Factory.parse("<DDD><FFF/></DDD>"),
-            XmlObject.Factory.parse("<FFF/>")
-
-        };
-        String ex4Simple = "//CCC/descendant::DDD";
-        XmlObject[] ex4Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<DDD/>"),
-            XmlObject.Factory.parse("<DDD><EEE><DDD><FFF/></DDD></EEE></DDD>"),
-            XmlObject.Factory.parse("<DDD><FFF/></DDD>"),
-        };
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-
-        System.out.println("Test 4: " + ex4Simple);
-        XmlCursor x4 = xDoc.newCursor();
-        x4.selectPath(fixPath(ex4Simple));
-        //XPathCommon.display(x4);
-        XPathCommon.compare(x4, ex4Xml);
-        x4.dispose();
-    }
-
-    @Test
-    public void testZvonExample13() throws Exception {
-        System.out.println("====== Example-13 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon13.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "//DDD/parent::*";
-
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB>"),
-
-            XmlObject.Factory.parse("<CCC><DDD/><EEE/></CCC>"),
-            XmlObject.Factory.parse(
-                "<CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC>"),
-            XmlObject.Factory.parse("<EEE><DDD><FFF/></DDD></EEE>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-    }
-
-    @Test
-    public void testZvonExample14() throws Exception {
-        System.out.println("====== Example-14 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon14.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/AAA/BBB/DDD/CCC/EEE/ancestor::*";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<AAA><BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB><CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC></AAA>"),
-            XmlObject.Factory.parse(
-                "<BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB>"),
-            XmlObject.Factory.parse("<DDD><CCC><DDD/><EEE/></CCC></DDD>"),
-            XmlObject.Factory.parse("<CCC><DDD/><EEE/></CCC>")
-        };
-
-        String ex2Simple = "//FFF/ancestor::*";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<AAA><BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB><CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC></AAA>"),
-            XmlObject.Factory.parse(
-                "<CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC>"),
-            XmlObject.Factory.parse("<DDD><EEE><DDD><FFF/></DDD></EEE></DDD>"),
-            XmlObject.Factory.parse("<EEE><DDD><FFF/></DDD></EEE>"),
-            XmlObject.Factory.parse("<DDD><FFF/></DDD>")
-        };
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-    }
-
-    @Test
-    public void testZvonExample15() throws Exception {
-        System.out.println("====== Example-15 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon15.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/AAA/BBB/following-sibling::*";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>"),
-            XmlObject.Factory.parse("<CCC><DDD/></CCC>")};
-        String ex2Simple = "//CCC/following-sibling::*";
-        XmlObject[] ex2Xml = new XmlObject[]{XmlObject.Factory.parse("<DDD/>"),
-                                             XmlObject.Factory.parse("<FFF/>"),
-                                             XmlObject.Factory.parse(
-                                                 "<FFF><GGG/></FFF>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-    }
-
-    @Test
-    public void testZvonExample16() throws Exception {
-        System.out.println("====== Example-16 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon16.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/AAA/XXX/preceding-sibling::*";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB><CCC/><DDD/></BBB>")};
-        String ex2Simple = "//CCC/preceding-sibling::*";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB><CCC/><DDD/></BBB>"),
-            XmlObject.Factory.parse(
-                "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>"),
-            XmlObject.Factory.parse("<EEE/>"),
-            XmlObject.Factory.parse("<DDD/>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-    }
-
-    @Test
-    public void testZvonExample17() throws Exception {
-        System.out.println("====== Example-17 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon17.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/AAA/XXX/following::*";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<CCC><DDD/></CCC>"),
-            XmlObject.Factory.parse("<DDD/>")};
-        String ex2Simple = "//ZZZ/following::*";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<FFF><GGG/></FFF>"),
-            XmlObject.Factory.parse("<GGG/>"),
-            XmlObject.Factory.parse(
-                "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>"),
-            XmlObject.Factory.parse(
-                "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>"),
-            XmlObject.Factory.parse("<EEE/>"),
-            XmlObject.Factory.parse("<DDD/>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<FFF/>"),
-            XmlObject.Factory.parse("<FFF><GGG/></FFF>"),
-            XmlObject.Factory.parse("<GGG/>"),
-            XmlObject.Factory.parse("<CCC><DDD/></CCC>"),
-            XmlObject.Factory.parse("<DDD/>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-    }
-
-    /**
-     * the preceding axis contains all nodes that are descendants of the root
-     * of the tree in which the context node is found, are not ancestors of
-     * the context node, and occur before the context node in document order
-     */
-    @Test
-    public void testZvonExample18() throws Exception {
-        System.out.println("====== Example-18 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon18.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/AAA/XXX/preceding::*";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB><CCC/><ZZZ><DDD/></ZZZ></BBB>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<ZZZ><DDD/></ZZZ>"),
-            XmlObject.Factory.parse("<DDD/>")
-        };
-
-        String ex2Simple = "//GGG/preceding::*";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB><CCC/><ZZZ><DDD/></ZZZ></BBB>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<ZZZ><DDD/></ZZZ>"),
-            XmlObject.Factory.parse("<DDD/>"),
-
-            XmlObject.Factory.parse("<EEE/>"),
-            XmlObject.Factory.parse("<DDD/>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<FFF/>")
-
-            /*XmlObject.Factory.parse(
-                                               "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>"),
-                                           XmlObject.Factory.parse(
-                                               "<CCC><DDD/></CCC>"),
-                                           XmlObject.Factory.parse(
-                                               "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>"),
-                                           XmlObject.Factory.parse("<DDD/>"),
-                                           */
-        };
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-    }
-
-    @Test
-    public void testZvonExample19() throws Exception {
-        System.out.println("====== Example-19 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon19.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "/AAA/XXX/descendant-or-self::*";
-
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>"),
-            XmlObject.Factory.parse(
-                "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>"),
-            XmlObject.Factory.parse("<EEE/>"),
-            XmlObject.Factory.parse("<DDD/>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<FFF/>"),
-            XmlObject.Factory.parse("<FFF><GGG/></FFF>"),
-            XmlObject.Factory.parse("<GGG/>")};
-        String ex2Simple = "//CCC/descendant-or-self::*";
-
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<CCC><DDD/></CCC>"),
-            XmlObject.Factory.parse("<DDD/>"),
-        };
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-    }
-
-    @Test
-    public void testZvonExample20() throws Exception {
-        System.out.println("====== Example-20 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon20.xml"));
-        XmlCursor xc = xDoc.newCursor();
-
-        String ex1Simple = "/AAA/XXX/DDD/EEE/ancestor-or-self::*";
-        XmlObject[] ex1Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<AAA><BBB><CCC/><ZZZ><DDD/></ZZZ></BBB><XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX><CCC><DDD/></CCC></AAA>"),
-            XmlObject.Factory.parse(
-                "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>"),
-            XmlObject.Factory.parse(
-                "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>"),
-            XmlObject.Factory.parse("<EEE/>"),
-        };
-        String ex2Simple = "//GGG/ancestor-or-self::*";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<AAA><BBB><CCC/><ZZZ><DDD/></ZZZ></BBB><XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX><CCC><DDD/></CCC></AAA>"),
-            XmlObject.Factory.parse(
-                "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>"),
-            XmlObject.Factory.parse(
-                "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>"),
-            XmlObject.Factory.parse("<FFF><GGG/></FFF>"),
-            XmlObject.Factory.parse("<GGG/>"),
-        };
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-    }
-
-    @Test
-    public void testZvonExample21() throws Exception {
-        System.out.println("====== Example-21 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon21.xml"));
-        XmlCursor xc = xDoc.newCursor();
-        String ex1Simple = "//GGG/ancestor::*";
-        XmlObject[] ex1Xml = new XmlObject[]{
-
-            XmlObject.Factory.parse(
-                "<AAA><BBB><CCC/><ZZZ/></BBB><XXX><DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD></XXX><CCC><DDD/></CCC></AAA>"),
-            XmlObject.Factory.parse(
-                "<XXX><DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD></XXX>"),
-            XmlObject.Factory.parse(
-                "<DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD>"),
-            XmlObject.Factory.parse(
-                "<FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF>"),
-        };
-        String ex2Simple = "//GGG/descendant::*";
-        XmlObject[] ex2Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<JJJ><QQQ/></JJJ>"),
-            XmlObject.Factory.parse("<QQQ/>"),
-            XmlObject.Factory.parse("<JJJ/>")};
-        String ex3Simple = "//GGG/following::*";
-        XmlObject[] ex3Xml = new XmlObject[]{XmlObject.Factory.parse("<HHH/>"),
-                                             XmlObject.Factory.parse(
-                                                 "<CCC><DDD/></CCC>"),
-                                             XmlObject.Factory.parse("<DDD/>")};
-        String ex4Simple = "//GGG/preceding::*";
-        XmlObject[] ex4Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<BBB><CCC/><ZZZ/></BBB>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<ZZZ/>"),
-            XmlObject.Factory.parse("<EEE/>"),
-            XmlObject.Factory.parse("<HHH/>"),
-        };
-        String ex5Simple = "//GGG/self::*";
-        XmlObject[] ex5Xml = new XmlObject[]{
-            XmlObject.Factory.parse("<GGG><JJJ><QQQ/></JJJ><JJJ/></GGG>")};
-
-        String ex6Simple = "//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*";
-        XmlObject[] ex6Xml = new XmlObject[]{
-            XmlObject.Factory.parse(
-                "<AAA><BBB><CCC/><ZZZ/></BBB><XXX><DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD></XXX><CCC><DDD/></CCC></AAA>"),
-            XmlObject.Factory.parse("<BBB><CCC/><ZZZ/></BBB>"),
-            XmlObject.Factory.parse("<CCC/>"),
-            XmlObject.Factory.parse("<ZZZ/>"),
-            XmlObject.Factory.parse(
-                "<XXX><DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD></XXX>"),
-            XmlObject.Factory.parse(
-                "<DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD>"),
-            XmlObject.Factory.parse("<EEE/>"),
-            XmlObject.Factory.parse(
-                "<FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF>"),
-            XmlObject.Factory.parse("<HHH/>"),
-            XmlObject.Factory.parse("<GGG><JJJ><QQQ/></JJJ><JJJ/></GGG>"),
-            XmlObject.Factory.parse("<JJJ><QQQ/></JJJ>"),
-            XmlObject.Factory.parse("<QQQ/>"),
-            XmlObject.Factory.parse("<JJJ/>"),
-            XmlObject.Factory.parse("<HHH/>"),
-            XmlObject.Factory.parse("<CCC><DDD/></CCC>"),
-            XmlObject.Factory.parse("<DDD/>"),
-        };
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
-
-        System.out.println("Test 4: " + ex4Simple);
-        XmlCursor x4 = xDoc.newCursor();
-        x4.selectPath(fixPath(ex4Simple));
-        int i = 0;
-        /*   System.out.println("****************HERE");
-
-           while (i < x4.getSelectionCount())
-           {
-               x4.toSelection(i++);
-               System.out.println(x4.getName() + ((i - 1) + ""));
-           }
-
-           System.out.println("****************SETS");
-           XPathCommon.display(x4);
-           //XPathCommon.display(ex4Xml);
-           System.out.println("**************END SETS");
-        */
-        XPathCommon.compare(x4, ex4Xml);
-        x4.dispose();
-
-
-        System.out.println("Test 5: " + ex5Simple);
-        XmlCursor x5 = xDoc.newCursor();
-        x5.selectPath(fixPath(ex5Simple));
-        //XPathCommon.display(x5);
-        XPathCommon.compare(x5, ex5Xml);
-        x5.dispose();
-
-        System.out.println("Test 6: " + ex6Simple);
-        XmlCursor x6 = xDoc.newCursor();
-        x6.selectPath(fixPath(ex6Simple));
-        //XPathCommon.display(x6);
-        XPathCommon.compare(x6, ex6Xml);
-        x6.dispose();
-    }
-
-    @Test
-    public void testZvonExample22() throws Exception {
-        System.out.println("====== Example-22 ==========");
-        XmlObject xDoc = XmlObject.Factory.parse(
-            JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon22.xml"));
-        XmlCursor xc = xDoc.newCursor();
-
-        String ex1Simple = "//BBB[position() mod 2 = 0 ]";
-        XmlObject[] ex1Xml = new XmlObject[]{XmlObject.Factory.parse("<BBB/>"),
-                                             XmlObject.Factory.parse("<BBB/>"),
-                                             XmlObject.Factory.parse("<BBB/>"),
-                                             XmlObject.Factory.parse("<BBB/>")};
-
-        String ex2Simple = "//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]";
-        XmlObject[] ex2Xml = new XmlObject[]{XmlObject.Factory.parse("<BBB/>"),
-                                             XmlObject.Factory.parse("<BBB/>")};
-
-        String ex3Simple = "//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]";
-        XmlObject[] ex3Xml = new XmlObject[]{XmlObject.Factory.parse("<CCC/>")};
-
-        System.out.println("Test 1: " + ex1Simple);
-        XmlCursor x1 = xDoc.newCursor();
-        x1.selectPath(fixPath(ex1Simple));
-        //XPathCommon.display(x1);
-        XPathCommon.compare(x1, ex1Xml);
-        x1.dispose();
-        System.out.println("Test 2: " + ex2Simple);
-        XmlCursor x2 = xDoc.newCursor();
-        x2.selectPath(fixPath(ex2Simple));
-        //XPathCommon.display(x2);
-        XPathCommon.compare(x2, ex2Xml);
-        x2.dispose();
-
-        System.out.println("Test 3: " + ex3Simple);
-        XmlCursor x3 = xDoc.newCursor();
-        x3.selectPath(fixPath(ex3Simple));
-        //XPathCommon.display(x3);
-        XPathCommon.compare(x3, ex3Xml);
-        x3.dispose();
+        add(data, 10, "$this/AAA/EEE | $this//BBB", "<BBB/>", "<EEE/>");
+        add(data, 10, "./AAA/EEE |.//DDD/CCC | ./AAA | .//BBB", "<AAA><BBB/><CCC/><DDD><CCC/></DDD><EEE/></AAA>",
+            "<BBB/>", "<CCC/>", "<EEE/>");
+
+        add(data, 11, "/AAA", "<AAA><BBB/><CCC/></AAA>");
+        add(data, 11, "/child::AAA", "<AAA><BBB/><CCC/></AAA>");
+        add(data, 11, "/AAA/BBB", "<BBB/>");
+        add(data, 11, "/child::AAA/child::BBB", "<BBB/>");
+        add(data, 11, "/child::AAA/BBB", "<BBB/>");
+
+        add(data, 12, "/descendant::*",
+            "<AAA><BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB><CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC></AAA>",
+            "<BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB>", "<DDD><CCC><DDD/><EEE/></CCC></DDD>",
+            "<CCC><DDD/><EEE/></CCC>", "<DDD/>", "<EEE/>", "<CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC>",
+            "<DDD><EEE><DDD><FFF/></DDD></EEE></DDD>", "<EEE><DDD><FFF/></DDD></EEE>", "<DDD><FFF/></DDD>", "<FFF/>");
+        add(data, 12, "/AAA/BBB/descendant::*", "<DDD><CCC><DDD/><EEE/></CCC></DDD>",
+            "<CCC><DDD/><EEE/></CCC>", "<DDD/>", "<EEE/>");
+        add(data, 12, "//CCC/descendant::*", "<DDD/>", "<EEE/>", "<DDD><EEE><DDD><FFF/></DDD></EEE></DDD>",
+            "<EEE><DDD><FFF/></DDD></EEE>", "<DDD><FFF/></DDD>", "<FFF/>");
+        add(data, 12, "//CCC/descendant::DDD", "<DDD/>", "<DDD><EEE><DDD><FFF/></DDD></EEE></DDD>", "<DDD><FFF/></DDD>");
+
+        add(data, 13, "//DDD/parent::*", "<BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB>",
+            "<CCC><DDD/><EEE/></CCC>", "<CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC>", "<EEE><DDD><FFF/></DDD></EEE>");
+
+        add(data, 14, "/AAA/BBB/DDD/CCC/EEE/ancestor::*",
+            "<AAA><BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB><CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC></AAA>",
+            "<BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB>", "<DDD><CCC><DDD/><EEE/></CCC></DDD>", "<CCC><DDD/><EEE/></CCC>");
+        add(data, 14, "//FFF/ancestor::*",
+            "<AAA><BBB><DDD><CCC><DDD/><EEE/></CCC></DDD></BBB><CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC></AAA>",
+            "<CCC><DDD><EEE><DDD><FFF/></DDD></EEE></DDD></CCC>", "<DDD><EEE><DDD><FFF/></DDD></EEE></DDD>",
+            "<EEE><DDD><FFF/></DDD></EEE>", "<DDD><FFF/></DDD>");
+
+        add(data, 15, "/AAA/BBB/following-sibling::*",
+            "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>", "<CCC><DDD/></CCC>");
+        add(data, 15, "//CCC/following-sibling::*", "<DDD/>", "<FFF/>", "<FFF><GGG/></FFF>");
+
+        add(data, 16, "/AAA/XXX/preceding-sibling::*", "<BBB><CCC/><DDD/></BBB>");
+        add(data, 16, "//CCC/preceding-sibling::*", "<BBB><CCC/><DDD/></BBB>",
+            "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>", "<EEE/>", "<DDD/>");
+
+        add(data, 17, "/AAA/XXX/following::*", "<CCC><DDD/></CCC>", "<DDD/>");
+        add(data, 17, "//ZZZ/following::*", "<FFF><GGG/></FFF>", "<GGG/>",
+            "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>",
+            "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>", "<EEE/>", "<DDD/>", "<CCC/>", "<FFF/>",
+            "<FFF><GGG/></FFF>", "<GGG/>", "<CCC><DDD/></CCC>", "<DDD/>");
+
+
+        // the preceding axis contains all nodes that are descendants of the root of the tree in which the context
+        // node is found, are not ancestors of the context node, and occur before the context node in document order
+        add(data, 18, "/AAA/XXX/preceding::*", "<BBB><CCC/><ZZZ><DDD/></ZZZ></BBB>", "<CCC/>",
+            "<ZZZ><DDD/></ZZZ>", "<DDD/>");
+        add(data, 18, "//GGG/preceding::*", "<BBB><CCC/><ZZZ><DDD/></ZZZ></BBB>", "<CCC/>",
+            "<ZZZ><DDD/></ZZZ>", "<DDD/>", "<EEE/>", "<DDD/>", "<CCC/>", "<FFF/>");
+
+
+        add(data, 19, "/AAA/XXX/descendant-or-self::*", "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>",
+            "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>", "<EEE/>", "<DDD/>", "<CCC/>", "<FFF/>", "<FFF><GGG/></FFF>", "<GGG/>");
+        add(data, 19, "//CCC/descendant-or-self::*", "<CCC/>", "<CCC/>", "<CCC><DDD/></CCC>", "<DDD/>");
+
+
+        add(data, 20, "/AAA/XXX/DDD/EEE/ancestor-or-self::*",
+            "<AAA><BBB><CCC/><ZZZ><DDD/></ZZZ></BBB><XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX><CCC><DDD/></CCC></AAA>",
+            "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>",
+            "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>", "<EEE/>");
+        add(data, 20, "//GGG/ancestor-or-self::*",
+            "<AAA><BBB><CCC/><ZZZ><DDD/></ZZZ></BBB><XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX><CCC><DDD/></CCC></AAA>",
+            "<XXX><DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD></XXX>",
+            "<DDD><EEE/><DDD/><CCC/><FFF/><FFF><GGG/></FFF></DDD>", "<FFF><GGG/></FFF>", "<GGG/>");
+
+        add(data, 21, "//GGG/ancestor::*",
+            "<AAA><BBB><CCC/><ZZZ/></BBB><XXX><DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD></XXX><CCC><DDD/></CCC></AAA>",
+            "<XXX><DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD></XXX>",
+            "<DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD>",
+            "<FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF>");
+        add(data, 21, "//GGG/descendant::*", "<JJJ><QQQ/></JJJ>", "<QQQ/>", "<JJJ/>");
+        add(data, 21, "//GGG/following::*", "<HHH/>", "<CCC><DDD/></CCC>", "<DDD/>");
+        add(data, 21, "//GGG/preceding::*", "<BBB><CCC/><ZZZ/></BBB>", "<CCC/>", "<ZZZ/>", "<EEE/>", "<HHH/>");
+        add(data, 21, "//GGG/self::*", "<GGG><JJJ><QQQ/></JJJ><JJJ/></GGG>");
+        add(data, 21, "//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*",
+            "<AAA><BBB><CCC/><ZZZ/></BBB><XXX><DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD></XXX><CCC><DDD/></CCC></AAA>",
+            "<BBB><CCC/><ZZZ/></BBB>", "<CCC/>", "<ZZZ/>", "<XXX><DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD></XXX>",
+            "<DDD><EEE/><FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF></DDD>", "<EEE/>",
+            "<FFF><HHH/><GGG><JJJ><QQQ/></JJJ><JJJ/></GGG><HHH/></FFF>", "<HHH/>", "<GGG><JJJ><QQQ/></JJJ><JJJ/></GGG>",
+            "<JJJ><QQQ/></JJJ>", "<QQQ/>", "<JJJ/>", "<HHH/>", "<CCC><DDD/></CCC>", "<DDD/>");
+
+        add(data, 22, "//BBB[position() mod 2 = 0 ]", "<BBB/>", "<BBB/>", "<BBB/>", "<BBB/>");
+        add(data, 22, "//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]",
+            "<BBB/>", "<BBB/>");
+        add(data, 22, "//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]",
+            "<CCC/>");
+
+        return data;
+    }
+
+    private static void add(List<Object[]> data, int dataset, String xpath, String... expected) {
+        data.add(new Object[]{dataset, xpath, expected});
+    }
+
+
+    @Test
+    public void zvonExample() throws IOException, XmlException {
+        XmlObject xDoc = XmlObject.Factory.parse(JarUtil.getResourceFromJar("xbean/xmlcursor/xpath/zvon"+dataset+".xml"));
+        XmlCursor x1 = xDoc.newCursor();
+        try {
+            x1.selectPath(xpath);
+
+            XmlObject[] exp = new XmlObject[expected.length];
+            for (int i = 0; i < expected.length; i++) {
+                exp[i] = XmlObject.Factory.parse(expected[i]);
+            }
+
+            XPathCommon.compare(x1, exp);
+        } finally {
+            x1.dispose();
+        }
     }
 }

Modified: xmlbeans/trunk/test/src/xmlcursor/xpath/xbean_xpath/detailed/AxesTest.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/xmlcursor/xpath/xbean_xpath/detailed/AxesTest.java?rev=1877931&r1=1877930&r2=1877931&view=diff
==============================================================================
--- xmlbeans/trunk/test/src/xmlcursor/xpath/xbean_xpath/detailed/AxesTest.java (original)
+++ xmlbeans/trunk/test/src/xmlcursor/xpath/xbean_xpath/detailed/AxesTest.java Tue May 19 20:10:55 2020
@@ -35,13 +35,13 @@ import static org.junit.Assert.assertEqu
  * namespace
  */
 public class AxesTest {
-    private String sXmlChild =
+    private final String sXmlChild =
         "<foo> <bar xmlns:pre=\"http://uri.com\" at0='val0'>" +
         "<pre:baz xmlns:baz='http://uri' baz:at0='val1'/>txt child</bar></foo>";
 
-    private XmlOptions options = new XmlOptions();
+    private final XmlOptions options = new XmlOptions();
 
-    private String sXmlDesc =
+    private final String sXmlDesc =
         "<foo> <foo xmlns:pre=\"http://uri.com\" at0='val0'>" +
         "<pre:baz xmlns:baz='http://uri' baz:at0='val1'/>txt child</foo></foo>";
 
@@ -98,6 +98,7 @@ public class AxesTest {
         assertEquals(sExpected, c.xmlText());
     }
 
+    @Test
     public void testChildAxisDNE() throws XmlException {
         String sQuery1 = "$this/foo/./baz";
         XmlCursor c = XmlObject.Factory.parse(sXmlChild).newCursor();

Modified: xmlbeans/trunk/test/src/xmlcursor/xquery/detailed/XQueryVariableBindingTest.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/xmlcursor/xquery/detailed/XQueryVariableBindingTest.java?rev=1877931&r1=1877930&r2=1877931&view=diff
==============================================================================
--- xmlbeans/trunk/test/src/xmlcursor/xquery/detailed/XQueryVariableBindingTest.java (original)
+++ xmlbeans/trunk/test/src/xmlcursor/xquery/detailed/XQueryVariableBindingTest.java Tue May 19 20:10:55 2020
@@ -33,8 +33,7 @@ public class XQueryVariableBindingTest e
         XBEAN_CASE_ROOT + P + "xmlcursor" + P + "xquery";
     public static File dir = new File(XQUERY_CASE_DIR);
 
-    private XmlCursor _testDocCursor1() throws Exception
-    {
+    private XmlCursor _testDocCursor1() throws Exception {
         String xml =
             "<elem1>" +
             "<elem11 id=\"123\">text11</elem11>" +
@@ -63,8 +62,7 @@ public class XQueryVariableBindingTest e
 
     /** test the automatic binding of $this to the current node: selectPath() */
     @Test
-    public void testThisVariable1() throws Exception
-    {
+    public void testThisVariable1() throws Exception {
         XmlCursor xc = _testDocCursor1();
         xc.toFirstChild(); //<elem1>
         xc.toFirstChild(); //<elem11>
@@ -77,8 +75,7 @@ public class XQueryVariableBindingTest e
     // this fails: see JIRA issue XMLBEANS-276
     /** test the binding of a variable to the current node: selectPath() */
     @Test
-    public void testCurrentNodeVariable1() throws Exception
-    {
+    public void testCurrentNodeVariable1() throws Exception {
         XmlCursor xc = _testDocCursor1();
         xc.toFirstChild();
         xc.toFirstChild();
@@ -92,23 +89,18 @@ public class XQueryVariableBindingTest e
         xc.dispose();
     }
 
-    private XmlCursor _testDocCursor2() throws Exception
-    {
+    private XmlCursor _testDocCursor2() throws Exception {
         File f = new File(dir, "employees.xml");
         XmlObject doc = XmlObject.Factory.parse(f);
-        XmlCursor xc = doc.newCursor();
-        return xc;
+        return doc.newCursor();
     }
 
-    public void _verifyQueryResult(XmlCursor qc)
-    {
+    public void _verifyQueryResult(XmlCursor qc) {
         System.out.println(qc.xmlText());
         assertTrue(qc.toFirstChild());
-        assertEquals("<phone location=\"work\">(425)555-5665</phone>", 
-                     qc.xmlText());
+        assertEquals("<phone location=\"work\">(425)555-5665</phone>", qc.xmlText());
         assertTrue(qc.toNextSibling());
-        assertEquals("<phone location=\"work\">(425)555-6897</phone>", 
-                     qc.xmlText());
+        assertEquals("<phone location=\"work\">(425)555-6897</phone>", qc.xmlText());
         assertFalse(qc.toNextSibling());
     }
 
@@ -117,7 +109,7 @@ public class XQueryVariableBindingTest e
     public void testThisVariable2() throws Exception
     {
         XmlCursor xc = _testDocCursor2();
-        xc.toNextToken();
+        // xc.toNextToken();
         String q =
             "for $e in $this/employees/employee " +
             "let $s := $e/address/state " +
@@ -131,10 +123,9 @@ public class XQueryVariableBindingTest e
 
     /** test the binding of a variable to the current node: execQuery() */
     @Test
-    public void testCurrentNodeVariable2() throws Exception
-    {
+    public void testCurrentNodeVariable2() throws Exception {
         XmlCursor xc = _testDocCursor2();
-        xc.toNextToken();
+        // xc.toNextToken();
         String q =
             "for $e in $cur/employees/employee " +
             "let $s := $e/address/state " +
@@ -150,18 +141,15 @@ public class XQueryVariableBindingTest e
         qc.dispose();
     }
 
-    private XmlObject[] _execute(XmlObject xo, Map m, String q)
-    {
+    private XmlObject[] _execute(XmlObject xo, Map m, String q) {
         XmlOptions opts = new XmlOptions();
         opts.setXqueryVariables(m);
-        XmlObject[] results = xo.execQuery(q, opts);
-        return results;
+        return xo.execQuery(q, opts);
     }
 
     /** test the binding of a variable to an XmlTokenSource using a map */
     @Test
-    public void testOneVariable() throws Exception
-    {
+    public void testOneVariable() throws Exception {
         File f = new File(dir, "bookstore.xml");
         XmlObject doc = XmlObject.Factory.parse(f);
         String q =
@@ -169,23 +157,20 @@ public class XQueryVariableBindingTest e
             "for $x in $rt/book " +
             "where $x/price > 30 " +
             "return $x/title";
-        Map m = new HashMap();
+        Map<String,Object> m = new HashMap<>();
         m.put("rt", doc.selectChildren("", "bookstore")[0]);
         XmlObject[] results = _execute(doc, m, q);
         assertNotNull(results);
         assertEquals(2, results.length);
-        assertEquals("<title lang=\"en\">XQuery Kick Start</title>",
-                     results[0].xmlText());
-        assertEquals("<title lang=\"en\">Learning XML</title>",
-                     results[1].xmlText());
+        assertEquals("<title lang=\"en\">XQuery Kick Start</title>", results[0].xmlText());
+        assertEquals("<title lang=\"en\">Learning XML</title>", results[1].xmlText());
     }
-    
+
     /** test the binding of multiple variables using a map;
         at the same time, test the binding of a variable to a String
      */
     @Test
-    public void testMultipleVariables() throws Exception
-    {
+    public void testMultipleVariables() throws Exception {
         File f = new File(dir, "bookstore.xml");
         XmlObject doc = XmlObject.Factory.parse(f);
         String q =
@@ -194,14 +179,13 @@ public class XQueryVariableBindingTest e
             "for $x in $rt/book " +
             "where $x[@category=$c] " +
             "return $x/title";
-        Map m = new HashMap();
+        Map<String,Object> m = new HashMap<>();
         m.put("rt", doc.selectChildren("", "bookstore")[0]);
         m.put("c", "CHILDREN");
         XmlObject[] results = _execute(doc, m, q);
         assertNotNull(results);
         assertEquals(1, results.length);
-        assertEquals("<title lang=\"en\">Harry Potter</title>",
-                     results[0].xmlText());
+        assertEquals("<title lang=\"en\">Harry Potter</title>", results[0].xmlText());
     }
 
 }

Modified: xmlbeans/trunk/test/src/xmlobject/detailed/CopyTest.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/xmlobject/detailed/CopyTest.java?rev=1877931&r1=1877930&r2=1877931&view=diff
==============================================================================
--- xmlbeans/trunk/test/src/xmlobject/detailed/CopyTest.java (original)
+++ xmlbeans/trunk/test/src/xmlobject/detailed/CopyTest.java Tue May 19 20:10:55 2020
@@ -25,7 +25,7 @@ public class CopyTest {
     @Test
     public void testXobjTypeOnDomNodeCopy() throws Exception {
         XmlObject o = XmlObject.Factory.parse("<foo><a/></foo>");
-        String xobjOrgClassName = "org.apache.xmlbeans.impl.store.Xobj$DocumentXobj";
+        String xobjOrgClassName = "org.apache.xmlbeans.impl.store.DocumentXobj";
         assertEquals("Invalid Type!", o.getDomNode().getClass().getName(), xobjOrgClassName);
 
         XmlObject o2 = o.copy();
@@ -33,8 +33,8 @@ public class CopyTest {
         System.out.println("DocXobj:" + xobjCopyClassName);
 
         // check for the expected type
-        assertEquals("Invalid Type!", "org.apache.xmlbeans.impl.store.Xobj$DocumentXobj", xobjOrgClassName);
-        assertEquals("Invalid Type!", "org.apache.xmlbeans.impl.store.Xobj$DocumentXobj", xobjCopyClassName);
+        assertEquals("Invalid Type!", "org.apache.xmlbeans.impl.store.DocumentXobj", xobjOrgClassName);
+        assertEquals("Invalid Type!", "org.apache.xmlbeans.impl.store.DocumentXobj", xobjCopyClassName);
     }
 
     // Test the same for a simple untyped XmlObject copy
@@ -46,7 +46,6 @@ public class CopyTest {
         assertEquals("Invalid Type!", untypedXobjClass, o.getClass().getName());
 
         XmlObject o2 = o.copy();
-        String xobjClass = o2.getClass().getName();
         // type should be unchanged after the copy
         assertEquals("Invalid Type!", untypedXobjClass, o2.getClass().getName());
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org