templated.any.js (3885B)
1 // META: global=window,worker,shadowrealm 2 // META: script=../resources/test-utils.js 3 // META: script=../resources/rs-test-templates.js 4 'use strict'; 5 6 // Run the readable stream test templates against readable streams created directly using the constructor 7 8 const theError = { name: 'boo!' }; 9 const chunks = ['a', 'b']; 10 11 templatedRSEmpty('ReadableStream (empty)', () => { 12 return new ReadableStream(); 13 }); 14 15 templatedRSEmptyReader('ReadableStream (empty) reader', () => { 16 const stream = new ReadableStream(); 17 const reader = stream.getReader(); 18 return { stream, reader, read: () => reader.read() }; 19 }); 20 21 templatedRSClosed('ReadableStream (closed via call in start)', () => { 22 return new ReadableStream({ 23 start(c) { 24 c.close(); 25 } 26 }); 27 }); 28 29 templatedRSClosedReader('ReadableStream reader (closed before getting reader)', () => { 30 let controller; 31 const stream = new ReadableStream({ 32 start(c) { 33 controller = c; 34 } 35 }); 36 controller.close(); 37 const result = streamAndDefaultReader(stream); 38 return result; 39 }); 40 41 templatedRSClosedReader('ReadableStream reader (closed after getting reader)', () => { 42 let controller; 43 const stream = new ReadableStream({ 44 start(c) { 45 controller = c; 46 } 47 }); 48 const result = streamAndDefaultReader(stream); 49 controller.close(); 50 return result; 51 }); 52 53 templatedRSClosed('ReadableStream (closed via cancel)', () => { 54 const stream = new ReadableStream(); 55 stream.cancel(); 56 return stream; 57 }); 58 59 templatedRSClosedReader('ReadableStream reader (closed via cancel after getting reader)', () => { 60 const stream = new ReadableStream(); 61 const result = streamAndDefaultReader(stream); 62 result.reader.cancel(); 63 return result; 64 }); 65 66 templatedRSErrored('ReadableStream (errored via call in start)', () => { 67 return new ReadableStream({ 68 start(c) { 69 c.error(theError); 70 } 71 }); 72 }, theError); 73 74 templatedRSErroredSyncOnly('ReadableStream (errored via call in start)', () => { 75 return new ReadableStream({ 76 start(c) { 77 c.error(theError); 78 } 79 }); 80 }, theError); 81 82 templatedRSErrored('ReadableStream (errored via returning a rejected promise in start)', () => { 83 return new ReadableStream({ 84 start() { 85 return Promise.reject(theError); 86 } 87 }); 88 }, theError); 89 90 templatedRSErroredReader('ReadableStream (errored via returning a rejected promise in start) reader', () => { 91 return streamAndDefaultReader(new ReadableStream({ 92 start() { 93 return Promise.reject(theError); 94 } 95 })); 96 }, theError); 97 98 templatedRSErroredReader('ReadableStream reader (errored before getting reader)', () => { 99 let controller; 100 const stream = new ReadableStream({ 101 start(c) { 102 controller = c; 103 } 104 }); 105 controller.error(theError); 106 return streamAndDefaultReader(stream); 107 }, theError); 108 109 templatedRSErroredReader('ReadableStream reader (errored after getting reader)', () => { 110 let controller; 111 const result = streamAndDefaultReader(new ReadableStream({ 112 start(c) { 113 controller = c; 114 } 115 })); 116 controller.error(theError); 117 return result; 118 }, theError); 119 120 templatedRSTwoChunksOpenReader('ReadableStream (two chunks enqueued, still open) reader', () => { 121 return streamAndDefaultReader(new ReadableStream({ 122 start(c) { 123 c.enqueue(chunks[0]); 124 c.enqueue(chunks[1]); 125 } 126 })); 127 }, chunks); 128 129 templatedRSTwoChunksClosedReader('ReadableStream (two chunks enqueued, then closed) reader', () => { 130 let doClose; 131 const stream = new ReadableStream({ 132 start(c) { 133 c.enqueue(chunks[0]); 134 c.enqueue(chunks[1]); 135 doClose = c.close.bind(c); 136 } 137 }); 138 const result = streamAndDefaultReader(stream); 139 doClose(); 140 return result; 141 }, chunks); 142 143 templatedRSThrowAfterCloseOrError('ReadableStream', (extras) => { 144 return new ReadableStream({ ...extras }); 145 }); 146 147 function streamAndDefaultReader(stream) { 148 return { stream, reader: stream.getReader() }; 149 }