Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: third_party/WebKit/LayoutTests/external/wpt/streams/piping/error-propagation-forward.js

Issue 2642393002: Import wpt@40665266227e475bc4a56884247d8c09d78dfb6a (Closed)
Patch Set: rebaseline-cl Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 'use strict';
2
3 if (self.importScripts) {
4 self.importScripts('/resources/testharness.js');
5 self.importScripts('../resources/test-utils.js');
6 self.importScripts('../resources/recording-streams.js');
7 }
8
9 const error1 = new Error('error1!');
10 error1.name = 'error1';
11
12 const error2 = new Error('error2!');
13 error2.name = 'error2';
14
15 promise_test(t => {
16
17 const rs = recordingReadableStream({
18 start() {
19 return Promise.reject(error1);
20 }
21 });
22
23 const ws = recordingWritableStream();
24
25 return promise_rejects(t, error1, rs.pipeTo(ws), 'pipeTo must reject with the same error')
26 .then(() => {
27 assert_array_equals(rs.events, []);
28 assert_array_equals(ws.events, ['abort', error1]);
29 });
30
31 }, 'Errors must be propagated forward: starts errored; preventAbort = false; ful filled abort promise');
32
33 promise_test(t => {
34
35 const rs = recordingReadableStream({
36 start() {
37 return Promise.reject(error1);
38 }
39 });
40
41 const ws = recordingWritableStream({
42 abort() {
43 throw error2;
44 }
45 });
46
47 return promise_rejects(t, error2, rs.pipeTo(ws), 'pipeTo must reject with the abort error')
48 .then(() => {
49 assert_array_equals(rs.events, []);
50 assert_array_equals(ws.events, ['abort', error1]);
51 });
52
53 }, 'Errors must be propagated forward: starts errored; preventAbort = false; rej ected abort promise');
54
55 for (const falsy of [undefined, null, false, +0, -0, NaN, '']) {
56 const stringVersion = Object.is(falsy, -0) ? '-0' : String(falsy);
57
58 promise_test(t => {
59
60 const rs = recordingReadableStream({
61 start() {
62 return Promise.reject(error1);
63 }
64 });
65
66 const ws = recordingWritableStream();
67
68 return promise_rejects(t, error1, rs.pipeTo(ws, { preventAbort: falsy }), 'p ipeTo must reject with the same error')
69 .then(() => {
70 assert_array_equals(rs.events, []);
71 assert_array_equals(ws.events, ['abort', error1]);
72 });
73
74 }, `Errors must be propagated forward: starts errored; preventAbort = ${string Version} (falsy); fulfilled abort ` +
75 `promise`);
76 }
77
78 for (const truthy of [true, 'a', 1, Symbol(), { }]) {
79 promise_test(t => {
80
81 const rs = recordingReadableStream({
82 start() {
83 return Promise.reject(error1);
84 }
85 });
86
87 const ws = recordingWritableStream();
88
89 return promise_rejects(t, error1, rs.pipeTo(ws, { preventAbort: truthy }),
90 'pipeTo must reject with the same error')
91 .then(() => {
92 assert_array_equals(rs.events, []);
93 assert_array_equals(ws.events, []);
94 });
95
96 }, `Errors must be propagated forward: starts errored; preventAbort = ${String (truthy)} (truthy)`);
97 }
98
99
100 promise_test(t => {
101
102 const rs = recordingReadableStream({
103 start() {
104 return Promise.reject(error1);
105 }
106 });
107
108 const ws = recordingWritableStream();
109
110 return promise_rejects(t, error1, rs.pipeTo(ws, { preventAbort: true, preventC ancel: true }),
111 'pipeTo must reject with the same error')
112 .then(() => {
113 assert_array_equals(rs.events, []);
114 assert_array_equals(ws.events, []);
115 });
116
117 }, 'Errors must be propagated forward: starts errored; preventAbort = true, prev entCancel = true');
118
119 promise_test(t => {
120
121 const rs = recordingReadableStream({
122 start() {
123 return Promise.reject(error1);
124 }
125 });
126
127 const ws = recordingWritableStream();
128
129 return promise_rejects(t, error1, rs.pipeTo(ws, { preventAbort: true, preventC ancel: true, preventClose: true }),
130 'pipeTo must reject with the same error')
131 .then(() => {
132 assert_array_equals(rs.events, []);
133 assert_array_equals(ws.events, []);
134 });
135
136 }, 'Errors must be propagated forward: starts errored; preventAbort = true, prev entCancel = true, preventClose = true');
137
138 promise_test(t => {
139
140 const rs = recordingReadableStream();
141
142 const ws = recordingWritableStream();
143
144 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws), 'pipeTo must rej ect with the same error');
145
146 setTimeout(() => rs.controller.error(error1), 10);
147
148 return pipePromise.then(() => {
149 assert_array_equals(rs.eventsWithoutPulls, []);
150 assert_array_equals(ws.events, ['abort', error1]);
151 });
152
153 }, 'Errors must be propagated forward: becomes errored while empty; preventAbort = false; fulfilled abort promise');
154
155 promise_test(t => {
156
157 const rs = recordingReadableStream();
158
159 const ws = recordingWritableStream({
160 abort() {
161 throw error2;
162 }
163 });
164
165 const pipePromise = promise_rejects(t, error2, rs.pipeTo(ws), 'pipeTo must rej ect with the abort error');
166
167 setTimeout(() => rs.controller.error(error1), 10);
168
169 return pipePromise.then(() => {
170 assert_array_equals(rs.eventsWithoutPulls, []);
171 assert_array_equals(ws.events, ['abort', error1]);
172 });
173
174 }, 'Errors must be propagated forward: becomes errored while empty; preventAbort = false; rejected abort promise');
175
176 promise_test(t => {
177
178 const rs = recordingReadableStream();
179
180 const ws = recordingWritableStream();
181
182 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws, { preventAbort: t rue }),
183 'pipeTo must reject with the same error');
184
185 setTimeout(() => rs.controller.error(error1), 10);
186
187 return pipePromise.then(() => {
188 assert_array_equals(rs.eventsWithoutPulls, []);
189 assert_array_equals(ws.events, []);
190 });
191
192 }, 'Errors must be propagated forward: becomes errored while empty; preventAbort = true');
193
194 promise_test(t => {
195
196 const rs = recordingReadableStream();
197
198 const ws = recordingWritableStream(undefined, new CountQueuingStrategy({ highW aterMark: 0 }));
199
200 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws), 'pipeTo must rej ect with the same error');
201
202 setTimeout(() => rs.controller.error(error1), 10);
203
204 return pipePromise.then(() => {
205 assert_array_equals(rs.eventsWithoutPulls, []);
206 assert_array_equals(ws.events, ['abort', error1]);
207 });
208
209 }, 'Errors must be propagated forward: becomes errored while empty; dest never d esires chunks; ' +
210 'preventAbort = false; fulfilled abort promise');
211
212 promise_test(t => {
213
214 const rs = recordingReadableStream();
215
216 const ws = recordingWritableStream({
217 abort() {
218 throw error2;
219 }
220 }, new CountQueuingStrategy({ highWaterMark: 0 }));
221
222 const pipePromise = promise_rejects(t, error2, rs.pipeTo(ws), 'pipeTo must rej ect with the abort error');
223
224 setTimeout(() => rs.controller.error(error1), 10);
225
226 return pipePromise.then(() => {
227 assert_array_equals(rs.eventsWithoutPulls, []);
228 assert_array_equals(ws.events, ['abort', error1]);
229 });
230
231 }, 'Errors must be propagated forward: becomes errored while empty; dest never d esires chunks; ' +
232 'preventAbort = false; rejected abort promise');
233
234 promise_test(t => {
235
236 const rs = recordingReadableStream();
237
238 const ws = recordingWritableStream(undefined, new CountQueuingStrategy({ highW aterMark: 0 }));
239
240 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws, { preventAbort: t rue }),
241 'pipeTo must reject with the same error');
242
243 setTimeout(() => rs.controller.error(error1), 10);
244
245 return pipePromise.then(() => {
246 assert_array_equals(rs.eventsWithoutPulls, []);
247 assert_array_equals(ws.events, []);
248 });
249
250 }, 'Errors must be propagated forward: becomes errored while empty; dest never d esires chunks; ' +
251 'preventAbort = true');
252
253 promise_test(t => {
254
255 const rs = recordingReadableStream();
256
257 const ws = recordingWritableStream();
258
259 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws), 'pipeTo must rej ect with the same error');
260
261 setTimeout(() => {
262 rs.controller.enqueue('Hello');
263 setTimeout(() => rs.controller.error(error1), 10);
264 }, 10);
265
266 return pipePromise.then(() => {
267 assert_array_equals(rs.eventsWithoutPulls, []);
268 assert_array_equals(ws.events, ['write', 'Hello', 'abort', error1]);
269 });
270
271 }, 'Errors must be propagated forward: becomes errored after one chunk; preventA bort = false; fulfilled abort promise');
272
273 promise_test(t => {
274
275 const rs = recordingReadableStream();
276
277 const ws = recordingWritableStream({
278 abort() {
279 throw error2;
280 }
281 });
282
283 const pipePromise = promise_rejects(t, error2, rs.pipeTo(ws), 'pipeTo must rej ect with the abort error');
284
285 setTimeout(() => {
286 rs.controller.enqueue('Hello');
287 setTimeout(() => rs.controller.error(error1), 10);
288 }, 10);
289
290 return pipePromise.then(() => {
291 assert_array_equals(rs.eventsWithoutPulls, []);
292 assert_array_equals(ws.events, ['write', 'Hello', 'abort', error1]);
293 });
294
295 }, 'Errors must be propagated forward: becomes errored after one chunk; preventA bort = false; rejected abort promise');
296
297 promise_test(t => {
298
299 const rs = recordingReadableStream();
300
301 const ws = recordingWritableStream();
302
303 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws, { preventAbort: t rue }),
304 'pipeTo must reject with the same error');
305
306 setTimeout(() => {
307 rs.controller.enqueue('Hello');
308 setTimeout(() => rs.controller.error(error1), 10);
309 }, 10);
310
311 return pipePromise.then(() => {
312 assert_array_equals(rs.eventsWithoutPulls, []);
313 assert_array_equals(ws.events, ['write', 'Hello']);
314 });
315
316 }, 'Errors must be propagated forward: becomes errored after one chunk; preventA bort = true');
317
318 promise_test(t => {
319
320 const rs = recordingReadableStream();
321
322 const ws = recordingWritableStream(undefined, new CountQueuingStrategy({ highW aterMark: 0 }));
323
324 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws), 'pipeTo must rej ect with the same error');
325
326 setTimeout(() => {
327 rs.controller.enqueue('Hello');
328 setTimeout(() => rs.controller.error(error1), 10);
329 }, 10);
330
331 return pipePromise.then(() => {
332 assert_array_equals(rs.eventsWithoutPulls, []);
333 assert_array_equals(ws.events, ['abort', error1]);
334 });
335
336 }, 'Errors must be propagated forward: becomes errored after one chunk; dest nev er desires chunks; ' +
337 'preventAbort = false; fulfilled abort promise');
338
339 promise_test(t => {
340
341 const rs = recordingReadableStream();
342
343 const ws = recordingWritableStream({
344 abort() {
345 throw error2;
346 }
347 }, new CountQueuingStrategy({ highWaterMark: 0 }));
348
349 const pipePromise = promise_rejects(t, error2, rs.pipeTo(ws), 'pipeTo must rej ect with the abort error');
350
351 setTimeout(() => {
352 rs.controller.enqueue('Hello');
353 setTimeout(() => rs.controller.error(error1), 10);
354 }, 10);
355
356 return pipePromise.then(() => {
357 assert_array_equals(rs.eventsWithoutPulls, []);
358 assert_array_equals(ws.events, ['abort', error1]);
359 });
360
361 }, 'Errors must be propagated forward: becomes errored after one chunk; dest nev er desires chunks; ' +
362 'preventAbort = false; rejected abort promise');
363
364 promise_test(t => {
365
366 const rs = recordingReadableStream();
367
368 const ws = recordingWritableStream(undefined, new CountQueuingStrategy({ highW aterMark: 0 }));
369
370 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws, { preventAbort: t rue }),
371 'pipeTo must reject with the same error');
372
373 setTimeout(() => {
374 rs.controller.enqueue('Hello');
375 setTimeout(() => rs.controller.error(error1), 10);
376 }, 10);
377
378 return pipePromise.then(() => {
379 assert_array_equals(rs.eventsWithoutPulls, []);
380 assert_array_equals(ws.events, []);
381 });
382
383 }, 'Errors must be propagated forward: becomes errored after one chunk; dest nev er desires chunks; ' +
384 'preventAbort = true');
385
386 promise_test(t => {
387
388 const rs = recordingReadableStream();
389
390 let resolveWriteCalled;
391 const writeCalledPromise = new Promise(resolve => {
392 resolveWriteCalled = resolve;
393 });
394
395 let resolveWritePromise;
396 const ws = recordingWritableStream({
397 write() {
398 resolveWriteCalled();
399
400 return new Promise(resolve => {
401 resolveWritePromise = resolve;
402 });
403 }
404 });
405
406 let pipeComplete = false;
407 const pipePromise = promise_rejects(t, error1, rs.pipeTo(ws)).then(() => {
408 pipeComplete = true;
409 });
410
411 rs.controller.enqueue('a');
412
413 return writeCalledPromise.then(() => {
414 rs.controller.error(error1);
415
416 // Flush async events and verify that no shutdown occurs.
417 return flushAsyncEvents();
418 }).then(() => {
419 assert_array_equals(ws.events, ['write', 'a']); // no 'abort'
420 assert_equals(pipeComplete, false, 'the pipe must not be complete');
421
422 resolveWritePromise();
423
424 return pipePromise.then(() => {
425 assert_array_equals(ws.events, ['write', 'a', 'abort', error1]);
426 });
427 });
428
429 }, 'Errors must be propagated forward: shutdown must not occur until the final w rite completes');
430
431 done();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698