/* Copyright 2026 Marimo. All rights reserved. */ import { act, renderHook } from "@testing-library/react"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { useTimer } from "../useTimer"; describe("useTimer", () => { beforeEach(() => { vi.useFakeTimers(); }); afterEach(() => { vi.restoreAllMocks(); vi.useRealTimers(); }); it("should start at 0", () => { const { result } = renderHook(() => useTimer()); expect(result.current.time).toBe("0.0"); }); it("should increment time when started", () => { const { result } = renderHook(() => useTimer()); act(() => { result.current.start(); vi.runOnlyPendingTimers(); }); expect(result.current.time).toBe("0.1"); }); it("should stop incrementing when stopped", () => { const { result } = renderHook(() => useTimer()); act(() => { result.current.start(); vi.runOnlyPendingTimers(); }); act(() => { result.current.stop(); vi.runOnlyPendingTimers(); }); expect(result.current.time).toBe("0.1"); }); it("should reset to 0 when cleared", () => { const { result } = renderHook(() => useTimer()); act(() => result.current.clear()); expect(result.current.time).toBe("0.0"); }); it("should cleanup interval on unmount", () => { const { result, unmount } = renderHook(() => useTimer()); act(() => result.current.start()); unmount(); vi.advanceTimersByTime(100); expect(result.current.time).toBe("0.0"); }); });