<body>
<script>
    if (window.layoutTestController)
        layoutTestController.dumpAsText();

    src = '<doc><elem>a<![CDATA[b]]>c</elem></doc>';
    doc = (new DOMParser).parseFromString(src, "application/xml");

    elem = doc.documentElement.firstChild;
    aText = elem.firstChild;
    bText = elem.firstChild.nextSibling;
    cText = elem.lastChild;

    function test(expr, context) {
        nodeset = doc.evaluate(expr, context, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
        str = "";
        while (currNode = nodeset.iterateNext()) {
            if (str)
                str += " ";
            str += currNode.nodeValue;
        }
        
        document.write(expr + ", " + (context.nodeValue ? context.nodeValue : context) + ": \"" + str + "\"<br>");
    }

    document.write("<xmp>" + src + "</xmp>");

    test("child::*", elem);
    test("child::node()", elem);
    test("descendant::*", elem);
    test("descendant::node()", elem);
    test("descendant::node()[2]", elem);
    test("ancestor-or-self::node()", bText);
    test("ancestor-or-self::*", bText);
    test("ancestor-or-self::node()", aText);
    test("ancestor-or-self::*", aText);
    test("following::node()", elem);
    test("following::node()", aText);
    test("following::text()", aText);
    test("following::node()", bText);
    test("following-sibling::node()", elem);
    test("following-sibling::node()", aText);
    test("following-sibling::text()", aText);
    test("following-sibling::node()", bText);
    test("preceding::node()", bText);
    test("preceding-sibling::node()", bText);
    test("preceding::node()", cText);
    test("preceding::text()", cText);
    test("preceding-sibling::node()", cText);
    test("preceding-sibling::text()", cText);
    test("self::node()", bText);

    var successfullyParsed = true;

</script>
</body>
