From 01170a6e9323a50fb2d057b3ee8cbc2ccc91083b Mon Sep 17 00:00:00 2001 From: Marco Castelluccio Date: Tue, 16 Feb 2021 00:41:13 +0000 Subject: [PATCH] Bug 1687401 [wpt PR 27236] - Streams: settle reader.[[closedPromise]] before performing close/error steps of read requests, a=testonly Automatic update from web-platform-tests Streams: settle reader.[[closedPromise]] before performing close/error steps of read requests Follows https://github.com/whatwg/streams/pull/1102. -- wpt-commits: 7e94a4bcb5bd6808e08ed8db46fa63751543db52 wpt-pr: 27236 UltraBlame original commit: 20f8538ad6904319bdc6519519173023ebab1f2b --- .../readable-streams/async-iterator.any.js | 205 ++++++++++++++ .../readable-streams/default-reader.any.js | 257 ++++++++++++++++++ .../streams/readable-streams/general.any.js | 4 +- 3 files changed, 464 insertions(+), 2 deletions(-) diff --git a/testing/web-platform/tests/streams/readable-streams/async-iterator.any.js b/testing/web-platform/tests/streams/readable-streams/async-iterator.any.js index 2b70acce6aea6..334a3e48ac70f 100644 --- a/testing/web-platform/tests/streams/readable-streams/async-iterator.any.js +++ b/testing/web-platform/tests/streams/readable-streams/async-iterator.any.js @@ -4530,3 +4530,208 @@ preventCancel ) ; } +promise_test +( +async +( +) += +> +{ +const +rs += +new +ReadableStream +( +{ +async +start +( +c +) +{ +c +. +enqueue +( +' +a +' +) +; +c +. +enqueue +( +' +b +' +) +; +c +. +enqueue +( +' +c +' +) +; +await +flushAsyncEvents +( +) +; +/ +/ +At +this +point +the +async +iterator +has +a +read +request +in +the +stream +' +s +queue +for +its +pending +next +( +) +promise +. +/ +/ +Closing +the +stream +now +causes +two +things +to +happen +* +synchronously +* +: +/ +/ +1 +. +ReadableStreamClose +resolves +reader +. +[ +[ +closedPromise +] +] +with +undefined +. +/ +/ +2 +. +ReadableStreamClose +calls +the +read +request +' +s +close +steps +which +calls +ReadableStreamReaderGenericRelease +/ +/ +which +replaces +reader +. +[ +[ +closedPromise +] +] +with +a +rejected +promise +. +c +. +close +( +) +; +} +} +) +; +const +chunks += +[ +] +; +for +await +( +const +chunk +of +rs +) +{ +chunks +. +push +( +chunk +) +; +} +assert_array_equals +( +chunks +[ +' +a +' +' +b +' +' +c +' +] +) +; +} +' +close +( +) +while +next +( +) +is +pending +' +) +; diff --git a/testing/web-platform/tests/streams/readable-streams/default-reader.any.js b/testing/web-platform/tests/streams/readable-streams/default-reader.any.js index f0e7db83566bb..5a002ccccedf0 100644 --- a/testing/web-platform/tests/streams/readable-streams/default-reader.any.js +++ b/testing/web-platform/tests/streams/readable-streams/default-reader.any.js @@ -1030,6 +1030,263 @@ locks ; promise_test ( +t += +> +{ +let +controller +; +const +rs += +new +ReadableStream +( +{ +start +( +c +) +{ +controller += +c +; +} +} +) +; +const +reader += +rs +. +getReader +( +) +; +const +promise1 += +reader +. +closed +; +controller +. +close +( +) +; +reader +. +releaseLock +( +) +; +const +promise2 += +reader +. +closed +; +assert_not_equals +( +promise1 +promise2 +' +. +closed +should +be +replaced +' +) +; +return +Promise +. +all +( +[ +promise1 +promise_rejects_js +( +t +TypeError +promise2 +' +. +closed +after +releasing +lock +' +) +] +) +; +} +' +closed +is +replaced +when +stream +closes +and +reader +releases +its +lock +' +) +; +promise_test +( +t += +> +{ +const +theError += +{ +name +: +' +unique +error +' +} +; +let +controller +; +const +rs += +new +ReadableStream +( +{ +start +( +c +) +{ +controller += +c +; +} +} +) +; +const +reader += +rs +. +getReader +( +) +; +const +promise1 += +reader +. +closed +; +controller +. +error +( +theError +) +; +reader +. +releaseLock +( +) +; +const +promise2 += +reader +. +closed +; +assert_not_equals +( +promise1 +promise2 +' +. +closed +should +be +replaced +' +) +; +return +Promise +. +all +( +[ +promise_rejects_exactly +( +t +theError +promise1 +' +. +closed +before +releasing +lock +' +) +promise_rejects_js +( +t +TypeError +promise2 +' +. +closed +after +releasing +lock +' +) +] +) +; +} +' +closed +is +replaced +when +stream +errors +and +reader +releases +its +lock +' +) +; +promise_test +( ( ) = diff --git a/testing/web-platform/tests/streams/readable-streams/general.any.js b/testing/web-platform/tests/streams/readable-streams/general.any.js index 968e803e92f71..bbb12aba02269 100644 --- a/testing/web-platform/tests/streams/readable-streams/general.any.js +++ b/testing/web-platform/tests/streams/readable-streams/general.any.js @@ -1487,7 +1487,7 @@ closed = true ; -assert_true +assert_false ( read ) @@ -1544,7 +1544,7 @@ read = true ; -assert_false +assert_true ( closed )