1'use strict'; 2 3const common = require('../../common'); 4const assert = require('assert'); 5const domain = require('domain'); 6const binding = require(`./build/${common.buildType}/binding`); 7 8function makeCallback(object, cb) { 9 binding.makeCallback(object, function someMethod() { setImmediate(cb); }); 10} 11 12let latestWarning = null; 13process.on('warning', (warning) => { 14 latestWarning = warning; 15}); 16 17const d = domain.create(); 18 19class Resource { 20 constructor(domain) { 21 this.domain = domain; 22 } 23} 24 25// When domain is disabled, no warning will be emitted 26makeCallback(new Resource(d), common.mustCall(() => { 27 assert.strictEqual(latestWarning, null); 28 29 d.run(common.mustCall(() => { 30 // No warning will be emitted when no domain property is applied 31 makeCallback({}, common.mustCall(() => { 32 assert.strictEqual(latestWarning, null); 33 34 // Warning is emitted when domain property is used and domain is enabled 35 makeCallback(new Resource(d), common.mustCall(() => { 36 assert.match(latestWarning.message, 37 /Triggered by calling someMethod on Resource\./); 38 assert.strictEqual(latestWarning.name, 'DeprecationWarning'); 39 assert.strictEqual(latestWarning.code, 'DEP0097'); 40 })); 41 })); 42 })); 43})); 44