blob: 427ddf8d91b2d368afbb5dbbda0e2d18c2a76fba [file] [log] [blame]
<html>
<body>
<p>Test EventSource reconnect after end of event stream. 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>";
}
var stateNames = ["CONNECTING", "OPEN", "CLOSED"];
for (var i in stateNames)
eval("var " + stateNames[i] + " = " + i);
var retryTimeout;
function checkReadyState(es, desiredState) {
var currState = es.readyState;
if (currState == desiredState)
log("PASS: state is " + stateNames[desiredState]);
else
log("FAIL: bad state (" + stateNames[currState] + ", should be " + stateNames[desiredState] + ")");
}
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
var errCount = 0;
var es = new EventSource("resources/reconnect.py");
checkReadyState(es, CONNECTING);
es.onopen = function (evt) {
checkReadyState(es, OPEN);
};
es.onmessage = function (evt) {
if (!errCount) {
if (evt.lastEventId == "77")
log("PASS: got lastEventId \"77\"");
else
log("FAIL: unexpected lastEventId \"" + evt.lastEventId + "\"");
} else {
if (evt.data != "77")
log("FAIL: Last-Event-ID header was incorrect/missing");
else if (evt.lastEventId != "77")
log("FAIL: the lastEventId property was incorrect");
else
log("PASS: Last-Event-ID header and the lastEventId property were correct");
}
};
es.onerror = function () {
errCount++;
if (errCount < 2) {
checkReadyState(es, CONNECTING);
retryTimeout = setTimeout(end, 1000);
return;
}
clearTimeout(retryTimeout);
retryTimeout = null;
end();
};
function end() {
es.close();
if (retryTimeout)
log("FAIL: did not reconnect in time");
else {
checkReadyState(es, CLOSED);
log("DONE");
}
if (window.testRunner)
testRunner.notifyDone();
}
</script>
</body>
</html>