From 2d4a521d5868457d5d5675a824b3c3a5cfaf0985 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Thu, 21 Jul 2016 13:17:07 -0400 Subject: [PATCH] repl: don't override all internal repl defaults The createInternalRepl() module accepts an options object as an argument. However, if one is provided, it overrides all of the default options. This commit applies the options object to the defaults, only changing the values that are explicitly set. PR-URL: https://github.com/nodejs/node/pull/7826 Reviewed-By: James M Snell --- lib/internal/repl.js | 7 ++++--- test/parallel/test-repl-envvars.js | 6 +++++- test/parallel/test-repl-history-perm.js | 4 ++++ test/parallel/test-repl-persistent-history.js | 3 +++ test/parallel/test-repl-use-global.js | 5 +++-- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/internal/repl.js b/lib/internal/repl.js index dd14f42fa5..7782d6b84b 100644 --- a/lib/internal/repl.js +++ b/lib/internal/repl.js @@ -5,7 +5,8 @@ const REPL = require('repl'); const path = require('path'); const fs = require('fs'); const os = require('os'); -const debug = require('util').debuglog('repl'); +const util = require('util'); +const debug = util.debuglog('repl'); module.exports = Object.create(REPL); module.exports.createInternalRepl = createRepl; @@ -19,12 +20,12 @@ function createRepl(env, opts, cb) { cb = opts; opts = null; } - opts = opts || { + opts = util._extend({ ignoreUndefined: false, terminal: process.stdout.isTTY, useGlobal: true, breakEvalOnSigint: true - }; + }, opts); if (parseInt(env.NODE_NO_READLINE)) { opts.terminal = false; diff --git a/test/parallel/test-repl-envvars.js b/test/parallel/test-repl-envvars.js index 759b4e15a1..b08f6cbaf6 100644 --- a/test/parallel/test-repl-envvars.js +++ b/test/parallel/test-repl-envvars.js @@ -2,7 +2,7 @@ // Flags: --expose-internals -require('../common'); +const common = require('../common'); const stream = require('stream'); const REPL = require('internal/repl'); const assert = require('assert'); @@ -46,6 +46,10 @@ function run(test) { REPL.createInternalRepl(env, opts, function(err, repl) { if (err) throw err; + + // The REPL registers 'module' and 'require' globals + common.allowGlobals(repl.context.module, repl.context.require); + assert.equal(expected.terminal, repl.terminal, 'Expected ' + inspect(expected) + ' with ' + inspect(env)); assert.equal(expected.useColors, repl.useColors, diff --git a/test/parallel/test-repl-history-perm.js b/test/parallel/test-repl-history-perm.js index c7d2852539..4a374cb0ab 100644 --- a/test/parallel/test-repl-history-perm.js +++ b/test/parallel/test-repl-history-perm.js @@ -35,6 +35,10 @@ const replHistoryPath = path.join(common.tmpDir, '.node_repl_history'); const checkResults = common.mustCall(function(err, r) { if (err) throw err; + + // The REPL registers 'module' and 'require' globals + common.allowGlobals(r.context.module, r.context.require); + r.input.end(); const stat = fs.statSync(replHistoryPath); assert.strictEqual( diff --git a/test/parallel/test-repl-persistent-history.js b/test/parallel/test-repl-persistent-history.js index 70d6a51c81..0a38cfc480 100644 --- a/test/parallel/test-repl-persistent-history.js +++ b/test/parallel/test-repl-persistent-history.js @@ -262,6 +262,9 @@ function runTest(assertCleaned) { throw err; } + // The REPL registers 'module' and 'require' globals + common.allowGlobals(repl.context.module, repl.context.require); + repl.once('close', () => { if (repl._flushing) { repl.once('flushHistory', onClose); diff --git a/test/parallel/test-repl-use-global.js b/test/parallel/test-repl-use-global.js index 86c646cc76..79e13cd819 100644 --- a/test/parallel/test-repl-use-global.js +++ b/test/parallel/test-repl-use-global.js @@ -7,8 +7,6 @@ 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'], @@ -20,6 +18,9 @@ const globalTest = (useGlobal, cb, output) => (err, repl) => { if (err) return cb(err); + // The REPL registers 'module' and 'require' globals + common.allowGlobals(repl.context.module, repl.context.require); + let str = ''; output.on('data', (data) => (str += data)); global.lunch = 'tacos';