| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -265,6 +265,7 @@ added: v16.11.0 | |||
| 265 | 265 | * `start` {integer} | |
| 266 | 266 | * `end` {integer} **Default:** `Infinity` | |
| 267 | 267 | * `highWaterMark` {integer} **Default:** `64 * 1024` | |
| 268 | + * `signal` {AbortSignal|undefined} **Default:** `undefined` | ||
| 268 | 269 | * Returns: {fs.ReadStream} | |
| 269 | 270 | ||
| 270 | 271 | Unlike the 16 KiB default `highWaterMark` for a {stream.Readable}, the stream | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -80,3 +80,75 @@ fs.promises.open(file, 'r').then((handle) => { | |||
| 80 | 80 | assert.strictEqual(output, input); | |
| 81 | 81 | })); | |
| 82 | 82 | }).then(common.mustCall()); | |
| 83 | + | ||
| 84 | + // AbortSignal option test | ||
| 85 | + fs.promises.open(file, 'r').then((handle) => { | ||
| 86 | + const controller = new AbortController(); | ||
| 87 | + const { signal } = controller; | ||
| 88 | + const stream = handle.createReadStream({ signal }); | ||
| 89 | + | ||
| 90 | + stream.on('data', common.mustNotCall()); | ||
| 91 | + stream.on('end', common.mustNotCall()); | ||
| 92 | + | ||
| 93 | + stream.on('error', common.mustCall((err) => { | ||
| 94 | + assert.strictEqual(err.name, 'AbortError'); | ||
| 95 | + })); | ||
| 96 | + | ||
| 97 | + stream.on('close', common.mustCall(() => { | ||
| 98 | + handle.close(); | ||
| 99 | + })); | ||
| 100 | + | ||
| 101 | + controller.abort(); | ||
| 102 | + }).then(common.mustCall()); | ||
| 103 | + | ||
| 104 | + // Already-aborted signal test | ||
| 105 | + fs.promises.open(file, 'r').then((handle) => { | ||
| 106 | + const signal = AbortSignal.abort(); | ||
| 107 | + const stream = handle.createReadStream({ signal }); | ||
| 108 | + | ||
| 109 | + stream.on('data', common.mustNotCall()); | ||
| 110 | + stream.on('end', common.mustNotCall()); | ||
| 111 | + | ||
| 112 | + stream.on('error', common.mustCall((err) => { | ||
| 113 | + assert.strictEqual(err.name, 'AbortError'); | ||
| 114 | + })); | ||
| 115 | + | ||
| 116 | + stream.on('close', common.mustCall(() => { | ||
| 117 | + handle.close(); | ||
| 118 | + })); | ||
| 119 | + }).then(common.mustCall()); | ||
| 120 | + | ||
| 121 | + // Invalid signal type test | ||
| 122 | + fs.promises.open(file, 'r').then((handle) => { | ||
| 123 | + for (const signal of [1, {}, [], '', null, NaN, 1n, () => {}, Symbol(), false, true]) { | ||
| 124 | + assert.throws(() => { | ||
| 125 | + handle.createReadStream({ signal }); | ||
| 126 | + }, { | ||
| 127 | + code: 'ERR_INVALID_ARG_TYPE', | ||
| 128 | + name: 'TypeError', | ||
| 129 | + }); | ||
| 130 | + } | ||
| 131 | + return handle.close(); | ||
| 132 | + }).then(common.mustCall()); | ||
| 133 | + | ||
| 134 | + // Custom abort reason test | ||
| 135 | + fs.promises.open(file, 'r').then((handle) => { | ||
| 136 | + const controller = new AbortController(); | ||
| 137 | + const { signal } = controller; | ||
| 138 | + const reason = new Error('some silly abort reason'); | ||
| 139 | + const stream = handle.createReadStream({ signal }); | ||
| 140 | + | ||
| 141 | + stream.on('data', common.mustNotCall()); | ||
| 142 | + stream.on('end', common.mustNotCall()); | ||
| 143 | + | ||
| 144 | + stream.on('error', common.mustCall((err) => { | ||
| 145 | + assert.strictEqual(err.name, 'AbortError'); | ||
| 146 | + assert.strictEqual(err.cause, reason); | ||
| 147 | + })); | ||
| 148 | + | ||
| 149 | + stream.on('close', common.mustCall(() => { | ||
| 150 | + handle.close(); | ||
| 151 | + })); | ||
| 152 | + | ||
| 153 | + controller.abort(reason); | ||
| 154 | + }).then(common.mustCall()); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments