1'use strict';
2const common = require('../common');
3const assert = require('assert');
4const { promiseHooks } = require('v8');
5
6assert.throws(() => {
7  promiseHooks.onInit(async function() { });
8}, /The "initHook" argument must be of type function/);
9
10assert.throws(() => {
11  promiseHooks.onInit(async function*() { });
12}, /The "initHook" argument must be of type function/);
13
14let seenPromise;
15let seenParent;
16
17const stop = promiseHooks.onInit(common.mustCall((promise, parent) => {
18  seenPromise = promise;
19  seenParent = parent;
20}, 2));
21
22const parent = Promise.resolve();
23assert.strictEqual(seenPromise, parent);
24assert.strictEqual(seenParent, undefined);
25
26const child = parent.then();
27assert.strictEqual(seenPromise, child);
28assert.strictEqual(seenParent, parent);
29
30seenPromise = undefined;
31seenParent = undefined;
32
33stop();
34
35Promise.resolve();
36assert.strictEqual(seenPromise, undefined);
37assert.strictEqual(seenParent, undefined);
38