2020-05-17 11:19:05 -07:00
|
|
|
'use strict';
|
2021-04-08 23:55:45 -07:00
|
|
|
const common = require('../common');
|
|
|
|
|
|
|
|
common.skipIfInspectorDisabled();
|
|
|
|
|
|
|
|
const fixtures = require('../common/fixtures');
|
2021-05-03 21:58:42 -07:00
|
|
|
const startCLI = require('../common/debugger');
|
2020-05-17 11:19:05 -07:00
|
|
|
|
2021-04-08 23:55:45 -07:00
|
|
|
const assert = require('assert');
|
|
|
|
const { spawn } = require('child_process');
|
2020-05-17 11:19:05 -07:00
|
|
|
|
|
|
|
// NOTE(oyyd): We might want to import this regexp from "lib/_inspect.js"?
|
|
|
|
const kDebuggerMsgReg = /Debugger listening on ws:\/\/\[?(.+?)\]?:(\d+)\//;
|
|
|
|
|
|
|
|
function launchTarget(...args) {
|
|
|
|
const childProc = spawn(process.execPath, args);
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const onExit = () => {
|
2021-04-21 17:00:50 -07:00
|
|
|
reject(new Error('Child process exits unexpectedly'));
|
2020-05-17 11:19:05 -07:00
|
|
|
};
|
|
|
|
childProc.on('exit', onExit);
|
|
|
|
childProc.stderr.setEncoding('utf8');
|
2021-04-22 10:40:12 -07:00
|
|
|
let data = '';
|
|
|
|
childProc.stderr.on('data', (chunk) => {
|
|
|
|
data += chunk;
|
2020-05-17 11:19:05 -07:00
|
|
|
const ret = kDebuggerMsgReg.exec(data);
|
|
|
|
childProc.removeListener('exit', onExit);
|
|
|
|
if (ret) {
|
|
|
|
resolve({
|
|
|
|
childProc,
|
|
|
|
host: ret[1],
|
|
|
|
port: ret[2],
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-04-08 23:55:45 -07:00
|
|
|
{
|
2021-06-25 22:11:59 -07:00
|
|
|
const script = fixtures.path('debugger/alive.js');
|
2020-05-17 11:19:05 -07:00
|
|
|
let cli = null;
|
|
|
|
let target = null;
|
|
|
|
|
|
|
|
function cleanup(error) {
|
|
|
|
if (cli) {
|
|
|
|
cli.quit();
|
|
|
|
cli = null;
|
|
|
|
}
|
|
|
|
if (target) {
|
|
|
|
target.kill();
|
|
|
|
target = null;
|
|
|
|
}
|
2021-04-08 23:55:45 -07:00
|
|
|
assert.ifError(error);
|
2020-05-17 11:19:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
return launchTarget('--inspect=0', script)
|
|
|
|
.then(({ childProc, host, port }) => {
|
|
|
|
target = childProc;
|
|
|
|
cli = startCLI([`${host || '127.0.0.1'}:${port}`]);
|
|
|
|
return cli.waitForPrompt();
|
|
|
|
})
|
|
|
|
.then(() => cli.command('sb("alive.js", 3)'))
|
|
|
|
.then(() => cli.waitFor(/break/))
|
|
|
|
.then(() => cli.waitForPrompt())
|
|
|
|
.then(() => {
|
2021-04-08 23:55:45 -07:00
|
|
|
assert.match(
|
2020-05-17 11:19:05 -07:00
|
|
|
cli.output,
|
2021-04-08 23:55:45 -07:00
|
|
|
/> 3 \+\+x;/,
|
2020-05-17 11:19:05 -07:00
|
|
|
'marks the 3rd line');
|
|
|
|
})
|
|
|
|
.then(() => cleanup())
|
|
|
|
.then(null, cleanup);
|
2021-04-08 23:55:45 -07:00
|
|
|
}
|