import { mockHtmlElement } from '../helper/mockComponent'; import { NodeEventSubscriber } from '../../src/ts/spatialnavigation/nodeeventsubscriber'; describe('NodeEventSubscriber', () => { let htmlElementMock: jest.Mocked; let nodeEventSubscriber: NodeEventSubscriber; beforeEach(() => { htmlElementMock = mockHtmlElement(); nodeEventSubscriber = new NodeEventSubscriber(); }); describe('on', () => { it('should attach event handler to passed in html element', () => { const listener = () => false; nodeEventSubscriber.on(htmlElementMock, 'click', listener); expect(htmlElementMock.addEventListener).toHaveBeenCalledWith('click', listener, undefined); }); }); describe('off', () => { it('should remove event handler from passed in html element', () => { const listener = () => false; nodeEventSubscriber.on(htmlElementMock, 'click', listener); nodeEventSubscriber.off(htmlElementMock, 'click', listener); expect(htmlElementMock.removeEventListener).toHaveBeenCalledWith('click', listener, undefined); }); }); describe('release', () => { it('should clear up attached listeners', () => { const listener = () => false; nodeEventSubscriber.on(htmlElementMock, 'click', listener); nodeEventSubscriber.release(); expect(htmlElementMock.removeEventListener).toHaveBeenCalledWith('click', listener, undefined); }); }); });