diff --git a/test/parallel/test-debugger-util-regression.js b/test/parallel/test-debugger-util-regression.js index 07e52545814b14..fa5b9e8b0a0e06 100644 --- a/test/parallel/test-debugger-util-regression.js +++ b/test/parallel/test-debugger-util-regression.js @@ -4,6 +4,8 @@ const path = require('path'); const spawn = require('child_process').spawn; const assert = require('assert'); +const DELAY = common.platformTimeout(200); + const fixture = path.join( common.fixturesDir, 'debugger-util-regression-fixture.js' @@ -21,12 +23,16 @@ proc.stderr.setEncoding('utf8'); let stdout = ''; let stderr = ''; +proc.stdout.on('data', (data) => stdout += data); +proc.stderr.on('data', (data) => stderr += data); let nextCount = 0; let exit = false; -proc.stdout.on('data', (data) => { - stdout += data; +// We look at output periodically. We don't do this in the on('data') as we +// may end up processing partial output. Processing periodically ensures that +// the debugger is in a stable state before we take the next step. +const timer = setInterval(() => { if (stdout.includes('> 1') && nextCount < 1 || stdout.includes('> 2') && nextCount < 2 || stdout.includes('> 3') && nextCount < 3 || @@ -36,14 +42,14 @@ proc.stdout.on('data', (data) => { } else if (!exit && (stdout.includes('< { a: \'b\' }'))) { exit = true; proc.stdin.write('.exit\n'); + // We can cancel the timer and terminate normally. + clearInterval(timer); } else if (stdout.includes('program terminated')) { // Catch edge case present in v4.x // process will terminate after call to util.inspect common.fail('the program should not terminate'); } -}); - -proc.stderr.on('data', (data) => stderr += data); +}, DELAY); process.on('exit', (code) => { assert.strictEqual(code, 0, 'the program should exit cleanly');