import { expect, describe, test, vi } from 'vitest' import ChangeController from './ChangeController' describe("ChangeController", () => { test("Creating a ChangeController without a valid time should throw", () => { expect(() => new ChangeController(Infinity)).toThrowError('Invalid time') }); test("A ChangeController should dispatch an event when `notifyImmediately` is called", () => { const changeListener = vi.fn(); const changeController = new ChangeController(10); changeController.addEventListener("change", changeListener) changeController.notifyImmediately(); expect(changeController.hasPendingChanges).toBe(false); expect(changeListener).toBeCalled(1); }); test("A ChangeController should dispatch an event when `notifyDebounced` is called", async () => { return new Promise((resolve) => { const changeController = new ChangeController(10); changeController.addEventListener("change", () => resolve()); changeController.notifyDebounced(); expect(changeController.hasPendingChanges).toBe(true); }); }); test("A ChangeController should dispatch an event when `notifyDebounced` is called and disposed is called right after", async () => { return new Promise((resolve) => { const changeController = new ChangeController(10); changeController.addEventListener("change", () => resolve()); changeController.notifyDebounced(); expect(changeController.hasPendingChanges).toBe(true); changeController.dispose(); }); }); });