@@ -19,7 +19,7 @@ describe('PromiseBuffer', () => {
1919 void buffer . add ( producer3 ) ;
2020 void buffer . add ( producer4 ) ;
2121 void buffer . add ( producer5 ) ;
22- void expect ( buffer . add ( producer6 ) ) . rejects . toThrowError ( ) ;
22+ await expect ( buffer . add ( producer6 ) ) . rejects . toThrowError ( ) ;
2323
2424 expect ( producer1 ) . toHaveBeenCalledTimes ( 1 ) ;
2525 expect ( producer2 ) . toHaveBeenCalledTimes ( 1 ) ;
@@ -42,7 +42,7 @@ describe('PromiseBuffer', () => {
4242 expect ( producer6 ) . not . toHaveBeenCalled ( ) ;
4343 } ) ;
4444
45- test ( 'sync promises' , ( ) => {
45+ test ( 'sync promises' , async ( ) => {
4646 const buffer = makePromiseBuffer ( 1 ) ;
4747 let task1 ;
4848 const producer1 = vi . fn ( ( ) => {
@@ -51,14 +51,18 @@ describe('PromiseBuffer', () => {
5151 } ) ;
5252 const producer2 = vi . fn ( ( ) => resolvedSyncPromise ( ) ) ;
5353 expect ( buffer . add ( producer1 ) ) . toEqual ( task1 ) ;
54- void expect ( buffer . add ( producer2 ) ) . rejects . toThrowError ( ) ;
54+ const add2 = buffer . add ( producer2 ) ;
55+
5556 // This is immediately executed and removed again from the buffer
5657 expect ( buffer . $ . length ) . toEqual ( 0 ) ;
58+
59+ await expect ( add2 ) . resolves . toBeUndefined ( ) ;
60+
5761 expect ( producer1 ) . toHaveBeenCalled ( ) ;
5862 expect ( producer2 ) . toHaveBeenCalled ( ) ;
5963 } ) ;
6064
61- test ( 'async promises' , ( ) => {
65+ test ( 'async promises' , async ( ) => {
6266 const buffer = makePromiseBuffer ( 1 ) ;
6367 let task1 ;
6468 const producer1 = vi . fn ( ( ) => {
@@ -67,8 +71,12 @@ describe('PromiseBuffer', () => {
6771 } ) ;
6872 const producer2 = vi . fn ( ( ) => new Promise ( resolve => setTimeout ( resolve , 1 ) ) ) ;
6973 expect ( buffer . add ( producer1 ) ) . toEqual ( task1 ) ;
70- void expect ( buffer . add ( producer2 ) ) . rejects . toThrowError ( ) ;
74+ const add2 = buffer . add ( producer2 ) ;
75+
7176 expect ( buffer . $ . length ) . toEqual ( 1 ) ;
77+
78+ await expect ( add2 ) . rejects . toThrowError ( ) ;
79+
7280 expect ( producer1 ) . toHaveBeenCalled ( ) ;
7381 expect ( producer2 ) . not . toHaveBeenCalled ( ) ;
7482 } ) ;
@@ -159,6 +167,21 @@ describe('PromiseBuffer', () => {
159167 expect ( result ) . toEqual ( true ) ;
160168 expect ( buffer . $ . length ) . toEqual ( 0 ) ;
161169 } ) ;
170+
171+ test ( 'resolves even if one of the promises rejects' , async ( ) => {
172+ const buffer = makePromiseBuffer ( ) ;
173+ const p1 = vi . fn ( ( ) => new Promise ( resolve => setTimeout ( resolve , 1 ) ) ) ;
174+ const p2 = vi . fn ( ( ) => new Promise ( ( _ , reject ) => setTimeout ( ( ) => reject ( new Error ( 'whoops' ) ) , 1 ) ) ) ;
175+ void buffer . add ( p1 ) ;
176+ void buffer . add ( p2 ) ;
177+
178+ const result = await buffer . drain ( ) ;
179+ expect ( result ) . toEqual ( true ) ;
180+ expect ( buffer . $ . length ) . toEqual ( 0 ) ;
181+
182+ expect ( p1 ) . toHaveBeenCalled ( ) ;
183+ expect ( p2 ) . toHaveBeenCalled ( ) ;
184+ } ) ;
162185 } ) ;
163186
164187 test ( 'resolved promises should not show up in buffer length' , async ( ) => {
0 commit comments