From fd97cf0ca8a872412e581875245f87cbb5ff335b Mon Sep 17 00:00:00 2001 From: cjihrig Date: Thu, 21 Jul 2016 12:44:01 -0400 Subject: [PATCH 1/2] test: allow globals to be whitelisted This commit adds a function to test/common.js that allows additional global variables to be whitelisted in a test. PR-URL: https://github.com/nodejs/node/pull/7826 Reviewed-By: James M Snell --- test/common.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/common.js b/test/common.js index 774a960ab6a7..2b4e432c39b9 100644 --- a/test/common.js +++ b/test/common.js @@ -336,6 +336,11 @@ if (global.Symbol) { knownGlobals.push(Symbol); } +function allowGlobals() { + knownGlobals = knownGlobals.concat(Array.from(arguments)); +} +exports.allowGlobals = allowGlobals; + function leakedGlobals() { var leaked = []; From 9a0d9fc49164857503ec664cea48dfbb3bf2c30f Mon Sep 17 00:00:00 2001 From: cjihrig Date: Thu, 21 Jul 2016 13:17:07 -0400 Subject: [PATCH 2/2] 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 | 6 ++++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/internal/repl.js b/lib/internal/repl.js index cea681f58374..6cb3fffd85f5 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,11 +20,11 @@ function createRepl(env, opts, cb) { cb = opts; opts = null; } - opts = opts || { + opts = util._extend({ ignoreUndefined: false, terminal: process.stdout.isTTY, useGlobal: 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 759b4e15a12f..b08f6cbaf621 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 c7d2852539a0..4a374cb0ab12 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 e8b6d416f00e..29ca0d56344b 100644 --- a/test/parallel/test-repl-persistent-history.js +++ b/test/parallel/test-repl-persistent-history.js @@ -262,6 +262,12 @@ function runTest(assertCleaned) { throw err; } + // The REPL registers 'module' and 'require' globals. + // This test also registers '_'. + common.allowGlobals(repl.context.module, + repl.context.require, + repl.context._); + repl.once('close', () => { if (repl._flushing) { repl.once('flushHistory', onClose);