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

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

Powered by Google App Engine
This is Rietveld 408576698