'use strict'; const common = require('../common'); const { describe, it } = require('node:test'); const assert = require('assert'); const { startNewREPLServer } = require('../common/repl'); function getNoResultsFunction() { return common.mustSucceed((data) => { assert.deepStrictEqual(data[0], []); }); } describe('REPL tab completion without side effects', () => { const setup = [ 'globalThis.counter = 0;', 'function incCounter() { return counter++; }', 'const arr = [{ bar: "baz" }];', ]; // None of these expressions should affect the value of `counter` for (const code of [ 'incCounter().', 'a=(counter+=1).foo.', 'a=(counter++).foo.', 'for((counter)of[1])foo.', 'for((counter)in{1:1})foo.', 'arr[incCounter()].b', ]) { it(`does not evaluate with side effects (${code})`, async () => { const { replServer, input } = startNewREPLServer(); input.run(setup); replServer.complete(code, getNoResultsFunction()); assert.strictEqual(replServer.context.counter, 0); replServer.close(); }); } });