<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Namespace Resolver Test Case</title>
</head>
<body>
    <div id="result">FAILURE</div>
    <script type="text/javascript"><![CDATA[
    if (window.layoutTestController)
        layoutTestController.dumpAsText();

    function MyNSResolver() {}
    MyNSResolver.prototype.lookupNamespaceURI = function(prefix) {
        switch (prefix) {
            case "foo":
                return "http://www.example.com";
                break;
            default:
                return null;
                break;
        }
    }

    var sXml = "<root><ex:child xmlns:ex='http://www.example.com'>SUCCESS</ex:child></root>";
    var oXmlDom = (new DOMParser()).parseFromString(sXml, "text/xml");

    try {

        var oResult = oXmlDom.evaluate("foo:child/text()", oXmlDom.documentElement, new MyNSResolver, 
            XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

        document.getElementById("result").textContent = oResult.iterateNext().nodeValue;

    } catch (ex) {
        document.getElementById("result").textContent = ex;
    }
    ]]></script>

</body>
</html>
