From c675c2a51c3a66f416cd2fd2ada1eccec45db2c9 Mon Sep 17 00:00:00 2001 From: gfeun Date: Thu, 19 Mar 2020 18:35:35 +0100 Subject: perf(demo): improve main cpu loop performance --- demo/src/task-scheduler.spec.ts | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 demo/src/task-scheduler.spec.ts (limited to 'demo/src/task-scheduler.spec.ts') diff --git a/demo/src/task-scheduler.spec.ts b/demo/src/task-scheduler.spec.ts new file mode 100644 index 0000000..f5fb4bf --- /dev/null +++ b/demo/src/task-scheduler.spec.ts @@ -0,0 +1,52 @@ +/** + * @jest-environment jsdom + */ +/// + +import { MicroTaskScheduler } from './task-scheduler'; + +describe('task-scheduler', () => { + let taskScheduler: MicroTaskScheduler; + let task: jest.Mock; + + beforeEach(() => { + taskScheduler = new MicroTaskScheduler(); + task = jest.fn(); + }); + + it('should execute task', async () => { + taskScheduler.start(); + taskScheduler.postTask(task); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(task).toHaveBeenCalledTimes(1); + }); + + it('should execute task twice when posted twice', async () => { + taskScheduler.start(); + taskScheduler.postTask(task); + taskScheduler.postTask(task); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(task).toHaveBeenCalledTimes(2); + }); + + it('should not execute task when not started', async () => { + taskScheduler.postTask(task); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(task).not.toHaveBeenCalled(); + }); + + it('should not execute task when stopped', async () => { + taskScheduler.start(); + taskScheduler.stop(); + taskScheduler.postTask(task); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(task).not.toHaveBeenCalled(); + }); + + it('should not register listener twice', async () => { + const addEventListenerSpy = jest.spyOn(window, 'addEventListener'); + taskScheduler.start(); + taskScheduler.start(); + expect(addEventListenerSpy).toHaveBeenCalledTimes(1); + }); +}); -- cgit v1.2.3