Blame dom/base/test/test_bug218236.html

Packit f0b94e

Packit f0b94e
<html>
Packit f0b94e
Packit f0b94e
https://bugzilla.mozilla.org/show_bug.cgi?id=218236
Packit f0b94e
-->
Packit f0b94e
<head>
Packit f0b94e
  <title>Test for Bug 218236</title>
Packit f0b94e
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>        
Packit f0b94e
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
Packit f0b94e
</head>
Packit f0b94e
<body>
Packit f0b94e
Mozilla Bug 218236
Packit f0b94e

Packit f0b94e
Packit f0b94e
  
Packit f0b94e

Packit f0b94e
Packit f0b94e
<script class="testbody" type="text/javascript">
Packit f0b94e

Packit f0b94e
/** Test for Bug 218236 **/
Packit f0b94e

Packit f0b94e
SimpleTest.waitForExplicitFinish();
Packit f0b94e

Packit f0b94e
/* Test data */
Packit f0b94e

Packit f0b94e
var url_200 = window.location.href;
Packit f0b94e
var url_404 = url_200.replace(/[^/]+$/, "this_file_is_not_going_to_be_there.dummy");
Packit f0b94e
var url_connection_error = url_200.replace(/^(\w+:\/\/[^/]+?)(:\d+)?\//, "$1:9546/");
Packit f0b94e

Packit f0b94e
// List of tests: name of the test, URL to be requested, expected sequence
Packit f0b94e
// of events and optionally a function to be called from readystatechange handler.
Packit f0b94e
// Numbers in the list of events are values of XMLHttpRequest.readyState
Packit f0b94e
// when readystatechange event is triggered.
Packit f0b94e
var tests = [
Packit f0b94e
  ["200 OK",                            url_200,                [1, 2, 3, 4, "load"], null],
Packit f0b94e
  ["404 Not Found",                     url_404,                [1, 2, 3, 4, "load"], null],
Packit f0b94e
  ["connection error",                  url_connection_error,   [1, 2, 4, "error"],   null],
Packit f0b94e
  ["abort() call on readyState = 1",    url_200,                [1, 4],               null, doAbort1],
Packit f0b94e
  ["abort() call on readyState = 2",    url_200,                [1, 2, 4],            doAbort2],
Packit f0b94e
];
Packit f0b94e

Packit f0b94e
var testName = null;
Packit f0b94e
var currentState = 0;
Packit f0b94e
var currentSequence = null;
Packit f0b94e
var expectedSequence = null;
Packit f0b94e
var currentCallback = null;
Packit f0b94e
var finalizeTimeoutID = null;
Packit f0b94e

Packit f0b94e
var request = null;
Packit f0b94e

Packit f0b94e
runNextTest();
Packit f0b94e

Packit f0b94e
function doAbort1() {
Packit f0b94e
  if (request.readyState == 1)
Packit f0b94e
    request.abort();
Packit f0b94e
}
Packit f0b94e
function doAbort2() {
Packit f0b94e
  if (request.readyState == 2)
Packit f0b94e
    request.abort();
Packit f0b94e
}
Packit f0b94e

Packit f0b94e
/* Utility functions */
Packit f0b94e

Packit f0b94e
function runNextTest() {
Packit f0b94e
  if (tests.length > 0) {
Packit f0b94e
    var test = tests.shift();
Packit f0b94e

Packit f0b94e
    // Initialize state variables
Packit f0b94e
    testName = test[0]
Packit f0b94e
    currentState = 0;
Packit f0b94e
    currentSequence = [];
Packit f0b94e
    expectedSequence = test[2];
Packit f0b94e
    currentCallback = test[3];
Packit f0b94e
    postSendCallback = test[4];
Packit f0b94e

Packit f0b94e
    // Prepare request object
Packit f0b94e
    request = new XMLHttpRequest();
Packit f0b94e
    request.onreadystatechange = onReadyStateChange;
Packit f0b94e
    request.open("GET", test[1]);
Packit f0b94e
    request.onload = onLoad;
Packit f0b94e
    request.onerror = onError;
Packit f0b94e

Packit f0b94e
    // Start request
Packit f0b94e
    request.send(null);
Packit f0b94e
    if (postSendCallback)
Packit f0b94e
      postSendCallback();
Packit f0b94e
  }
Packit f0b94e
  else
Packit f0b94e
    SimpleTest.finish();
Packit f0b94e
}
Packit f0b94e

Packit f0b94e
function finalizeTest() {
Packit f0b94e
  finalizeTimeoutID = null;
Packit f0b94e
  ok(compareArrays(expectedSequence, currentSequence), "event sequence for '" + testName + "' was " + currentSequence.join(", "));
Packit f0b94e

Packit f0b94e
  runNextTest();
Packit f0b94e
}
Packit f0b94e

Packit f0b94e
function onReadyStateChange() {
Packit f0b94e
  clearTimeout(finalizeTimeoutID);
Packit f0b94e
  finalizeTimeoutID = null;
Packit f0b94e

Packit f0b94e
  currentState = request.readyState;
Packit f0b94e
  currentSequence.push(currentState);
Packit f0b94e

Packit f0b94e
  if (currentState == 4) {
Packit f0b94e
    // Allow remaining event to fire but then we are finished with this test
Packit f0b94e
    // unless we get another onReadyStateChange in which case we'll cancel
Packit f0b94e
    // this timeout
Packit f0b94e
    finalizeTimeoutID = setTimeout(finalizeTest, 0);
Packit f0b94e
  }
Packit f0b94e

Packit f0b94e
  if (currentCallback)
Packit f0b94e
    currentCallback();
Packit f0b94e
}
Packit f0b94e

Packit f0b94e
function onLoad() {
Packit f0b94e
  currentSequence.push("load");
Packit f0b94e
}
Packit f0b94e

Packit f0b94e
function onError() {
Packit f0b94e
  currentSequence.push("error");
Packit f0b94e
}
Packit f0b94e

Packit f0b94e
function compareArrays(array1, array2) {
Packit f0b94e
  if (array1.length != array2.length)
Packit f0b94e
    return false;
Packit f0b94e

Packit f0b94e
  for (var i = 0; i < array1.length; i++)
Packit f0b94e
    if (array1[i] != array2[i])
Packit f0b94e
      return false;
Packit f0b94e

Packit f0b94e
  return true;
Packit f0b94e
}
Packit f0b94e
</script>
Packit f0b94e

Packit f0b94e
</body>
Packit f0b94e
</html>
Packit f0b94e