From 41148d74a2d563eea3b7ad5463622b6b9fd4c46e Mon Sep 17 00:00:00 2001 From: Jan Krems Date: Wed, 15 Mar 2017 12:11:13 -0700 Subject: [PATCH 1/4] test: Remove outdated test --- package.json | 2 +- test/cli/start-cli.js | 5 +++++ test/node-inspect.test.js | 9 --------- 3 files changed, 6 insertions(+), 10 deletions(-) delete mode 100644 test/node-inspect.test.js diff --git a/package.json b/package.json index 536a525..1834956 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "scripts": { "pretest": "eslint --rulesdir=tools/eslint-rules lib test", - "test": "tap \"test/**/*.test.js\"", + "test": "tap test", "posttest": "nlm verify" }, "nlm": { diff --git a/test/cli/start-cli.js b/test/cli/start-cli.js index 267aac5..5a652e3 100644 --- a/test/cli/start-cli.js +++ b/test/cli/start-cli.js @@ -1,6 +1,11 @@ 'use strict'; const spawn = require('child_process').spawn; +// This allows us to keep the helper inside of `test/` without tap warning +// about "pending" test files. +const tap = require('tap'); +tap.test('startCLI', (t) => t.end()); + const CLI = process.env.USE_EMBEDDED_NODE_INSPECT === '1' ? 'inspect' : diff --git a/test/node-inspect.test.js b/test/node-inspect.test.js deleted file mode 100644 index 12e7313..0000000 --- a/test/node-inspect.test.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; -const tap = require('tap'); - -const nodeInspect = require('../'); - -tap.equal( - 9229, - nodeInspect.port, - 'Uses the --inspect default port'); From 2c224c551619e386e80fc3154cc14562cac063b9 Mon Sep 17 00:00:00 2001 From: Jan Krems Date: Mon, 3 Apr 2017 13:04:01 -0700 Subject: [PATCH 2/4] test: Accept any kind of "break" --- test/cli/backtrace.test.js | 2 +- test/cli/break.test.js | 24 ++++++++++++------------ test/cli/exceptions.test.js | 10 +++++----- test/cli/exec.test.js | 4 ++-- test/cli/help.test.js | 2 +- test/cli/launch.test.js | 4 ++-- test/cli/low-level.test.js | 2 +- test/cli/preserve-breaks.test.js | 2 +- test/cli/profile.test.js | 2 +- test/cli/scripts.test.js | 2 +- test/cli/start-cli.js | 4 ++++ test/cli/use-strict.test.js | 2 +- test/cli/watchers.test.js | 2 +- 13 files changed, 33 insertions(+), 29 deletions(-) diff --git a/test/cli/backtrace.test.js b/test/cli/backtrace.test.js index 9cd8a82..127ea56 100644 --- a/test/cli/backtrace.test.js +++ b/test/cli/backtrace.test.js @@ -14,7 +14,7 @@ test('display and navigate backtrace', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.stepCommand('c')) .then(() => cli.command('bt')) diff --git a/test/cli/break.test.js b/test/cli/break.test.js index 1c662d6..5de3e52 100644 --- a/test/cli/break.test.js +++ b/test/cli/break.test.js @@ -14,12 +14,12 @@ test('stepping through breakpoints', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => { t.match( cli.output, - `break in ${script}:1`, + ` in ${script}:1`, 'pauses in the first line of the script'); t.match( cli.output, @@ -30,7 +30,7 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - `break in ${script}:2`, + ` in ${script}:2`, 'pauses in next line of the script'); t.match( cli.output, @@ -41,7 +41,7 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - `break in ${script}:3`, + ` in ${script}:3`, 'pauses in next line of the script'); t.match( cli.output, @@ -52,7 +52,7 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - `break in ${script}:10`, + ` in ${script}:10`, 'pauses on the next breakpoint'); t.match( cli.output, @@ -94,21 +94,21 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - 'break in timers.js', + ' in timers.js', 'entered timers.js'); }) .then(() => cli.stepCommand('cont')) .then(() => { t.match( cli.output, - `break in ${script}:16`, + ` in ${script}:16`, 'found breakpoint we set above w/ line number only'); }) .then(() => cli.stepCommand('cont')) .then(() => { t.match( cli.output, - `break in ${script}:6`, + ` in ${script}:6`, 'found breakpoint we set above w/ line number & script'); }) .then(() => cli.stepCommand('')) @@ -132,7 +132,7 @@ test('sb before loading file', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('sb("other.js", 3)')) .then(() => { @@ -145,7 +145,7 @@ test('sb before loading file', (t) => { .then(() => { t.match( cli.output, - `break in ${otherScript}:3`, + ` in ${otherScript}:3`, 'found breakpoint in file that was not loaded yet'); }) .then(() => cli.quit()) @@ -161,7 +161,7 @@ test('clearBreakpoint', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('sb("break.js", 3)')) .then(() => cli.command('sb("break.js", 9)')) @@ -187,7 +187,7 @@ test('clearBreakpoint', (t) => { .then(() => { t.match( cli.output, - `break in ${script}:9`, + ` in ${script}:9`, 'hits the 2nd breakpoint because the 1st was cleared'); }) .then(() => cli.quit()) diff --git a/test/cli/exceptions.test.js b/test/cli/exceptions.test.js index b66c09f..5a9f814 100644 --- a/test/cli/exceptions.test.js +++ b/test/cli/exceptions.test.js @@ -14,10 +14,10 @@ test('break on (uncaught) exceptions', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => { - t.match(cli.output, `break in ${script}:1`); + t.match(cli.output, ` in ${script}:1`); }) // making sure it will die by default: .then(() => cli.command('c')) @@ -26,7 +26,7 @@ test('break on (uncaught) exceptions', (t) => { // Next run: With `breakOnException` it pauses in both places .then(() => cli.stepCommand('r')) .then(() => { - t.match(cli.output, `break in ${script}:1`); + t.match(cli.output, ` in ${script}:1`); }) .then(() => cli.command('breakOnException')) .then(() => cli.stepCommand('c')) @@ -42,7 +42,7 @@ test('break on (uncaught) exceptions', (t) => { .then(() => cli.command('breakOnUncaught')) .then(() => cli.stepCommand('r')) // also, the setting survives the restart .then(() => { - t.match(cli.output, `break in ${script}:1`); + t.match(cli.output, ` in ${script}:1`); }) .then(() => cli.stepCommand('c')) .then(() => { @@ -53,7 +53,7 @@ test('break on (uncaught) exceptions', (t) => { .then(() => cli.command('breakOnNone')) .then(() => cli.stepCommand('r')) .then(() => { - t.match(cli.output, `break in ${script}:1`); + t.match(cli.output, ` in ${script}:1`); }) .then(() => cli.command('c')) .then(() => cli.waitFor(/disconnect/)) diff --git a/test/cli/exec.test.js b/test/cli/exec.test.js index 5c64713..acfd6e3 100644 --- a/test/cli/exec.test.js +++ b/test/cli/exec.test.js @@ -11,7 +11,7 @@ test('examples/alive.js', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('exec [typeof heartbeat, typeof process.exit]')) .then(() => { @@ -60,7 +60,7 @@ test('exec .scope', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.stepCommand('c')) .then(() => cli.command('exec .scope')) diff --git a/test/cli/help.test.js b/test/cli/help.test.js index 11a9358..9f0c081 100644 --- a/test/cli/help.test.js +++ b/test/cli/help.test.js @@ -11,7 +11,7 @@ test('examples/empty.js', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('help')) .then(() => { diff --git a/test/cli/launch.test.js b/test/cli/launch.test.js index 99c6ce0..0af27b1 100644 --- a/test/cli/launch.test.js +++ b/test/cli/launch.test.js @@ -9,7 +9,7 @@ test('examples/empty.js', (t) => { const script = Path.join('examples', 'empty.js'); const cli = startCLI([script]); - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => { t.match(cli.output, 'debug>', 'prints a prompt'); @@ -45,7 +45,7 @@ test('run after quit / restart', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.stepCommand('n')) .then(() => { diff --git a/test/cli/low-level.test.js b/test/cli/low-level.test.js index b6301b2..966bed5 100644 --- a/test/cli/low-level.test.js +++ b/test/cli/low-level.test.js @@ -12,7 +12,7 @@ test('Debugger agent direct access', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('scripts')) .then(() => { diff --git a/test/cli/preserve-breaks.test.js b/test/cli/preserve-breaks.test.js index 8de8227..17d7976 100644 --- a/test/cli/preserve-breaks.test.js +++ b/test/cli/preserve-breaks.test.js @@ -14,7 +14,7 @@ test('run after quit / restart', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('breakpoints')) .then(() => { diff --git a/test/cli/profile.test.js b/test/cli/profile.test.js index 3ef1896..0f900c5 100644 --- a/test/cli/profile.test.js +++ b/test/cli/profile.test.js @@ -15,7 +15,7 @@ test('profiles', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('exec console.profile()')) .then(() => { diff --git a/test/cli/scripts.test.js b/test/cli/scripts.test.js index cd26411..ed36705 100644 --- a/test/cli/scripts.test.js +++ b/test/cli/scripts.test.js @@ -14,7 +14,7 @@ test('list scripts', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('scripts')) .then(() => { diff --git a/test/cli/start-cli.js b/test/cli/start-cli.js index 5a652e3..74c9481 100644 --- a/test/cli/start-cli.js +++ b/test/cli/start-cli.js @@ -93,6 +93,10 @@ function startCLI(args) { return this.waitFor(/>\s+$/, timeout); }, + waitForInitialBreak(timeout = 2000) { + return this.waitFor(/break/i, timeout); + }, + ctrlC() { return this.command('.interrupt'); }, diff --git a/test/cli/use-strict.test.js b/test/cli/use-strict.test.js index 81f4d91..780802a 100644 --- a/test/cli/use-strict.test.js +++ b/test/cli/use-strict.test.js @@ -14,7 +14,7 @@ test('for whiles that starts with strict directive', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => { t.match( diff --git a/test/cli/watchers.test.js b/test/cli/watchers.test.js index d66f008..46bcde1 100644 --- a/test/cli/watchers.test.js +++ b/test/cli/watchers.test.js @@ -11,7 +11,7 @@ test('stepping through breakpoints', (t) => { throw error; } - return cli.waitFor(/break/) + return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => cli.command('watch("x")')) .then(() => cli.command('watch("\\"Hello\\"")')) From 22bf349bc86d7bf6fd449791c9d1e7eaf66c2681 Mon Sep 17 00:00:00 2001 From: Jan Krems Date: Mon, 3 Apr 2017 13:47:31 -0700 Subject: [PATCH 3/4] test: Adjust for v8 5.7 --- test/cli/exceptions.test.js | 6 ++++-- test/cli/launch.test.js | 11 +++++------ test/cli/low-level.test.js | 9 ++++++--- test/cli/preserve-breaks.test.js | 3 +-- test/cli/scripts.test.js | 6 +++--- test/cli/start-cli.js | 17 +++++++++++++---- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/test/cli/exceptions.test.js b/test/cli/exceptions.test.js index 5a9f814..338c937 100644 --- a/test/cli/exceptions.test.js +++ b/test/cli/exceptions.test.js @@ -21,7 +21,8 @@ test('break on (uncaught) exceptions', (t) => { }) // making sure it will die by default: .then(() => cli.command('c')) - .then(() => cli.waitFor(/disconnect/)) + // TODO: Remove FATAL ERROR once node doesn't show a FATAL ERROR anymore + .then(() => cli.waitFor(/disconnect|FATAL ERROR/)) // Next run: With `breakOnException` it pauses in both places .then(() => cli.stepCommand('r')) @@ -56,7 +57,8 @@ test('break on (uncaught) exceptions', (t) => { t.match(cli.output, ` in ${script}:1`); }) .then(() => cli.command('c')) - .then(() => cli.waitFor(/disconnect/)) + // TODO: Remove FATAL ERROR once node doesn't show a FATAL ERROR anymore + .then(() => cli.waitFor(/disconnect|FATAL ERROR/)) .then(() => cli.quit()) .then(null, onFatal); diff --git a/test/cli/launch.test.js b/test/cli/launch.test.js index 0af27b1..b57c08a 100644 --- a/test/cli/launch.test.js +++ b/test/cli/launch.test.js @@ -5,18 +5,14 @@ const { test } = require('tap'); const startCLI = require('./start-cli'); -test('examples/empty.js', (t) => { - const script = Path.join('examples', 'empty.js'); +test('examples/three-lines.js', (t) => { + const script = Path.join('examples', 'three-lines.js'); const cli = startCLI([script]); return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => { t.match(cli.output, 'debug>', 'prints a prompt'); - t.match( - cli.output, - '< Debugger listening on port 9229', - 'forwards child output'); }) .then(() => cli.command('["hello", "world"].join(" ")')) .then(() => { @@ -72,6 +68,7 @@ test('run after quit / restart', (t) => { t.match(cli.output, 'Use `run` to start the app again'); }) .then(() => cli.stepCommand('run')) + .then(() => cli.waitForInitialBreak()) .then(() => cli.waitForPrompt()) .then(() => { t.match( @@ -87,6 +84,7 @@ test('run after quit / restart', (t) => { 'steps to the 2nd line'); }) .then(() => cli.stepCommand('restart')) + .then(() => cli.waitForInitialBreak()) .then(() => { t.match( cli.output, @@ -100,6 +98,7 @@ test('run after quit / restart', (t) => { t.match(cli.output, 'Use `run` to start the app again'); }) .then(() => cli.stepCommand('run')) + .then(() => cli.waitForInitialBreak()) .then(() => cli.waitForPrompt()) .then(() => { t.match( diff --git a/test/cli/low-level.test.js b/test/cli/low-level.test.js index 966bed5..77e3fc2 100644 --- a/test/cli/low-level.test.js +++ b/test/cli/low-level.test.js @@ -4,8 +4,8 @@ const { test } = require('tap'); const startCLI = require('./start-cli'); test('Debugger agent direct access', (t) => { - const cli = startCLI(['examples/empty.js']); - const scriptPattern = /^\* (\d+): examples(?:\/|\\)empty.js/; + const cli = startCLI(['examples/three-lines.js']); + const scriptPattern = /^\* (\d+): examples(?:\/|\\)three-lines.js/; function onFatal(error) { cli.quit(); @@ -24,7 +24,10 @@ test('Debugger agent direct access', (t) => { .then(() => { t.match( cli.output, - /scriptSource: '\(function \([^)]+\) \{ \\n}\);'/); + /scriptSource: '\(function \(/); + t.match( + cli.output, + /let x = 1;/); }) .then(() => cli.quit()) .then(null, onFatal); diff --git a/test/cli/preserve-breaks.test.js b/test/cli/preserve-breaks.test.js index 17d7976..94f6140 100644 --- a/test/cli/preserve-breaks.test.js +++ b/test/cli/preserve-breaks.test.js @@ -33,8 +33,7 @@ test('run after quit / restart', (t) => { t.match(cli.output, `break in ${script}:3`); }) .then(() => cli.command('restart')) - .then(() => cli.waitFor([/break in examples/, /breakpoints restored/])) - .then(() => cli.waitForPrompt()) + .then(() => cli.waitForInitialBreak()) .then(() => { t.match(cli.output, `break in ${script}:1`); }) diff --git a/test/cli/scripts.test.js b/test/cli/scripts.test.js index ed36705..1546b80 100644 --- a/test/cli/scripts.test.js +++ b/test/cli/scripts.test.js @@ -6,7 +6,7 @@ const { test } = require('tap'); const startCLI = require('./start-cli'); test('list scripts', (t) => { - const script = Path.join('examples', 'empty.js'); + const script = Path.join('examples', 'three-lines.js'); const cli = startCLI([script]); function onFatal(error) { @@ -20,7 +20,7 @@ test('list scripts', (t) => { .then(() => { t.match( cli.output, - /^\* \d+: examples(?:\/|\\)empty\.js/, + /^\* \d+: examples(?:\/|\\)three-lines\.js/, 'lists the user script'); t.notMatch( cli.output, @@ -31,7 +31,7 @@ test('list scripts', (t) => { .then(() => { t.match( cli.output, - /\* \d+: examples(?:\/|\\)empty\.js/, + /\* \d+: examples(?:\/|\\)three-lines\.js/, 'lists the user script'); t.match( cli.output, diff --git a/test/cli/start-cli.js b/test/cli/start-cli.js index 74c9481..56c3e25 100644 --- a/test/cli/start-cli.js +++ b/test/cli/start-cli.js @@ -11,6 +11,11 @@ const CLI = 'inspect' : require.resolve('../../cli.js'); +const BREAK_MESSAGE = new RegExp('(?:' + [ + 'assert', 'break', 'break on start', 'debugCommand', + 'exception', 'other', 'promiseRejection', +].join('|') + ') in', 'i'); + function startCLI(args) { const child = spawn(process.execPath, [CLI, ...args]); let isFirstStdoutChunk = true; @@ -94,7 +99,13 @@ function startCLI(args) { }, waitForInitialBreak(timeout = 2000) { - return this.waitFor(/break/i, timeout); + return this.waitFor(/break (?:on start )?in/i, timeout) + .then(() => { + if (/Break on start/.test(this.output)) { + return this.command('n') + .then(() => this.waitFor(/break in/, timeout)); + } + }); }, ctrlC() { @@ -128,9 +139,7 @@ function startCLI(args) { child.stdin.write(input); child.stdin.write('\n'); return this - .waitFor( - /(?:assert|break|debugCommand|exception|other|promiseRejection) in/ - ) + .waitFor(BREAK_MESSAGE) .then(() => this.waitForPrompt()); }, From 6ce8c165c45a491bea8cfb3c67d2ae80e7c34dcb Mon Sep 17 00:00:00 2001 From: Jan Krems Date: Mon, 3 Apr 2017 14:13:22 -0700 Subject: [PATCH 4/4] test: Revert to old assertions --- test/cli/break.test.js | 18 +++++++++--------- test/cli/exceptions.test.js | 11 +++++++---- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/test/cli/break.test.js b/test/cli/break.test.js index 5de3e52..59b12cd 100644 --- a/test/cli/break.test.js +++ b/test/cli/break.test.js @@ -19,7 +19,7 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - ` in ${script}:1`, + `break in ${script}:1`, 'pauses in the first line of the script'); t.match( cli.output, @@ -30,7 +30,7 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - ` in ${script}:2`, + `break in ${script}:2`, 'pauses in next line of the script'); t.match( cli.output, @@ -41,7 +41,7 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - ` in ${script}:3`, + `break in ${script}:3`, 'pauses in next line of the script'); t.match( cli.output, @@ -52,7 +52,7 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - ` in ${script}:10`, + `break in ${script}:10`, 'pauses on the next breakpoint'); t.match( cli.output, @@ -94,21 +94,21 @@ test('stepping through breakpoints', (t) => { .then(() => { t.match( cli.output, - ' in timers.js', + 'break in timers.js', 'entered timers.js'); }) .then(() => cli.stepCommand('cont')) .then(() => { t.match( cli.output, - ` in ${script}:16`, + `break in ${script}:16`, 'found breakpoint we set above w/ line number only'); }) .then(() => cli.stepCommand('cont')) .then(() => { t.match( cli.output, - ` in ${script}:6`, + `break in ${script}:6`, 'found breakpoint we set above w/ line number & script'); }) .then(() => cli.stepCommand('')) @@ -145,7 +145,7 @@ test('sb before loading file', (t) => { .then(() => { t.match( cli.output, - ` in ${otherScript}:3`, + `break in ${otherScript}:3`, 'found breakpoint in file that was not loaded yet'); }) .then(() => cli.quit()) @@ -187,7 +187,7 @@ test('clearBreakpoint', (t) => { .then(() => { t.match( cli.output, - ` in ${script}:9`, + `break in ${script}:9`, 'hits the 2nd breakpoint because the 1st was cleared'); }) .then(() => cli.quit()) diff --git a/test/cli/exceptions.test.js b/test/cli/exceptions.test.js index 338c937..18b7f18 100644 --- a/test/cli/exceptions.test.js +++ b/test/cli/exceptions.test.js @@ -17,7 +17,7 @@ test('break on (uncaught) exceptions', (t) => { return cli.waitForInitialBreak() .then(() => cli.waitForPrompt()) .then(() => { - t.match(cli.output, ` in ${script}:1`); + t.match(cli.output, `break in ${script}:1`); }) // making sure it will die by default: .then(() => cli.command('c')) @@ -26,8 +26,9 @@ test('break on (uncaught) exceptions', (t) => { // Next run: With `breakOnException` it pauses in both places .then(() => cli.stepCommand('r')) + .then(() => cli.waitForInitialBreak()) .then(() => { - t.match(cli.output, ` in ${script}:1`); + t.match(cli.output, `break in ${script}:1`); }) .then(() => cli.command('breakOnException')) .then(() => cli.stepCommand('c')) @@ -42,8 +43,9 @@ test('break on (uncaught) exceptions', (t) => { // Next run: With `breakOnUncaught` it only pauses on the 2nd exception .then(() => cli.command('breakOnUncaught')) .then(() => cli.stepCommand('r')) // also, the setting survives the restart + .then(() => cli.waitForInitialBreak()) .then(() => { - t.match(cli.output, ` in ${script}:1`); + t.match(cli.output, `break in ${script}:1`); }) .then(() => cli.stepCommand('c')) .then(() => { @@ -53,8 +55,9 @@ test('break on (uncaught) exceptions', (t) => { // Next run: Back to the initial state! It should die again. .then(() => cli.command('breakOnNone')) .then(() => cli.stepCommand('r')) + .then(() => cli.waitForInitialBreak()) .then(() => { - t.match(cli.output, ` in ${script}:1`); + t.match(cli.output, `break in ${script}:1`); }) .then(() => cli.command('c')) // TODO: Remove FATAL ERROR once node doesn't show a FATAL ERROR anymore