test: fix flaky parallel/test-repl-history-navigation test

Two scenarios should be tested:

1. The completion is triggered and the result is printed before the
   next invocation.
2. The completion is triggered multiple times right after each other
   without waiting for the result. In that case only the last result
   should be printed.

The first scenario did not need a timeout while the latter did not
need a timeout for the second invocation.

PR-URL: https://github.com/nodejs/node/pull/31708
Fixes: https://github.com/nodejs/node/issues/31094
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Ruben Bridgewater
2020-02-09 14:42:57 +01:00
committed by Anna Henningsen
parent d565041876
commit 9da57a86ee

View File

@@ -18,7 +18,6 @@ const defaultHistoryPath = path.join(tmpdir.path, '.node_repl_history');
// Create an input stream specialized for testing an array of actions
class ActionStream extends stream.Stream {
run(data) {
let reallyWait = true;
const _iter = data[Symbol.iterator]();
const doAction = () => {
const next = _iter.next();
@@ -34,12 +33,7 @@ class ActionStream extends stream.Stream {
} else {
this.emit('data', `${action}`);
}
if (action === WAIT && reallyWait) {
setTimeout(doAction, common.platformTimeout(50));
reallyWait = false;
} else {
setImmediate(doAction);
}
setImmediate(doAction);
};
doAction();
}
@@ -67,6 +61,8 @@ const WAIT = '€';
const prev = process.features.inspector;
let completions = 0;
const tests = [
{ // Creates few history to navigate for
env: { NODE_REPL_HISTORY: defaultHistoryPath },
@@ -435,12 +431,11 @@ const tests = [
env: { NODE_REPL_HISTORY: defaultHistoryPath },
completer(line, callback) {
if (line.endsWith(WAIT)) {
setTimeout(
callback,
common.platformTimeout(40),
null,
[[`${WAIT}WOW`], line]
);
if (completions++ === 0) {
callback(null, [[`${WAIT}WOW`], line]);
} else {
setTimeout(callback, 1000, null, [[`${WAIT}WOW`], line]).unref();
}
} else {
callback(null, [[' Always visible'], line]);
}