📄 index.test.ts
¶
📊 Analysis Summary¶
Metric | Count |
---|---|
🔧 Functions | 9 |
📦 Imports | 9 |
📊 Variables & Constants | 7 |
⚡ Async/Await Patterns | 8 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/core/onLongPress/index.test.ts
📦 Imports¶
Name | Source |
---|---|
Ref |
vue |
beforeEach |
vitest |
describe |
vitest |
expect |
vitest |
it |
vitest |
vi |
vitest |
shallowRef |
vue |
useEventListener |
../useEventListener |
onLongPress |
./index |
Variables & Constants¶
Name | Type | Kind | Value | Exported |
---|---|---|---|---|
element |
Ref<HTMLElement> |
let/var | *not shown* |
✗ |
parentElement |
Ref<HTMLElement> |
let/var | *not shown* |
✗ |
childElement |
Ref<HTMLElement> |
let/var | *not shown* |
✗ |
pointerdownEvent |
PointerEvent |
let/var | *not shown* |
✗ |
pointerUpEvent |
PointerEvent |
let/var | *not shown* |
✗ |
moveWithinThresholdEvent |
PointerEvent |
let/var | new PointerEvent('pointermove', { cancelable: true, bubbles: true, clientX: 17, clientY: 25 }) |
✗ |
moveOutsideThresholdEvent |
PointerEvent |
let/var | new PointerEvent('pointermove', { cancelable: true, bubbles: true, clientX: 4, clientY: 30 }) |
✗ |
Async/Await Patterns¶
Type | Function | Await Expressions | Promise Chains |
---|---|---|---|
async-function | triggerCallback |
vi.advanceTimersByTimeAsync(500) | none |
async-function | triggerCallbackWithDelay |
vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(1000) | none |
async-function | notTriggerCallbackOnChildLongPress |
vi.advanceTimersByTimeAsync(500) | none |
async-function | workOnceAndPreventModifiers |
vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(500) | none |
async-function | stopPropagation |
vi.advanceTimersByTimeAsync(500) | none |
async-function | stopEventListeners |
vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(500) | none |
async-function | triggerCallbackWithThreshold |
vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(500) | none |
async-function | triggerOnMouseUp |
vi.advanceTimersByTimeAsync(250), vi.advanceTimersByTimeAsync(500), vi.advanceTimersByTimeAsync(500) | none |
Functions¶
triggerCallback(isRef: boolean): Promise<void>
¶
Code
async function triggerCallback(isRef: boolean) {
const onLongPressCallback = vi.fn()
onLongPress(isRef ? element : element.value, onLongPressCallback)
element.value.dispatchEvent(pointerdownEvent)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
}
- Parameters:
isRef: boolean
- Return Type:
Promise<void>
- Calls:
vi.fn
onLongPress (from ./index)
element.value.dispatchEvent
expect(onLongPressCallback).toHaveBeenCalledTimes
vi.advanceTimersByTimeAsync
triggerCallbackWithDelay(isRef: boolean): Promise<void>
¶
Code
async function triggerCallbackWithDelay(isRef: boolean) {
const onLongPressCallback = vi.fn()
onLongPress(isRef ? element : element.value, onLongPressCallback, { delay: 1000 })
// first pointer down
element.value.dispatchEvent(pointerdownEvent)
// wait for 500ms after pointer down
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
// pointer up to cancel callback
element.value.dispatchEvent(pointerUpEvent)
// wait for 500ms after pointer up
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
// another pointer down
element.value.dispatchEvent(pointerdownEvent)
// wait for 1000ms after pointer down
await vi.advanceTimersByTimeAsync(1000)
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
}
- Parameters:
isRef: boolean
- Return Type:
Promise<void>
- Calls:
vi.fn
onLongPress (from ./index)
element.value.dispatchEvent
vi.advanceTimersByTimeAsync
expect(onLongPressCallback).toHaveBeenCalledTimes
- Internal Comments:
notTriggerCallbackOnChildLongPress(isRef: boolean): Promise<void>
¶
Code
async function notTriggerCallbackOnChildLongPress(isRef: boolean) {
const onLongPressCallback = vi.fn()
onLongPress(isRef ? element : element.value, onLongPressCallback, { modifiers: { self: true } })
childElement.value.dispatchEvent(pointerdownEvent)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
}
- Parameters:
isRef: boolean
- Return Type:
Promise<void>
- Calls:
vi.fn
onLongPress (from ./index)
childElement.value.dispatchEvent
vi.advanceTimersByTimeAsync
expect(onLongPressCallback).toHaveBeenCalledTimes
workOnceAndPreventModifiers(isRef: boolean): Promise<void>
¶
Code
async function workOnceAndPreventModifiers(isRef: boolean) {
const onLongPressCallback = vi.fn()
onLongPress(isRef ? element : element.value, onLongPressCallback, { modifiers: { once: true, prevent: true } })
element.value.dispatchEvent(pointerdownEvent)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
expect(pointerdownEvent.defaultPrevented).toBe(true)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
}
- Parameters:
isRef: boolean
- Return Type:
Promise<void>
- Calls:
vi.fn
onLongPress (from ./index)
element.value.dispatchEvent
vi.advanceTimersByTimeAsync
expect(onLongPressCallback).toHaveBeenCalledTimes
expect(pointerdownEvent.defaultPrevented).toBe
stopPropagation(isRef: boolean): Promise<void>
¶
Code
async function stopPropagation(isRef: boolean) {
const onLongPressCallback = vi.fn()
const onParentLongPressCallback = vi.fn()
useEventListener(parentElement, 'pointerdown', onParentLongPressCallback)
onLongPress(isRef ? element : element.value, onLongPressCallback, { modifiers: { stop: true } })
element.value.dispatchEvent(pointerdownEvent)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
expect(onParentLongPressCallback).toHaveBeenCalledTimes(0)
}
- Parameters:
isRef: boolean
- Return Type:
Promise<void>
- Calls:
vi.fn
useEventListener (from ../useEventListener)
onLongPress (from ./index)
element.value.dispatchEvent
vi.advanceTimersByTimeAsync
expect(onLongPressCallback).toHaveBeenCalledTimes
expect(onParentLongPressCallback).toHaveBeenCalledTimes
stopEventListeners(isRef: boolean): Promise<void>
¶
Code
async function stopEventListeners(isRef: boolean) {
const onLongPressCallback = vi.fn()
const stop = onLongPress(isRef ? element : element.value, onLongPressCallback, { modifiers: { stop: true } })
// before calling stop, the callback should be called
element.value.dispatchEvent(pointerdownEvent)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
stop()
// before calling stop, the callback should no longer be called
onLongPressCallback.mockClear()
element.value.dispatchEvent(pointerdownEvent)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
}
- Parameters:
isRef: boolean
- Return Type:
Promise<void>
- Calls:
vi.fn
onLongPress (from ./index)
element.value.dispatchEvent
vi.advanceTimersByTimeAsync
expect(onLongPressCallback).toHaveBeenCalledTimes
stop
onLongPressCallback.mockClear
- Internal Comments:
triggerCallbackWithThreshold(isRef: boolean): Promise<void>
¶
Code
async function triggerCallbackWithThreshold(isRef: boolean) {
const onLongPressCallback = vi.fn()
pointerdownEvent = new PointerEvent('pointerdown', { cancelable: true, bubbles: true, clientX: 20, clientY: 20 })
const moveWithinThresholdEvent = new PointerEvent('pointermove', { cancelable: true, bubbles: true, clientX: 17, clientY: 25 })
const moveOutsideThresholdEvent = new PointerEvent('pointermove', { cancelable: true, bubbles: true, clientX: 4, clientY: 30 })
onLongPress(isRef ? element : element.value, onLongPressCallback, { distanceThreshold: 15, delay: 1000 })
// first pointer down
element.value.dispatchEvent(pointerdownEvent)
// pointer move outside threshold
await vi.advanceTimersByTimeAsync(500)
element.value.dispatchEvent(moveOutsideThresholdEvent)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
// pointer up to cancel callback
element.value.dispatchEvent(pointerUpEvent)
// wait for 500ms after pointer up
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
// another pointer down
element.value.dispatchEvent(pointerdownEvent)
// pointer move within threshold
await vi.advanceTimersByTimeAsync(500)
element.value.dispatchEvent(moveWithinThresholdEvent)
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
}
- Parameters:
isRef: boolean
- Return Type:
Promise<void>
- Calls:
vi.fn
onLongPress (from ./index)
element.value.dispatchEvent
vi.advanceTimersByTimeAsync
expect(onLongPressCallback).toHaveBeenCalledTimes
- Internal Comments:
triggerOnMouseUp(isRef: boolean): Promise<void>
¶
Code
async function triggerOnMouseUp(isRef: boolean) {
const onLongPressCallback = vi.fn()
const onMouseUpCallback = vi.fn()
onLongPress(isRef ? element : element.value, onLongPressCallback, { onMouseUp: onMouseUpCallback })
// first pointer down
pointerdownEvent = new PointerEvent('pointerdown', { cancelable: true, bubbles: true })
element.value.dispatchEvent(pointerdownEvent)
// wait for 250 after pointer down
await vi.advanceTimersByTimeAsync(250)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
expect(onMouseUpCallback).toHaveBeenCalledTimes(0)
// pointer up to cancel callback
pointerUpEvent = new PointerEvent('pointerup', { cancelable: true, bubbles: true })
element.value.dispatchEvent(pointerUpEvent)
expect(onMouseUpCallback).toHaveBeenCalledTimes(1)
expect(onMouseUpCallback).toBeCalledWith(expect.any(Number), 0, false)
expect(onMouseUpCallback.mock.calls[0][0]).toBeGreaterThanOrEqual(250 - 2)
// wait for 500ms after pointer up
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(0)
// another pointer down
pointerdownEvent = new PointerEvent('pointerdown', { cancelable: true, bubbles: true })
element.value.dispatchEvent(pointerdownEvent)
// wait for 500 after pointer down
await vi.advanceTimersByTimeAsync(500)
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
expect(onMouseUpCallback).toHaveBeenCalledTimes(1)
pointerUpEvent = new PointerEvent('pointerup', { cancelable: true, bubbles: true })
element.value.dispatchEvent(pointerUpEvent)
expect(onMouseUpCallback).toHaveBeenCalledTimes(2)
expect(onMouseUpCallback).toBeCalledWith(expect.any(Number), 0, true)
expect(onMouseUpCallback.mock.calls[1][0]).toBeGreaterThanOrEqual(500 - 2)
}
- Parameters:
isRef: boolean
- Return Type:
Promise<void>
- Calls:
vi.fn
onLongPress (from ./index)
element.value.dispatchEvent
vi.advanceTimersByTimeAsync
expect(onLongPressCallback).toHaveBeenCalledTimes
expect(onMouseUpCallback).toHaveBeenCalledTimes
expect(onMouseUpCallback).toBeCalledWith
expect.any
expect(onMouseUpCallback.mock.calls[0][0]).toBeGreaterThanOrEqual
expect(onMouseUpCallback.mock.calls[1][0]).toBeGreaterThanOrEqual
- Internal Comments:
suites(isRef: boolean): void
¶
Code
function suites(isRef: boolean) {
describe('given no options', () => {
it('should trigger longpress after 500ms', () => triggerCallback(isRef))
})
describe('given options', () => {
it('should trigger longpress after options.delay ms', () => triggerCallbackWithDelay(isRef))
it('should not trigger longpress when child element on longpress', () => notTriggerCallbackOnChildLongPress(isRef))
it('should work with once and prevent modifiers', () => workOnceAndPreventModifiers(isRef))
it('should stop propagation', () => stopPropagation(isRef))
it('should remove event listeners after being stopped', () => stopEventListeners(isRef))
it('should trigger longpress if pointer is moved', () => triggerCallbackWithThreshold(isRef))
it('should trigger onMouseUp when pointer is released', () => triggerOnMouseUp(isRef))
})
}
- Parameters:
isRef: boolean
- Return Type:
void
- Calls:
describe (from vitest)
it (from vitest)
triggerCallback
triggerCallbackWithDelay
notTriggerCallbackOnChildLongPress
workOnceAndPreventModifiers
stopPropagation
stopEventListeners
triggerCallbackWithThreshold
triggerOnMouseUp