aboutsummaryrefslogtreecommitdiff
path: root/deps/node/deps/node-inspect/test/cli/break.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/node-inspect/test/cli/break.test.js')
-rw-r--r--deps/node/deps/node-inspect/test/cli/break.test.js195
1 files changed, 195 insertions, 0 deletions
diff --git a/deps/node/deps/node-inspect/test/cli/break.test.js b/deps/node/deps/node-inspect/test/cli/break.test.js
new file mode 100644
index 00000000..ce8c8d6d
--- /dev/null
+++ b/deps/node/deps/node-inspect/test/cli/break.test.js
@@ -0,0 +1,195 @@
+'use strict';
+const Path = require('path');
+
+const { test } = require('tap');
+
+const startCLI = require('./start-cli');
+
+test('stepping through breakpoints', (t) => {
+ const script = Path.join('examples', 'break.js');
+ const cli = startCLI([script]);
+
+ function onFatal(error) {
+ cli.quit();
+ throw error;
+ }
+
+ return cli.waitForInitialBreak()
+ .then(() => cli.waitForPrompt())
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:1`,
+ 'pauses in the first line of the script');
+ t.match(
+ cli.output,
+ /> 1 \(function \([^)]+\) \{ const x = 10;/,
+ 'shows the source and marks the current line');
+ })
+ .then(() => cli.stepCommand('n'))
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:2`,
+ 'pauses in next line of the script');
+ t.match(
+ cli.output,
+ '> 2 let name = \'World\';',
+ 'marks the 2nd line');
+ })
+ .then(() => cli.stepCommand('next'))
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:3`,
+ 'pauses in next line of the script');
+ t.match(
+ cli.output,
+ '> 3 name = \'Robin\';',
+ 'marks the 3nd line');
+ })
+ .then(() => cli.stepCommand('cont'))
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:10`,
+ 'pauses on the next breakpoint');
+ t.match(
+ cli.output,
+ '>10 debugger;',
+ 'marks the debugger line');
+ })
+
+ // Prepare additional breakpoints
+ .then(() => cli.command('sb("break.js", 6)'))
+ .then(() => t.notMatch(cli.output, 'Could not resolve breakpoint'))
+ .then(() => cli.command('sb("otherFunction()")'))
+ .then(() => cli.command('sb(16)'))
+ .then(() => t.notMatch(cli.output, 'Could not resolve breakpoint'))
+ .then(() => cli.command('breakpoints'))
+ .then(() => {
+ t.match(cli.output, `#0 ${script}:6`);
+ t.match(cli.output, `#1 ${script}:16`);
+ })
+
+ .then(() => cli.command('list()'))
+ .then(() => {
+ t.match(cli.output, '>10 debugger;', 'prints and marks current line');
+ t.strictDeepEqual(
+ cli.parseSourceLines(),
+ [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
+ 'prints 5 lines before and after');
+ })
+ .then(() => cli.command('list(2)'))
+ .then(() => {
+ t.match(cli.output, '>10 debugger;', 'prints and marks current line');
+ t.strictDeepEqual(
+ cli.parseSourceLines(),
+ [8, 9, 10, 11, 12],
+ 'prints 2 lines before and after');
+ })
+
+ .then(() => cli.stepCommand('s'))
+ .then(() => cli.stepCommand(''))
+ .then(() => {
+ t.match(
+ cli.output,
+ 'break in timers.js',
+ 'entered timers.js');
+ })
+ .then(() => cli.stepCommand('cont'))
+ .then(() => {
+ t.match(
+ cli.output,
+ `break 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`,
+ 'found breakpoint we set above w/ line number & script');
+ })
+ .then(() => cli.stepCommand(''))
+ .then(() => {
+ t.match(
+ cli.output,
+ `debugCommand in ${script}:14`,
+ 'found function breakpoint we set above');
+ })
+ .then(() => cli.quit())
+ .then(null, onFatal);
+});
+
+test('sb before loading file', (t) => {
+ const script = Path.join('examples', 'cjs', 'index.js');
+ const otherScript = Path.join('examples', 'cjs', 'other.js');
+ const cli = startCLI([script]);
+
+ function onFatal(error) {
+ cli.quit();
+ throw error;
+ }
+
+ return cli.waitForInitialBreak()
+ .then(() => cli.waitForPrompt())
+ .then(() => cli.command('sb("other.js", 2)'))
+ .then(() => {
+ t.match(
+ cli.output,
+ 'not loaded yet',
+ 'warns that the script was not loaded yet');
+ })
+ .then(() => cli.stepCommand('cont'))
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${otherScript}:2`,
+ 'found breakpoint in file that was not loaded yet');
+ })
+ .then(() => cli.quit())
+ .then(null, onFatal);
+});
+
+test('clearBreakpoint', (t) => {
+ const script = Path.join('examples', 'break.js');
+ const cli = startCLI([script]);
+
+ function onFatal(error) {
+ cli.quit();
+ throw error;
+ }
+
+ return cli.waitForInitialBreak()
+ .then(() => cli.waitForPrompt())
+ .then(() => cli.command('sb("break.js", 3)'))
+ .then(() => cli.command('sb("break.js", 9)'))
+ .then(() => cli.command('breakpoints'))
+ .then(() => {
+ t.match(cli.output, `#0 ${script}:3`);
+ t.match(cli.output, `#1 ${script}:9`);
+ })
+ .then(() => cli.command('clearBreakpoint("break.js", 4)'))
+ .then(() => {
+ t.match(cli.output, 'Could not find breakpoint');
+ })
+ .then(() => cli.command('clearBreakpoint("not-such-script.js", 3)'))
+ .then(() => {
+ t.match(cli.output, 'Could not find breakpoint');
+ })
+ .then(() => cli.command('clearBreakpoint("break.js", 3)'))
+ .then(() => cli.command('breakpoints'))
+ .then(() => {
+ t.match(cli.output, `#0 ${script}:9`);
+ })
+ .then(() => cli.stepCommand('cont'))
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:9`,
+ 'hits the 2nd breakpoint because the 1st was cleared');
+ })
+ .then(() => cli.quit())
+ .then(null, onFatal);
+});