repl: Default useGlobal
to false in CLI REPL.
Documentation for REPL states that the default value of `useGlobal` is `false`. It makes no distinction between a REPL that is created programmatically, and the one a user is dropped into on the command line by executing `node` with no arguments. This change ensures that the CLI REPL uses a default value of `false`. Fixes: https://github.com/nodejs/node/issues/5659 Ref: https://github.com/nodejs/node/issues/6802 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> PR-URL: https://github.com/nodejs/node/pull/5703
This commit is contained in:
parent
dc17432208
commit
15157c3c3d
@ -22,7 +22,7 @@ function createRepl(env, opts, cb) {
|
|||||||
opts = opts || {
|
opts = opts || {
|
||||||
ignoreUndefined: false,
|
ignoreUndefined: false,
|
||||||
terminal: process.stdout.isTTY,
|
terminal: process.stdout.isTTY,
|
||||||
useGlobal: true,
|
useGlobal: false,
|
||||||
breakEvalOnSigint: true
|
breakEvalOnSigint: true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
85
test/parallel/test-repl-use-global.js
Normal file
85
test/parallel/test-repl-use-global.js
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Flags: --expose-internals
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const stream = require('stream');
|
||||||
|
const repl = require('internal/repl');
|
||||||
|
const assert = require('assert');
|
||||||
|
|
||||||
|
common.globalCheck = false;
|
||||||
|
|
||||||
|
// Array of [useGlobal, expectedResult] pairs
|
||||||
|
const globalTestCases = [
|
||||||
|
[false, 'undefined'],
|
||||||
|
[true, '\'tacos\''],
|
||||||
|
[undefined, 'undefined']
|
||||||
|
];
|
||||||
|
|
||||||
|
const globalTest = (useGlobal, cb, output) => (err, repl) => {
|
||||||
|
if (err)
|
||||||
|
return cb(err);
|
||||||
|
|
||||||
|
let str = '';
|
||||||
|
output.on('data', (data) => (str += data));
|
||||||
|
global.lunch = 'tacos';
|
||||||
|
repl.write('global.lunch;\n');
|
||||||
|
repl.close();
|
||||||
|
delete global.lunch;
|
||||||
|
cb(null, str.trim());
|
||||||
|
};
|
||||||
|
|
||||||
|
// Test how the global object behaves in each state for useGlobal
|
||||||
|
for (const [option, expected] of globalTestCases) {
|
||||||
|
runRepl(option, globalTest, common.mustCall((err, output) => {
|
||||||
|
assert.ifError(err);
|
||||||
|
assert.strictEqual(output, expected);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test how shadowing the process object via `let`
|
||||||
|
// behaves in each useGlobal state. Note: we can't
|
||||||
|
// actually test the state when useGlobal is true,
|
||||||
|
// because the exception that's generated is caught
|
||||||
|
// (see below), but errors are printed, and the test
|
||||||
|
// suite is aware of it, causing a failure to be flagged.
|
||||||
|
//
|
||||||
|
const processTestCases = [false, undefined];
|
||||||
|
const processTest = (useGlobal, cb, output) => (err, repl) => {
|
||||||
|
if (err)
|
||||||
|
return cb(err);
|
||||||
|
|
||||||
|
let str = '';
|
||||||
|
output.on('data', (data) => (str += data));
|
||||||
|
|
||||||
|
// if useGlobal is false, then `let process` should work
|
||||||
|
repl.write('let process;\n');
|
||||||
|
repl.write('21 * 2;\n');
|
||||||
|
repl.close();
|
||||||
|
cb(null, str.trim());
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const option of processTestCases) {
|
||||||
|
runRepl(option, processTest, common.mustCall((err, output) => {
|
||||||
|
assert.ifError(err);
|
||||||
|
assert.strictEqual(output, 'undefined\n42');
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function runRepl(useGlobal, testFunc, cb) {
|
||||||
|
const inputStream = new stream.PassThrough();
|
||||||
|
const outputStream = new stream.PassThrough();
|
||||||
|
const opts = {
|
||||||
|
input: inputStream,
|
||||||
|
output: outputStream,
|
||||||
|
useGlobal: useGlobal,
|
||||||
|
useColors: false,
|
||||||
|
terminal: false,
|
||||||
|
prompt: ''
|
||||||
|
};
|
||||||
|
|
||||||
|
repl.createInternalRepl(
|
||||||
|
process.env,
|
||||||
|
opts,
|
||||||
|
testFunc(useGlobal, cb, opts.output));
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user