/
use-pointer-events.test.tsx
91 lines (84 loc) · 2.72 KB
/
use-pointer-events.test.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { mouseEnter, mouseLeave, render } from "../../../jest.setup"
import { fireEvent } from "@testing-library/dom"
import * as React from "react"
import { usePointerEvent } from "../use-pointer-event"
import { enableTouchEvents, enablePointerEvents } from "./utils/event-helpers"
import { fireCustomEvent } from "./utils/fire-event"
function testEventsWithRef(fireFunctions: {
[key: string]: (element: Element) => void
}) {
const ref = React.createRef<HTMLDivElement>()
const handlers = {}
for (const key in fireFunctions) {
handlers[key] = jest.fn()
}
const Component = () => {
for (const key in fireFunctions) {
usePointerEvent(ref, key, handlers[key])
}
return <div ref={ref} />
}
const { rerender } = render(<Component />)
rerender(<Component />)
for (const key in fireFunctions) {
expect(handlers[key]).toHaveBeenCalledTimes(0)
fireFunctions[key](ref.current as HTMLDivElement)
expect(handlers[key]).toHaveBeenCalledTimes(1)
}
}
const touchEvents = {
pointerdown: fireEvent.touchStart,
pointermove: fireEvent.touchMove,
pointerup: fireEvent.touchEnd,
pointercancel: fireEvent.touchCancel,
}
const mouseEvents = {
pointerdown: fireEvent.mouseDown,
pointermove: fireEvent.mouseMove,
pointerup: fireEvent.mouseUp,
pointerover: fireEvent.mouseOver,
pointerout: fireEvent.mouseOut,
pointerenter: mouseEnter,
pointerleave: mouseLeave,
}
const pointerEvents = {
pointerdown: fireCustomEvent("pointerdown"),
pointermove: fireCustomEvent("pointermove"),
pointerup: fireCustomEvent("pointerup"),
pointercancel: fireCustomEvent("pointercancel"),
pointerover: fireCustomEvent("pointerover"),
pointerout: fireCustomEvent("pointerout"),
pointerenter: fireCustomEvent("pointerenter"),
pointerleave: fireCustomEvent("pointerleave"),
}
describe("usePointerEvents", () => {
describe("with touch events", () => {
let restore: Function
beforeAll(() => {
restore = enableTouchEvents()
})
afterAll(() => {
restore()
})
it(`should call handlers with ref`, async () => {
testEventsWithRef(touchEvents)
})
})
describe("with mouse events", () => {
it(`should call handlers with ref`, async () => {
testEventsWithRef(mouseEvents)
})
})
describe("with pointer events", () => {
let restore: Function
beforeAll(() => {
restore = enablePointerEvents()
})
afterAll(() => {
restore()
})
it(`should call handlers with ref`, async () => {
testEventsWithRef(pointerEvents)
})
})
})