Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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.
  • Loading branch information...
commit 0285dae26a8fabd2053ec8a893f9dc04b9961329 1 parent 025f53c
@TooTallNate TooTallNate authored
Showing with 50 additions and 6 deletions.
  1. +7 −6 lib/repl.js
  2. +43 −0 test/simple/test-repl-console.js
View
13 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 = [];
View
43 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);
Please sign in to comment.
Something went wrong with that request. Please try again.