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

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

Issue 1404523005: Implement author-constructible ReadableStream using V8 extras (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 // 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 = function (label, factory) {
8 test(function() {
9 }, 'Running templatedRSEmpty with ' + label);
10
11 test(function() {
12 var 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.tee, 'function', 'has a tee method');
18 }, 'instances have the correct methods and properties');
19 };
20
21 self.templatedRSClosed = function (label, factory) {
22 test(function() {
23 }, 'Running templatedRSClosed with ' + label);
24
25 var test1 = async_test('cancel() should return a distinct fulfilled promise each time');
26 test1.step(function() {
27 var rs = factory();
28 var promisesCount = 0;
29 var allChecked = false;
30
31 var cancelPromise1 = rs.cancel();
32 var cancelPromise2 = rs.cancel();
33
34 cancelPromise1.then(test1.step_func(function(v) {
35 assert_equals(v, undefined, 'first cancel() call should fulfill with undefined');
36 ++promisesCount;
37 }));
38 cancelPromise2.then(test1.step_func(function(v) {
39 assert_equals(v, undefined, 'second cancel() call should fulfill wit h undefined');
40 assert_equals(++promisesCount, 2);
41 assert_true(allChecked);
42 test1.done();
43 }));
44 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should return distinct promises');
45 allChecked = true;
46 });
47
48 test(function() {
49 var rs = factory();
50
51 assert_false(rs.locked, 'locked getter should return false');
52 }, 'locked should be false');
53
54 test(function() {
55 var rs = factory();
56
57 rs.getReader(); // getReader() should not throw.
58 }, 'getReader() should be OK');
59
60 test(function() {
61 var rs = factory();
62
63 var reader = rs.getReader();
64 reader.releaseLock();
65
66 reader = rs.getReader(); // Getting a second reader should not throw.
67 reader.releaseLock();
68
69 rs.getReader(); // Getting a third reader should not throw.
70 }, 'should be able to acquire multiple readers if they are released in succe ssion');
71
72 test(function() {
73 var rs = factory();
74
75 rs.getReader();
76
77 assert_throws(new TypeError(), function() { rs.getReader(); }, 'getting a second reader should throw');
78 assert_throws(new TypeError(), function() { rs.getReader(); }, 'getting a third reader should throw');
79 }, 'should not be able to acquire a second reader if we don\'t release the f irst one');
80 };
81
82 self.templatedRSErrored = function (label, factory, error) {
83 test(function() {
84 }, 'Running templatedRSErrored with ' + label);
85
86 var test2 = async_test('getReader() should return a reader that acts errored ');
87 test2.step(function() {
88 var rs = factory();
89 var promisesCount = 0;
90
91 var reader = rs.getReader();
92
93 reader.closed.catch(test2.step_func(function(e) {
94 assert_equals(e, error, 'reader.closed should reject with the error' );
95 if (++promisesCount === 2)
96 test2.done();
97 }));
98 reader.read().catch(test2.step_func(function(e) {
99 assert_equals(e, error, 'reader.read() should reject with the error' );
100 if (++promisesCount === 2)
101 test2.done();
102 }));
103 });
104
105 var test3 = async_test('read() twice should give the error each time');
106 test3.step(function() {
107 var rs = factory();
108 var promiseCount = 0;
109
110 var reader = rs.getReader();
111
112 reader.read().catch(test3.step_func(function(e) {
113 assert_equals(e, error, 'reader.read() should reject with the error' );
114 assert_equals(++promiseCount, 1);
115 }));
116 reader.read().catch(test3.step_func(function(e) {
117 assert_equals(e, error, 'reader.read() should reject with the error' );
118 assert_equals(++promiseCount, 2);
119 }));
120 reader.closed.catch(test3.step_func(function(e) {
121 assert_equals(e, error, 'reader.closed should reject with the error' );
122 assert_equals(++promiseCount, 3);
123 test3.done();
124 }));
125 });
126
127 test(function() {
128 var rs = factory();
129
130 assert_false(rs.locked, 'locked getter should return false');
131 }, 'locked should be false');
132 };
133
134 self.templatedRSErroredSyncOnly = function (label, factory, error) {
135 test(function() {
136 }, 'Running templatedRSErroredSyncOnly with ' + label);
137
138 var test1 = async_test('should be able to obtain a second reader, with the c orrect closed promise');
139 test1.step(function() {
140 var rs = factory();
141
142 rs.getReader().releaseLock();
143
144 var reader = rs.getReader(); // Calling getReader() twice does not throw (the stream is not locked).
145
146 reader.closed.then(
147 test1.step_func(function() { assert_unreached('closed promise should not be fulfilled when stream is errored'); }),
148 test1.step_func(function(err) {
149 assert_equals(err, error);
150 test1.done();
151 })
152 );
153 });
154
155 test(function() {
156 var rs = factory();
157
158 rs.getReader();
159
160 assert_throws(new TypeError(), function() { rs.getReader(); }, 'getting a second reader should throw a TypeError');
161 assert_throws(new TypeError(), function() { rs.getReader(); }, 'getting a third reader should throw a TypeError');
162 }, 'should not be able to obtain additional readers if we don\'t release the first lock');
163
164 var test2 = async_test('cancel() should return a distinct rejected promise e ach time');
165 test2.step(function() {
166 var rs = factory();
167 var promisesCount = 0;
168 var allChecked = false;
169
170 var cancelPromise1 = rs.cancel();
171 var cancelPromise2 = rs.cancel();
172
173 cancelPromise1.catch(test2.step_func(function(e) {
174 assert_equals(e, error, 'first cancel() call should reject with the error');
175 ++promisesCount;
176 }));
177 cancelPromise2.catch(test2.step_func(function(e) {
178 assert_equals(e, error, 'second cancel() call should reject with the error');
179 assert_equals(++promisesCount, 2);
180 assert_true(allChecked);
181 test2.done();
182 }));
183 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should return distinct promises');
184 allChecked = true;
185 });
186
187 var test3 = async_test('reader cancel() should return a distinct rejected pr omise each time');
188 test3.step(function() {
189 var rs = factory();
190 var reader = rs.getReader();
191 var promisesCount = 0;
192 var allChecked = false;
193
194 var cancelPromise1 = reader.cancel();
195 var cancelPromise2 = reader.cancel();
196
197 cancelPromise1.catch(test3.step_func(function(e) {
198 assert_equals(e, error, 'first cancel() call should reject with the error');
199 ++promisesCount;
200 }));
201 cancelPromise2.catch(test3.step_func(function(e) {
202 assert_equals(e, error, 'second cancel() call should reject with the error');
203 assert_equals(++promisesCount, 2);
204 assert_true(allChecked);
205 test3.done();
206 }));
207 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should return distinct promises');
208 allChecked = true;
209 });
210 };
211
212 self.templatedRSEmptyReader = function (label, factory) {
213 test(function() {
214 }, 'Running templatedRSEmptyReader with ' + label);
215
216 test(function() {
217 var reader = factory().reader;
218
219 assert_true('closed' in reader, 'has a closed property');
220 assert_equals(typeof reader.closed.then, 'function', 'closed property is thenable');
221
222 assert_equals(typeof reader.cancel, 'function', 'has a cancel method');
223 assert_equals(typeof reader.read, 'function', 'has a read method');
224 assert_equals(typeof reader.releaseLock, 'function', 'has a releaseLock method');
225 }, 'instances have the correct methods and properties');
226
227 test(function() {
228 var stream = factory().stream;
229
230 assert_true(stream.locked, 'locked getter should return true');
231 }, 'locked should be true');
232
233 var test1 = async_test('read() should never settle');
234 test1.step(function() {
235 var reader = factory().reader;
236
237 reader.read().then(
238 test1.step_func(function() { assert_unreached('read() should not ful fill'); }),
239 test1.step_func(function() { assert_unreached('read() should not rej ect'); })
240 );
241
242 setTimeout(test1.step_func(function() { test1.done(); }), 1000);
243 });
244
245 var test2 = async_test('two read()s should both never settle');
246 test2.step(function() {
247 var reader = factory().reader;
248
249 reader.read().then(
250 test2.step_func(function() { assert_unreached('first read() should n ot fulfill'); }),
251 test2.step_func(function() { assert_unreached('first read() should n ot reject'); })
252 );
253
254 reader.read().then(
255 test2.step_func(function() { assert_unreached('second read() should not fulfill'); }),
256 test2.step_func(function() { assert_unreached('second read() should not reject'); })
257 );
258
259 setTimeout(test2.step_func(function() { test2.done(); }), 1000);
260 });
261
262 test(function() {
263 var reader = factory().reader;
264
265 assert_not_equals(reader.read(), reader.read(), 'the promises returned s hould be distinct');
266 }, 'read() should return distinct promises each time');
267
268 test(function() {
269 var stream = factory().stream;
270
271 assert_throws(new TypeError(), function() { stream.getReader(); }, 'stre am.getReader() should throw a TypeError');
272 }, 'getReader() again on the stream should fail');
273
274 var test3 = async_test('releasing the lock with pending read requests should throw but the read requests should stay pending');
275 test3.step(function() {
276 var streamAndReader = factory();
277 var stream = streamAndReader.stream;
278 var reader = streamAndReader.reader;
279
280 reader.read().then(
281 test3.step_func(function() { assert_unreached('first read() should n ot fulfill'); }),
282 test3.step_func(function() { assert_unreached('first read() should n ot reject'); })
283 );
284
285 reader.read().then(
286 test3.step_func(function() { assert_unreached('second read() should not fulfill'); }),
287 test3.step_func(function() { assert_unreached('second read() should not reject'); })
288 );
289
290 reader.closed.then(
291 test3.step_func(function() { assert_unreached('closed should not ful fill'); }),
292 test3.step_func(function() { assert_unreached('closed should not rej ect'); })
293 );
294
295 assert_throws(new TypeError(), function() { reader.releaseLock(); }, 're leaseLock should throw a TypeError');
296
297 assert_true(stream.locked, 'the stream should still be locked');
298
299 setTimeout(test3.step_func(function() { test3.done(); }), 1000);
300 });
301
302 var test4 = async_test('releasing the lock should cause further read() calls to reject with a TypeError', { timeout: 50 });
303 test4.step(function() {
304 var promiseCalls = 0;
305 var reader = factory().reader;
306
307 reader.releaseLock();
308
309 reader.read().catch(test4.step_func(function(e) {
310 assert_throws(new TypeError(), function() { throw e; }, 'first read( ) should reject with a TypeError');
311 assert_equals(++promiseCalls, 1);
312 }));
313 reader.read().catch(test4.step_func(function(e) {
314 assert_throws(new TypeError(), function() { throw e; }, 'second read () should reject with a TypeError');
315 assert_equals(++promiseCalls, 2);
316 test4.done();
317 }));
318 });
319
320 var test5 = async_test('releasing the lock should cause closed to reject', { timeout: 50 });
321 test5.step(function() {
322 var reader = factory().reader;
323
324 var closedBefore = reader.closed;
325 reader.releaseLock();
326 var closedAfter = reader.closed;
327
328 assert_equals(closedBefore, closedAfter, 'the closed promise should not change identity')
329 closedBefore.catch(test5.step_func(function(e) {
330 assert_throws(new TypeError(), function() { throw e; }, 'reader.clos ed should reject with a TypeError');
331 test5.done();
332 }));
333 });
334
335 test(function() {
336 var streamAndReader = factory();
337 var stream = streamAndReader.stream;
338 var reader = streamAndReader.reader;
339
340 reader.releaseLock();
341 assert_false(stream.locked, 'locked getter should return false');
342 }, 'releasing the lock should cause locked to become false');
343
344 var test6 = async_test('canceling via the reader should cause the reader to act closed');
345 test6.step(function() {
346 var reader = factory().reader;
347
348 reader.cancel();
349 reader.read().then(test6.step_func(function(r) {
350 assert_object_equals(r, { value: undefined, done: true }, 'read()ing from the reader should give a done result');
351 test6.done();
352 }));
353 });
354
355 var test7 = async_test('canceling via the stream should fail');
356 test7.step(function() {
357 var stream = factory().stream;
358
359 stream.cancel().catch(test7.step_func(function(e) {
360 assert_throws(new TypeError(), function() { throw e; }, 'cancel() sh ould reject with a TypeError');
361 test7.done();
362 }));
363 });
364 };
365
366 self.templatedRSClosedReader = function (label, factory) {
367 test(function() {
368 }, 'Running templatedRSClosedReader with ' + label);
369
370 var test1 = async_test('read() should fulfill with { value: undefined, done : true }');
371 test1.step(function() {
372 var reader = factory().reader;
373
374 reader.read().then(
375 test1.step_func(function(v) {
376 assert_object_equals(v, { value: undefined, done: true }, 'read( ) should fulfill correctly');
377 test1.done();
378 }),
379 test1.step_func(function() { assert_unreached('read() should not ret urn a rejected promise'); })
380 );
381 });
382
383 var test2 = async_test('read() multiple times should fulfill with { value: u ndefined, done: true }');
384 test2.step(function() {
385 var reader = factory().reader;
386 var readCount = 0;
387
388 reader.read().then(
389 test2.step_func(function(v) {
390 assert_object_equals(v, { value: undefined, done: true }, 'read( ) should fulfill correctly');
391 ++readCount;
392 }),
393 test2.step_func(function() { assert_unreached('read() should not ret urn a rejected promise'); })
394 );
395 reader.read().then(
396 test2.step_func(function(v) {
397 assert_object_equals(v, { value: undefined, done: true }, 'read( ) should fulfill correctly');
398 assert_equals(++readCount, 2);
399 test2.done();
400 }),
401 test2.step_func(function() { assert_unreached('read() should not ret urn a rejected promise'); })
402 );
403 });
404
405 var test3 = async_test('read() should work when used within another read() f ulfill callback');
406 test3.step(function() {
407 var reader = factory().reader;
408
409 reader.read().then(test3.step_func(function() { reader.read().then(test3 .step_func(function() { test3.done('read() should fulfill'); })); }));
410 });
411
412 var test4 = async_test('closed should fulfill with undefined');
413 test4.step(function() {
414 var reader = factory().reader;
415
416 reader.closed.then(
417 test4.step_func(function(v) {
418 assert_equals(v, undefined, 'reader closed should fulfill with u ndefined');
419 test4.done();
420 }),
421 test4.step_func(function() { assert_unreached('reader closed should not reject'); })
422 );
423 });
424
425 var test5 = async_test('releasing the lock should cause closed to reject and change identity');
426 test5.step(function() {
427 var promiseCalls = 0;
428 var reader = factory().reader;
429
430 var closedBefore = reader.closed;
431 reader.releaseLock();
432 var closedAfter = reader.closed;
433
434 assert_not_equals(closedBefore, closedAfter, 'the closed promise should change identity')
435 closedBefore.then(test5.step_func(function(v) {
436 assert_equals(v, undefined, 'reader.closed acquired before release s hould fulfill');
437 assert_equals(++promiseCalls, 1);
438 }));
439 closedAfter.catch(test5.step_func(function(e) {
440 assert_throws(new TypeError(), function() { throw e; }, 'reader.clos ed acquired after release should reject with a TypeError');
441 assert_equals(++promiseCalls, 2);
442 test5.done();
443 }));
444 });
445
446 var test6 = async_test('cancel() should return a distinct fulfilled promise each time');
447 test6.step(function() {
448 var reader = factory().reader;
449 var promiseCount = 0;
450 var allChecked = false;
451
452 var cancelPromise1 = reader.cancel();
453 var cancelPromise2 = reader.cancel();
454 var closedReaderPromise = reader.closed;
455
456 cancelPromise1.then(test6.step_func(function(v) {
457 assert_equals(v, undefined, 'first cancel() call should fulfill with undefined');
458 ++promiseCount;
459 }));
460 cancelPromise2.then(test6.step_func(function(v) {
461 assert_equals(v, undefined, 'second cancel() call should fulfill wit h undefined');
462 assert_equals(++promiseCount, 2);
463 assert_true(allChecked);
464 test6.done();
465 }));
466 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should return distinct promises');
467 assert_not_equals(cancelPromise1, closedReaderPromise, 'cancel() promise 1 should be distinct from reader.closed');
468 assert_not_equals(cancelPromise2, closedReaderPromise, 'cancel() promise 2 should be distinct from reader.closed');
469 allChecked = true;
470 });
471 };
472
473 self.templatedRSErroredReader = function (label, factory, error) {
474 test(function() {
475 }, 'Running templatedRSErroredReader with ' + label);
476
477 var test1 = async_test('closed should reject with the error');
478 test1.step(function() {
479 var reader = factory().reader;
480
481 reader.closed.then(
482 test1.step_func(function() { assert_unreached('stream closed should not fulfill'); }),
483 test1.step_func(function(r) {
484 assert_equals(r, error, 'stream closed should reject with the er ror');
485 test1.done();
486 })
487 );
488 });
489
490 var test2 = async_test('releasing the lock should cause closed to reject and change identity');
491 test2.step(function() {
492 var reader = factory().reader;
493
494 var closedBefore = reader.closed;
495
496 closedBefore.catch(test2.step_func(function(e) {
497 assert_equals(e, error, 'reader.closed acquired before release shoul d reject with the error');
498
499 reader.releaseLock();
500 var closedAfter = reader.closed;
501
502 assert_not_equals(closedBefore, closedAfter, 'the closed promise sho uld change identity');
503
504 return closedAfter.catch(test2.step_func(function(e) {
505 assert_throws(new TypeError(), function() { throw e; }, 'reader. closed acquired after release should reject with a TypeError');
506 test2.done();
507 }));
508 })).catch(test2.step_func(function(e) { assert_unreached(e); }));
509 });
510
511 var test3 = async_test('read() should reject with the error');
512 test3.step(function() {
513 var reader = factory().reader;
514
515 reader.read().then(
516 test3.step_func(function() {
517 assert_unreached('read() should not fulfill');
518 }),
519 test3.step_func(function(r) {
520 assert_equals(r, error, 'read() should reject with the error');
521 test3.done();
522 })
523 );
524 });
525 };
526
527 self.templatedRSTwoChunksOpenReader = function (label, factory, chunks) {
528 test(function() {
529 }, 'Running templatedRSTwoChunksOpenReader with ' + label);
530
531 var test1 = async_test('calling read() twice without waiting will eventually give both chunks');
532 test1.step(function() {
533 var reader = factory().reader;
534 var promiseCount = 0;
535
536 reader.read().then(test1.step_func(function(r) {
537 assert_object_equals(r, { value: chunks[0], done: false }, 'first re sult should be correct');
538 ++promiseCount;
539 }));
540 reader.read().then(test1.step_func(function(r) {
541 assert_object_equals(r, { value: chunks[1], done: false }, 'second r esult should be correct');
542 assert_equals(++promiseCount, 2);
543 test1.done();
544 }));
545 });
546
547 var test2 = async_test('calling read() twice with waiting will eventually gi ve both chunks');
548 test2.step(function() {
549 var reader = factory().reader;
550
551 reader.read().then(test2.step_func(function(r) {
552 assert_object_equals(r, { value: chunks[0], done: false }, 'first re sult should be correct');
553
554 return reader.read().then(test2.step_func(function(r) {
555 assert_object_equals(r, { value: chunks[1], done: false }, 'seco nd result should be correct');
556 test2.done();
557 }));
558 })).catch(test2.step_func(function(e) { assert_unreached(e); }));
559 });
560
561 test(function() {
562 var reader = factory().reader;
563
564 assert_not_equals(reader.read(), reader.read(), 'the promises returned s hould be distinct');
565 }, 'read() should return distinct promises each time');
566
567 var test3 = async_test('cancel() after a read() should still give that singl e read result');
568 test3.step(function() {
569 var reader = factory().reader;
570 var promiseCount = 0;
571
572 reader.closed.then(test3.step_func(function(v) {
573 assert_equals(v, undefined, 'reader closed should fulfill with undef ined');
574 ++promiseCount;
575 }));
576
577 reader.read().then(test3.step_func(function(r) {
578 assert_object_equals(r, { value: chunks[0], done: false }, 'promise returned before cancellation should fulfill with a chunk');
579 ++promiseCount;
580 }));
581
582 reader.cancel();
583
584 reader.read().then(test3.step_func(function(r) {
585 assert_object_equals(r, { value: undefined, done: true }, 'promise r eturned after cancellation should fulfill with an end-of-stream signal');
586 assert_equals(++promiseCount, 3);
587 test3.done();
588 }))
589 });
590 };
591
592 self.templatedRSTwoChunksClosedReader = function (label, factory, chunks) {
593 test(function() {
594 }, 'Running templatedRSTwoChunksClosedReader with ' + label);
595
596 var test1 = async_test('third read(), without waiting, should give { value: undefined, done: true }');
597 test1.step(function() {
598 var reader = factory().reader;
599 var promiseCount = 0;
600
601 reader.read().then(test1.step_func(function(r) {
602 assert_object_equals(r, { value: chunks[0], done: false }, 'first re sult should be correct');
603 ++promiseCount;
604 }));
605 reader.read().then(test1.step_func(function(r) {
606 assert_object_equals(r, { value: chunks[1], done: false }, 'second r esult should be correct');
607 ++promiseCount;
608 }));
609 reader.read().then(test1.step_func(function(r) {
610 assert_object_equals(r, { value: undefined, done: true }, 'third res ult should be correct');
611 assert_equals(++promiseCount, 3);
612 test1.done();
613 }))
614 });
615
616 var test2 = async_test('third read, with waiting, should give { value: undef ined, done: true }');
617 test2.step(function() {
618 var reader = factory().reader;
619
620 reader.read().then(test2.step_func(function(r) {
621 assert_object_equals(r, { value: chunks[0], done: false }, 'first re sult should be correct');
622
623 return reader.read().then(test2.step_func(function(r) {
624 assert_object_equals(r, { value: chunks[1], done: false }, 'seco nd result should be correct');
625
626 return reader.read().then(test2.step_func(function(r) {
627 assert_object_equals(r, { value: undefined, done: true }, 't hird result should be correct');
628 test2.done();
629 }));
630 }));
631 })).catch(test2.step_func(function(e) { assert_unreached(e); }));
632 });
633
634 var test3 = async_test('draining the stream via read() should cause the read er closed promise to fulfill, but locked stays true');
635 test3.step(function() {
636 var streamAndReader = factory();
637 var stream = streamAndReader.stream;
638 var reader = streamAndReader.reader;
639
640 assert_true(stream.locked, 'stream should start locked');
641
642 reader.closed.then(
643 test3.step_func(function(v) {
644 assert_equals(v, undefined, 'reader closed should fulfill with u ndefined');
645 assert_true(stream.locked, 'stream should remain locked');
646 test3.done();
647 }),
648 test3.step_func(function() { assert_unreached('reader closed should not reject'); })
649 );
650
651 reader.read();
652 reader.read();
653 });
654
655 var test4 = async_test('releasing the lock after the stream is closed should cause locked to become false');
656 test4.step(function() {
657 var streamAndReader = factory();
658 var stream = streamAndReader.stream;
659 var reader = streamAndReader.reader;
660
661 reader.closed.then(test4.step_func(function() {
662 assert_true(stream.locked, 'the stream should start locked');
663 reader.releaseLock(); // Releasing the lock after reader closed shou ld not throw.
664 assert_false(stream.locked, 'the stream should end unlocked');
665 test4.done();
666 }));
667
668 reader.read();
669 reader.read();
670 });
671
672 var test5 = async_test('releasing the lock should cause further read() calls to reject with a TypeError', { timeout: 50});
673 test5.step(function() {
674 var promiseCalls = 0;
675 var reader = factory().reader;
676
677 reader.releaseLock();
678
679 reader.read().catch(test5.step_func(function(e) {
680 assert_throws(new TypeError(), function() { throw e; }, 'first read( ) should reject with a TypeError');
681 assert_equals(++promiseCalls, 1);
682 }));
683 reader.read().catch(test5.step_func(function(e) {
684 assert_throws(new TypeError(), function() { throw e; }, 'second read () should reject with a TypeError');
685 assert_equals(++promiseCalls, 2);
686 }));
687 reader.read().catch(test5.step_func(function(e) {
688 assert_throws(new TypeError(), function() { throw e; }, 'third read( ) should reject with a TypeError');
689 assert_equals(++promiseCalls, 3);
690 test5.done();
691 }));
692 });
693
694 var test6 = async_test('reader\'s closed property always returns the same pr omise');
695 test6.step(function() {
696 var streamAndReader = factory();
697 var stream = streamAndReader.stream;
698 var reader = streamAndReader.reader;
699
700 var readerClosed = reader.closed;
701
702 assert_equals(reader.closed, readerClosed, 'accessing reader.closed twic e in succession gives the same value');
703
704 reader.read().then(test6.step_func(function() {
705 assert_equals(reader.closed, readerClosed, 'reader.closed is the sam e after read() fulfills');
706
707 reader.releaseLock();
708
709 assert_equals(reader.closed, readerClosed, 'reader.closed is the sam e after releasing the lock');
710
711 var newReader = stream.getReader();
712 newReader.read();
713
714 test6.done();
715 }));
716
717 assert_equals(reader.closed, readerClosed, 'reader.closed is the same af ter calling read()');
718 });
719 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698