<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<body>
<p>Tests that accessing XPath namespace axis doesn't cause a crash, see 
<a href="bug http://bugs.webkit.org/show_bug.cgi?id=12724">bug 12724</a>.</p>
<p>The actual results are incorrect, because XPath namespace nodes are not implemented yet.</p>

<div id="console"></div>

<script>
SRC_1 = '<?xml version="1.0" encoding="utf-8"?>\
<docu>\
<elem xmlns:unused="urn:uuu000"/>\
<elem xmlns="urn:sss111"/>\
<y:elem xmlns:y="urn:yyyy222"/>\
</docu>'

    if (window.testRunner)
        testRunner.dumpAsText();

    function shouldBe(actual, expected) {
        if (actual == expected)
            document.write("PASS: " + actual + " result nodes<br>");
        else
            document.write("FAILURE: " + actual + " result nodes (should be " + expected + ")<br>");
    }

    doc = (new DOMParser).parseFromString(SRC_1, "application/xml");

    EXPR = '//namespace::node()'
    nodeset = doc.evaluate(EXPR, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    shouldBe(nodeset.snapshotLength, 7)

    EXPR = '//node()/namespace::node()'
    nodeset = doc.evaluate(EXPR, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    shouldBe(nodeset.snapshotLength, 7)

    EXPR = '//*/namespace::node()'
    nodeset = doc.evaluate(EXPR, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    shouldBe(nodeset.snapshotLength, 7)

    EXPR = '/*/*/namespace::node()'
    nodeset = doc.evaluate(EXPR, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    shouldBe(nodeset.snapshotLength, 6)

    EXPR = '/*/namespace::node()|/*/*/namespace::node()'
    nodeset = doc.evaluate(EXPR, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    shouldBe(nodeset.snapshotLength, 7)

    EXPR = '//*'
    nodeset = doc.evaluate(EXPR, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    shouldBe(nodeset.snapshotLength, 4)

</script>
</body>
</html>
