<html>
<body>
<p>Test EventSource states for different status codes. 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>";
}

function arrayCompare(a1, a2) {
    if (a1.length != a2.length)
        return false;
    for (var i = 0; i < a1.length; i++)
        if (a1[i] != a2[i])
            return false;
    return true;
}

var stateNames = ["CONNECTING", "OPEN", "CLOSED"];
for (var i in stateNames)
    eval("var " + stateNames[i] + " = " + i);

var tests = [{"code": 200, "expectedStates": [CONNECTING, OPEN, OPEN, CONNECTING, CLOSED]},
             {"code": 204, "expectedStates": [CONNECTING,,, CLOSED, CLOSED]},
             {"code": 205, "expectedStates": [CONNECTING,,, CLOSED, CLOSED]},
             {"code": 202, "expectedStates": [CONNECTING,,, CLOSED, CLOSED]}, // other 2xx
             {"code": 301, "expectedStates": [CONNECTING, OPEN, OPEN, CONNECTING, CLOSED]},
             {"code": 302, "expectedStates": [CONNECTING, OPEN, OPEN, CONNECTING, CLOSED]},
             {"code": 303, "expectedStates": [CONNECTING, OPEN, OPEN, CONNECTING, CLOSED]},
             {"code": 307, "expectedStates": [CONNECTING, OPEN, OPEN, CONNECTING, CLOSED]},
             {"code": 404, "expectedStates": [CONNECTING,,, CLOSED, CLOSED]}]; // any other
var count = 0;

function runTest() {
    if (count >= tests.length) {
        log("DONE");
        if (window.testRunner)
            testRunner.notifyDone();
        return;
    }

    var states = [];
    var es = new EventSource("resources/status-codes.php?status-code=" + tests[count].code);
    states[0] = es.readyState;

    es.onopen = function () {
        states[1] = es.readyState;
    };

    es.onmessage = function (evt) {
        states[2] = es.readyState;
    };

    es.onerror = function () {
        states[3] = es.readyState;
        es.close();
        states[4] = es.readyState;

        var result = arrayCompare(states, tests[count].expectedStates) ? "PASS" : "FAIL";
        result += ": status code " + tests[count].code + " resulted in states ";
        for (var i in states)
            result += (i != 0 ? ", " : "") + stateNames[states[i]];
        log(result);

        setTimeout(runTest, 0);
        count++;
    };
}

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

runTest();
</script>
</body>
</html>
