diff options
author | 2023-05-14 14:18:56 -0300 | |
---|---|---|
committer | 2023-05-14 10:18:56 -0700 | |
commit | bf9e40d5b49f1ed16ea9abed4e231456dcda99c0 (patch) | |
tree | a803971285c5f4329bbee4ef025151baaf91c817 /test/js | |
parent | 2a66229b0f9aabf96891afe3063e07ec877527ca (diff) | |
download | bun-bf9e40d5b49f1ed16ea9abed4e231456dcda99c0.tar.gz bun-bf9e40d5b49f1ed16ea9abed4e231456dcda99c0.tar.zst bun-bf9e40d5b49f1ed16ea9abed4e231456dcda99c0.zip |
feat(Timer.refresh) add refresh support on Timer (#2874)
* add refresh support on Timer
* fix this return
* add refresh setTimeout tests
* fix tests and add setInterval test
* use setCached for arguments and callback
---------
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Diffstat (limited to 'test/js')
-rw-r--r-- | test/js/web/timers/setInterval.test.js | 14 | ||||
-rw-r--r-- | test/js/web/timers/setTimeout.test.js | 59 |
2 files changed, 73 insertions, 0 deletions
diff --git a/test/js/web/timers/setInterval.test.js b/test/js/web/timers/setInterval.test.js index 7b03afba5..b4215eef2 100644 --- a/test/js/web/timers/setInterval.test.js +++ b/test/js/web/timers/setInterval.test.js @@ -59,3 +59,17 @@ it("async setInterval", async () => { }); }); }); + +it("setInterval if refreshed before run, should reschedule to run later", done => { + let start = Date.now(); + let timer = setInterval(() => { + let end = Date.now(); + clearInterval(timer); + expect(end - start).toBeGreaterThanOrEqual(150); + done(); + }, 100); + + setTimeout(() => { + timer.refresh(); + }, 50); +}); diff --git a/test/js/web/timers/setTimeout.test.js b/test/js/web/timers/setTimeout.test.js index 88472adc7..dbe89dea8 100644 --- a/test/js/web/timers/setTimeout.test.js +++ b/test/js/web/timers/setTimeout.test.js @@ -171,3 +171,62 @@ it.skip("order of setTimeouts", done => { setTimeout(maybeDone(() => nums.push(4), 1)); Promise.resolve().then(maybeDone(() => nums.push(1))); }); + +it("setTimeout should refresh N times", done => { + let count = 0; + let timer = setTimeout(() => { + count++; + timer.refresh(); + }, 50); + + setTimeout(() => { + clearTimeout(timer); + expect(count).toBeGreaterThanOrEqual(5); + done(); + }, 300); +}); + +it("setTimeout if refreshed before run, should reschedule to run later", done => { + let start = Date.now(); + let timer = setTimeout(() => { + let end = Date.now(); + expect(end - start).toBeGreaterThanOrEqual(150); + done(); + }, 100); + + setTimeout(() => { + timer.refresh(); + }, 50); +}); + +it("setTimeout should refresh after already been run", done => { + let count = 0; + let timer = setTimeout(() => { + count++; + }, 50); + + setTimeout(() => { + timer.refresh(); + }, 100); + + setTimeout(() => { + expect(count).toBe(2); + done(); + }, 300); +}); + +it("setTimeout should not refresh after clearTimeout", done => { + let count = 0; + let timer = setTimeout(() => { + count++; + }, 50); + + clearTimeout(timer); + + timer.refresh(); + + setTimeout(() => { + expect(count).toBe(0); + done(); + }, 100); +}); |