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 : noError('GET', 200);
7 : 1 : noError('GET', 400);
8 : 1 : noError('GET', 401);
9 : 1 : noError('GET', 404);
10 : 1 : noError('GET', 410);
11 : 1 : noError('GET', 500);
12 : 1 : noError('GET', 699);
13 : 1 :
14 : 1 : noError('HEAD', 200);
15 : 1 : noError('HEAD', 404);
16 : 1 : noError('HEAD', 500);
17 : 1 : noError('HEAD', 699);
18 : 1 :
19 : 1 : noError('POST', 200);
20 : 1 : noError('POST', 404);
21 : 1 : noError('POST', 500);
22 : 1 : noError('POST', 699);
23 : 1 :
24 : 1 : noError('PUT', 200);
25 : 1 : noError('PUT', 404);
26 : 1 : noError('PUT', 500);
27 : 1 : noError('PUT', 699);
28 : 1 :
29 : 1 : unknownScheme();
30 : 1 : postOnBlob();
31 : 1 :
32 [ + ]: 1 : function noError(method, code){
33 : 19 :
34 : 19 : let xhr = new XMLHttpRequest();
35 : 19 :
36 : 19 : xhr.open(method, `${activeURL}/status.py?code=${code}`, true);
37 : 19 :
38 [ + ]: 19 : xhr.onreadystatechange = () => {
39 : 38 : assert.strictEqual(xhr.response, '', 'response data');
40 : 38 : assert.strictEqual(xhr.status, code, 'response status');
41 : 38 :
42 : 38 : if(xhr.readyState === xhr.DONE)
43 : 38 : // Give extra time for a bogus error event to pop up
44 [ + ][ + ]: 38 : setTimeout(() => {
45 : 19 : xhr.onreadystatechange = null;
46 : 19 : }, 100);
47 : 19 : };
48 : 19 :
49 : 19 : xhr.onerror = () => {
50 : 0 : assert(false, 'HTTP error should not throw error event');
51 : 19 : };
52 : 19 :
53 : 19 : xhr.send();
54 : 19 : }
55 : 1 :
56 [ + ]: 1 : function unknownScheme(){
57 : 1 :
58 : 1 : let xhr = new XMLHttpRequest();
59 : 1 : xhr.open('GET', 'foobar://dummy', false);
60 : 1 :
61 : 1 : try{
62 : 1 : xhr.send();
63 : 1 : }
64 : 1 : catch(ex){
65 : 1 : }
66 : 1 :
67 : 1 : assert.strictEqual(xhr.status, 0, 'response data');
68 : 1 : }
69 : 1 :
70 [ + ]: 1 : function postOnBlob(){
71 : 1 :
72 : 1 : let u = URL.createObjectURL(new Blob([''], {type: 'text/plain'}));
73 : 1 : let xhr = new XMLHttpRequest();
74 : 1 :
75 : 1 : xhr.open('POST', u, false);
76 : 1 :
77 : 1 : try{
78 : 1 : xhr.send();
79 : 1 : }
80 : 1 : catch(ex){
81 : 1 : }
82 : 1 :
83 : 1 : assert.strictEqual(xhr.status, 0, 'response data');
84 : 1 : }
85 : 1 : }
86 : 2 :
87 : 2 : /*
88 : 2 : * status-error.htm
89 : 2 : *
90 : 2 :
91 : 2 : <!doctype html>
92 : 2 : <html>
93 : 2 : <head>
94 : 2 : <title>XMLHttpRequest: status error handling</title>
95 : 2 : <script src="/resources/testharness.js"></script>
96 : 2 : <script src="/resources/testharnessreport.js"></script>
97 : 2 : <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." />
98 : 2 : <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="/following::ol/li[3]" />
99 : 2 : </head>
100 : 2 : <body>
101 : 2 : <p>This shouldn't be tested inside a tunnel.</p>
102 : 2 : <div id="log"></div>
103 : 2 : <script>
104 : 2 : function noError(method, code) {
105 : 2 : var test = async_test(document.title + " " + method + " " + code)
106 : 2 :
107 : 2 : test.step(function() {
108 : 2 : var client = new XMLHttpRequest()
109 : 2 : client.open(method, "resources/status.py?code=" + code, true)
110 : 2 :
111 : 2 : client.onreadystatechange = test.step_func(function() {
112 : 2 : assert_equals(client.response, "", "response data")
113 : 2 : assert_equals(client.status, code, "response status")
114 : 2 :
115 : 2 : if (client.readyState == client.DONE)
116 : 2 : // Give extra time for a bogus error event to pop up
117 : 2 : test.step_timeout(() => { test.done() }, 100)
118 : 2 : })
119 : 2 : client.onerror = test.step_func(function() {
120 : 2 : assert_unreached("HTTP error should not throw error event")
121 : 2 : })
122 : 2 : client.send()
123 : 2 : })
124 : 2 : }
125 : 2 :
126 : 2 : function unknownScheme() {
127 : 2 : test(() => {
128 : 2 : var client = new XMLHttpRequest();
129 : 2 : client.open("GET", "foobar://dummy", false);
130 : 2 : try {
131 : 2 : client.send();
132 : 2 : } catch(ex) {}
133 : 2 : assert_equals(client.status, 0, "response data");
134 : 2 : }, "Unknown scheme");
135 : 2 : }
136 : 2 :
137 : 2 : function postOnBlob() {
138 : 2 : test(() => {
139 : 2 : var u = URL.createObjectURL(new Blob([""], {type: 'text/plain'}));
140 : 2 : var client = new XMLHttpRequest();
141 : 2 : client.open("POST", u, false);
142 : 2 : try {
143 : 2 : client.send();
144 : 2 : } catch(ex) {}
145 : 2 : assert_equals(client.status, 0, "response data");
146 : 2 : }, "POST on blob uri");
147 : 2 : }
148 : 2 :
149 : 2 : noError('GET', 200)
150 : 2 : noError('GET', 400)
151 : 2 : noError('GET', 401)
152 : 2 : noError('GET', 404)
153 : 2 : noError('GET', 410)
154 : 2 : noError('GET', 500)
155 : 2 : noError('GET', 699)
156 : 2 :
157 : 2 : noError('HEAD', 200)
158 : 2 : noError('HEAD', 404)
159 : 2 : noError('HEAD', 500)
160 : 2 : noError('HEAD', 699)
161 : 2 :
162 : 2 : noError('POST', 200)
163 : 2 : noError('POST', 404)
164 : 2 : noError('POST', 500)
165 : 2 : noError('POST', 699)
166 : 2 :
167 : 2 : noError('PUT', 200)
168 : 2 : noError('PUT', 404)
169 : 2 : noError('PUT', 500)
170 : 2 : noError('PUT', 699)
171 : 2 :
172 : 2 : unknownScheme();
173 : 2 : postOnBlob();
174 : 2 : </script>
175 : 2 : </body>
176 : 2 : </html>
177 : 2 :
178 : 2 : *
179 : 2 : * status-error.htm
180 : 2 : */
|