debugger: test repeating last command
authorFedor Indutny <fedor.indutny@gmail.com>
Fri, 28 Sep 2012 06:58:50 +0000 (10:58 +0400)
committerFedor Indutny <fedor.indutny@gmail.com>
Fri, 28 Sep 2012 06:58:50 +0000 (10:58 +0400)
* debugger: Add NODE_FORCE_READLINE environment variable, handle
 `SIGINT`'s sent to process while in this mode.

lib/_debugger.js
test/simple/test-debugger-repl.js

index b221ce0..d719631 100644 (file)
@@ -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',
index 14092bc..4d8d2b1 100644 (file)
@@ -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);
 }