11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_cirequire('../common'); 31cb0ef41Sopenharmony_ci 41cb0ef41Sopenharmony_ciif (process.argv[2] === 'child') { 51cb0ef41Sopenharmony_ci process.on('uncaughtException', (err) => { 61cb0ef41Sopenharmony_ci err.rethrow = true; 71cb0ef41Sopenharmony_ci throw err; 81cb0ef41Sopenharmony_ci }); 91cb0ef41Sopenharmony_ci 101cb0ef41Sopenharmony_ci function throwException() { 111cb0ef41Sopenharmony_ci throw new Error('boom'); 121cb0ef41Sopenharmony_ci } 131cb0ef41Sopenharmony_ci 141cb0ef41Sopenharmony_ci throwException(); 151cb0ef41Sopenharmony_ci} else { 161cb0ef41Sopenharmony_ci const assert = require('assert'); 171cb0ef41Sopenharmony_ci const { spawnSync } = require('child_process'); 181cb0ef41Sopenharmony_ci const result = spawnSync(process.execPath, [__filename, 'child']); 191cb0ef41Sopenharmony_ci 201cb0ef41Sopenharmony_ci assert.strictEqual(result.status, 7); 211cb0ef41Sopenharmony_ci assert.strictEqual(result.signal, null); 221cb0ef41Sopenharmony_ci assert.strictEqual(result.stdout.toString().trim(), ''); 231cb0ef41Sopenharmony_ci // Verify that the error was thrown and that the stack was preserved. 241cb0ef41Sopenharmony_ci const stderr = result.stderr.toString(); 251cb0ef41Sopenharmony_ci assert.match(stderr, /Error: boom/); 261cb0ef41Sopenharmony_ci assert.match(stderr, /at throwException/); 271cb0ef41Sopenharmony_ci assert.match(stderr, /rethrow: true/); 281cb0ef41Sopenharmony_ci} 29