| '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; |