import { describe, expect, it, vi } from 'vitest'; import { oncePerEvent } from '../../app/static/js/systems/keyboard.js'; describe('oncePerEvent', () => { it('lässt dasselbe Ereignisobjekt nur einmal durch', () => { const handler = vi.fn(); const wrapped = oncePerEvent(handler); const first = { code: 'ArrowDown' }; const second = { code: 'ArrowDown' }; // Phaser meldet bei mehreren Ereignissen pro Frame frühere Ereignisse erneut. wrapped(first); wrapped(first); wrapped(second); wrapped(first); wrapped(second); expect(handler).toHaveBeenCalledTimes(2); expect(handler.mock.calls.map(([event]) => event)).toEqual([first, second]); }); it('funktioniert auch ohne Ereignisobjekt (z. B. Zeiger-Aufrufe)', () => { const handler = vi.fn(); const wrapped = oncePerEvent(handler); wrapped(undefined); wrapped(undefined); expect(handler).toHaveBeenCalledTimes(2); }); });