summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Rajlich <nathan@tootallnate.net>2012-08-24 13:18:19 -0700
committerNathan Rajlich <nathan@tootallnate.net>2012-08-24 14:31:32 -0700
commit0285dae26a8fabd2053ec8a893f9dc04b9961329 (patch)
tree42c5024ac1ce3cd666105a52c29662d6e21a8d4b
parent025f53c306d91968b292051404aebb8bf2adb458 (diff)
downloadnode-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.js13
-rw-r--r--test/simple/test-repl-console.js43
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);