mirror of https://github.com/lukechilds/node.git
Browse Source
When `useGlobal` is false, tab completion in the repl does not enumerate global properties. Instead of just setting these properties blindly on the global context, e.g. context[prop] = global[prop] Use `Object.defineProperty` and the property descriptor found on `global` for the new property in `context`. Also addresses a previously unnoticed issue where `console` is writable when `useGlobal` is false. If the binary has been built with `./configure --without-intl` then the `Intl` builtin type will not be available in a repl runtime. Check for this in the test. Fixes: https://github.com/nodejs/node/issues/7353 PR-URL: https://github.com/nodejs/node/pull/7369 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>v6.x
Lance Ball
9 years ago
committed by
Jeremiah Senkpiel
4 changed files with 69 additions and 10 deletions
@ -0,0 +1,26 @@ |
|||||
|
'use strict'; |
||||
|
const common = require('../common'); |
||||
|
const assert = require('assert'); |
||||
|
const repl = require('repl'); |
||||
|
|
||||
|
// Create a dummy stream that does nothing
|
||||
|
const stream = new common.ArrayStream(); |
||||
|
|
||||
|
// Test when useGlobal is false
|
||||
|
testContext(repl.start({ |
||||
|
input: stream, |
||||
|
output: stream, |
||||
|
useGlobal: false |
||||
|
})); |
||||
|
|
||||
|
function testContext(repl) { |
||||
|
const context = repl.createContext(); |
||||
|
// ensure that the repl context gets its own "console" instance
|
||||
|
assert(context.console instanceof require('console').Console); |
||||
|
|
||||
|
// ensure that the repl's global property is the context
|
||||
|
assert(context.global === context); |
||||
|
|
||||
|
// ensure that the repl console instance does not have a setter
|
||||
|
assert.throws(() => context.console = 'foo'); |
||||
|
} |
Loading…
Reference in new issue