increase test coverage
extend test coverage
This commit is contained in:
83
tests/e2e/unit/svgcore-touch.spec.js
Normal file
83
tests/e2e/unit/svgcore-touch.spec.js
Normal file
@@ -0,0 +1,83 @@
|
||||
import { test, expect } from '../fixtures.js'
|
||||
|
||||
test.describe('touch event adapter', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/tests/unit-harness.html')
|
||||
await page.waitForFunction(() => Boolean(window.svgHarness))
|
||||
})
|
||||
|
||||
test('translates single touch events into mouse events', async ({ page }) => {
|
||||
const result = await page.evaluate(() => {
|
||||
const { touch } = window.svgHarness
|
||||
const target = document.createElement('div')
|
||||
document.body.append(target)
|
||||
|
||||
const received = []
|
||||
target.addEventListener('mousedown', (ev) => {
|
||||
received.push({
|
||||
type: ev.type,
|
||||
clientX: ev.clientX,
|
||||
clientY: ev.clientY,
|
||||
screenX: ev.screenX,
|
||||
screenY: ev.screenY
|
||||
})
|
||||
})
|
||||
|
||||
const svgroot = {
|
||||
listeners: {},
|
||||
addEventListener (type, handler) { this.listeners[type] = handler },
|
||||
dispatchEvent (ev) { this.listeners[ev.type]?.(ev) }
|
||||
}
|
||||
|
||||
touch.init({ svgroot })
|
||||
const ev = new TouchEvent('touchstart', {
|
||||
changedTouches: [
|
||||
new Touch({
|
||||
identifier: 1,
|
||||
target,
|
||||
clientX: 12,
|
||||
clientY: 34,
|
||||
screenX: 56,
|
||||
screenY: 78
|
||||
})
|
||||
]
|
||||
})
|
||||
svgroot.dispatchEvent(ev)
|
||||
return received[0]
|
||||
})
|
||||
|
||||
expect(result.type).toBe('mousedown')
|
||||
expect(result.clientX).toBe(12)
|
||||
expect(result.clientY).toBe(34)
|
||||
expect(result.screenX).toBe(56)
|
||||
expect(result.screenY).toBe(78)
|
||||
})
|
||||
|
||||
test('ignores multi-touch gestures when forwarding', async ({ page }) => {
|
||||
const count = await page.evaluate(() => {
|
||||
const { touch } = window.svgHarness
|
||||
const target = document.createElement('div')
|
||||
document.body.append(target)
|
||||
let mouseEvents = 0
|
||||
target.addEventListener('mousedown', () => { mouseEvents++ })
|
||||
|
||||
const svgroot = {
|
||||
listeners: {},
|
||||
addEventListener (type, handler) { this.listeners[type] = handler },
|
||||
dispatchEvent (ev) { this.listeners[ev.type]?.(ev) }
|
||||
}
|
||||
|
||||
touch.init({ svgroot })
|
||||
const ev = new TouchEvent('touchstart', {
|
||||
changedTouches: [
|
||||
new Touch({ identifier: 1, target, clientX: 1, clientY: 2, screenX: 3, screenY: 4 }),
|
||||
new Touch({ identifier: 2, target, clientX: 5, clientY: 6, screenX: 7, screenY: 8 })
|
||||
]
|
||||
})
|
||||
svgroot.dispatchEvent(ev)
|
||||
return mouseEvents
|
||||
})
|
||||
|
||||
expect(count).toBe(0)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user