mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
test_runner: add ref methods to mocked timers
Fixes: https://github.com/nodejs/node/issues/51701 PR-URL: https://github.com/nodejs/node/pull/51809 Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Tierney Cyren <hello@bnb.im>
This commit is contained in:
@@ -67,6 +67,32 @@ const TIMERS_DEFAULT_INTERVAL = {
|
||||
setImmediate: -1,
|
||||
};
|
||||
|
||||
class Timeout {
|
||||
constructor(opts) {
|
||||
this.id = opts.id;
|
||||
this.callback = opts.callback;
|
||||
this.runAt = opts.runAt;
|
||||
this.interval = opts.interval;
|
||||
this.args = opts.args;
|
||||
}
|
||||
|
||||
hasRef() {
|
||||
return true;
|
||||
}
|
||||
|
||||
ref() {
|
||||
return this;
|
||||
}
|
||||
|
||||
unref() {
|
||||
return this;
|
||||
}
|
||||
|
||||
refresh() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
class MockTimers {
|
||||
#realSetTimeout;
|
||||
#realClearTimeout;
|
||||
@@ -260,7 +286,7 @@ class MockTimers {
|
||||
|
||||
#createTimer(isInterval, callback, delay, ...args) {
|
||||
const timerId = this.#currentTimer++;
|
||||
const timer = {
|
||||
const opts = {
|
||||
__proto__: null,
|
||||
id: timerId,
|
||||
callback,
|
||||
@@ -268,6 +294,8 @@ class MockTimers {
|
||||
interval: isInterval ? delay : undefined,
|
||||
args,
|
||||
};
|
||||
|
||||
const timer = new Timeout(opts);
|
||||
this.#executionQueue.insert(timer);
|
||||
return timer;
|
||||
}
|
||||
|
||||
@@ -844,4 +844,38 @@ describe('Mock Timers Test Suite', () => {
|
||||
clearTimeout(id);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Api should have same public properties as original', () => {
|
||||
it('should have hasRef', (t) => {
|
||||
t.mock.timers.enable();
|
||||
const timer = setTimeout();
|
||||
assert.strictEqual(typeof timer.hasRef, 'function');
|
||||
assert.strictEqual(timer.hasRef(), true);
|
||||
clearTimeout(timer);
|
||||
});
|
||||
|
||||
it('should have ref', (t) => {
|
||||
t.mock.timers.enable();
|
||||
const timer = setTimeout();
|
||||
assert.ok(typeof timer.ref === 'function');
|
||||
assert.deepStrictEqual(timer.ref(), timer);
|
||||
clearTimeout(timer);
|
||||
});
|
||||
|
||||
it('should have unref', (t) => {
|
||||
t.mock.timers.enable();
|
||||
const timer = setTimeout();
|
||||
assert.ok(typeof timer.unref === 'function');
|
||||
assert.deepStrictEqual(timer.unref(), timer);
|
||||
clearTimeout(timer);
|
||||
});
|
||||
|
||||
it('should have refresh', (t) => {
|
||||
t.mock.timers.enable();
|
||||
const timer = setTimeout();
|
||||
assert.ok(typeof timer.refresh === 'function');
|
||||
assert.deepStrictEqual(timer.refresh(), timer);
|
||||
clearTimeout(timer);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user