1'use strict';
2const common = require('../common');
3const assert = require('assert');
4const { promiseHooks } = require('v8');
5
6const expected = [];
7
8function testHook(name) {
9  const hook = promiseHooks[name];
10  const error = new Error(`${name} error`);
11
12  const stop = hook(common.mustCall(() => {
13    stop();
14    throw error;
15  }));
16
17  expected.push(error);
18}
19
20process.on('uncaughtException', common.mustCall((received) => {
21  assert.strictEqual(received, expected.shift());
22}, 4));
23
24testHook('onInit');
25testHook('onSettled');
26testHook('onBefore');
27testHook('onAfter');
28
29const stop = promiseHooks.onInit(common.mustCall(2));
30
31Promise.resolve().then(stop);
32