Browse Source

deps: Add node-inspect 1.10.6

This updates the bundled `node-inspect` to 1.10.6.

Highlights:

* `node --debug-port=1234 inspect` respects the custom port.
* Test stability improvements on various platforms.

Compare: https://github.com/nodejs/node-inspect/compare/v1.10.4...v1.10.6

PR-URL: https://github.com/nodejs/node/pull/11869
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
v6
Jan Krems 8 years ago
committed by James M Snell
parent
commit
b57f9ee3bf
  1. 27
      deps/node-inspect/CHANGELOG.md
  2. 14
      deps/node-inspect/CONTRIBUTING.md
  3. 5
      deps/node-inspect/GOVERNANCE.md
  4. 1
      deps/node-inspect/examples/alive.js
  5. 1
      deps/node-inspect/examples/backtrace.js
  6. 4
      deps/node-inspect/examples/cjs/index.js
  7. 1
      deps/node-inspect/examples/cjs/other.js
  8. 1
      deps/node-inspect/examples/exceptions.js
  9. 1
      deps/node-inspect/examples/three-lines.js
  10. 2
      deps/node-inspect/examples/use-strict.js
  11. 91
      deps/node-inspect/lib/_inspect.js
  12. 15
      deps/node-inspect/lib/internal/inspect_client.js
  13. 53
      deps/node-inspect/lib/internal/inspect_repl.js
  14. 8
      deps/node-inspect/package.json
  15. 4
      deps/node-inspect/test/cli/backtrace.test.js
  16. 6
      deps/node-inspect/test/cli/exceptions.test.js
  17. 4
      deps/node-inspect/test/cli/launch.test.js
  18. 13
      deps/node-inspect/test/cli/preserve-breaks.test.js
  19. 27
      deps/node-inspect/test/cli/use-strict.test.js

27
deps/node-inspect/CHANGELOG.md

@ -1,3 +1,30 @@
### 1.10.6
* chore: Fix usage text for embedded mode - **[@addaleax](https://github.com/addaleax)** [#20](https://github.com/nodejs/node-inspect/pull/20)
- [`b0779f5`](https://github.com/nodejs/node-inspect/commit/b0779f597104e9ada5681f64d7e714525b753511) **chore:** Fix usage text for embedded mode
* print 'ok' after connection - **[@ofrobots](https://github.com/ofrobots)** [#25](https://github.com/nodejs/node-inspect/pull/25)
- [`2a47125`](https://github.com/nodejs/node-inspect/commit/2a4712577f6996fbb078dcfcd7320c397685d76a) **fix:** print 'ok' after connection
* Make autocompletion in REPL work - **[@aqrln](https://github.com/aqrln)** [#28](https://github.com/nodejs/node-inspect/pull/28)
- [`ccab737`](https://github.com/nodejs/node-inspect/commit/ccab737399249a8c2230ed6adfec579c7d724364) **fix:** Make autocompletion in REPL work
* Remove console.error() statement - **[@aqrln](https://github.com/aqrln)** [#30](https://github.com/nodejs/node-inspect/pull/30)
- [`032b045`](https://github.com/nodejs/node-inspect/commit/032b045d4d73622c77b7ebcc26781c6ad98200b3) **style:** Remove console.error() statement
* Take --debug-port into account - **[@jkrems](https://github.com/jkrems)** [#26](https://github.com/nodejs/node-inspect/pull/26)
- [`054d4b1`](https://github.com/nodejs/node-inspect/commit/054d4b10e65f12a3a4b10b4c0ab2a4768cc5e893) **fix:** Take --debug-port into account
* Delay run until breakpoints are restored - **[@jkrems](https://github.com/jkrems)** [#34](https://github.com/nodejs/node-inspect/pull/34)
- [`802b88c`](https://github.com/nodejs/node-inspect/commit/802b88c8ad0a57608cb9e0cb4bf46ed683bb6344) **fix:** Delay run until breakpoints are restored
- [`2b93173`](https://github.com/nodejs/node-inspect/commit/2b93173d95e7f8b30d85603613cb2ae3b3ec18db) **fix:** Use single string for paused notice
- [`b4d5ee2`](https://github.com/nodejs/node-inspect/commit/b4d5ee2a3d25613b35a2e8e10a0eb75582cc5654) **fix:** Work around inconsistent handling of strict directive
- [`f6ccfc7`](https://github.com/nodejs/node-inspect/commit/f6ccfc7f4d00ad4fdf3b581b677f8d7f1699c44c) **fix:** Only restart after port is free
- [`8b101bf`](https://github.com/nodejs/node-inspect/commit/8b101bf669ca102df4980bfad3e0436ef1c2f1a4) **test:** Skip exact match on AIX
* [`a4e4b6f`](https://github.com/nodejs/node-inspect/commit/a4e4b6feeba4dedfd2c89ef32f39e813314d3bbd) **chore:** Fix repo info in package.json
### 1.10.5
* docs: minor edits to governance docs - **[@joshgav](https://github.com/joshgav)** [#17](https://github.com/buggerjs/node-inspect/pull/17)
- [`a70fe04`](https://github.com/buggerjs/node-inspect/commit/a70fe04bdde9b7c74588685066291f9b11183328) **docs:** minor edits to governance docs
### 1.10.4 ### 1.10.4
* [`1c31bf7`](https://github.com/buggerjs/node-inspect/commit/1c31bf7d1b3ea1b424ae0662526596670cb506c9) **chore:** Support embedded mode * [`1c31bf7`](https://github.com/buggerjs/node-inspect/commit/1c31bf7d1b3ea1b424ae0662526596670cb506c9) **chore:** Support embedded mode

14
deps/node-inspect/CONTRIBUTING.md

@ -4,8 +4,7 @@
This document outlines some of the practices we care about. This document outlines some of the practices we care about.
If you have any questions or suggestions about the process, If you have any questions or suggestions about the process,
feel free to [open an issue](#reporting-issues) feel free to [open an issue](#reporting-issues).
.
## Code of Conduct ## Code of Conduct
@ -13,11 +12,10 @@ The [Node.js Code of Conduct][] applies to this repo.
[Node.js Code of Conduct]: https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md [Node.js Code of Conduct]: https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md
## Code Contributions ## Governance
The nodereport project falls under the governance of the diagnostics This project falls under the governance of the Node.js Diagnostics WG as
working group which is documented in: described at <https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md>.
https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md.
## Developer's Certificate of Origin 1.1 ## Developer's Certificate of Origin 1.1
@ -51,7 +49,7 @@ By making a contribution to this project, I certify that:
If you find any mistakes in the docs or a bug in the code, If you find any mistakes in the docs or a bug in the code,
please [open an issue in Github](https://github.com/nodejs/node-inspect/issues/new) so we can look into it. please [open an issue in Github](https://github.com/nodejs/node-inspect/issues/new) so we can look into it.
You can also [create a PR](#contributing-code) fixing it yourself, or course. You can also [create a PR](#contributing-code) fixing it yourself of course.
If you report a bug, please follow these guidelines: If you report a bug, please follow these guidelines:
@ -67,7 +65,7 @@ If you report a bug, please follow these guidelines:
For small documentation changes, you can use [Github's editing feature](https://help.github.com/articles/editing-files-in-another-user-s-repository/). For small documentation changes, you can use [Github's editing feature](https://help.github.com/articles/editing-files-in-another-user-s-repository/).
The only thing to keep in mind is to prefix the commit message with "docs: ". The only thing to keep in mind is to prefix the commit message with "docs: ".
The detault commit message generated by Github will lead to a failing CI build. The default commit message generated by Github will lead to a failing CI build.
For larger updates to the documentation For larger updates to the documentation
it might be better to follow the [instructions for contributing code below](#contributing-code). it might be better to follow the [instructions for contributing code below](#contributing-code).

5
deps/node-inspect/GOVERNANCE.md

@ -1,5 +1,4 @@
# node-inspect Project Governance # node-inspect Project Governance
The node-inspect project falls under the governance of the diagnostics The node-inspect project is governed by the Node.js Diagnostics WG as described
working group which is documented in: at <https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md>.
https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md.

1
deps/node-inspect/examples/alive.js

@ -1,4 +1,3 @@
'use strict';
let x = 0; let x = 0;
function heartbeat() { function heartbeat() {
++x; ++x;

1
deps/node-inspect/examples/backtrace.js

@ -1,4 +1,3 @@
'use strict';
const { exports: moduleScoped } = module; const { exports: moduleScoped } = module;
function topFn(a, b = false) { function topFn(a, b = false) {

4
deps/node-inspect/examples/cjs/index.js

@ -1,5 +1,5 @@
'use strict'; const fourty = 40;
const { add } = require('./other'); const { add } = require('./other');
const sum = add(40, 2); const sum = add(fourty, 2);
module.exports = sum; module.exports = sum;

1
deps/node-inspect/examples/cjs/other.js

@ -1,4 +1,3 @@
'use strict';
exports.add = function add(a, b) { exports.add = function add(a, b) {
return a + b; return a + b;
}; };

1
deps/node-inspect/examples/exceptions.js

@ -1,4 +1,3 @@
'use strict';
let error = null; let error = null;
try { try {
throw new Error('Caught'); throw new Error('Caught');

1
deps/node-inspect/examples/three-lines.js

@ -1,4 +1,3 @@
'use strict';
let x = 1; let x = 1;
x = x + 1; x = x + 1;
module.exports = x; module.exports = x;

2
deps/node-inspect/examples/use-strict.js

@ -0,0 +1,2 @@
'use strict';
console.log('first real line');

91
deps/node-inspect/lib/_inspect.js

@ -22,10 +22,13 @@
'use strict'; 'use strict';
const { spawn } = require('child_process'); const { spawn } = require('child_process');
const { EventEmitter } = require('events'); const { EventEmitter } = require('events');
const net = require('net');
const util = require('util'); const util = require('util');
const runAsStandalone = typeof __dirname !== 'undefined';
const [ InspectClient, createRepl ] = const [ InspectClient, createRepl ] =
(typeof __dirname !== 'undefined') ? runAsStandalone ?
// This copy of node-inspect is on-disk, relative paths make sense. // This copy of node-inspect is on-disk, relative paths make sense.
[ [
require('./internal/inspect_client'), require('./internal/inspect_client'),
@ -39,7 +42,16 @@ const [ InspectClient, createRepl ] =
const debuglog = util.debuglog('inspect'); const debuglog = util.debuglog('inspect');
exports.port = 9229; const DEBUG_PORT_PATTERN = /^--(?:debug|inspect)-port=(\d+)$/;
function getDefaultPort() {
for (const arg of process.execArgv) {
const match = arg.match(DEBUG_PORT_PATTERN);
if (match) {
return +match[1];
}
}
return 9229;
}
function runScript(script, scriptArgs, inspectPort, childPrint) { function runScript(script, scriptArgs, inspectPort, childPrint) {
return new Promise((resolve) => { return new Promise((resolve) => {
@ -88,6 +100,45 @@ function createAgentProxy(domain, client) {
}); });
} }
function portIsFree(host, port, timeout = 2000) {
const retryDelay = 150;
let didTimeOut = false;
return new Promise((resolve, reject) => {
setTimeout(() => {
didTimeOut = true;
reject(new Error(
`Timeout (${timeout}) waiting for ${host}:${port} to be free`));
}, timeout);
function pingPort() {
if (didTimeOut) return;
const socket = net.connect(port, host);
let didRetry = false;
function retry() {
if (!didRetry && !didTimeOut) {
didRetry = true;
setTimeout(pingPort, retryDelay);
}
}
socket.on('error', (error) => {
if (error.code === 'ECONNREFUSED') {
resolve();
} else {
retry();
}
});
socket.on('connect', () => {
socket.destroy();
retry();
});
}
pingPort();
});
}
class NodeInspector { class NodeInspector {
constructor(options, stdin, stdout) { constructor(options, stdin, stdout) {
this.options = options; this.options = options;
@ -128,8 +179,9 @@ class NodeInspector {
process.once('SIGHUP', process.exit.bind(process, 0)); process.once('SIGHUP', process.exit.bind(process, 0));
this.run() this.run()
.then(() => { .then(() => startRepl())
this.repl = startRepl(); .then((repl) => {
this.repl = repl;
this.repl.on('exit', () => { this.repl.on('exit', () => {
process.exit(0); process.exit(0);
}); });
@ -139,15 +191,19 @@ class NodeInspector {
} }
suspendReplWhile(fn) { suspendReplWhile(fn) {
this.repl.rli.pause(); if (this.repl) {
this.repl.rli.pause();
}
this.stdin.pause(); this.stdin.pause();
this.paused = true; this.paused = true;
return new Promise((resolve) => { return new Promise((resolve) => {
resolve(fn()); resolve(fn());
}).then(() => { }).then(() => {
this.paused = false; this.paused = false;
this.repl.rli.resume(); if (this.repl) {
this.repl.displayPrompt(); this.repl.rli.resume();
this.repl.displayPrompt();
}
this.stdin.resume(); this.stdin.resume();
}).then(null, (error) => process.nextTick(() => { throw error; })); }).then(null, (error) => process.nextTick(() => { throw error; }));
} }
@ -162,7 +218,14 @@ class NodeInspector {
run() { run() {
this.killChild(); this.killChild();
return this._runScript().then((child) => { const { host, port } = this.options;
const runOncePortIsFree = () => {
return portIsFree(host, port)
.then(() => this._runScript());
};
return runOncePortIsFree().then((child) => {
this.child = child; this.child = child;
let connectionAttempts = 0; let connectionAttempts = 0;
@ -173,6 +236,7 @@ class NodeInspector {
return this.client.connect() return this.client.connect()
.then(() => { .then(() => {
debuglog('connection established'); debuglog('connection established');
this.stdout.write(' ok');
}, (error) => { }, (error) => {
debuglog('connect failed', error); debuglog('connect failed', error);
// If it's failed to connect 10 times then print failed message // If it's failed to connect 10 times then print failed message
@ -186,7 +250,6 @@ class NodeInspector {
}); });
}; };
const { host, port } = this.options;
this.print(`connecting to ${host}:${port} ..`, true); this.print(`connecting to ${host}:${port} ..`, true);
return attemptConnect(); return attemptConnect();
}); });
@ -225,7 +288,7 @@ class NodeInspector {
function parseArgv([target, ...args]) { function parseArgv([target, ...args]) {
let host = '127.0.0.1'; let host = '127.0.0.1';
let port = exports.port; let port = getDefaultPort();
let isRemote = false; let isRemote = false;
let script = target; let script = target;
let scriptArgs = args; let scriptArgs = args;
@ -258,8 +321,12 @@ function startInspect(argv = process.argv.slice(2),
stdout = process.stdout) { stdout = process.stdout) {
/* eslint-disable no-console */ /* eslint-disable no-console */
if (argv.length < 1) { if (argv.length < 1) {
console.error('Usage: node-inspect script.js'); const invokedAs = runAsStandalone ?
console.error(' node-inspect <host>:<port>'); 'node-inspect' :
`${process.argv0} ${process.argv[1]}`;
console.error(`Usage: ${invokedAs} script.js`);
console.error(` ${invokedAs} <host>:<port>`);
process.exit(1); process.exit(1);
} }

15
deps/node-inspect/lib/internal/inspect_client.js

@ -334,20 +334,7 @@ class Client extends EventEmitter {
this.emit('close'); this.emit('close');
}); });
Promise.all([ this.emit('ready');
this.callMethod('Runtime.enable'),
this.callMethod('Debugger.enable'),
this.callMethod('Debugger.setPauseOnExceptions', { state: 'none' }),
this.callMethod('Debugger.setAsyncCallStackDepth', { maxDepth: 0 }),
this.callMethod('Profiler.enable'),
this.callMethod('Profiler.setSamplingInterval', { interval: 100 }),
this.callMethod('Debugger.setBlackboxPatterns', { patterns: [] }),
this.callMethod('Runtime.runIfWaitingForDebugger'),
]).then(() => {
this.emit('ready');
}, (error) => {
this.emit('error', error);
});
}; };
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {

53
deps/node-inspect/lib/internal/inspect_repl.js

@ -234,10 +234,10 @@ class ScopeSnapshot {
constructor(scope, properties) { constructor(scope, properties) {
Object.assign(this, scope); Object.assign(this, scope);
this.properties = new Map(properties.map((prop) => { this.properties = new Map(properties.map((prop) => {
// console.error(prop);
const value = new RemoteObject(prop.value); const value = new RemoteObject(prop.value);
return [prop.name, value]; return [prop.name, value];
})); }));
this.completionGroup = properties.map((prop) => prop.name);
} }
[util.inspect.custom](depth, opts) { [util.inspect.custom](depth, opts) {
@ -480,7 +480,9 @@ function createRepl(inspector) {
if (!selectedFrame) { if (!selectedFrame) {
return Promise.reject(new Error('Requires execution to be paused')); return Promise.reject(new Error('Requires execution to be paused'));
} }
return selectedFrame.loadScopes(); return selectedFrame.loadScopes().then((scopes) => {
return scopes.map((scope) => scope.completionGroup);
});
} }
if (selectedFrame) { if (selectedFrame) {
@ -746,8 +748,8 @@ function createRepl(inspector) {
.filter(({ location }) => !!location.scriptUrl) .filter(({ location }) => !!location.scriptUrl)
.map(({ location }) => .map(({ location }) =>
setBreakpoint(location.scriptUrl, location.lineNumber + 1)); setBreakpoint(location.scriptUrl, location.lineNumber + 1));
if (!newBreakpoints.length) return; if (!newBreakpoints.length) return Promise.resolve();
Promise.all(newBreakpoints).then((results) => { return Promise.all(newBreakpoints).then((results) => {
print(`${results.length} breakpoints restored.`); print(`${results.length} breakpoints restored.`);
}); });
} }
@ -768,7 +770,8 @@ function createRepl(inspector) {
const breakType = reason === 'other' ? 'break' : reason; const breakType = reason === 'other' ? 'break' : reason;
const script = knownScripts[scriptId]; const script = knownScripts[scriptId];
const scriptUrl = script ? getRelativePath(script.url) : '[unknown]'; const scriptUrl = script ? getRelativePath(script.url) : '[unknown]';
print(`${breakType} in ${scriptUrl}:${lineNumber + 1}`);
const header = `${breakType} in ${scriptUrl}:${lineNumber + 1}`;
inspector.suspendReplWhile(() => inspector.suspendReplWhile(() =>
Promise.all([formatWatchers(true), selectedFrame.list(2)]) Promise.all([formatWatchers(true), selectedFrame.list(2)])
@ -776,8 +779,10 @@ function createRepl(inspector) {
if (watcherList) { if (watcherList) {
return `${watcherList}\n${inspect(context)}`; return `${watcherList}\n${inspect(context)}`;
} }
return context; return inspect(context);
}).then(print)); }).then((breakContext) => {
print(`${header}\n${breakContext}`);
}));
}); });
function handleResumed() { function handleResumed() {
@ -1024,7 +1029,30 @@ function createRepl(inspector) {
aliasProperties(context, SHORTCUTS); aliasProperties(context, SHORTCUTS);
} }
function initAfterStart() {
const setupTasks = [
Runtime.enable(),
Profiler.enable(),
Profiler.setSamplingInterval({ interval: 100 }),
Debugger.enable(),
Debugger.setPauseOnExceptions({ state: 'none' }),
Debugger.setAsyncCallStackDepth({ maxDepth: 0 }),
Debugger.setBlackboxPatterns({ patterns: [] }),
Debugger.setPauseOnExceptions({ state: pauseOnExceptionState }),
restoreBreakpoints(),
Runtime.runIfWaitingForDebugger(),
];
return Promise.all(setupTasks);
}
return function startRepl() { return function startRepl() {
inspector.client.on('close', () => {
resetOnStart();
});
inspector.client.on('ready', () => {
initAfterStart();
});
const replOptions = { const replOptions = {
prompt: 'debug> ', prompt: 'debug> ',
input: inspector.stdin, input: inspector.stdin,
@ -1033,6 +1061,7 @@ function createRepl(inspector) {
useGlobal: false, useGlobal: false,
ignoreUndefined: true, ignoreUndefined: true,
}; };
repl = Repl.start(replOptions); // eslint-disable-line prefer-const repl = Repl.start(replOptions); // eslint-disable-line prefer-const
initializeContext(repl.context); initializeContext(repl.context);
repl.on('reset', initializeContext); repl.on('reset', initializeContext);
@ -1042,14 +1071,8 @@ function createRepl(inspector) {
repl.rli.emit('SIGINT'); repl.rli.emit('SIGINT');
}); });
inspector.client.on('close', () => { // Init once for the initial connection
resetOnStart(); initAfterStart();
});
inspector.client.on('ready', () => {
restoreBreakpoints();
Debugger.setPauseOnExceptions({ state: pauseOnExceptionState });
});
return repl; return repl;
}; };

8
deps/node-inspect/package.json

@ -1,17 +1,17 @@
{ {
"name": "node-inspect", "name": "node-inspect",
"version": "1.10.4", "version": "1.10.6",
"description": "Node Inspect", "description": "Node Inspect",
"license": "MIT", "license": "MIT",
"main": "lib/_inspect.js", "main": "lib/_inspect.js",
"bin": "cli.js", "bin": "cli.js",
"homepage": "https://github.com/buggerjs/node-inspect", "homepage": "https://github.com/nodejs/node-inspect",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+ssh://git@github.com/buggerjs/node-inspect" "url": "git+ssh://git@github.com/nodejs/node-inspect"
}, },
"bugs": { "bugs": {
"url": "https://github.com/buggerjs/node-inspect/issues" "url": "https://github.com/nodejs/node-inspect/issues"
}, },
"scripts": { "scripts": {
"pretest": "eslint --rulesdir=tools/eslint-rules lib test", "pretest": "eslint --rulesdir=tools/eslint-rules lib test",

4
deps/node-inspect/test/cli/backtrace.test.js

@ -19,11 +19,11 @@ test('display and navigate backtrace', (t) => {
.then(() => cli.stepCommand('c')) .then(() => cli.stepCommand('c'))
.then(() => cli.command('bt')) .then(() => cli.command('bt'))
.then(() => { .then(() => {
t.match(cli.output, `#0 topFn ${script}:8:2`); t.match(cli.output, `#0 topFn ${script}:7:2`);
}) })
.then(() => cli.command('backtrace')) .then(() => cli.command('backtrace'))
.then(() => { .then(() => {
t.match(cli.output, `#0 topFn ${script}:8:2`); t.match(cli.output, `#0 topFn ${script}:7:2`);
}) })
.then(() => cli.quit()) .then(() => cli.quit())
.then(null, onFatal); .then(null, onFatal);

6
deps/node-inspect/test/cli/exceptions.test.js

@ -31,11 +31,11 @@ test('break on (uncaught) exceptions', (t) => {
.then(() => cli.command('breakOnException')) .then(() => cli.command('breakOnException'))
.then(() => cli.stepCommand('c')) .then(() => cli.stepCommand('c'))
.then(() => { .then(() => {
t.match(cli.output, `exception in ${script}:4`); t.match(cli.output, `exception in ${script}:3`);
}) })
.then(() => cli.stepCommand('c')) .then(() => cli.stepCommand('c'))
.then(() => { .then(() => {
t.match(cli.output, `exception in ${script}:10`); t.match(cli.output, `exception in ${script}:9`);
}) })
// Next run: With `breakOnUncaught` it only pauses on the 2nd exception // Next run: With `breakOnUncaught` it only pauses on the 2nd exception
@ -46,7 +46,7 @@ test('break on (uncaught) exceptions', (t) => {
}) })
.then(() => cli.stepCommand('c')) .then(() => cli.stepCommand('c'))
.then(() => { .then(() => {
t.match(cli.output, `exception in ${script}:10`); t.match(cli.output, `exception in ${script}:9`);
}) })
// Next run: Back to the initial state! It should die again. // Next run: Back to the initial state! It should die again.

4
deps/node-inspect/test/cli/launch.test.js

@ -8,7 +8,9 @@ const startCLI = require('./start-cli');
test('examples/empty.js', (t) => { test('examples/empty.js', (t) => {
const script = Path.join('examples', 'empty.js'); const script = Path.join('examples', 'empty.js');
const cli = startCLI([script]); const cli = startCLI([script]);
return cli.waitForPrompt()
return cli.waitFor(/break/)
.then(() => cli.waitForPrompt())
.then(() => { .then(() => {
t.match(cli.output, 'debug>', 'prints a prompt'); t.match(cli.output, 'debug>', 'prints a prompt');
t.match( t.match(

13
deps/node-inspect/test/cli/preserve-breaks.test.js

@ -48,8 +48,17 @@ test('run after quit / restart', (t) => {
}) })
.then(() => cli.command('breakpoints')) .then(() => cli.command('breakpoints'))
.then(() => { .then(() => {
t.match(cli.output, `#0 ${script}:2`); if (process.platform === 'aix') {
t.match(cli.output, `#1 ${script}:3`); // TODO: There is a known issue on AIX where the breakpoints aren't
// properly resolved yet when we reach this point.
// Eventually that should be figured out but for now we don't want
// to fail builds because of it.
t.match(cli.output, /#0 [^\n]+three-lines\.js\$?:2/);
t.match(cli.output, /#1 [^\n]+three-lines\.js\$?:3/);
} else {
t.match(cli.output, `#0 ${script}:2`);
t.match(cli.output, `#1 ${script}:3`);
}
}) })
.then(() => cli.quit()) .then(() => cli.quit())
.then(null, onFatal); .then(null, onFatal);

27
deps/node-inspect/test/cli/use-strict.test.js

@ -0,0 +1,27 @@
'use strict';
const Path = require('path');
const { test } = require('tap');
const startCLI = require('./start-cli');
test('for whiles that starts with strict directive', (t) => {
const script = Path.join('examples', 'use-strict.js');
const cli = startCLI([script]);
function onFatal(error) {
cli.quit();
throw error;
}
return cli.waitFor(/break/)
.then(() => cli.waitForPrompt())
.then(() => {
t.match(
cli.output,
/break in [^:]+:(?:1|2)[^\d]/,
'pauses either on strict directive or first "real" line');
})
.then(() => cli.quit())
.then(null, onFatal);
});
Loading…
Cancel
Save