@@ -157,6 +157,41 @@ describe('AsyncIterableBuffer', () => {
157157 } ) ;
158158 } ) ;
159159
160+ describe ( 'end()' , ( ) => {
161+
162+ it ( 'prevents push() after end() is called' , ( ) => {
163+ const buffer = new AsyncIterableBuffer < number > ( ) ;
164+ buffer . end ( ) ;
165+ expect ( ( ) => buffer . push ( 42 ) ) . toThrow ( 'Iterable buffer is already closed' ) ;
166+ } ) ;
167+
168+ it ( 'allows next() to be called after end()' , async ( ) => {
169+ const buffer = new AsyncIterableBuffer < number > ( ) ;
170+ buffer . push ( 1 ) ;
171+ buffer . push ( 2 ) ;
172+ buffer . end ( ) ;
173+
174+ const result = await buffer . next ( ) ;
175+ expect ( result ) . toEqual ( { done : false , value : 1 } ) ;
176+ const result2 = await buffer . next ( ) ;
177+ expect ( result2 ) . toEqual ( { done : false , value : 2 } ) ;
178+ const result3 = await buffer . next ( ) ;
179+ expect ( result3 ) . toEqual ( { done : true , value : undefined } ) ;
180+ } ) ;
181+
182+ it ( 'resolves pending next() promises when end() is called' , async ( ) => {
183+ const buffer = new AsyncIterableBuffer < string > ( ) ;
184+ const nextPromise = buffer . next ( ) ;
185+ const nextPromise2 = buffer . next ( ) ;
186+ buffer . push ( 'hello' ) ;
187+ buffer . end ( ) ;
188+ const result = await nextPromise ;
189+ expect ( result ) . toEqual ( { done : false , value : 'hello' } ) ;
190+ const result2 = await nextPromise2 ;
191+ expect ( result2 ) . toEqual ( { done : true , value : undefined } ) ;
192+ } ) ;
193+ } ) ;
194+
160195 describe ( '[Symbol.asyncIterator]()' , ( ) => {
161196
162197 it ( 'returns the instance itself' , ( ) => {
0 commit comments