|
|
|
'use strict';
|
|
|
|
|
|
|
|
const common = require('../common');
|
|
|
|
const assert = require('assert');
|
|
|
|
let allsGood = false;
|
|
|
|
let cntr = 0;
|
|
|
|
|
|
|
|
process.on('exit', () => {
|
|
|
|
assert.ok(cntr > 0, '_tickDomainCallback was never called');
|
|
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This test relies upon the following internals to work as specified:
|
|
|
|
* - require('domain') causes node::Environment::set_tick_callback_function()
|
|
|
|
* to use process._tickDomainCallback() to process the nextTickQueue;
|
|
|
|
* replacing process._tickCallback().
|
|
|
|
* - setImmediate() uses node::MakeCallback() instead of
|
|
|
|
* node::AsyncWrap::MakeCallback(). Otherwise the test will always pass.
|
|
|
|
* Have not found a way to verify that node::MakeCallback() is used.
|
|
|
|
*/
|
|
|
|
process._tickDomainCallback = function _tickDomainCallback() {
|
|
|
|
assert.ok(allsGood, '_tickDomainCallback should not have been called');
|
|
|
|
cntr++;
|
|
|
|
};
|
|
|
|
|
|
|
|
setImmediate(common.mustCall(() => {
|
|
|
|
require('domain');
|
|
|
|
setImmediate(common.mustCall(() => setImmediate(common.mustCall(() => {
|
|
|
|
allsGood = true;
|
|
|
|
process.nextTick(() => {});
|
|
|
|
}))));
|
|
|
|
}));
|