0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00
nodejs/test/parallel/test-timers-immediate-unref.js
Rich Trott 96f06e6482 test: use mustCall in place of countdown in timers test
Use common.mustCall() in place of countdown in
test-timers-immediate-unref.

PR-URL: https://github.com/nodejs/node/pull/32416
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
2020-03-23 22:54:13 -07:00

42 lines
1.3 KiB
JavaScript

'use strict';
const common = require('../common');
const assert = require('assert');
const immediate = setImmediate(() => {});
assert.strictEqual(immediate.hasRef(), true);
immediate.unref();
assert.strictEqual(immediate.hasRef(), false);
clearImmediate(immediate);
// This immediate should execute as it was unrefed and refed again.
// It also confirms that unref/ref are chainable.
setImmediate(common.mustCall(firstStep)).ref().unref().unref().ref();
function firstStep() {
// Unrefed setImmediate executes if it was unrefed but something else keeps
// the loop open
setImmediate(common.mustCall()).unref();
setTimeout(common.mustCall(() => { setImmediate(secondStep); }), 0);
}
function secondStep() {
// clearImmediate works just fine with unref'd immediates
const immA = setImmediate(() => {
clearImmediate(immA);
clearImmediate(immB);
// This should not keep the event loop open indefinitely
// or do anything else weird
immA.ref();
immB.ref();
}).unref();
const immB = setImmediate(common.mustNotCall()).unref();
setImmediate(common.mustCall(finalStep));
}
function finalStep() {
// This immediate should not execute as it was unrefed
// and nothing else is keeping the event loop alive
setImmediate(common.mustNotCall()).unref();
}