/
githubmirror
/
tldraw
Обзор
Документация
Войти
/
githubmirror
/
tldraw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/editor/src/lib/utils/dom.test.ts
103 строки
3 KB
alex
scope event killing to editor (#6779)
17 сен 2025, 18:52
Не верифицирован
17 сен 2025, 18:52
c349490
Код
Авторство
О чём код?
import { TestEditor } from '../test/TestEditor' describe('Event handling utilities', () => { let editor: TestEditor beforeEach(() => { editor = new TestEditor() }) afterEach(() => { editor.dispose() }) describe('markEventAsHandled and wasEventAlreadyHandled', () => { it('should track events as handled', () => { const mockEvent = new PointerEvent('pointerdown', { pointerId: 1 }) // Initially, event should not be marked as handled expect(editor.wasEventAlreadyHandled(mockEvent)).toBe(false) // Mark the event as handled editor.markEventAsHandled(mockEvent) // Now it should be marked as handled expect(editor.wasEventAlreadyHandled(mockEvent)).toBe(true) }) it('should work with React synthetic events', () => { const nativeEvent = new PointerEvent('pointerdown', { pointerId: 1 }) const syntheticEvent = { nativeEvent } // Initially not handled expect(editor.wasEventAlreadyHandled(syntheticEvent)).toBe(false) expect(editor.wasEventAlreadyHandled(nativeEvent)).toBe(false) // Mark synthetic event as handled editor.markEventAsHandled(syntheticEvent) // Both synthetic and native should be marked as handled expect(editor.wasEventAlreadyHandled(syntheticEvent)).toBe(true) expect(editor.wasEventAlreadyHandled(nativeEvent)).toBe(true) }) it('should handle multiple different events independently', () => { const event1 = new PointerEvent('pointerdown', { pointerId: 1 }) const event2 = new PointerEvent('pointerup', { pointerId: 2 }) const event3 = new MouseEvent('click') // Mark only event1 as handled editor.markEventAsHandled(event1) expect(editor.wasEventAlreadyHandled(event1)).toBe(true) expect(editor.wasEventAlreadyHandled(event2)).toBe(false) expect(editor.wasEventAlreadyHandled(event3)).toBe(false) // Mark event2 as handled editor.markEventAsHandled(event2) expect(editor.wasEventAlreadyHandled(event1)).toBe(true) expect(editor.wasEventAlreadyHandled(event2)).toBe(true) expect(editor.wasEventAlreadyHandled(event3)).toBe(false) }) it('should not interfere with event properties', () => { const event = new PointerEvent('pointerdown', { pointerId: 1, clientX: 100, clientY: 200, }) // Mark as handled editor.markEventAsHandled(event) // Event properties should remain unchanged expect(event.pointerId).toBe(1) expect(event.clientX).toBe(100) expect(event.clientY).toBe(200) expect(event.type).toBe('pointerdown') }) it('should work with touch events', () => { const touchEvent = new TouchEvent('touchstart', { touches: [ { clientX: 50, clientY: 60, } as Touch, ], }) expect(editor.wasEventAlreadyHandled(touchEvent)).toBe(false) editor.markEventAsHandled(touchEvent) expect(editor.wasEventAlreadyHandled(touchEvent)).toBe(true) }) it('should work with keyboard events', () => { const keyEvent = new KeyboardEvent('keydown', { key: 'Enter' }) expect(editor.wasEventAlreadyHandled(keyEvent)).toBe(false) editor.markEventAsHandled(keyEvent) expect(editor.wasEventAlreadyHandled(keyEvent)).toBe(true) }) }) })