<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>XPath queries with predicates incorrectly retains the current node across unions</title>
<style>div#msg { white-space: pre; }</style>
<script>
if (window.layoutTestController)
    layoutTestController.dumpAsText();

window.addEventListener("load", function() {
    var msg = document.getElementById("msg");
    function print(s) { msg.textContent += s; }
    function id(el) { return el.tagName + (el.id ? "#" + el.id : ""); }
    function query(el, xpath, expected) {
        print("Query \"" + xpath + "\" from " + id(el) + "\n");
        var res = document.evaluate(xpath,
                                    el,
                                    function() { return "http://www.w3.org/1999/xhtml"; },
                                    XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
                                    null);

        var resstr = "";
        for (var i = 0; i &lt; res.snapshotLength; i++) {
            var el = res.snapshotItem(i);
            resstr += " " + id(el);
        }
        print("Result:" + resstr + "\n");
        print("Expected: " + expected + "\n");
        if (resstr != (" " + expected)) {
            print("FAIL\n");
        } else {
            print("SUCCESS\n");
        }
        print("\n");
    }
    
    print("Querying in the following...\n\n");
    print(document.getElementById("test").outerHTML + "\n\n");
    
    query(document.getElementById("B"), "ancestor::xhtml:span", "span#A");
    query(document.getElementById("B"), ".|ancestor::xhtml:span", "span#A span#B");
    query(document.getElementById("B"), "ancestor::xhtml:span|.", "span#A span#B");

    query(document.getElementById("B"), "ancestor::xhtml:*[local-name()='span']", "span#A");
    query(document.getElementById("B"), ".|ancestor::xhtml:*[local-name()='span']", "span#A span#B");
    query(document.getElementById("B"), "ancestor::xhtml:*[local-name()='span']|.", "span#A span#B");
    query(document.getElementById("B"), "(ancestor::xhtml:*[local-name()='span'])|.", "span#A span#B");
    
    query(document.getElementById("B"), "following::xhtml:*[local-name()='span']", "span#C span#D");
    query(document.getElementById("B"), ".|following::xhtml:*[local-name()='span']", "span#B span#C span#D");
    query(document.getElementById("B"), "following::xhtml:*[local-name()='span']|.", "span#B span#C span#D");
}, false);
</script>
</head>
<body>
<div id="test">
    <span id="A">
        <span id="B"/>
    </span>
    <span id="C">
        <span id="D"/>
    </span>
</div>
<div id="msg"/>
</body>
</html>
