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