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