@@ -147,10 +147,16 @@ async function testOndrainRejectsOnConsumerThrow() {
147147 // Consumer throws via iterator.throw() before draining enough
148148 // to clear backpressure. The drain should reject.
149149 const iter = readable [ Symbol . asyncIterator ] ( ) ;
150- await iter . throw ( new Error ( 'consumer error' ) ) ;
150+ const err = new Error ( 'consumer error' ) ;
151+ const drainRejects = assert . rejects ( drainPromise , ( e ) => e === err ) ;
152+ const pendingWriteRejects = pendingWrite . catch ( ( ) => { } ) ;
153+ await assert . rejects (
154+ ( ) => iter . throw ( err ) ,
155+ ( e ) => e === err ,
156+ ) ;
151157
152- await assert . rejects ( drainPromise , / c o n s u m e r e r r o r / ) ;
153- await pendingWrite . catch ( ( ) => { } ) ; // Ignore write rejection
158+ await drainRejects ;
159+ await pendingWriteRejects ; // Ignore write rejection
154160}
155161
156162async function testWritev ( ) {
@@ -303,7 +309,11 @@ async function testConsumerThrowRejectsWrites() {
303309 writer . writeSync ( 'a' ) ;
304310
305311 const iter = readable [ Symbol . asyncIterator ] ( ) ;
306- await iter . throw ( new Error ( 'consumer boom' ) ) ;
312+ const err = new Error ( 'consumer boom' ) ;
313+ await assert . rejects (
314+ ( ) => iter . throw ( err ) ,
315+ ( e ) => e === err ,
316+ ) ;
307317
308318 // Subsequent async writes should reject with the consumer's error
309319 await assert . rejects (
@@ -312,6 +322,18 @@ async function testConsumerThrowRejectsWrites() {
312322 ) ;
313323}
314324
325+ async function testConsumerThrowRejectsWithThrownError ( ) {
326+ const { readable } = push ( ) ;
327+
328+ const iter = readable [ Symbol . asyncIterator ] ( ) ;
329+ const err = new Error ( 'boom' ) ;
330+
331+ await assert . rejects (
332+ ( ) => iter . throw ( err ) ,
333+ ( e ) => e === err ,
334+ ) ;
335+ }
336+
315337// end() resolves a pending read as done:true
316338async function testEndResolvesPendingRead ( ) {
317339 const { writer, readable } = push ( ) ;
@@ -373,14 +395,16 @@ async function testConsumerThrowRejectsPendingRead() {
373395 await new Promise ( setImmediate ) ;
374396
375397 const err = new Error ( 'consumer read boom' ) ;
376- const throwResult = await iter . throw ( err ) ;
377- assert . strictEqual ( throwResult . value , undefined ) ;
378- assert . strictEqual ( throwResult . done , true ) ;
379-
380- await assert . rejects (
398+ const readRejects = assert . rejects (
381399 ( ) => readPromise ,
382400 ( e ) => e === err ,
383401 ) ;
402+ await assert . rejects (
403+ ( ) => iter . throw ( err ) ,
404+ ( e ) => e === err ,
405+ ) ;
406+
407+ await readRejects ;
384408}
385409
386410// end() while writes are pending rejects those writes
@@ -527,6 +551,7 @@ Promise.all([
527551 testWriteUint8Array ( ) ,
528552 testOndrainWaitsForDrain ( ) ,
529553 testConsumerThrowRejectsWrites ( ) ,
554+ testConsumerThrowRejectsWithThrownError ( ) ,
530555 testEndResolvesPendingRead ( ) ,
531556 testFailRejectsPendingRead ( ) ,
532557 testFailRejectsFutureReadWithFalsyReason ( ) ,
0 commit comments