aboutsummaryrefslogtreecommitdiff
path: root/deps/node/deps/node-inspect/test/cli/launch.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/node-inspect/test/cli/launch.test.js')
-rw-r--r--deps/node/deps/node-inspect/test/cli/launch.test.js176
1 files changed, 176 insertions, 0 deletions
diff --git a/deps/node/deps/node-inspect/test/cli/launch.test.js b/deps/node/deps/node-inspect/test/cli/launch.test.js
new file mode 100644
index 00000000..8808d47a
--- /dev/null
+++ b/deps/node/deps/node-inspect/test/cli/launch.test.js
@@ -0,0 +1,176 @@
+'use strict';
+const Path = require('path');
+
+const { test } = require('tap');
+
+const startCLI = require('./start-cli');
+
+test('custom port', (t) => {
+ const CUSTOM_PORT = '9230';
+ const script = Path.join('examples', 'three-lines.js');
+
+ const cli = startCLI([`--port=${CUSTOM_PORT}`, script]);
+
+ return cli.waitForInitialBreak()
+ .then(() => cli.waitForPrompt())
+ .then(() => {
+ t.match(cli.output, 'debug>', 'prints a prompt');
+ t.match(
+ cli.output,
+ new RegExp(`< Debugger listening on [^\n]*${CUSTOM_PORT}`),
+ 'forwards child output');
+ })
+ .then(() => cli.quit())
+ .then((code) => {
+ t.equal(code, 0, 'exits with success');
+ });
+});
+
+test('random port', (t) => {
+ const script = Path.join('examples', 'three-lines.js');
+
+ const cli = startCLI(['--port=0', script]);
+
+ return cli.waitForInitialBreak()
+ .then(() => cli.waitForPrompt())
+ .then(() => {
+ t.match(cli.output, 'debug>', 'prints a prompt');
+ t.match(
+ cli.output,
+ /< Debugger listening on /,
+ 'forwards child output');
+ })
+ .then(() => cli.quit())
+ .then((code) => {
+ t.equal(code, 0, 'exits with success');
+ });
+});
+
+test('random port with --inspect-port=0', (t) => {
+ const script = Path.join('examples', 'three-lines.js');
+
+ const cli = startCLI([script], ['--inspect-port=0']);
+
+ return cli.waitForInitialBreak()
+ .then(() => cli.waitForPrompt())
+ .then(() => {
+ t.match(cli.output, 'debug>', 'prints a prompt');
+ t.match(
+ cli.output,
+ /< Debugger listening on /,
+ 'forwards child output');
+ })
+ .then(() => cli.quit())
+ .then((code) => {
+ t.equal(code, 0, 'exits with success');
+ });
+});
+
+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 [^\n]*9229/,
+ 'forwards child output');
+ })
+ .then(() => cli.command('["hello", "world"].join(" ")'))
+ .then(() => {
+ t.match(cli.output, 'hello world', 'prints the result');
+ })
+ .then(() => cli.command(''))
+ .then(() => {
+ t.match(cli.output, 'hello world', 'repeats the last command on <enter>');
+ })
+ .then(() => cli.command('version'))
+ .then(() => {
+ t.match(cli.output, process.versions.v8, 'version prints the v8 version');
+ })
+ .then(() => cli.quit())
+ .then((code) => {
+ t.equal(code, 0, 'exits with success');
+ });
+});
+
+test('run after quit / restart', (t) => {
+ const script = Path.join('examples', 'three-lines.js');
+ const cli = startCLI([script]);
+
+ function onFatal(error) {
+ cli.quit();
+ throw error;
+ }
+
+ return cli.waitForInitialBreak()
+ .then(() => cli.waitForPrompt())
+ .then(() => cli.stepCommand('n'))
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:2`,
+ 'steps to the 2nd line');
+ })
+ .then(() => cli.command('cont'))
+ .then(() => cli.waitFor(/disconnect/))
+ .then(() => {
+ t.match(
+ cli.output,
+ 'Waiting for the debugger to disconnect',
+ 'the child was done');
+ })
+ .then(() => {
+ // On windows the socket won't close by itself
+ return cli.command('kill');
+ })
+ .then(() => cli.command('cont'))
+ .then(() => cli.waitFor(/start the app/))
+ .then(() => {
+ t.match(cli.output, 'Use `run` to start the app again');
+ })
+ .then(() => cli.stepCommand('run'))
+ .then(() => cli.waitForInitialBreak())
+ .then(() => cli.waitForPrompt())
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:1`,
+ 'is back at the beginning');
+ })
+ .then(() => cli.stepCommand('n'))
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:2`,
+ 'steps to the 2nd line');
+ })
+ .then(() => cli.stepCommand('restart'))
+ .then(() => cli.waitForInitialBreak())
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:1`,
+ 'is back at the beginning');
+ })
+ .then(() => cli.command('kill'))
+ .then(() => cli.command('cont'))
+ .then(() => cli.waitFor(/start the app/))
+ .then(() => {
+ t.match(cli.output, 'Use `run` to start the app again');
+ })
+ .then(() => cli.stepCommand('run'))
+ .then(() => cli.waitForInitialBreak())
+ .then(() => cli.waitForPrompt())
+ .then(() => {
+ t.match(
+ cli.output,
+ `break in ${script}:1`,
+ 'is back at the beginning');
+ })
+ .then(() => cli.quit())
+ .then(null, onFatal);
+});