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:
Marco Ippolito
2024-02-26 16:57:05 +01:00
committed by GitHub
parent 60f09c6278
commit 6cb8a60bcc
2 changed files with 63 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -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);
});
});
});