1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-03 08:35:29 +02:00
joplin/packages/renderer/MdToHtml/createEventHandlingAttrs.test.ts
2023-10-02 15:15:51 +01:00

92 lines
2.7 KiB
TypeScript

/**
* @jest-environment jsdom
*/
import { createEventHandlingListeners, Options } from './createEventHandlingAttrs';
import { describe, beforeAll, it, jest, expect } from '@jest/globals';
describe('createEventHandlingAttrs', () => {
let lastMessage: string|undefined = undefined;
const postMessageFn = (message: string) => {
lastMessage = message;
};
beforeAll(() => {
lastMessage = undefined;
jest.useFakeTimers();
});
it('should not create listeners to handle long-press when long press is disabled', () => {
const options: Options = {
enableLongPress: false,
postMessageSyntax: 'postMessageFn',
enableEditPopup: false,
};
const listeners = createEventHandlingListeners('someresourceid', options, 'postMessage("click")');
// Should not add touchstart/mouseenter/leave listeners when not creating
// an edit popup or long-pressing.
expect(listeners.onmouseenter).toBe('');
expect(listeners.onmouseleave).toBe('');
expect(listeners.ontouchstart).toBe('');
expect(listeners.ontouchmove).toBe('');
expect(listeners.ontouchend).toBe('');
expect(listeners.ontouchcancel).toBe('');
});
it('should create click listener for given click action', () => {
const options: Options = {
enableLongPress: false,
postMessageSyntax: 'postMessageFn',
enableEditPopup: false,
};
const clickAction = 'postMessageFn("click")';
const listeners = createEventHandlingListeners('someresourceid', options, clickAction);
expect(listeners.onclick).toContain(clickAction);
postMessageFn('test');
eval(listeners.onclick);
expect(lastMessage).toBe('click');
});
it('should create ontouch listeners for long press', () => {
const options: Options = {
enableLongPress: true,
postMessageSyntax: 'postMessageFn',
enableEditPopup: false,
};
const clickAction: null|string = null;
const listeners = createEventHandlingListeners('resourceidhere', options, clickAction);
expect(listeners.onclick).toBe('');
expect(listeners.ontouchstart).not.toBe('');
// Clear lastMessage
postMessageFn('test');
eval(listeners.ontouchstart);
jest.advanceTimersByTime(1000 * 4);
expect(lastMessage).toBe('longclick:resourceidhere');
});
it('motion during a long press should cancel the timeout', () => {
const options: Options = {
enableLongPress: true,
postMessageSyntax: 'postMessageFn',
enableEditPopup: false,
};
const listeners = createEventHandlingListeners('id', options, null);
lastMessage = '';
eval(listeners.ontouchstart);
jest.advanceTimersByTime(100);
eval(listeners.ontouchmove);
jest.advanceTimersByTime(1000 * 100);
// Message handler should not have been called.
expect(lastMessage).toBe('');
});
});