%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// META: global=window,worker,jsshell // META: script=../resources/test-utils.js // META: script=../resources/rs-test-templates.js 'use strict'; // Run the readable stream test templates against readable streams created directly using the constructor const theError = { name: 'boo!' }; const chunks = ['a', 'b']; templatedRSEmpty('ReadableStream (empty)', () => { return new ReadableStream(); }); templatedRSEmptyReader('ReadableStream (empty) reader', () => { return streamAndDefaultReader(new ReadableStream()); }); templatedRSClosed('ReadableStream (closed via call in start)', () => { return new ReadableStream({ start(c) { c.close(); } }); }); templatedRSClosedReader('ReadableStream reader (closed before getting reader)', () => { let controller; const stream = new ReadableStream({ start(c) { controller = c; } }); controller.close(); const result = streamAndDefaultReader(stream); return result; }); templatedRSClosedReader('ReadableStream reader (closed after getting reader)', () => { let controller; const stream = new ReadableStream({ start(c) { controller = c; } }); const result = streamAndDefaultReader(stream); controller.close(); return result; }); templatedRSClosed('ReadableStream (closed via cancel)', () => { const stream = new ReadableStream(); stream.cancel(); return stream; }); templatedRSClosedReader('ReadableStream reader (closed via cancel after getting reader)', () => { const stream = new ReadableStream(); const result = streamAndDefaultReader(stream); result.reader.cancel(); return result; }); templatedRSErrored('ReadableStream (errored via call in start)', () => { return new ReadableStream({ start(c) { c.error(theError); } }); }, theError); templatedRSErroredSyncOnly('ReadableStream (errored via call in start)', () => { return new ReadableStream({ start(c) { c.error(theError); } }); }, theError); templatedRSErrored('ReadableStream (errored via returning a rejected promise in start)', () => { return new ReadableStream({ start() { return Promise.reject(theError); } }); }, theError); templatedRSErroredReader('ReadableStream (errored via returning a rejected promise in start) reader', () => { return streamAndDefaultReader(new ReadableStream({ start() { return Promise.reject(theError); } })); }, theError); templatedRSErroredReader('ReadableStream reader (errored before getting reader)', () => { let controller; const stream = new ReadableStream({ start(c) { controller = c; } }); controller.error(theError); return streamAndDefaultReader(stream); }, theError); templatedRSErroredReader('ReadableStream reader (errored after getting reader)', () => { let controller; const result = streamAndDefaultReader(new ReadableStream({ start(c) { controller = c; } })); controller.error(theError); return result; }, theError); templatedRSTwoChunksOpenReader('ReadableStream (two chunks enqueued, still open) reader', () => { return streamAndDefaultReader(new ReadableStream({ start(c) { c.enqueue(chunks[0]); c.enqueue(chunks[1]); } })); }, chunks); templatedRSTwoChunksClosedReader('ReadableStream (two chunks enqueued, then closed) reader', () => { let doClose; const stream = new ReadableStream({ start(c) { c.enqueue(chunks[0]); c.enqueue(chunks[1]); doClose = c.close.bind(c); } }); const result = streamAndDefaultReader(stream); doClose(); return result; }, chunks); function streamAndDefaultReader(stream) { return { stream, reader: stream.getReader() }; }