diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js index 911a700d68d..9994ac12ecf 100644 --- a/lib/internal/test_runner/runner.js +++ b/lib/internal/test_runner/runner.js @@ -4,21 +4,19 @@ const { ArrayPrototypeFilter, ArrayPrototypeIncludes, ArrayPrototypeJoin, - ArrayPrototypePop, ArrayPrototypePush, ArrayPrototypeSlice, ArrayPrototypeSort, ObjectAssign, PromisePrototypeThen, - RegExpPrototypeSymbolSplit, SafePromiseAll, SafeSet, - StringPrototypeEndsWith, } = primordials; -const { Buffer } = require('buffer'); const { spawn } = require('child_process'); const { readdirSync, statSync } = require('fs'); +// TODO(aduh95): switch to internal/readline/interface when backporting to Node.js 16.x is no longer a concern. +const { createInterface } = require('readline'); const console = require('internal/console/global'); const { codes: { @@ -114,28 +112,6 @@ function getRunArgs({ path, inspectPort }) { return argv; } -function makeStderrCallback(callback) { - if (!isUsingInspector()) { - return callback; - } - let buffer = Buffer.alloc(0); - return (data) => { - callback(data); - const newData = Buffer.concat([buffer, data]); - const str = newData.toString('utf8'); - let lines = str; - if (StringPrototypeEndsWith(lines, '\n')) { - buffer = Buffer.alloc(0); - } else { - lines = RegExpPrototypeSymbolSplit(/\r?\n/, str); - buffer = Buffer.from(ArrayPrototypePop(lines), 'utf8'); - lines = ArrayPrototypeJoin(lines, '\n'); - } - if (isInspectorMessage(lines)) { - process.stderr.write(lines); - } - }; -} function runTestFile(path, root, inspectPort) { const subtest = root.createSubtest(Test, path, async (t) => { @@ -151,9 +127,18 @@ function runTestFile(path, root, inspectPort) { err = error; }); - child.stderr.on('data', makeStderrCallback((data) => { + child.stderr.on('data', (data) => { stderr += data; - })); + }); + + if (isUsingInspector()) { + const rl = createInterface({ input: child.stderr }); + rl.on('line', (line) => { + if (isInspectorMessage(line)) { + process.stderr.write(line + '\n'); + } + }); + } const { 0: { 0: code, 1: signal }, 1: stdout } = await SafePromiseAll([ once(child, 'exit', { signal: t.signal }),