| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const { promiseHooks } = require('v8'); |
| |
| assert.throws(() => { |
| promiseHooks.onInit(async function() { }); |
| }, /The "initHook" argument must be of type function/); |
| |
| assert.throws(() => { |
| promiseHooks.onInit(async function*() { }); |
| }, /The "initHook" argument must be of type function/); |
| |
| let seenPromise; |
| let seenParent; |
| |
| const stop = promiseHooks.onInit(common.mustCall((promise, parent) => { |
| seenPromise = promise; |
| seenParent = parent; |
| }, 2)); |
| |
| const parent = Promise.resolve(); |
| assert.strictEqual(seenPromise, parent); |
| assert.strictEqual(seenParent, undefined); |
| |
| const child = parent.then(); |
| assert.strictEqual(seenPromise, child); |
| assert.strictEqual(seenParent, parent); |
| |
| seenPromise = undefined; |
| seenParent = undefined; |
| |
| stop(); |
| |
| Promise.resolve(); |
| assert.strictEqual(seenPromise, undefined); |
| assert.strictEqual(seenParent, undefined); |