@@ -248,6 +248,36 @@ test('filter option returned with `multiArgs`', async t => {
248
248
} ) , [ 10_000 , '💩' ] ) ;
249
249
} ) ;
250
250
251
+ test ( 'AbortSignal rejects when aborted' , async t => {
252
+ const emitter = new EventEmitter ( ) ;
253
+
254
+ ( async ( ) => {
255
+ await delay ( 200 ) ;
256
+ emitter . emit ( '🦄' , '🌈' ) ;
257
+ } ) ( ) ;
258
+
259
+ await t . throwsAsync ( pEvent ( emitter , '🦄' , { signal : AbortSignal . timeout ( 5 ) } ) , {
260
+ message : 'The operation was aborted due to timeout' ,
261
+ } ) ;
262
+ t . is ( emitter . listenerCount ( '🦄' ) , 0 ) ;
263
+ } ) ;
264
+
265
+ test ( 'AbortSignal that is already aborted rejects immediately' , async t => {
266
+ const emitter = new EventEmitter ( ) ;
267
+ const controller = new AbortController ( ) ;
268
+ controller . abort ( new Error ( 'reason' ) ) ;
269
+
270
+ ( async ( ) => {
271
+ await delay ( 200 ) ;
272
+ emitter . emit ( '🦄' , '🌈' ) ;
273
+ } ) ( ) ;
274
+
275
+ await t . throwsAsync ( pEvent ( emitter , '🦄' , { signal : controller . signal } ) , {
276
+ message : 'reason' ,
277
+ } ) ;
278
+ t . is ( emitter . listenerCount ( '🦄' ) , 0 ) ;
279
+ } ) ;
280
+
251
281
test ( 'event to AsyncIterator' , async t => {
252
282
const emitter = new EventEmitter ( ) ;
253
283
const iterator = pEventIterator ( emitter , '🦄' ) ;
@@ -420,6 +450,34 @@ test('resolve event resolves pending promises and finishes the iterator - when f
420
450
await t . deepEqual ( await iterator . next ( ) , { done : true , value : undefined } ) ;
421
451
} ) ;
422
452
453
+ test ( 'AsyncIterator - AbortSignal rejects when aborted' , async t => {
454
+ const emitter = new EventEmitter ( ) ;
455
+ const controller = new AbortController ( ) ;
456
+ const iterator = pEventIterator ( emitter , '🦄' , { signal : controller . signal } ) ;
457
+
458
+ ( async ( ) => {
459
+ await delay ( 200 ) ;
460
+ emitter . emit ( '🦄' , '🌈' ) ;
461
+ emitter . emit ( '🦄' , 'Something else.' ) ;
462
+ await delay ( 1 ) ;
463
+ controller . abort ( new Error ( 'reason' ) ) ;
464
+ emitter . emit ( '🦄' , 'Some third thing.' ) ;
465
+ } ) ( ) ;
466
+
467
+ t . deepEqual ( await iterator . next ( ) , { done : false , value : '🌈' } ) ;
468
+ t . deepEqual ( await iterator . next ( ) , { done : false , value : 'Something else.' } ) ;
469
+ await t . throwsAsync ( iterator . next ( ) , { message : 'reason' } ) ;
470
+ t . is ( emitter . listenerCount ( '🦄' ) , 0 ) ;
471
+ } ) ;
472
+
473
+ test ( 'AsyncIterator - AbortSignal that is already aborted rejects immediately' , t => {
474
+ const emitter = new EventEmitter ( ) ;
475
+ const controller = new AbortController ( ) ;
476
+ controller . abort ( new Error ( 'reason' ) ) ;
477
+ t . throws ( ( ) => pEventIterator ( emitter , '🦄' , { signal : controller . signal } ) , { message : 'reason' } ) ;
478
+ t . is ( emitter . listenerCount ( '🦄' ) , 0 ) ;
479
+ } ) ;
480
+
423
481
test ( '.multiple()' , async t => {
424
482
const emitter = new EventEmitter ( ) ;
425
483
0 commit comments