Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE HTML>↩
<html>↩
<!--↩
-->
<head>↩
<title>Test for Bug 218236</title>↩
<script src="/tests/SimpleTest/SimpleTest.js"></script> ↩
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />↩
</head>↩
<body>↩
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=218236">Mozilla Bug 218236</a>↩
<p id="display"></p>↩
<div id="content" style="display: none">↩
</div>↩
<pre id="test">↩
<script class="testbody" type="text/javascript">↩
/** Test for Bug 218236 **/
SimpleTest.waitForExplicitFinish();↩
/* Test data */
var url_200 = window.location.href;↩
var url_404 = url_200.replace(/[^/]+$/, "this_file_is_not_going_to_be_there.dummy");↩
var url_connection_error = url_200.replace(/^(\w+:\/\/[^/]+?)(:\d+)?\//, "$1:9546/");↩
// List of tests: name of the test, URL to be requested, expected sequence↩
// of events and optionally a function to be called from readystatechange handler.↩
// Numbers in the list of events are values of XMLHttpRequest.readyState↩
// when readystatechange event is triggered.↩
var tests = [↩
["200 OK", url_200, [1, 2, 3, 4, "load"], null],↩
["404 Not Found", url_404, [1, 2, 3, 4, "load"], null],↩
["connection error", url_connection_error, [1, 4, "error"], null],↩
["abort() call on readyState = 1", url_200, [1, 4], null, doAbort1],↩
["abort() call on readyState = 2", url_200, [1, 2, 4], doAbort2],↩
];↩
var testName = null;↩
var currentState = 0;↩
var currentSequence = null;↩
var expectedSequence = null;↩
var currentCallback = null;↩
var finalizeTimeoutID = null;↩
var request = null;↩
runNextTest();↩
function doAbort1() {↩
if (request.readyState == 1)↩
request.abort();↩
}↩
function doAbort2() {↩
if (request.readyState == 2)↩
request.abort();↩
}↩
/* Utility functions */
function runNextTest() {↩
if (tests.length) {↩
var test = tests.shift();↩
// Initialize state variables↩
testName = test[0]↩
currentState = 0;↩
currentSequence = [];↩
expectedSequence = test[2];↩
currentCallback = test[3];↩
postSendCallback = test[4];↩
// Prepare request object↩
request = new XMLHttpRequest();↩
request.onreadystatechange = onReadyStateChange;↩
request.open("GET", test[1]);↩
request.onload = onLoad;↩
request.onerror = onError;↩
// Start request↩
request.send(null);↩
if (postSendCallback)↩
postSendCallback();↩
}↩
else
SimpleTest.finish();↩
}↩
function finalizeTest() {↩
finalizeTimeoutID = null;↩
ok(compareArrays(expectedSequence, currentSequence), "event sequence for '" + testName + "' was " + currentSequence.join(", "));↩
runNextTest();↩
}↩
function onReadyStateChange() {↩
clearTimeout(finalizeTimeoutID);↩
finalizeTimeoutID = null;↩
currentState = request.readyState;↩
currentSequence.push(currentState);↩
if (currentState == 4) {↩
// Allow remaining event to fire but then we are finished with this test↩
// unless we get another onReadyStateChange in which case we'll cancel↩
// this timeout↩
finalizeTimeoutID = setTimeout(finalizeTest, 0);↩
}↩
if (currentCallback)↩
currentCallback();↩
}↩
function onLoad() {↩
currentSequence.push("load");↩
}↩
function onError() {↩
currentSequence.push("error");↩
}↩
function compareArrays(array1, array2) {↩
if (array1.length != array2.length)↩
return false;↩
for (var i = 0; i < array1.length; i++)↩
if (array1[i] != array2[i])↩
return false;↩
return true;↩
}↩
</script>↩
</pre>↩
</body>↩
</html>↩