<html>
<body>
<p>Tests the properties of the exceptions related to XMLHttpRequest.</p>
<pre id="console"></pre>
<script>
    function shouldBeEqualToString(__a, __b)
    {
        var _a = eval(__a);

        var _message;
        if (_a == __b) {
            _message = "PASS " + __a + " is \"" + __b + "\"";
        } else {
            _message = "FAIL " + __a + " is not \"" +  __b + "\". Was \"" + _a + "\"";
        }
        document.getElementById('console').appendChild(document.createTextNode(_message + "\n"));
    }

    function shouldBe(__a, __b)
    {
        var _a = eval(__a);
        var _b = eval(__b);
        
        var _message;
        if (_a == _b) {
            _message = "PASS " + __a + " is " + __b;
        } else {
            _message = "FAIL " + __a + " is not " + __b + ". Was " + _a;
        }
        document.getElementById('console').appendChild(document.createTextNode(_message + "\n"));
    }

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

    var e;
    try {
        var req = new XMLHttpRequest;
        req.open('GET', 'resources/infinite-loop.php', false);
        req.send(null);
        // raises NETWORK_ERR
    } catch (err) {
        e = err;
    }

    shouldBeEqualToString("e.toString()", "NetworkError:  A network error occurred.");
    shouldBeEqualToString("Object.prototype.toString.call(e)", "[object DOMException]");
    shouldBeEqualToString("Object.prototype.toString.call(e.__proto__)", "[object DOMException]");
    shouldBeEqualToString("e.constructor.toString()", "function DOMException() {\n    [native code]\n}");
    shouldBe("e.constructor", "window.DOMException");
    shouldBe("e.NETWORK_ERR", "e.constructor.NETWORK_ERR");
    shouldBe("e.NETWORK_ERR", "19");
</script>
</body>
</html>
