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

Side by Side Diff: third_party/WebKit/LayoutTests/imported/wpt/streams/resources/rs-test-templates.js

Issue 2495873002: Manually import wpt@359815a0ff565cb6ca89349f6e9e154789267d8b (Closed)
Patch Set: Add Crash/Timeout expectation for bitmaprenderer-as-imagesource.html Created 4 years, 1 month 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 // These tests can be run against any readable stream produced by the web platfo rm that meets the given descriptions.
4 // For readable stream tests, the factory should return the stream. For reader t ests, the factory should return a
5 // { stream, reader } object. (You can use this to vary the time at which you ac quire a reader.)
6
7 self.templatedRSEmpty = (label, factory) => {
8 test(() => {}, 'Running templatedRSEmpty with ' + label);
9
10 test(() => {
11
12 const rs = factory();
13
14 assert_equals(typeof rs.locked, 'boolean', 'has a boolean locked getter');
15 assert_equals(typeof rs.cancel, 'function', 'has a cancel method');
16 assert_equals(typeof rs.getReader, 'function', 'has a getReader method');
17 assert_equals(typeof rs.pipeThrough, 'function', 'has a pipeThrough method') ;
18 assert_equals(typeof rs.pipeTo, 'function', 'has a pipeTo method');
19 assert_equals(typeof rs.tee, 'function', 'has a tee method');
20
21 }, 'instances have the correct methods and properties');
22
23 test(() => {
24 const rs = factory();
25
26 assert_throws(new RangeError(), () => rs.getReader({ mode: '' }), 'empty str ing mode should throw');
27 assert_throws(new RangeError(), () => rs.getReader({ mode: null }), 'null mo de should throw');
28 assert_throws(new RangeError(), () => rs.getReader({ mode: 'asdf' }), 'asdf mode should throw');
29 assert_throws(new TypeError(), () => rs.getReader(null), 'null should throw' );
30
31 }, 'calling getReader with invalid arguments should throw appropriate errors') ;
32 };
33
34 self.templatedRSClosed = (label, factory) => {
35 test(() => {}, 'Running templatedRSClosed with ' + label);
36
37 promise_test(() => {
38
39 const rs = factory();
40 const cancelPromise1 = rs.cancel();
41 const cancelPromise2 = rs.cancel();
42
43 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises');
44
45 return Promise.all([
46 cancelPromise1.then(v => assert_equals(v, undefined, 'first cancel() call should fulfill with undefined')),
47 cancelPromise2.then(v => assert_equals(v, undefined, 'second cancel() call should fulfill with undefined'))
48 ]);
49
50 }, 'cancel() should return a distinct fulfilled promise each time');
51
52 test(() => {
53
54 const rs = factory();
55 assert_false(rs.locked, 'locked getter should return false');
56
57 }, 'locked should be false');
58
59 test(() => {
60
61 const rs = factory();
62 rs.getReader(); // getReader() should not throw.
63
64 }, 'getReader() should be OK');
65
66 test(() => {
67
68 const rs = factory();
69
70 const reader = rs.getReader();
71 reader.releaseLock();
72
73 const reader2 = rs.getReader(); // Getting a second reader should not throw.
74 reader2.releaseLock();
75
76 rs.getReader(); // Getting a third reader should not throw.
77
78 }, 'should be able to acquire multiple readers if they are released in success ion');
79
80 test(() => {
81
82 const rs = factory();
83
84 rs.getReader();
85
86 assert_throws(new TypeError(), () => rs.getReader(), 'getting a second reade r should throw');
87 assert_throws(new TypeError(), () => rs.getReader(), 'getting a third reader should throw');
88
89 }, 'should not be able to acquire a second reader if we don\'t release the fir st one');
90 };
91
92 self.templatedRSErrored = (label, factory, error) => {
93 test(() => {}, 'Running templatedRSErrored with ' + label);
94
95 promise_test(t => {
96
97 const rs = factory();
98 const reader = rs.getReader();
99
100 return Promise.all([
101 promise_rejects(t, error, reader.closed),
102 promise_rejects(t, error, reader.read())
103 ]);
104
105 }, 'getReader() should return a reader that acts errored');
106
107 promise_test(t => {
108
109 const rs = factory();
110 const reader = rs.getReader();
111
112 return Promise.all([
113 promise_rejects(t, error, reader.read()),
114 promise_rejects(t, error, reader.read()),
115 promise_rejects(t, error, reader.closed)
116 ]);
117
118 }, 'read() twice should give the error each time');
119
120 test(() => {
121 const rs = factory();
122
123 assert_false(rs.locked, 'locked getter should return false');
124 }, 'locked should be false');
125 };
126
127 self.templatedRSErroredSyncOnly = (label, factory, error) => {
128 test(() => {}, 'Running templatedRSErroredSyncOnly with ' + label);
129
130 promise_test(t => {
131
132 const rs = factory();
133 rs.getReader().releaseLock();
134 const reader = rs.getReader(); // Calling getReader() twice does not throw ( the stream is not locked).
135
136 return promise_rejects(t, error, reader.closed);
137
138 }, 'should be able to obtain a second reader, with the correct closed promise' );
139
140 test(() => {
141
142 const rs = factory();
143 rs.getReader();
144
145 assert_throws(new TypeError(), () => rs.getReader(), 'getting a second reade r should throw a TypeError');
146 assert_throws(new TypeError(), () => rs.getReader(), 'getting a third reader should throw a TypeError');
147
148 }, 'should not be able to obtain additional readers if we don\'t release the f irst lock');
149
150 promise_test(t => {
151
152 const rs = factory();
153 const cancelPromise1 = rs.cancel();
154 const cancelPromise2 = rs.cancel();
155
156 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises');
157
158 return Promise.all([
159 promise_rejects(t, error, cancelPromise1),
160 promise_rejects(t, error, cancelPromise2)
161 ]);
162
163 }, 'cancel() should return a distinct rejected promise each time');
164
165 promise_test(t => {
166
167 const rs = factory();
168 const reader = rs.getReader();
169 const cancelPromise1 = reader.cancel();
170 const cancelPromise2 = reader.cancel();
171
172 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises');
173
174 return Promise.all([
175 promise_rejects(t, error, cancelPromise1),
176 promise_rejects(t, error, cancelPromise2)
177 ]);
178
179 }, 'reader cancel() should return a distinct rejected promise each time');
180 };
181
182 self.templatedRSEmptyReader = (label, factory) => {
183 test(() => {}, 'Running templatedRSEmptyReader with ' + label);
184
185 test(() => {
186
187 const reader = factory().reader;
188
189 assert_true('closed' in reader, 'has a closed property');
190 assert_equals(typeof reader.closed.then, 'function', 'closed property is the nable');
191
192 assert_equals(typeof reader.cancel, 'function', 'has a cancel method');
193 assert_equals(typeof reader.read, 'function', 'has a read method');
194 assert_equals(typeof reader.releaseLock, 'function', 'has a releaseLock meth od');
195
196 }, 'instances have the correct methods and properties');
197
198 test(() => {
199
200 const stream = factory().stream;
201
202 assert_true(stream.locked, 'locked getter should return true');
203
204 }, 'locked should be true');
205
206 promise_test(t => {
207
208 const reader = factory().reader;
209
210 reader.read().then(
211 t.unreached_func('read() should not fulfill'),
212 t.unreached_func('read() should not reject')
213 );
214
215 return delay(500);
216
217 }, 'read() should never settle');
218
219 promise_test(t => {
220
221 const reader = factory().reader;
222
223 reader.read().then(
224 t.unreached_func('read() should not fulfill'),
225 t.unreached_func('read() should not reject')
226 );
227
228 reader.read().then(
229 t.unreached_func('read() should not fulfill'),
230 t.unreached_func('read() should not reject')
231 );
232
233 return delay(500);
234
235 }, 'two read()s should both never settle');
236
237 test(() => {
238
239 const reader = factory().reader;
240 assert_not_equals(reader.read(), reader.read(), 'the promises returned shoul d be distinct');
241
242 }, 'read() should return distinct promises each time');
243
244 test(() => {
245
246 const stream = factory().stream;
247 assert_throws(new TypeError(), () => stream.getReader(), 'stream.getReader() should throw a TypeError');
248
249 }, 'getReader() again on the stream should fail');
250
251 promise_test(t => {
252
253 const streamAndReader = factory();
254 const stream = streamAndReader.stream;
255 const reader = streamAndReader.reader;
256
257 reader.read().then(
258 t.unreached_func('first read() should not fulfill'),
259 t.unreached_func('first read() should not reject')
260 );
261
262 reader.read().then(
263 t.unreached_func('second read() should not fulfill'),
264 t.unreached_func('second read() should not reject')
265 );
266
267 reader.closed.then(
268 t.unreached_func('closed should not fulfill'),
269 t.unreached_func('closed should not reject')
270 );
271
272 assert_throws(new TypeError(), () => reader.releaseLock(), 'releaseLock shou ld throw a TypeError');
273
274 assert_true(stream.locked, 'the stream should still be locked');
275
276 return delay(500);
277
278 }, 'releasing the lock with pending read requests should throw but the read re quests should stay pending');
279
280 promise_test(t => {
281
282 const reader = factory().reader;
283 reader.releaseLock();
284
285 return Promise.all([
286 promise_rejects(t, new TypeError(), reader.read()),
287 promise_rejects(t, new TypeError(), reader.read())
288 ]);
289
290 }, 'releasing the lock should cause further read() calls to reject with a Type Error');
291
292 promise_test(t => {
293
294 const reader = factory().reader;
295
296 const closedBefore = reader.closed;
297 reader.releaseLock();
298 const closedAfter = reader.closed;
299
300 assert_equals(closedBefore, closedAfter, 'the closed promise should not chan ge identity');
301
302 return promise_rejects(t, new TypeError(), closedBefore);
303
304 }, 'releasing the lock should cause closed calls to reject with a TypeError');
305
306 test(() => {
307
308 const streamAndReader = factory();
309 const stream = streamAndReader.stream;
310 const reader = streamAndReader.reader;
311
312 reader.releaseLock();
313 assert_false(stream.locked, 'locked getter should return false');
314
315 }, 'releasing the lock should cause locked to become false');
316
317 promise_test(() => {
318
319 const reader = factory().reader;
320 reader.cancel();
321
322 return reader.read().then(r => {
323 assert_object_equals(r, { value: undefined, done: true }, 'read()ing from the reader should give a done result');
324 });
325
326 }, 'canceling via the reader should cause the reader to act closed');
327
328 promise_test(t => {
329
330 const stream = factory().stream;
331 return promise_rejects(t, new TypeError(), stream.cancel());
332
333 }, 'canceling via the stream should fail');
334 };
335
336 self.templatedRSClosedReader = (label, factory) => {
337 test(() => {}, 'Running templatedRSClosedReader with ' + label);
338
339 promise_test(() => {
340
341 const reader = factory().reader;
342
343 return reader.read().then(v => {
344 assert_object_equals(v, { value: undefined, done: true }, 'read() should f ulfill correctly');
345 });
346
347 }, 'read() should fulfill with { value: undefined, done: true }');
348
349 promise_test(() => {
350
351 const reader = factory().reader;
352
353 return Promise.all([
354 reader.read().then(v => {
355 assert_object_equals(v, { value: undefined, done: true }, 'read() should fulfill correctly');
356 }),
357 reader.read().then(v => {
358 assert_object_equals(v, { value: undefined, done: true }, 'read() should fulfill correctly');
359 })
360 ]);
361
362 }, 'read() multiple times should fulfill with { value: undefined, done: true } ');
363
364 promise_test(() => {
365
366 const reader = factory().reader;
367
368 return reader.read().then(() => reader.read()).then(v => {
369 assert_object_equals(v, { value: undefined, done: true }, 'read() should f ulfill correctly');
370 });
371
372 }, 'read() should work when used within another read() fulfill callback');
373
374 promise_test(() => {
375
376 const reader = factory().reader;
377
378 return reader.closed.then(v => assert_equals(v, undefined, 'reader closed sh ould fulfill with undefined'));
379
380 }, 'closed should fulfill with undefined');
381
382 promise_test(t => {
383
384 const reader = factory().reader;
385
386 const closedBefore = reader.closed;
387 reader.releaseLock();
388 const closedAfter = reader.closed;
389
390 assert_not_equals(closedBefore, closedAfter, 'the closed promise should chan ge identity');
391
392 return Promise.all([
393 closedBefore.then(v => assert_equals(v, undefined, 'reader.closed acquired before release should fulfill')),
394 promise_rejects(t, new TypeError(), closedAfter)
395 ]);
396
397 }, 'releasing the lock should cause closed to reject and change identity');
398
399 promise_test(() => {
400
401 const reader = factory().reader;
402 const cancelPromise1 = reader.cancel();
403 const cancelPromise2 = reader.cancel();
404 const closedReaderPromise = reader.closed;
405
406 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises');
407 assert_not_equals(cancelPromise1, closedReaderPromise, 'cancel() promise 1 s hould be distinct from reader.closed');
408 assert_not_equals(cancelPromise2, closedReaderPromise, 'cancel() promise 2 s hould be distinct from reader.closed');
409
410 return Promise.all([
411 cancelPromise1.then(v => assert_equals(v, undefined, 'first cancel() shoul d fulfill with undefined')),
412 cancelPromise2.then(v => assert_equals(v, undefined, 'second cancel() shou ld fulfill with undefined'))
413 ]);
414
415 }, 'cancel() should return a distinct fulfilled promise each time');
416 };
417
418 self.templatedRSErroredReader = (label, factory, error) => {
419 test(() => {}, 'Running templatedRSErroredReader with ' + label);
420
421 promise_test(t => {
422
423 const reader = factory().reader;
424 return promise_rejects(t, error, reader.closed);
425
426 }, 'closed should reject with the error');
427
428 promise_test(t => {
429
430 const reader = factory().reader;
431 const closedBefore = reader.closed;
432
433 return promise_rejects(t, error, closedBefore).then(() => {
434 reader.releaseLock();
435
436 const closedAfter = reader.closed;
437 assert_not_equals(closedBefore, closedAfter, 'the closed promise should ch ange identity');
438
439 return promise_rejects(t, new TypeError(), closedAfter);
440 });
441
442 }, 'releasing the lock should cause closed to reject and change identity');
443
444 promise_test(t => {
445
446 const reader = factory().reader;
447 return promise_rejects(t, error, reader.read());
448
449 }, 'read() should reject with the error');
450 };
451
452 self.templatedRSTwoChunksOpenReader = (label, factory, chunks) => {
453 test(() => {}, 'Running templatedRSTwoChunksOpenReader with ' + label);
454
455 promise_test(() => {
456
457 const reader = factory().reader;
458
459 return Promise.all([
460 reader.read().then(r => {
461 assert_object_equals(r, { value: chunks[0], done: false }, 'first result should be correct');
462 }),
463 reader.read().then(r => {
464 assert_object_equals(r, { value: chunks[1], done: false }, 'second resul t should be correct');
465 })
466 ]);
467
468 }, 'calling read() twice without waiting will eventually give both chunks (seq uential)');
469
470 promise_test(() => {
471
472 const reader = factory().reader;
473
474 return reader.read().then(r => {
475 assert_object_equals(r, { value: chunks[0], done: false }, 'first result s hould be correct');
476
477 return reader.read().then(r2 => {
478 assert_object_equals(r2, { value: chunks[1], done: false }, 'second resu lt should be correct');
479 });
480 });
481
482 }, 'calling read() twice without waiting will eventually give both chunks (nes ted)');
483
484 test(() => {
485
486 const reader = factory().reader;
487 assert_not_equals(reader.read(), reader.read(), 'the promises returned shoul d be distinct');
488
489 }, 'read() should return distinct promises each time');
490
491 promise_test(() => {
492
493 const reader = factory().reader;
494
495 const promise1 = reader.closed.then(v => {
496 assert_equals(v, undefined, 'reader closed should fulfill with undefined') ;
497 });
498
499 const promise2 = reader.read().then(r => {
500 assert_object_equals(r, { value: chunks[0], done: false },
501 'promise returned before cancellation should fulfill with a chunk');
502 });
503
504 reader.cancel();
505
506 const promise3 = reader.read().then(r => {
507 assert_object_equals(r, { value: undefined, done: true },
508 'promise returned after cancellation should fulfill w ith an end-of-stream signal');
509 });
510
511 return Promise.all([promise1, promise2, promise3]);
512
513 }, 'cancel() after a read() should still give that single read result');
514 };
515
516 self.templatedRSTwoChunksClosedReader = function (label, factory, chunks) {
517 test(() => {}, 'Running templatedRSTwoChunksClosedReader with ' + label);
518
519 promise_test(() => {
520
521 const reader = factory().reader;
522
523 return Promise.all([
524 reader.read().then(r => {
525 assert_object_equals(r, { value: chunks[0], done: false }, 'first result should be correct');
526 }),
527 reader.read().then(r => {
528 assert_object_equals(r, { value: chunks[1], done: false }, 'second resul t should be correct');
529 }),
530 reader.read().then(r => {
531 assert_object_equals(r, { value: undefined, done: true }, 'third result should be correct');
532 })
533 ]);
534
535 }, 'third read(), without waiting, should give { value: undefined, done: true } (sequential)');
536
537 promise_test(() => {
538
539 const reader = factory().reader;
540
541 return reader.read().then(r => {
542 assert_object_equals(r, { value: chunks[0], done: false }, 'first result s hould be correct');
543
544 return reader.read().then(r2 => {
545 assert_object_equals(r2, { value: chunks[1], done: false }, 'second resu lt should be correct');
546
547 return reader.read().then(r3 => {
548 assert_object_equals(r3, { value: undefined, done: true }, 'third resu lt should be correct');
549 });
550 });
551 });
552
553 }, 'third read(), without waiting, should give { value: undefined, done: true } (nested)');
554
555 promise_test(() => {
556
557 const streamAndReader = factory();
558 const stream = streamAndReader.stream;
559 const reader = streamAndReader.reader;
560
561 assert_true(stream.locked, 'stream should start locked');
562
563 const promise = reader.closed.then(v => {
564 assert_equals(v, undefined, 'reader closed should fulfill with undefined') ;
565 assert_true(stream.locked, 'stream should remain locked');
566 });
567
568 reader.read();
569 reader.read();
570
571 return promise;
572
573 }, 'draining the stream via read() should cause the reader closed promise to f ulfill, but locked stays true');
574
575 promise_test(() => {
576
577 const streamAndReader = factory();
578 const stream = streamAndReader.stream;
579 const reader = streamAndReader.reader;
580
581 const promise = reader.closed.then(() => {
582 assert_true(stream.locked, 'the stream should start locked');
583 reader.releaseLock(); // Releasing the lock after reader closed should not throw.
584 assert_false(stream.locked, 'the stream should end unlocked');
585 });
586
587 reader.read();
588 reader.read();
589
590 return promise;
591
592 }, 'releasing the lock after the stream is closed should cause locked to becom e false');
593
594 promise_test(t => {
595
596 const reader = factory().reader;
597
598 reader.releaseLock();
599
600 return Promise.all([
601 promise_rejects(t, new TypeError(), reader.read()),
602 promise_rejects(t, new TypeError(), reader.read()),
603 promise_rejects(t, new TypeError(), reader.read())
604 ]);
605
606 }, 'releasing the lock should cause further read() calls to reject with a Type Error');
607
608 promise_test(() => {
609
610 const streamAndReader = factory();
611 const stream = streamAndReader.stream;
612 const reader = streamAndReader.reader;
613
614 const readerClosed = reader.closed;
615
616 assert_equals(reader.closed, readerClosed, 'accessing reader.closed twice in succession gives the same value');
617
618 const promise = reader.read().then(() => {
619 assert_equals(reader.closed, readerClosed, 'reader.closed is the same afte r read() fulfills');
620
621 reader.releaseLock();
622
623 assert_equals(reader.closed, readerClosed, 'reader.closed is the same afte r releasing the lock');
624
625 const newReader = stream.getReader();
626 return newReader.read();
627 });
628
629 assert_equals(reader.closed, readerClosed, 'reader.closed is the same after calling read()');
630
631 return promise;
632
633 }, 'reader\'s closed property always returns the same promise');
634 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698