Files
shanxia2.0/web-admin/scripts/mobile-contract-seal-drag.test.ts
T

57 lines
1.7 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { existsSync } from 'node:fs'
const moduleUrl = new URL('../src/views/m/crm/contract/print/sealPointerDrag.ts', import.meta.url)
test('touch pointer drags a seal and remove detaches listeners', async () => {
assert.ok(existsSync(moduleUrl), 'pointer seal adapter exists')
const { setupSealPointerDrag } = await import(moduleUrl.href)
const handlers = new Map()
const removed = []
const doc = {
addEventListener: (key, fn) => handlers.set(key, fn),
removeEventListener: (key) => {
removed.push(key)
handlers.delete(key)
}
}
const body = { ownerDocument: doc, contains: () => true }
let changes = 0
let cleanup
const editor = {
getBody: () => body,
mode: { get: () => 'design' },
fire: () => changes++,
on: (name, fn) => (cleanup = fn)
}
setupSealPointerDrag(editor)
const img = {
tagName: 'IMG',
hasAttribute: () => true,
style: { left: '30px', top: '40px' },
offsetLeft: 30,
offsetTop: 40,
setPointerCapture() {},
releasePointerCapture() {}
}
const event = (x, y, id = 1) => ({
target: img,
clientX: x,
clientY: y,
pointerId: id,
pointerType: 'touch',
button: 0,
preventDefault() {}
})
handlers.get('pointerdown')(event(50, 60))
handlers.get('pointermove')(event(80, 100, 2))
assert.equal(img.style.left, '30px')
handlers.get('pointermove')(event(80, 100))
assert.equal(img.style.left, '60px')
assert.equal(img.style.top, '80px')
handlers.get('pointerup')(event(80, 100))
assert.equal(changes, 1)
cleanup()
assert.equal(handlers.size, 0)
assert.equal(removed.length, 4)
})