<html>
<body>
<p>Test EventSource constructor functionality. Should print a series of PASS messages followed by DONE.</p>
<div id="result"></div>
<script>
function log(msg) {
    document.getElementById("result").innerHTML += msg + "<br>";
}

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

try {
    new EventSource();
    log("FAIL: no exception when trying to construct an EventSource without argument");
}
catch (ex) {
    log("PASS: missing argument to EventSource constructor resulted in an exception (" + ex + ")");
}

try {
    new EventSource("");
    log("FAIL: no exception when passing an empty string to the EventSource constructor");
}
catch (ex) {
    log("PASS: passing an empty string to the EventSource constructor resulted in an exception (" + ex + ")");
}

try {
    new EventSource("http://webserver:eighty/");
    log("FAIL: no exception when passing an invalid URL to the EventSource constructor");
}
catch (ex) {
    log("PASS: passing an invalid URL to the EventSource constructor resulted in an exception (" + ex + ")");
}

try {
    var es = new EventSource("http://127.0.0.1/", {"withCredentials": false});
    es.close();
    if (!es.withCredentials) {
        log("PASS: no exception when passing a second argument to the EventSource constructor");
        log("DONE");
    } else
        log("FAIL: the 'withCredentials' property is unexpectedly true");
}
catch (ex) {
    log("FAIL: passing a second argument to the EventSource constructor resulted in an exception (" + ex + ")");
}

if (window.testRunner)
    testRunner.notifyDone();

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