Skip to content

Commit

Permalink
test: fix flaky parallel/test-repl-history-navigation test
Browse files Browse the repository at this point in the history
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: #31708
Fixes: #31094
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
BridgeAR authored and addaleax committed Feb 13, 2020
1 parent d565041 commit 9da57a8
Showing 1 changed file with 8 additions and 13 deletions.
21 changes: 8 additions & 13 deletions test/parallel/test-repl-history-navigation.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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();
}
Expand Down Expand Up @@ -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 },
Expand Down Expand Up @@ -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]);
}
Expand Down

0 comments on commit 9da57a8

Please sign in to comment.