| <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> |