diff options
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.js | 176 |
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); +}); |