From a43b919c05b82539241bd0042da91b065c57cee7 Mon Sep 17 00:00:00 2001 From: displaynone Date: Tue, 9 May 2017 23:58:39 +0200 Subject: [PATCH] New test: Touch --- test/utils/touch.test.js | 79 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 test/utils/touch.test.js diff --git a/test/utils/touch.test.js b/test/utils/touch.test.js new file mode 100644 index 0000000..8f3c371 --- /dev/null +++ b/test/utils/touch.test.js @@ -0,0 +1,79 @@ + +// Copy of DOM.fireEvent, but using touch offets +const fireEvent = (target, eventType, offsetX, offsetY, touches) => { + const event = new CustomEvent(eventType); + + event.offsetX = offsetX; + event.offsetY = offsetY; + event.touches = touches; + + target.dispatchEvent(event); +}; + +beforeAll(() => { + const brs = '
'.repeat(20); + document.body.innerHTML = `
${brs}
`; +}); + +test('Touch utility', () => { + // Overrides userAgent to force mobile detection + const UAProp = Object.getOwnPropertyDescriptor(window.navigator.__proto__, 'userAgent'); + Object.defineProperty(window.navigator, 'userAgent', {get: () => 'Android'}); + + const Touch = require('../../src/js/plugins/touch'); + + const ws = document.getElementById('webslides'); + const next = jest.fn(); + const prev = jest.fn(); + const zoom = jest.fn(); + + let disabled = true; + const webslides = { + el: ws, + isDisabled: () => {return disabled;}, + isMoving: false, + isVertical: false, + goNext: next, + goPrev: prev, + toggleZoom: zoom, + options: { + slideOffset: 100 + } + }; + + const touch = new Touch.default(webslides); + fireEvent(document, 'touchstart', 200, 200, [1]); + fireEvent(document, 'touchmove', 200, 400, [1]); + fireEvent(document, 'touchend', 200, 200, [1]); + + expect(next).not.toBeCalled(); + expect(prev).not.toBeCalled(); + expect(zoom).not.toBeCalled(); + + disabled = false; + + fireEvent(document, 'touchstart', 800, 200, [1]); + fireEvent(document, 'touchmove', 400, 200, [1]); + fireEvent(document, 'touchend', 400, 200, [1]); + + expect(next.mock.calls.length).toBe(1); + expect(prev.mock.calls.length).toBe(0); + expect(zoom.mock.calls.length).toBe(0); + + fireEvent(document, 'touchstart', 200, 200, [1]); + fireEvent(document, 'touchmove', 400, 200, [1]); + fireEvent(document, 'touchend', 400, 200, [1]); + + expect(next.mock.calls.length).toBe(1); + expect(prev.mock.calls.length).toBe(1); + expect(zoom.mock.calls.length).toBe(0); + + fireEvent(document, 'touchstart', 200, 200, [{clientX: 100, clientY: 100}, {clientX: 400, clientY: 400}]); + fireEvent(document, 'touchmove', 400, 200, [{clientX: 200, clientY: 200}, {clientX: 300, clientY: 300}]); + fireEvent(document, 'touchend', 400, 200, [{clientX: 200, clientY: 200}, {clientX: 300, clientY: 300}]); + + expect(next.mock.calls.length).toBe(1); + expect(prev.mock.calls.length).toBe(1); + expect(zoom.mock.calls.length).toBe(1); + +});