11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_ciconst common = require('../common'); 41cb0ef41Sopenharmony_ciconst assert = require('assert'); 51cb0ef41Sopenharmony_ciconst { AsyncResource, executionAsyncId } = require('async_hooks'); 61cb0ef41Sopenharmony_ci 71cb0ef41Sopenharmony_ciconst fn = common.mustCall(AsyncResource.bind(() => { 81cb0ef41Sopenharmony_ci return executionAsyncId(); 91cb0ef41Sopenharmony_ci})); 101cb0ef41Sopenharmony_ci 111cb0ef41Sopenharmony_cisetImmediate(() => { 121cb0ef41Sopenharmony_ci const asyncId = executionAsyncId(); 131cb0ef41Sopenharmony_ci assert.notStrictEqual(asyncId, fn()); 141cb0ef41Sopenharmony_ci}); 151cb0ef41Sopenharmony_ci 161cb0ef41Sopenharmony_ciconst asyncResource = new AsyncResource('test'); 171cb0ef41Sopenharmony_ci 181cb0ef41Sopenharmony_ci[1, false, '', {}, []].forEach((i) => { 191cb0ef41Sopenharmony_ci assert.throws(() => asyncResource.bind(i), { 201cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE' 211cb0ef41Sopenharmony_ci }); 221cb0ef41Sopenharmony_ci}); 231cb0ef41Sopenharmony_ci 241cb0ef41Sopenharmony_ciconst fn2 = asyncResource.bind((a, b) => { 251cb0ef41Sopenharmony_ci return executionAsyncId(); 261cb0ef41Sopenharmony_ci}); 271cb0ef41Sopenharmony_ci 281cb0ef41Sopenharmony_ciassert.strictEqual(fn2.asyncResource, asyncResource); 291cb0ef41Sopenharmony_ciassert.strictEqual(fn2.length, 2); 301cb0ef41Sopenharmony_ci 311cb0ef41Sopenharmony_cisetImmediate(() => { 321cb0ef41Sopenharmony_ci const asyncId = executionAsyncId(); 331cb0ef41Sopenharmony_ci assert.strictEqual(asyncResource.asyncId(), fn2()); 341cb0ef41Sopenharmony_ci assert.notStrictEqual(asyncId, fn2()); 351cb0ef41Sopenharmony_ci}); 361cb0ef41Sopenharmony_ci 371cb0ef41Sopenharmony_ciconst foo = {}; 381cb0ef41Sopenharmony_ciconst fn3 = asyncResource.bind(common.mustCall(function() { 391cb0ef41Sopenharmony_ci assert.strictEqual(this, foo); 401cb0ef41Sopenharmony_ci}), foo); 411cb0ef41Sopenharmony_cifn3(); 421cb0ef41Sopenharmony_ci 431cb0ef41Sopenharmony_ciconst fn4 = asyncResource.bind(common.mustCall(function() { 441cb0ef41Sopenharmony_ci assert.strictEqual(this, undefined); 451cb0ef41Sopenharmony_ci})); 461cb0ef41Sopenharmony_cifn4(); 471cb0ef41Sopenharmony_ci 481cb0ef41Sopenharmony_ciconst fn5 = asyncResource.bind(common.mustCall(function() { 491cb0ef41Sopenharmony_ci assert.strictEqual(this, false); 501cb0ef41Sopenharmony_ci}), false); 511cb0ef41Sopenharmony_cifn5(); 521cb0ef41Sopenharmony_ci 531cb0ef41Sopenharmony_ciconst fn6 = asyncResource.bind(common.mustCall(function() { 541cb0ef41Sopenharmony_ci assert.strictEqual(this, 'test'); 551cb0ef41Sopenharmony_ci})); 561cb0ef41Sopenharmony_cifn6.call('test'); 57