diff options
author | Nathan Rajlich <nathan@tootallnate.net> | 2012-08-24 13:18:19 -0700 |
---|---|---|
committer | Nathan Rajlich <nathan@tootallnate.net> | 2012-08-24 14:31:32 -0700 |
commit | 0285dae26a8fabd2053ec8a893f9dc04b9961329 (patch) | |
tree | 42c5024ac1ce3cd666105a52c29662d6e21a8d4b | |
parent | 025f53c306d91968b292051404aebb8bf2adb458 (diff) | |
download | node-new-0285dae26a8fabd2053ec8a893f9dc04b9961329.tar.gz |
repl: create a new Console instance for the repl when "useGlobal" is off
Now `console.log('blah')` will work in a REPL running over a socket.
Closes #3876.
-rw-r--r-- | lib/repl.js | 13 | ||||
-rw-r--r-- | test/simple/test-repl-console.js | 43 |
2 files changed, 50 insertions, 6 deletions
diff --git a/lib/repl.js b/lib/repl.js index dd1d81028d..dee6f2d3af 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -47,6 +47,7 @@ var vm = require('vm'); var path = require('path'); var fs = require('fs'); var rl = require('readline'); +var Console = require('console').Console; var EventEmitter = require('events').EventEmitter; // If obj.hasOwnProperty has been overridden, then calling @@ -118,9 +119,6 @@ function REPLServer(prompt, stream, eval_, useGlobal, ignoreUndefined) { cb(err, result); }; - self.resetContext(); - self.bufferedCommand = ''; - if (!input && !output) { // legacy API, passing a 'stream'/'socket' option if (!stream) { @@ -138,10 +136,12 @@ function REPLServer(prompt, stream, eval_, useGlobal, ignoreUndefined) { } } - self.inputStream = input; self.outputStream = output; + self.resetContext(); + self.bufferedCommand = ''; + self.prompt = (prompt != undefined ? prompt : '> '); function complete(text, callback) { @@ -338,14 +338,15 @@ REPLServer.prototype.createContext = function() { if (!this.useGlobal) { var context = vm.createContext(); for (var i in global) context[i] = global[i]; + context.console = new Console(this.outputStream); + context.global = context; + context.global.global = context; } else { var context = global; } context.module = module; context.require = require; - context.global = context; - context.global.global = context; this.lines = []; this.lines.level = []; diff --git a/test/simple/test-repl-console.js b/test/simple/test-repl-console.js new file mode 100644 index 0000000000..3dca14b7f3 --- /dev/null +++ b/test/simple/test-repl-console.js @@ -0,0 +1,43 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var common = require('../common'), + assert = require('assert'), + Stream = require('stream'), + repl = require('repl'); + +// create a dummy stream that does nothing +var stream = new Stream(); +stream.write = stream.pause = stream.resume = function(){}; +stream.readable = stream.writable = true; + +var r = repl.start({ + input: stream, + output: stream, + useGlobal: false +}); + + +// ensure that the repl context gets its own "console" instance +assert(r.context.console); + +// ensure that the repl console instance is not the global one +assert.notStrictEqual(r.context.console, console); |