node/test/parallel/test-repl-custom-eval-previews.js
Dario Piotrowicz 9ac571d0d5
test: add new startNewREPLSever testing utility
PR-URL: https://github.com/nodejs/node/pull/59964
Reviewed-By: Vinícius Lourenço Claro Cardoso <contact@viniciusl.com.br>
2025-09-30 15:20:02 +02:00

93 lines
2.7 KiB
JavaScript

'use strict';
const common = require('../common');
const assert = require('assert');
const { describe, it } = require('node:test');
common.skipIfInspectorDisabled();
const { startNewREPLServer } = require('../common/repl');
const testingReplPrompt = '_REPL_TESTING_PROMPT_>';
// Processes some input in a REPL instance and returns a promise that
// resolves to the produced output (as a string).
function getReplRunOutput(inputStr, replOptions) {
return new Promise((resolve) => {
const { replServer, input, output } = startNewREPLServer({ prompt: testingReplPrompt, ...replOptions });
output.accumulator = '';
output.write = (chunk) => {
output.accumulator += chunk;
// The prompt appears after the input has been processed
if (output.accumulator.includes(testingReplPrompt)) {
replServer.close();
resolve(output.accumulator);
}
};
input.emit('data', inputStr);
input.run(['']);
});
}
describe('with previews', () => {
it("doesn't show previews by default", async () => {
const input = "'Hello custom' + ' eval World!'";
const output = await getReplRunOutput(
input,
{
terminal: true,
eval: (code, _ctx, _replRes, cb) => cb(null, eval(code)),
},
);
const lines = getSingleCommandLines(output);
assert.match(lines.command, /^'Hello custom' \+ ' eval World!'/);
assert.match(lines.prompt, new RegExp(`${testingReplPrompt}$`));
assert.strictEqual(lines.result, "'Hello custom eval World!'");
assert.strictEqual(lines.preview, undefined);
});
it('does show previews if `preview` is set to `true`', async () => {
const input = "'Hello custom' + ' eval World!'";
const output = await getReplRunOutput(
input,
{
terminal: true,
eval: (code, _ctx, _replRes, cb) => cb(null, eval(code)),
preview: true,
},
);
const lines = getSingleCommandLines(output);
assert.match(lines.command, /^'Hello custom' \+ ' eval World!'/);
assert.match(lines.prompt, new RegExp(`${testingReplPrompt}$`));
assert.strictEqual(lines.result, "'Hello custom eval World!'");
assert.match(lines.preview, /'Hello custom eval World!'/);
});
});
function getSingleCommandLines(output) {
const outputLines = output.split('\n');
// The first line contains the command being run
const command = outputLines.shift();
// The last line contains the prompt (asking for some new input)
const prompt = outputLines.pop();
// The line before the last one contains the result of the command
const result = outputLines.pop();
// The line before that contains the preview of the command
const preview = outputLines.shift();
return {
command,
prompt,
result,
preview,
};
}