test: simplify ReplStream.wait()

PR-URL: https://github.com/nodejs/node/pull/43857
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
Tobias Nießen
2022-07-23 22:44:26 +02:00
committed by GitHub
parent df7c49c91d
commit 7ef069e483
2 changed files with 16 additions and 34 deletions

View File

@@ -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() {}

View File

@@ -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;
}
}
}
}