mirror of https://gitee.com/openkylin/nodejs.git
70 lines
2.0 KiB
JavaScript
70 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const { execFile } = require('child_process');
|
|
const fixtures = require('../common/fixtures');
|
|
|
|
{
|
|
// Verify exit behavior is unchanged
|
|
const fixture = fixtures.path('uncaught-exceptions', 'uncaught-monitor1.js');
|
|
execFile(
|
|
process.execPath,
|
|
[fixture],
|
|
common.mustCall((err, stdout, stderr) => {
|
|
assert.strictEqual(err.code, 1);
|
|
assert.strictEqual(Object.getPrototypeOf(err).name, 'Error');
|
|
assert.strictEqual(stdout, 'Monitored: Shall exit\n');
|
|
const errLines = stderr.trim().split(/[\r\n]+/);
|
|
const errLine = errLines.find((l) => /^Error/.exec(l));
|
|
assert.strictEqual(errLine, 'Error: Shall exit');
|
|
})
|
|
);
|
|
}
|
|
|
|
{
|
|
// Verify exit behavior is unchanged
|
|
const fixture = fixtures.path('uncaught-exceptions', 'uncaught-monitor2.js');
|
|
execFile(
|
|
process.execPath,
|
|
[fixture],
|
|
common.mustCall((err, stdout, stderr) => {
|
|
assert.strictEqual(err.code, 7);
|
|
assert.strictEqual(Object.getPrototypeOf(err).name, 'Error');
|
|
assert.strictEqual(stdout, 'Monitored: Shall exit, will throw now\n');
|
|
const errLines = stderr.trim().split(/[\r\n]+/);
|
|
const errLine = errLines.find((l) => /^ReferenceError/.exec(l));
|
|
assert.strictEqual(
|
|
errLine,
|
|
'ReferenceError: missingFunction is not defined'
|
|
);
|
|
})
|
|
);
|
|
}
|
|
|
|
const theErr = new Error('MyError');
|
|
|
|
process.on(
|
|
'uncaughtExceptionMonitor',
|
|
common.mustCall((err, origin) => {
|
|
assert.strictEqual(err, theErr);
|
|
assert.strictEqual(origin, 'uncaughtException');
|
|
}, 2)
|
|
);
|
|
|
|
process.on('uncaughtException', common.mustCall((err, origin) => {
|
|
assert.strictEqual(origin, 'uncaughtException');
|
|
assert.strictEqual(err, theErr);
|
|
}));
|
|
|
|
process.nextTick(common.mustCall(() => {
|
|
// Test with uncaughtExceptionCaptureCallback installed
|
|
process.setUncaughtExceptionCaptureCallback(common.mustCall(
|
|
(err) => assert.strictEqual(err, theErr))
|
|
);
|
|
|
|
throw theErr;
|
|
}));
|
|
|
|
throw theErr;
|