43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
// window.stop() below prevents the load event from firing, so wait until it is
|
|
// fired to start the test.
|
|
setup({explicit_done: true });
|
|
|
|
onload = () => {
|
|
async_test(function(t) {
|
|
const client = new XMLHttpRequest();
|
|
|
|
const result = [];
|
|
const expected = [
|
|
'readystatechange', 0, 1, // open()
|
|
];
|
|
|
|
let state = 0;
|
|
|
|
client.onreadystatechange = t.step_func(() => {
|
|
result.push('readystatechange', state, client.readyState);
|
|
});
|
|
client.onabort = t.unreached_func("abort should not be fired after window.stop() and open()");
|
|
client.onloadend = t.unreached_func("loadend should not be fired after window.stop() and open()");
|
|
|
|
client.open("GET", "resources/well-formed.xml");
|
|
assert_equals(client.readyState, 1);
|
|
|
|
state = 1;
|
|
client.send(null);
|
|
state = 2;
|
|
window.stop();
|
|
// Unlike client.abort(), window.stop() does not change readyState
|
|
// immediately, rather through a task...
|
|
assert_equals(client.readyState, 1);
|
|
state = 3;
|
|
// ... which is then canceled when we open a new request anyway.
|
|
client.open("GET", "resources/well-formed.xml");
|
|
assert_equals(client.readyState, 1);
|
|
assert_array_equals(result, expected);
|
|
|
|
// Give the abort and loadend events a chance to fire (erroneously) before
|
|
// calling this a success.
|
|
t.step_timeout(t.step_func_done(), 1000);
|
|
}, "open() after window.stop()");
|
|
done();
|
|
};
|