%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
'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); } } }