import '@testing-library/jest-dom'; import $, {VeamsQueryObject} from '../src'; test('off() - remove event listener', () => { document.body.innerHTML = `

text content 2

text content 2
text content 3
`; const $targetEls: VeamsQueryObject = $('.target-el'); const handler = jest.fn(); expect($targetEls).toHaveLength(2); $targetEls.on('click', undefined, handler); $targetEls.off('click'); $targetEls[0].dispatchEvent(new MouseEvent('click')); $targetEls[1].dispatchEvent(new MouseEvent('click')); expect(handler).toBeCalledTimes(0); }); test('off() - remove event listener (explicit event delegation) without selector', () => { document.body.innerHTML = `

text content 2

text content 2
text content 3
`; const $targetEls: VeamsQueryObject = $(document.getElementById('target-el')); const $evtTriggerEl: VeamsQueryObject = $(document.getElementById('test-el-2')); const handler = jest.fn((evt, currentTarget) => { expect(evt.type).toBe('click'); expect(evt.target.id).toBe('test-el-2'); expect(currentTarget.id).toBe('test-el-2'); }); expect($targetEls).toHaveLength(1); expect($evtTriggerEl).toHaveLength(1); $targetEls.on('click', '#test-el-2', handler); $targetEls.off('click'); $evtTriggerEl[0].dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true})); expect(handler).toBeCalledTimes(1); }); test('off() - remove event listener (explicit event delegation) with selector', () => { document.body.innerHTML = `

text content 2

text content 2
text content 3
`; const $targetEls: VeamsQueryObject = $(document.getElementById('target-el')); const $evtTriggerEl: VeamsQueryObject = $(document.getElementById('test-el-2')); const handler = jest.fn(); expect($targetEls).toHaveLength(1); expect($evtTriggerEl).toHaveLength(1); $targetEls.on('click', '#test-el-2', handler); $targetEls.off('click', '#test-el-2'); $evtTriggerEl[0].dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true})); expect(handler).toBeCalledTimes(0); }); test('off() - remove event listener (implicit event delegation for non bubbling events)', () => { document.body.innerHTML = `

text content 2

text content 2
text content 3
`; const $targetEls: VeamsQueryObject = $(document.getElementById('target-el')); const $evtTriggerEl: VeamsQueryObject = $(document.getElementById('test-el-2')); const handler = jest.fn(); expect($targetEls).toHaveLength(1); expect($evtTriggerEl).toHaveLength(1); $targetEls.on('focus', undefined, handler, true); $targetEls.off('focus'); $evtTriggerEl[0].dispatchEvent(new FocusEvent('focus', {bubbles: false, cancelable: true})); expect(handler).toBeCalledTimes(0); }); test('off() - remove multiple event listeners', () => { document.body.innerHTML = `

text content 2

text content 2
text content 3
`; const $targetEls: VeamsQueryObject = $(document.getElementById('target-el')); const handler = jest.fn(); $targetEls.on('click touchstart', undefined, handler); $targetEls.off('click touchstart'); $targetEls[0].dispatchEvent(new MouseEvent('click')); $targetEls[0].dispatchEvent(new TouchEvent('touchstart')); expect(handler).toBeCalledTimes(0); }); test('off() - remove one of multiple event listeners', () => { document.body.innerHTML = `

text content 2

text content 2
text content 3
`; const $targetEls: VeamsQueryObject = $(document.getElementById('target-el')); const handler = jest.fn((evt, currentTarget) => { expect(evt.type).toBe('touchstart'); expect(evt.target.id).toBe('target-el'); expect(currentTarget.id).toBe('target-el'); }); $targetEls.on('click touchstart', undefined, handler); $targetEls.off(' click'); $targetEls[0].dispatchEvent(new MouseEvent('click')); $targetEls[0].dispatchEvent(new TouchEvent('touchstart')); expect(handler).toBeCalledTimes(1); });