| 'use strict'; |
| require('../common'); |
| |
| if (process.argv[2] === 'child') { |
| process.on('uncaughtException', (err) => { |
| err.rethrow = true; |
| throw err; |
| }); |
| |
| function throwException() { |
| throw new Error('boom'); |
| } |
| |
| throwException(); |
| } else { |
| const assert = require('assert'); |
| const { spawnSync } = require('child_process'); |
| const result = spawnSync(process.execPath, [__filename, 'child']); |
| |
| assert.strictEqual(result.status, 7); |
| assert.strictEqual(result.signal, null); |
| assert.strictEqual(result.stdout.toString().trim(), ''); |
| // Verify that the error was thrown and that the stack was preserved. |
| const stderr = result.stderr.toString(); |
| assert(/Error: boom/.test(stderr)); |
| assert(/at throwException/.test(stderr)); |
| assert(/rethrow: true/.test(stderr)); |
| } |