@@ -230,3 +230,93 @@ const { finished: finishedPromise } = require('stream/promises');
230
230
assert . strictEqual ( err ?. message , 'asd' ) ;
231
231
} ) ;
232
232
}
233
+
234
+ {
235
+ // Check pre-cancelled
236
+ const signal = new EventTarget ( ) ;
237
+ signal . aborted = true ;
238
+
239
+ const rs = new ReadableStream ( {
240
+ start ( ) { }
241
+ } ) ;
242
+ finished ( rs , { signal } , common . mustCall ( ( err ) => {
243
+ assert . strictEqual ( err . name , 'AbortError' ) ;
244
+ } ) ) ;
245
+ }
246
+
247
+ {
248
+ // Check cancelled before the stream ends sync.
249
+ const ac = new AbortController ( ) ;
250
+ const { signal } = ac ;
251
+
252
+ const rs = new ReadableStream ( {
253
+ start ( ) { }
254
+ } ) ;
255
+ finished ( rs , { signal } , common . mustCall ( ( err ) => {
256
+ assert . strictEqual ( err . name , 'AbortError' ) ;
257
+ } ) ) ;
258
+
259
+ ac . abort ( ) ;
260
+ }
261
+
262
+ {
263
+ // Check cancelled before the stream ends async.
264
+ const ac = new AbortController ( ) ;
265
+ const { signal } = ac ;
266
+
267
+ const rs = new ReadableStream ( {
268
+ start ( ) { }
269
+ } ) ;
270
+ setTimeout ( ( ) => ac . abort ( ) , 1 ) ;
271
+ finished ( rs , { signal } , common . mustCall ( ( err ) => {
272
+ assert . strictEqual ( err . name , 'AbortError' ) ;
273
+ } ) ) ;
274
+ }
275
+
276
+ {
277
+ // Check cancelled after doesn't throw.
278
+ const ac = new AbortController ( ) ;
279
+ const { signal } = ac ;
280
+
281
+ const rs = new ReadableStream ( {
282
+ start ( controller ) {
283
+ controller . enqueue ( 'asd' ) ;
284
+ controller . close ( ) ;
285
+ }
286
+ } ) ;
287
+ finished ( rs , { signal } , common . mustSucceed ( ) ) ;
288
+
289
+ rs . getReader ( ) . read ( ) . then ( common . mustCall ( ( chunk ) => {
290
+ assert . strictEqual ( chunk . value , 'asd' ) ;
291
+ setImmediate ( ( ) => ac . abort ( ) ) ;
292
+ } ) ) ;
293
+ }
294
+
295
+ {
296
+ // Promisified abort works
297
+ async function run ( ) {
298
+ const ac = new AbortController ( ) ;
299
+ const { signal } = ac ;
300
+ const rs = new ReadableStream ( {
301
+ start ( ) { }
302
+ } ) ;
303
+ setImmediate ( ( ) => ac . abort ( ) ) ;
304
+ await finishedPromise ( rs , { signal } ) ;
305
+ }
306
+
307
+ assert . rejects ( run , { name : 'AbortError' } ) . then ( common . mustCall ( ) ) ;
308
+ }
309
+
310
+ {
311
+ // Promisified pre-aborted works
312
+ async function run ( ) {
313
+ const signal = new EventTarget ( ) ;
314
+ signal . aborted = true ;
315
+ const rs = new ReadableStream ( {
316
+ start ( ) { }
317
+ } ) ;
318
+ await finishedPromise ( rs , { signal } ) ;
319
+ }
320
+
321
+ assert . rejects ( run , { name : 'AbortError' } ) . then ( common . mustCall ( ) ) ;
322
+ }
0 commit comments