diff --git a/test/utils/video.test.js b/test/utils/video.test.js new file mode 100644 index 0000000..3ad9cad --- /dev/null +++ b/test/utils/video.test.js @@ -0,0 +1,52 @@ +import Video from '../../src/js/plugins/video'; +import DOM from '../../src/js/utils/dom'; + +// 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 slides = '12345'.replace(/(\d)/g, '
'); + document.body.innerHTML = `
${slides}
`; +}); + +test('Video utility', () => { + + const ws = document.getElementById('webslides'); + const slides = ws.querySelectorAll('.slide'); + const videos = ws.querySelectorAll('video'); + const play = jest.fn(); + const pause = jest.fn(); + videos.forEach( video => { + video.play = play; + video.pause = pause; + }) + + const webslides = { + el: ws, + slides: [] + }; + slides.forEach( slide => webslides.slides.push({el: slide})); + + expect(ws.querySelectorAll('video[autoplay]').length).toBe(5); + + const video = new Video(webslides); + + expect(ws.querySelectorAll('video[autoplay]').length).toBe(0); + expect(pause.mock.calls.length).toBe(5); + + webslides.slides.forEach( slide => { + DOM.fireEvent(slide.el, 'slide:enable', {slide: slide}); + DOM.fireEvent(slide.el, 'slide:disable', {slide: slide}); + }) + + expect(pause.mock.calls.length).toBe(10); + +});