'use strict'; const common = require('../common'); const dc = require('diagnostics_channel'); const assert = require('assert'); const channel = dc.tracingChannel('test'); const expectedResult = { foo: 'bar' }; const input = { foo: 'bar' }; const thisArg = { baz: 'buz' }; const arg = { baz: 'buz' }; function check(found) { assert.strictEqual(found, input); } const handlers = { start: common.mustCall(check), end: common.mustCall((found) => { check(found); assert.strictEqual(found.result, expectedResult); }), asyncStart: common.mustNotCall(), asyncEnd: common.mustNotCall(), error: common.mustNotCall() }; assert.strictEqual(channel.start.hasSubscribers, false); channel.subscribe(handlers); assert.strictEqual(channel.start.hasSubscribers, true); const result1 = channel.traceSync(function(arg1) { assert.strictEqual(arg1, arg); assert.strictEqual(this, thisArg); return expectedResult; }, input, thisArg, arg); assert.strictEqual(result1, expectedResult); channel.unsubscribe(handlers); assert.strictEqual(channel.start.hasSubscribers, false); const result2 = channel.traceSync(function(arg1) { assert.strictEqual(arg1, arg); assert.strictEqual(this, thisArg); return expectedResult; }, input, thisArg, arg); assert.strictEqual(result2, expectedResult);