| 'use strict'; |
| const common = require('../common'); |
| |
| common.skipIfInspectorDisabled(); |
| |
| const fixtures = require('../common/fixtures'); |
| const startCLI = require('../common/debugger'); |
| |
| const assert = require('assert'); |
| const path = require('path'); |
| |
| // Run after quit/restart. |
| { |
| const scriptFullPath = fixtures.path('debugger', 'three-lines.js'); |
| const script = path.relative(process.cwd(), scriptFullPath); |
| const cli = startCLI(['--port=0', script]); |
| |
| function onFatal(error) { |
| cli.quit(); |
| throw error; |
| } |
| |
| cli.waitForInitialBreak() |
| .then(() => cli.waitForPrompt()) |
| .then(() => cli.stepCommand('n')) |
| .then(() => { |
| assert.ok( |
| cli.output.includes(`step in ${script}:2`), |
| 'steps to the 2nd line' |
| ); |
| }) |
| .then(() => cli.command('cont')) |
| .then(() => cli.waitFor(/disconnect/)) |
| .then(() => { |
| assert.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(() => { |
| assert.match(cli.output, /Use `run` to start the app again/); |
| }) |
| .then(() => cli.stepCommand('run')) |
| .then(() => cli.waitForInitialBreak()) |
| .then(() => cli.waitForPrompt()) |
| .then(() => { |
| assert.deepStrictEqual( |
| cli.breakInfo, |
| { filename: script, line: 1 }, |
| ); |
| }) |
| .then(() => cli.stepCommand('n')) |
| .then(() => { |
| assert.deepStrictEqual( |
| cli.breakInfo, |
| { filename: script, line: 2 }, |
| ); |
| }) |
| .then(() => cli.stepCommand('restart')) |
| .then(() => cli.waitForInitialBreak()) |
| .then(() => { |
| assert.deepStrictEqual( |
| cli.breakInfo, |
| { filename: script, line: 1 }, |
| ); |
| }) |
| .then(() => cli.command('kill')) |
| .then(() => cli.command('cont')) |
| .then(() => cli.waitFor(/start the app/)) |
| .then(() => { |
| assert.match(cli.output, /Use `run` to start the app again/); |
| }) |
| .then(() => cli.stepCommand('run')) |
| .then(() => cli.waitForInitialBreak()) |
| .then(() => cli.waitForPrompt()) |
| .then(() => { |
| assert.deepStrictEqual( |
| cli.breakInfo, |
| { filename: script, line: 1 }, |
| ); |
| }) |
| .then(() => cli.quit()) |
| .then(null, onFatal); |
| } |