mirror of https://gitee.com/openkylin/nodejs.git
36 lines
1.4 KiB
JavaScript
36 lines
1.4 KiB
JavaScript
'use strict';
|
|
require('../common');
|
|
const tmpdir = require('../common/tmpdir');
|
|
const assert = require('assert');
|
|
const path = require('path');
|
|
const child_process = require('child_process');
|
|
|
|
tmpdir.refresh();
|
|
|
|
// Tests that exceptions from the PromiseRejectCallback are printed to stderr
|
|
// when they occur as a best-effort way of handling them, and that calling
|
|
// `console.log()` works after that. Earlier, the latter did not work because
|
|
// of the exception left lying around by the PromiseRejectCallback when its JS
|
|
// part exceeded the call stack limit, and when the inspector/built-in coverage
|
|
// was enabled, it resulted in a hard crash.
|
|
|
|
for (const NODE_V8_COVERAGE of ['', tmpdir.path]) {
|
|
// NODE_V8_COVERAGE does not work without the inspector.
|
|
// Refs: https://github.com/nodejs/node/issues/29542
|
|
if (!process.features.inspector && NODE_V8_COVERAGE !== '') continue;
|
|
|
|
const { status, signal, stdout, stderr } =
|
|
child_process.spawnSync(process.execPath,
|
|
[path.join(__dirname, 'test-ttywrap-stack.js')],
|
|
{ env: { ...process.env, NODE_V8_COVERAGE } });
|
|
|
|
assert(stdout.toString('utf8')
|
|
.startsWith('RangeError: Maximum call stack size exceeded'),
|
|
`stdout: <${stdout}>`);
|
|
assert(stderr.toString('utf8')
|
|
.startsWith('Exception in PromiseRejectCallback'),
|
|
`stderr: <${stderr}>`);
|
|
assert.strictEqual(status, 0);
|
|
assert.strictEqual(signal, null);
|
|
}
|