From 682584543cb5a6250be0041a007aa60420c547a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Sat, 23 Jul 2022 22:44:26 +0200 Subject: [PATCH] test: simplify ReplStream.wait() PR-URL: https://github.com/nodejs/node/pull/43857 Reviewed-By: Luigi Pinca --- test/parallel/test-repl-preview.js | 25 +++++++--------------- test/parallel/test-repl-top-level-await.js | 25 +++++++--------------- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/test/parallel/test-repl-preview.js b/test/parallel/test-repl-preview.js index 620f41296e91f0..6eb2a169918a51 100644 --- a/test/parallel/test-repl-preview.js +++ b/test/parallel/test-repl-preview.js @@ -2,6 +2,7 @@ const common = require('../common'); const assert = require('assert'); +const events = require('events'); const { REPLServer } = require('repl'); const { Stream } = require('stream'); const { inspect } = require('util'); @@ -32,26 +33,16 @@ class REPLStream extends Stream { if (chunkLines.length > 1) { this.lines.push(...chunkLines.slice(1)); } - this.emit('line'); + this.emit('line', this.lines[this.lines.length - 1]); return true; } - wait() { + async wait() { this.lines = ['']; - return new Promise((resolve, reject) => { - const onError = (err) => { - this.removeListener('line', onLine); - reject(err); - }; - const onLine = () => { - if (this.lines[this.lines.length - 1].includes(PROMPT)) { - this.removeListener('error', onError); - this.removeListener('line', onLine); - resolve(this.lines); - } - }; - this.once('error', onError); - this.on('line', onLine); - }); + for await (const [line] of events.on(this, 'line')) { + if (line.includes(PROMPT)) { + return this.lines; + } + } } pause() {} resume() {} diff --git a/test/parallel/test-repl-top-level-await.js b/test/parallel/test-repl-top-level-await.js index 4ab2a32ee09bc0..1abcca75f1e2a0 100644 --- a/test/parallel/test-repl-top-level-await.js +++ b/test/parallel/test-repl-top-level-await.js @@ -3,6 +3,7 @@ const common = require('../common'); const ArrayStream = require('../common/arraystream'); const assert = require('assert'); +const events = require('events'); const { stripVTControlCharacters } = require('internal/util/inspect'); const repl = require('repl'); @@ -27,31 +28,21 @@ class REPLStream extends ArrayStream { if (chunkLines.length > 1) { this.lines.push(...chunkLines.slice(1)); } - this.emit('line'); + this.emit('line', this.lines[this.lines.length - 1]); if (callback) callback(); return true; } - wait() { + async wait() { if (this.waitingForResponse) { throw new Error('Currently waiting for response to another command'); } this.lines = ['']; - return new Promise((resolve, reject) => { - const onError = (err) => { - this.removeListener('line', onLine); - reject(err); - }; - const onLine = () => { - if (this.lines[this.lines.length - 1].includes(PROMPT)) { - this.removeListener('error', onError); - this.removeListener('line', onLine); - resolve(this.lines); - } - }; - this.once('error', onError); - this.on('line', onLine); - }); + for await (const [line] of events.on(this, 'line')) { + if (line.includes(PROMPT)) { + return this.lines; + } + } } }