summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/_debugger.js10
-rw-r--r--test/simple/test-debugger-repl.js28
2 files changed, 33 insertions, 5 deletions
diff --git a/lib/_debugger.js b/lib/_debugger.js
index b221ce0bb9..d719631358 100644
--- a/lib/_debugger.js
+++ b/lib/_debugger.js
@@ -759,6 +759,15 @@ function Interface(stdin, stdout, args) {
};
if (parseInt(process.env['NODE_NO_READLINE'], 10)) {
opts.terminal = false;
+ } else if (parseInt(process.env['NODE_FORCE_READLINE'], 10)) {
+ opts.terminal = true;
+
+ // Emulate Ctrl+C if we're emulating terminal
+ if (!this.stdout.isTTY) {
+ process.on('SIGINT', function() {
+ self.repl.rli.emit('SIGINT');
+ });
+ }
}
if (parseInt(process.env['NODE_DISABLE_COLORS'], 10)) {
opts.useColors = false;
@@ -777,7 +786,6 @@ function Interface(stdin, stdout, args) {
self.killChild();
});
-
var proto = Interface.prototype,
ignored = ['pause', 'resume', 'exitRepl', 'handleBreak',
'requireConnection', 'killChild', 'trySpawn',
diff --git a/test/simple/test-debugger-repl.js b/test/simple/test-debugger-repl.js
index 14092bc4a2..4d8d2b1d70 100644
--- a/test/simple/test-debugger-repl.js
+++ b/test/simple/test-debugger-repl.js
@@ -29,7 +29,9 @@ var port = common.PORT + 1337;
var script = common.fixturesDir + '/breakpoints.js';
-var child = spawn(process.execPath, ['debug', '--port=' + port, script]);
+var child = spawn(process.execPath, ['debug', '--port=' + port, script], {
+ env: { NODE_FORCE_READLINE: 1 }
+});
console.error('./node', 'debug', '--port=' + port, script);
@@ -48,6 +50,7 @@ var expected = [];
child.on('line', function(line) {
line = line.replace(/^(debug> )+/, 'debug> ');
+ line = line.replace(/\u001b\[\d+\w/g, '');
console.error('line> ' + line);
assert.ok(expected.length > 0, 'Got unexpected line: ' + line);
@@ -96,15 +99,17 @@ addTest(null, [
// Next
addTest('n', [
+ /debug> n/,
/break in .*:11/,
/9/, /10/, /11/, /12/, /13/
]);
// Watch
-addTest('watch("\'x\'"), true', [/true/]);
+addTest('watch("\'x\'"), true', [/debug>/, /true/]);
// Continue
addTest('c', [
+ /debug>/,
/break in .*:5/,
/Watchers/,
/0:\s+'x' = "x"/,
@@ -114,49 +119,64 @@ addTest('c', [
// Show watchers
addTest('watchers', [
+ /debug>/,
/0:\s+'x' = "x"/
]);
// Unwatch
-addTest('unwatch("\'x\'"), true', [/true/]);
+addTest('unwatch("\'x\'"), true', [/debug>/, /true/]);
// Step out
addTest('o', [
+ /debug>/,
/break in .*:12/,
/10/, /11/, /12/, /13/, /14/
]);
// Continue
addTest('c', [
+ /debug>/,
/break in .*:5/,
/3/, /4/, /5/, /6/, /7/
]);
// Set breakpoint by function name
addTest('sb("setInterval()", "!(setInterval.flag++)")', [
+ /debug>/,
/1/, /2/, /3/, /4/, /5/, /6/, /7/, /8/, /9/, /10/
]);
// Continue
addTest('c', [
+ /debug>/,
/break in node.js:\d+/,
/\d/, /\d/, /\d/, /\d/, /\d/
]);
-addTest('c', [
+// Repeat last command
+addTest('', [
+ /debug>/,
/break in .*breakpoints.js:\d+/,
/\d/, /\d/, /\d/, /\d/, /\d/
]);
addTest('repl', [
+ /debug>/,
/Press Ctrl \+ C to leave debug repl/
]);
addTest('now', [
+ /> now/,
/\w* \w* \d* \d* \d*:\d*:\d* GMT[+-]\d* (\w*)/
]);
function finish() {
+ // Exit debugger repl
+ child.kill('SIGINT');
+ child.kill('SIGINT');
+
+ // Exit debugger
+ child.kill('SIGINT');
process.exit(0);
}