import { afterEach, describe, expect, it, vi } from 'vitest' import { installRendererAnimationPauseState, RENDERER_ANIMATIONS_PAUSED_ATTRIBUTE } from './renderer-loop-pause' describe('installRendererAnimationPauseState', () => { afterEach(() => { document.documentElement.removeAttribute(RENDERER_ANIMATIONS_PAUSED_ATTRIBUTE) vi.restoreAllMocks() }) it('pauses on blur, resumes on focus, and cleans up its root state', () => { let focused = true vi.spyOn(document, 'hasFocus').mockImplementation(() => focused) const dispose = installRendererAnimationPauseState() expect(document.documentElement.hasAttribute(RENDERER_ANIMATIONS_PAUSED_ATTRIBUTE)).toBe(false) focused = false window.dispatchEvent(new Event('blur')) expect(document.documentElement.hasAttribute(RENDERER_ANIMATIONS_PAUSED_ATTRIBUTE)).toBe(true) focused = true window.dispatchEvent(new Event('focus')) expect(document.documentElement.hasAttribute(RENDERER_ANIMATIONS_PAUSED_ATTRIBUTE)).toBe(false) focused = false window.dispatchEvent(new Event('blur')) dispose() expect(document.documentElement.hasAttribute(RENDERER_ANIMATIONS_PAUSED_ATTRIBUTE)).toBe(false) }) })