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 : request(
7 : 1 : 'text; charset=ascii',
8 : 1 : 'text; charset=ascii',
9 : 1 : 'header with invalid MIME type is not changed'
10 : 1 : );
11 : 1 : request(
12 : 1 : '',
13 : 1 : '',
14 : 1 : 'header with invalid MIME type (empty string) is not changed'
15 : 1 : );
16 : 1 : request(
17 : 1 : 'charset=ascii',
18 : 1 : 'charset=ascii',
19 : 1 : 'known charset but bogus header - missing MIME type'
20 : 1 : );
21 : 1 : request(
22 : 1 : 'charset=bogus',
23 : 1 : 'charset=bogus',
24 : 1 : 'bogus charset and bogus header - missing MIME type'
25 : 1 : );
26 : 1 : request(
27 : 1 : 'text/plain;charset=utf-8',
28 : 1 : 'text/plain;charset=utf-8',
29 : 1 : 'If charset= param is UTF-8 (case-insensitive), it should not be changed'
30 : 1 : );
31 : 1 : request(
32 : 1 : 'text/x-pink-unicorn',
33 : 1 : 'text/x-pink-unicorn',
34 : 1 : 'If no charset= param is given, implementation should not add one - unknown MIME'
35 : 1 : );
36 : 1 : request(
37 : 1 : 'text/plain',
38 : 1 : 'text/plain',
39 : 1 : 'If no charset= param is given, implementation should not add one - known MIME'
40 : 1 : );
41 : 1 : request(
42 : 1 : 'text/plain; hi=bye',
43 : 1 : 'text/plain; hi=bye',
44 : 1 : 'If no charset= param is given, implementation should not add one - known MIME, unknown param, two spaces'
45 : 1 : );
46 : 1 : request(
47 : 1 : 'text/x-thepiano;charset= waddup',
48 : 1 : 'text/x-thepiano;charset=UTF-8',
49 : 1 : 'charset given but wrong, fix it (unknown MIME, bogus charset)'
50 : 1 : );
51 : 1 : // // request(
52 : 1 : // // 'text/plain;charset=utf-8;charset=waddup',
53 : 1 : // // 'text/plain;charset=utf-8;charset=waddup',
54 : 1 : // // 'If charset= param is UTF-8 (case-insensitive), it should not be changed (bogus charset)'
55 : 1 : // // );
56 : 1 : request(
57 : 1 : 'text/plain;charset=shift-jis',
58 : 1 : 'text/plain;charset=UTF-8',
59 : 1 : 'charset given but wrong, fix it (known MIME, actual charset)'
60 : 1 : );
61 : 1 : // // request(
62 : 1 : // // 'text/x-pink-unicorn; charset=windows-1252; charset=bogus; notrelated; charset=ascii',
63 : 1 : // // 'text/x-pink-unicorn;charset=UTF-8',
64 : 1 : // // 'Multiple non-UTF-8 charset parameters deduplicate, bogus parameter dropped'
65 : 1 : // // );
66 : 1 : request(
67 : 1 : null,
68 : 1 : 'text/plain;charset=UTF-8',
69 : 1 : 'No content type set, give MIME and charset'
70 : 1 : );
71 : 1 : // // request(
72 : 1 : // // 'text/plain;charset= utf-8',
73 : 1 : // // 'text/plain;charset=UTF-8',
74 : 1 : // // 'charset with leading space that is UTF-8 does change'
75 : 1 : // // );
76 : 1 : request(
77 : 1 : 'text/plain;charset=utf-8 ;x=x',
78 : 1 : 'text/plain;charset=utf-8 ;x=x',
79 : 1 : 'charset with trailing space that is UTF-8 does not change'
80 : 1 : );
81 : 1 : request(
82 : 1 : 'text/plain;charset=\"utf-8\"',
83 : 1 : 'text/plain;charset=\"utf-8\"',
84 : 1 : 'charset in double quotes that is UTF-8 does not change'
85 : 1 : );
86 : 1 : request(
87 : 1 : 'text/plain;charset=\" utf-8\"',
88 : 1 : 'text/plain;charset=UTF-8',
89 : 1 : 'charset in double quotes with space'
90 : 1 : );
91 : 1 : request(
92 : 1 : 'text/plain;charset=\"u\\t\\f-8\"',
93 : 1 : 'text/plain;charset=\"u\\t\\f-8\"',
94 : 1 : 'charset in double quotes with backslashes that is UTF-8 does not change'
95 : 1 : );
96 : 1 : request(
97 : 1 : 'YO/yo;charset=x;yo=YO; X=y',
98 : 1 : 'yo/yo;charset=UTF-8;yo=YO;x=y',
99 : 1 : 'unknown parameters need to be preserved'
100 : 1 : );
101 : 1 :
102 [ + ]: 1 : function request(input, output, title){
103 : 16 :
104 : 16 : let xhr = new XMLHttpRequest();
105 : 16 :
106 : 16 : xhr.open('POST', `${activeURL}/content.py`, false);
107 : 16 :
108 : 16 : if(input !== null)
109 [ + ]: 16 : xhr.setRequestHeader('Content-Type', input);
110 : 16 :
111 : 16 : xhr.send('TEST');
112 : 16 :
113 : 16 : assert.strictEqual(xhr.responseText, 'TEST');
114 : 16 : assert.strictEqual(xhr.getResponseHeader('x-request-content-type'), output, title);
115 : 16 : }
116 : 1 : }
117 : 2 :
118 : 2 : /*
119 : 2 : * send-content-type-charset.htm
120 : 2 : *
121 : 2 :
122 : 2 : <!doctype html>
123 : 2 : <html>
124 : 2 : <head>
125 : 2 : <title>XMLHttpRequest: send() - charset parameter of Content-Type</title>
126 : 2 : <script src="/resources/testharness.js"></script>
127 : 2 : <script src="/resources/testharnessreport.js"></script>
128 : 2 : </head>
129 : 2 : <body>
130 : 2 : <div id="log"></div>
131 : 2 : <script>
132 : 2 : function request(input, output, title) {
133 : 2 : title = title || document.title + ' - ' + input;
134 : 2 : test(function() {
135 : 2 : var client = new XMLHttpRequest()
136 : 2 : client.open("POST", "resources/content.py", false)
137 : 2 : if(input !== null)
138 : 2 : client.setRequestHeader("Content-Type", input)
139 : 2 : client.send("TEST")
140 : 2 : assert_equals(client.responseText, "TEST")
141 : 2 : assert_equals(client.getResponseHeader("x-request-content-type"), output)
142 : 2 : }, title)
143 : 2 : }
144 : 2 :
145 : 2 : request(
146 : 2 : "text; charset=ascii",
147 : 2 : "text; charset=ascii",
148 : 2 : "header with invalid MIME type is not changed"
149 : 2 : )
150 : 2 : request(
151 : 2 : "",
152 : 2 : "",
153 : 2 : "header with invalid MIME type (empty string) is not changed"
154 : 2 : )
155 : 2 : request(
156 : 2 : "charset=ascii",
157 : 2 : "charset=ascii",
158 : 2 : "known charset but bogus header - missing MIME type"
159 : 2 : )
160 : 2 : request(
161 : 2 : "charset=bogus",
162 : 2 : "charset=bogus",
163 : 2 : "bogus charset and bogus header - missing MIME type"
164 : 2 : )
165 : 2 : request(
166 : 2 : "text/plain;charset=utf-8",
167 : 2 : "text/plain;charset=utf-8",
168 : 2 : "If charset= param is UTF-8 (case-insensitive), it should not be changed"
169 : 2 : )
170 : 2 : request(
171 : 2 : "text/x-pink-unicorn",
172 : 2 : "text/x-pink-unicorn",
173 : 2 : "If no charset= param is given, implementation should not add one - unknown MIME"
174 : 2 : )
175 : 2 : request(
176 : 2 : "text/plain",
177 : 2 : "text/plain",
178 : 2 : "If no charset= param is given, implementation should not add one - known MIME"
179 : 2 : )
180 : 2 : request(
181 : 2 : "text/plain; hi=bye",
182 : 2 : "text/plain; hi=bye",
183 : 2 : "If no charset= param is given, implementation should not add one - known MIME, unknown param, two spaces"
184 : 2 : )
185 : 2 : request(
186 : 2 : "text/x-thepiano;charset= waddup",
187 : 2 : "text/x-thepiano;charset=UTF-8",
188 : 2 : "charset given but wrong, fix it (unknown MIME, bogus charset)"
189 : 2 : )
190 : 2 : request(
191 : 2 : "text/plain;charset=utf-8;charset=waddup",
192 : 2 : "text/plain;charset=utf-8;charset=waddup",
193 : 2 : "If charset= param is UTF-8 (case-insensitive), it should not be changed (bogus charset)"
194 : 2 : )
195 : 2 : request(
196 : 2 : "text/plain;charset=shift-jis",
197 : 2 : "text/plain;charset=UTF-8",
198 : 2 : "charset given but wrong, fix it (known MIME, actual charset)"
199 : 2 : )
200 : 2 : request(
201 : 2 : "text/x-pink-unicorn; charset=windows-1252; charset=bogus; notrelated; charset=ascii",
202 : 2 : "text/x-pink-unicorn;charset=UTF-8",
203 : 2 : "Multiple non-UTF-8 charset parameters deduplicate, bogus parameter dropped"
204 : 2 : )
205 : 2 : request(
206 : 2 : null,
207 : 2 : "text/plain;charset=UTF-8",
208 : 2 : "No content type set, give MIME and charset"
209 : 2 : )
210 : 2 : request(
211 : 2 : "text/plain;charset= utf-8",
212 : 2 : "text/plain;charset=UTF-8",
213 : 2 : "charset with leading space that is UTF-8 does change")
214 : 2 : request(
215 : 2 : "text/plain;charset=utf-8 ;x=x",
216 : 2 : "text/plain;charset=utf-8 ;x=x",
217 : 2 : "charset with trailing space that is UTF-8 does not change");
218 : 2 : request(
219 : 2 : "text/plain;charset=\"utf-8\"",
220 : 2 : "text/plain;charset=\"utf-8\"",
221 : 2 : "charset in double quotes that is UTF-8 does not change")
222 : 2 : request(
223 : 2 : "text/plain;charset=\" utf-8\"",
224 : 2 : "text/plain;charset=UTF-8",
225 : 2 : "charset in double quotes with space")
226 : 2 : request(
227 : 2 : "text/plain;charset=\"u\\t\\f-8\"",
228 : 2 : "text/plain;charset=\"u\\t\\f-8\"",
229 : 2 : "charset in double quotes with backslashes that is UTF-8 does not change")
230 : 2 : request(
231 : 2 : "YO/yo;charset=x;yo=YO; X=y",
232 : 2 : "yo/yo;charset=UTF-8;yo=YO;x=y",
233 : 2 : "unknown parameters need to be preserved")
234 : 2 : </script>
235 : 2 : </body>
236 : 2 : </html>
237 : 2 :
238 : 2 : *
239 : 2 : * send-content-type-charset.htm
240 : 2 : */
|