diff options
author | Matteo Collina <hello@matteocollina.com> | 2018-11-27 09:24:48 +0100 |
---|---|---|
committer | Matteo Collina <hello@matteocollina.com> | 2018-11-29 17:13:29 +0100 |
commit | fa1535aed7f8dcfe0400f6359c068253032f5973 (patch) | |
tree | 7d64abd55b757adf2ce90ad20b2f7d731ef32a06 /test | |
parent | 9e33e86180b7c1035d13bd201bdeffff0b7e70fd (diff) | |
download | android-node-v8-fa1535aed7f8dcfe0400f6359c068253032f5973.tar.gz android-node-v8-fa1535aed7f8dcfe0400f6359c068253032f5973.tar.bz2 android-node-v8-fa1535aed7f8dcfe0400f6359c068253032f5973.zip |
stream: make async iterator .next() always resolve
See: https://github.com/nodejs/readable-stream/issues/387
PR-URL: https://github.com/nodejs/node/pull/24668
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'test')
-rw-r--r-- | test/parallel/test-stream-readable-async-iterators.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/test/parallel/test-stream-readable-async-iterators.js b/test/parallel/test-stream-readable-async-iterators.js index 83540de9de..aca1e5bcc9 100644 --- a/test/parallel/test-stream-readable-async-iterators.js +++ b/test/parallel/test-stream-readable-async-iterators.js @@ -393,6 +393,71 @@ async function tests() { r.destroy(null); } })(); + + await (async () => { + console.log('all next promises must be resolved on end'); + const r = new Readable({ + objectMode: true, + read() { + } + }); + + const b = r[Symbol.asyncIterator](); + const c = b.next(); + const d = b.next(); + r.push(null); + assert.deepStrictEqual(await c, { done: true, value: undefined }); + assert.deepStrictEqual(await d, { done: true, value: undefined }); + })(); + + await (async () => { + console.log('all next promises must be resolved on destroy'); + const r = new Readable({ + objectMode: true, + read() { + } + }); + + const b = r[Symbol.asyncIterator](); + const c = b.next(); + const d = b.next(); + r.destroy(); + assert.deepStrictEqual(await c, { done: true, value: undefined }); + assert.deepStrictEqual(await d, { done: true, value: undefined }); + })(); + + await (async () => { + console.log('all next promises must be resolved on destroy with error'); + const r = new Readable({ + objectMode: true, + read() { + } + }); + + const b = r[Symbol.asyncIterator](); + const c = b.next(); + const d = b.next(); + const err = new Error('kaboom'); + r.destroy(err); + + await Promise.all([(async () => { + let e; + try { + await c; + } catch (_e) { + e = _e; + } + assert.strictEqual(e, err); + })(), (async () => { + let e; + try { + await d; + } catch (_e) { + e = _e; + } + assert.strictEqual(e, err); + })()]); + })(); } // to avoid missing some tests if a promise does not resolve |