@@ -3,81 +3,122 @@ import { describe, it } from 'mocha';
33
44import { expectPromise } from '../../__testUtils__/expectPromise.js' ;
55
6- import { withCleanup } from '../withCleanup .js' ;
6+ import { withConcurrentAbruptClose } from '../withConcurrentAbruptClose .js' ;
77
88/* eslint-disable @typescript-eslint/require-await */
9- describe ( 'withCleanup ' , ( ) => {
10- it ( 'calls cleanup function when completes ' , async ( ) => {
9+ describe ( 'withConcurrentAbruptClose ' , ( ) => {
10+ it ( 'calls function when returned ' , async ( ) => {
1111 async function * source ( ) {
1212 yield 1 ;
1313 }
1414
1515 let done = false ;
16- const generator = withCleanup ( source ( ) , ( ) => {
16+
17+ const generator = withConcurrentAbruptClose ( source ( ) , ( ) => {
1718 done = true ;
1819 } ) ;
1920
2021 expect ( await generator . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
2122 expect ( done ) . to . equal ( false ) ;
22- expect ( await generator . next ( ) ) . to . deep . equal ( {
23+ expect ( await generator . return ( ) ) . to . deep . equal ( {
2324 value : undefined ,
2425 done : true ,
2526 } ) ;
2627 expect ( done ) . to . equal ( true ) ;
2728 } ) ;
2829
29- it ( 'calls cleanup function when completes with error ' , async ( ) => {
30+ it ( 'ignores sync errors when returned ' , async ( ) => {
3031 async function * source ( ) {
3132 yield 1 ;
32- throw new Error ( 'Oops' ) ;
3333 }
3434
35- let done = false ;
36- const generator = withCleanup ( source ( ) , ( ) => {
37- done = true ;
35+ const generator = withConcurrentAbruptClose ( source ( ) , ( ) => {
36+ throw new Error ( 'Oops' ) ;
3837 } ) ;
3938
4039 expect ( await generator . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
41- expect ( done ) . to . equal ( false ) ;
42- await expectPromise ( generator . next ( ) ) . toRejectWith ( 'Oops' ) ;
43- expect ( done ) . to . equal ( true ) ;
40+ expect ( await generator . return ( ) ) . to . deep . equal ( {
41+ value : undefined ,
42+ done : true ,
43+ } ) ;
4444 } ) ;
4545
46- it ( 'calls cleanup function when returned' , async ( ) => {
46+ it ( 'ignores async errors when returned' , async ( ) => {
4747 async function * source ( ) {
4848 yield 1 ;
4949 }
5050
51- let done = false ;
52- const generator = withCleanup ( source ( ) , ( ) => {
53- done = true ;
54- } ) ;
51+ const generator = withConcurrentAbruptClose ( source ( ) , ( ) =>
52+ Promise . reject ( new Error ( 'Oops' ) ) ,
53+ ) ;
5554
5655 expect ( await generator . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
57- expect ( done ) . to . equal ( false ) ;
5856 expect ( await generator . return ( ) ) . to . deep . equal ( {
5957 value : undefined ,
6058 done : true ,
6159 } ) ;
62- expect ( done ) . to . equal ( true ) ;
6360 } ) ;
6461
65- it ( 'calls cleanup function when thrown' , async ( ) => {
62+ it ( 'calls function when thrown' , async ( ) => {
6663 async function * source ( ) {
6764 yield 1 ;
6865 }
6966
7067 let done = false ;
71- const generator = withCleanup ( source ( ) , ( ) => {
72- done = true ;
73- } ) ;
68+ let error ;
69+ const generator = withConcurrentAbruptClose (
70+ source ( ) ,
71+ ( ) => {
72+ done = true ;
73+ } ,
74+ ( err ) => {
75+ done = true ;
76+ error = err ;
77+ } ,
78+ ) ;
7479
7580 expect ( await generator . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
7681 expect ( done ) . to . equal ( false ) ;
77- await expectPromise ( generator . throw ( new Error ( 'Oops' ) ) ) . toRejectWith (
78- 'Oops' ,
79- ) ;
82+ const oops = new Error ( 'Oops' ) ;
83+ await expectPromise ( generator . throw ( oops ) ) . toRejectWith ( 'Oops' ) ;
8084 expect ( done ) . to . equal ( true ) ;
85+ expect ( error ) . to . equal ( oops ) ;
86+ } ) ;
87+
88+ it ( 'ignores sync errors when thrown' , async ( ) => {
89+ async function * source ( ) {
90+ yield 1 ;
91+ }
92+
93+ const generator = withConcurrentAbruptClose (
94+ source ( ) ,
95+ ( ) => {
96+ throw new Error ( 'Ignored' ) ;
97+ } ,
98+ ( ) => {
99+ throw new Error ( 'Ignored' ) ;
100+ } ,
101+ ) ;
102+
103+ expect ( await generator . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
104+ const oops = new Error ( 'Oops' ) ;
105+ await expectPromise ( generator . throw ( oops ) ) . toRejectWith ( 'Oops' ) ;
106+ } ) ;
107+
108+ it ( 'ignores async errors when thrown' , async ( ) => {
109+ async function * source ( ) {
110+ yield 1 ;
111+ }
112+
113+ const generator = withConcurrentAbruptClose (
114+ source ( ) ,
115+ ( ) => Promise . reject ( new Error ( 'Ignored' ) ) ,
116+ ( ) => Promise . reject ( new Error ( 'Ignored' ) ) ,
117+ ) ;
118+
119+ expect ( await generator . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
120+ const oops = new Error ( 'Oops' ) ;
121+ await expectPromise ( generator . throw ( oops ) ) . toRejectWith ( 'Oops' ) ;
81122 } ) ;
82123
83124 it ( 'calls cleanup function when disposed' , async ( ) => {
@@ -109,17 +150,17 @@ describe('withCleanup', () => {
109150 } ,
110151 } ;
111152
112- let cleanedUp = false ;
153+ let called = false ;
113154 {
114- await using generator = withCleanup ( source , ( ) => {
115- cleanedUp = true ;
155+ await using generator = withConcurrentAbruptClose ( source , ( ) => {
156+ called = true ;
116157 } ) ;
117158
118159 expect ( await generator . next ( ) ) . to . deep . equal ( { value : 1 , done : false } ) ;
119160 expect ( await generator . next ( ) ) . to . deep . equal ( { value : 2 , done : false } ) ;
120161 }
121162
122- expect ( cleanedUp ) . to . equal ( true ) ;
163+ expect ( called ) . to . equal ( true ) ;
123164 expect ( returned ) . to . equal ( true ) ;
124165 } ) ;
125166
@@ -128,7 +169,7 @@ describe('withCleanup', () => {
128169 yield 1 ;
129170 }
130171
131- const generator = withCleanup ( source ( ) , ( ) => {
172+ const generator = withConcurrentAbruptClose ( source ( ) , ( ) => {
132173 /* noop */
133174 } ) ;
134175
0 commit comments