| 'use strict'; |
| |
| const common = require('../common'); |
| const assert = require('assert'); |
| const { AsyncResource, executionAsyncId } = require('async_hooks'); |
| |
| const fn = common.mustCall(AsyncResource.bind(() => { |
| return executionAsyncId(); |
| })); |
| |
| setImmediate(() => { |
| const asyncId = executionAsyncId(); |
| assert.notStrictEqual(asyncId, fn()); |
| }); |
| |
| const asyncResource = new AsyncResource('test'); |
| |
| [1, false, '', {}, []].forEach((i) => { |
| assert.throws(() => asyncResource.bind(i), { |
| code: 'ERR_INVALID_ARG_TYPE' |
| }); |
| }); |
| |
| const fn2 = asyncResource.bind((a, b) => { |
| return executionAsyncId(); |
| }); |
| |
| assert.strictEqual(fn2.asyncResource, asyncResource); |
| assert.strictEqual(fn2.length, 2); |
| |
| setImmediate(() => { |
| const asyncId = executionAsyncId(); |
| assert.strictEqual(asyncResource.asyncId(), fn2()); |
| assert.notStrictEqual(asyncId, fn2()); |
| }); |