mirror of
https://github.com/nodejs/node.git
synced 2024-11-24 12:10:08 +01:00
d86132488d
JavaScript exceptions could be arbitrary values. PR-URL: https://github.com/nodejs/node/pull/38106 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de> Reviewed-By: James M Snell <jasnell@gmail.com>
54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
'use strict';
|
|
require('../common');
|
|
const assert = require('assert');
|
|
const childProcess = require('child_process');
|
|
const os = require('os');
|
|
|
|
if (process.argv[2] === 'child') {
|
|
child(process.argv[3], process.argv[4]);
|
|
} else {
|
|
main();
|
|
}
|
|
|
|
function child(type, valueType) {
|
|
const { createHook } = require('async_hooks');
|
|
const fs = require('fs');
|
|
|
|
createHook({
|
|
[type]() {
|
|
if (valueType === 'symbol') {
|
|
throw Symbol('foo');
|
|
}
|
|
// eslint-disable-next-line no-throw-literal
|
|
throw null;
|
|
}
|
|
}).enable();
|
|
|
|
// Trigger `promiseResolve`.
|
|
new Promise((resolve) => resolve())
|
|
// Trigger `after`/`destroy`.
|
|
.then(() => fs.promises.readFile(__filename, 'utf8'))
|
|
// Make process exit with code 0 if no error caught.
|
|
.then(() => process.exit(0));
|
|
}
|
|
|
|
function main() {
|
|
const types = [ 'init', 'before', 'after', 'destroy', 'promiseResolve' ];
|
|
const valueTypes = [
|
|
[ 'null', 'Error: null' ],
|
|
[ 'symbol', 'Error: Symbol(foo)' ],
|
|
];
|
|
for (const type of types) {
|
|
for (const [valueType, expect] of valueTypes) {
|
|
const cp = childProcess.spawnSync(
|
|
process.execPath,
|
|
[ __filename, 'child', type, valueType ],
|
|
{
|
|
encoding: 'utf8',
|
|
});
|
|
assert.strictEqual(cp.status, 1, type);
|
|
assert.strictEqual(cp.stderr.trim().split(os.EOL)[0], expect, type);
|
|
}
|
|
}
|
|
}
|