@@ -360,20 +360,37 @@ describe('mapAsyncIterable', () => {
360
360
) ;
361
361
} ) ;
362
362
363
- it ( 'disposes of async iterable ' , async ( ) => {
363
+ it ( 'disposes of async generator ' , async ( ) => {
364
364
let returned = false ;
365
- async function * source ( ) {
366
- try {
367
- yield 1 ;
368
- yield 2 ;
369
- yield 3 ;
370
- } finally {
365
+
366
+ const items = [ 1 , 2 , 3 ] ;
367
+ const generator : AsyncGenerator < number , void , void > = {
368
+ [ Symbol . asyncIterator ] ( ) {
369
+ return this ;
370
+ } ,
371
+ next ( ) : Promise < IteratorResult < number , void > > {
372
+ const value = items . shift ( ) ;
373
+ if ( value !== undefined ) {
374
+ return Promise . resolve ( { done : false , value } ) ;
375
+ }
376
+
377
+ return Promise . resolve ( { done : true , value : undefined } ) ;
378
+ } ,
379
+ return ( ) : Promise < IteratorResult < number , void > > {
371
380
returned = true ;
372
- }
373
- }
381
+ return Promise . resolve ( { done : true , value : undefined } ) ;
382
+ } ,
383
+ throw ( ) : Promise < IteratorResult < number , void > > {
384
+ returned = true ;
385
+ return Promise . reject ( new Error ( ) ) ;
386
+ } ,
387
+ async [ Symbol . asyncDispose ] ( ) {
388
+ await this . return ( ) ;
389
+ } ,
390
+ } ;
374
391
375
392
{
376
- await using doubles = mapAsyncIterable ( source ( ) , ( x ) => x + x ) ;
393
+ await using doubles = mapAsyncIterable ( generator , ( x ) => x + x ) ;
377
394
378
395
expect ( await doubles . next ( ) ) . to . deep . equal ( { value : 2 , done : false } ) ;
379
396
expect ( await doubles . next ( ) ) . to . deep . equal ( { value : 4 , done : false } ) ;
0 commit comments