draggable/test/helpers/sensor.ts
2023-09-22 10:43:58 -07:00

99 lines
2.3 KiB
TypeScript

import {
DRAG_DELAY,
defaultTouchEventOptions,
defaultMouseEventOptions,
} from './constants';
import {triggerEvent} from './event';
export function waitForDragDelay({
dragDelay = DRAG_DELAY,
restoreDateMock = true,
} = {}) {
const next = Date.now() + dragDelay + 1;
const dateMock = jest.spyOn(Date, 'now').mockImplementation(() => {
return next;
});
jest.advanceTimersByTime(dragDelay + 1);
if (restoreDateMock) {
dateMock.mockRestore();
}
return dateMock;
}
export function clickMouse(element: HTMLElement, options = {}) {
return triggerEvent(element, 'mousedown', {
...defaultMouseEventOptions,
...options,
});
}
export function moveMouse(element: HTMLElement, options = {}) {
return triggerEvent(element, 'mousemove', {
...defaultMouseEventOptions,
...options,
});
}
export function releaseMouse(element: HTMLElement, options = {}) {
return triggerEvent(element, 'mouseup', {
...defaultMouseEventOptions,
...options,
});
}
export function touchStart(element: HTMLElement, options = {}) {
return triggerEvent(element, 'touchstart', {
...defaultTouchEventOptions,
...options,
});
}
export function touchMove(element: HTMLElement, options = {}) {
return triggerEvent(element, 'touchmove', {
...defaultTouchEventOptions,
...options,
});
}
export function touchRelease(element: HTMLElement, options = {}) {
return triggerEvent(element, 'touchend', {
...defaultTouchEventOptions,
...options,
});
}
export function dragStart(element: HTMLElement, options = {}) {
return triggerEvent(element, 'dragstart', {
dataTransfer: getDataTransferStub(),
...options,
});
}
export function dragOver(element: HTMLElement, options = {}) {
return triggerEvent(element, 'dragover', {
dataTransfer: getDataTransferStub(),
...options,
});
}
export function dragDrop(element: HTMLElement, options = {}) {
return triggerEvent(element, 'drop', {
dataTransfer: getDataTransferStub(),
...options,
});
}
export function dragStop(element: HTMLElement, options = {}) {
return triggerEvent(element, 'dragend', {
dataTransfer: getDataTransferStub(),
...options,
});
}
export function getDataTransferStub() {
return {
setData: jest.fn(),
effectAllowed: null,
};
}