Branch data Line data Source code
1 [ + ]: 2 : import assert from 'node:assert/strict';
2 : 2 : import { XMLHttpRequest } from '../../../lib/whatwg-xhr.js';
3 : 2 :
4 [ + ]: 2 : export default (activeURL) => {
5 : 1 :
6 : 1 : let xhr = new XMLHttpRequest();
7 : 1 :
8 : 1 : let result = [];
9 : 1 : let expected = [
10 : 1 : 'readystatechange', 0, 1, // open()
11 : 1 : 'readystatechange', 2, 4, // abort()
12 : 1 : 'abort', 2, 4, // abort()
13 : 1 : 'loadend', 2, 4, // abort()
14 : 1 : 'readystatechange', 3, 1, // open()
15 : 1 : ];
16 : 1 : let state = 0;
17 : 1 :
18 [ + ]: 1 : xhr.onreadystatechange = () => {
19 : 3 : result.push('readystatechange', state, xhr.readyState);
20 : 1 : };
21 : 1 :
22 [ + ]: 1 : xhr.onabort = () => {
23 : 1 : // abort event must be fired synchronously from abort().
24 : 1 : assert(state === 2);
25 : 1 :
26 : 1 : // readystatechange should be fired before abort.
27 : 1 : assert.deepStrictEqual(
28 : 1 : result,
29 : 1 : [
30 : 1 : 'readystatechange', 0, 1, // open()
31 : 1 : 'readystatechange', 2, 4, // abort()
32 : 1 : ]
33 : 1 : );
34 : 1 :
35 : 1 : // readyState should be set to unsent (0) at the very end of abort(),
36 : 1 : // after this (and onloadend) is called.
37 : 1 : assert(xhr.readyState === 4);
38 : 1 :
39 : 1 : result.push('abort', state, xhr.readyState);
40 : 1 : };
41 : 1 :
42 [ + ]: 1 : xhr.onloadend = () => {
43 : 1 :
44 : 1 : // abort event must be fired synchronously from abort().
45 : 1 : assert(state === 2);
46 : 1 :
47 : 1 : // readystatechange should be fired before abort.
48 : 1 : assert.deepStrictEqual(
49 : 1 : result,
50 : 1 : [
51 : 1 : 'readystatechange', 0, 1, // open()
52 : 1 : 'readystatechange', 2, 4, // abort()
53 : 1 : 'abort', 2, 4, // abort()
54 : 1 : ]
55 : 1 : );
56 : 1 :
57 : 1 : // readyState should be set to unsent (0) at the very end of abort(),
58 : 1 : // after this is called.
59 : 1 : assert(xhr.readyState, 4);
60 : 1 :
61 : 1 : result.push('loadend', state, xhr.readyState);
62 : 1 : };
63 : 1 :
64 : 1 : xhr.open('GET', `${activeURL}/well-formed.xml`);
65 : 1 : assert(xhr.readyState === 1);
66 : 1 :
67 : 1 : state = 1;
68 : 1 : xhr.send();
69 : 1 :
70 : 1 : state = 2;
71 : 1 : xhr.abort();
72 : 1 : assert(xhr.readyState === 0);
73 : 1 :
74 : 1 : state = 3;
75 : 1 : xhr.open('GET', `${activeURL}/well-formed.xml`);
76 : 1 :
77 : 1 : assert(xhr.readyState === 1);
78 : 1 :
79 : 1 : assert.deepStrictEqual(result, expected);
80 : 1 : }
81 : 2 :
82 : 2 : /*
83 : 2 : * open-after-abort.htm
84 : 2 : *
85 : 2 :
86 : 2 : <!doctype html>
87 : 2 : <html>
88 : 2 : <head>
89 : 2 : <title>XMLHttpRequest: open() after abort()</title>
90 : 2 : <script src="/resources/testharness.js"></script>
91 : 2 : <script src="/resources/testharnessreport.js"></script>
92 : 2 : <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[15] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" />
93 : 2 : </head>
94 : 2 : <body>
95 : 2 : <div id="log"></div>
96 : 2 : <script>
97 : 2 : test(function(t) {
98 : 2 : var client = new XMLHttpRequest(),
99 : 2 : result = [],
100 : 2 : expected = [
101 : 2 : 'readystatechange', 0, 1, // open()
102 : 2 : 'readystatechange', 2, 4, // abort()
103 : 2 : 'abort', 2, 4, // abort()
104 : 2 : 'loadend', 2, 4, // abort()
105 : 2 : 'readystatechange', 3, 1, // open()
106 : 2 : ]
107 : 2 :
108 : 2 : var state = 0
109 : 2 :
110 : 2 : client.onreadystatechange = t.step_func(function() {
111 : 2 : result.push('readystatechange', state, client.readyState)
112 : 2 : })
113 : 2 : client.onabort = t.step_func(function() {
114 : 2 : // abort event must be fired synchronously from abort().
115 : 2 : assert_equals(state, 2)
116 : 2 :
117 : 2 : // readystatechange should be fired before abort.
118 : 2 : assert_array_equals(result, [
119 : 2 : 'readystatechange', 0, 1, // open()
120 : 2 : 'readystatechange', 2, 4, // abort()
121 : 2 : ])
122 : 2 :
123 : 2 : // readyState should be set to unsent (0) at the very end of abort(),
124 : 2 : // after this (and onloadend) is called.
125 : 2 : assert_equals(client.readyState, 4)
126 : 2 :
127 : 2 : result.push('abort', state, client.readyState)
128 : 2 : })
129 : 2 : client.onloadend = t.step_func(function() {
130 : 2 : // abort event must be fired synchronously from abort().
131 : 2 : assert_equals(state, 2)
132 : 2 :
133 : 2 : // readystatechange should be fired before abort.
134 : 2 : assert_array_equals(result, [
135 : 2 : 'readystatechange', 0, 1, // open()
136 : 2 : 'readystatechange', 2, 4, // abort()
137 : 2 : 'abort', 2, 4, // abort()
138 : 2 : ])
139 : 2 :
140 : 2 : // readyState should be set to unsent (0) at the very end of abort(),
141 : 2 : // after this is called.
142 : 2 : assert_equals(client.readyState, 4)
143 : 2 :
144 : 2 : result.push('loadend', state, client.readyState)
145 : 2 : })
146 : 2 :
147 : 2 : client.open("GET", "resources/well-formed.xml")
148 : 2 : assert_equals(client.readyState, 1)
149 : 2 :
150 : 2 : state = 1
151 : 2 : client.send(null)
152 : 2 : state = 2
153 : 2 : client.abort()
154 : 2 : assert_equals(client.readyState, 0)
155 : 2 : state = 3
156 : 2 : client.open("GET", "resources/well-formed.xml")
157 : 2 : assert_equals(client.readyState, 1)
158 : 2 : assert_array_equals(result, expected)
159 : 2 : })
160 : 2 : </script>
161 : 2 : </body>
162 : 2 : </html>
163 : 2 :
164 : 2 : *
165 : 2 : * open-after-abort.htm
166 : 2 : */
|