summaryrefslogtreecommitdiff
path: root/test/parallel/test-stream-readable-async-iterators.js
diff options
context:
space:
mode:
authorMatteo Collina <hello@matteocollina.com>2018-11-27 09:24:48 +0100
committerMatteo Collina <hello@matteocollina.com>2018-11-29 17:13:29 +0100
commitfa1535aed7f8dcfe0400f6359c068253032f5973 (patch)
tree7d64abd55b757adf2ce90ad20b2f7d731ef32a06 /test/parallel/test-stream-readable-async-iterators.js
parent9e33e86180b7c1035d13bd201bdeffff0b7e70fd (diff)
downloadandroid-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/parallel/test-stream-readable-async-iterators.js')
-rw-r--r--test/parallel/test-stream-readable-async-iterators.js65
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