import 'reflect-metadata'; import { ThrottledMouseMoveDirective, } from './throttled-mouse-move.directive'; const initThrottledMouseMoveDirective = ( ) => { return new ThrottledMouseMoveDirective( ); }; describe('mousemove', () => { // tslint:disable-next-line test('It calls throttleMovement', () => { const throttledMousemoveDirective = initThrottledMouseMoveDirective(); throttledMousemoveDirective.throttleMovement = jest.fn(); const event = {} as Event; throttledMousemoveDirective.mousemove(event); expect( throttledMousemoveDirective.throttleMovement, ).toHaveBeenCalledWith(event); }); }); describe('touchmove', () => { // tslint:disable-next-line test('It calls throttleMovement', () => { const throttledMousemoveDirective = initThrottledMouseMoveDirective(); throttledMousemoveDirective.throttleMovement = jest.fn(); const event = {} as Event; throttledMousemoveDirective.touchmove(event); expect( throttledMousemoveDirective.throttleMovement, ).toHaveBeenCalledWith(event); }); }); describe('throttleMovement', () => { // tslint:disable-next-line test('If isEnabled is false it does not call onThrottledMouseMove.emit', () => { const throttledMousemoveDirective = initThrottledMouseMoveDirective(); throttledMousemoveDirective.isEnabled = false; throttledMousemoveDirective.onThrottledMouseMove.emit = jest.fn(); throttledMousemoveDirective.throttleMovement({ } as MouseEvent); expect( throttledMousemoveDirective .onThrottledMouseMove.emit, ).not.toBeCalled(); }); // tslint:disable-next-line test('It calls onThrottledMouseMove.emit with the mouseEvent if isEnabled is true', () => { const throttledMousemoveDirective = initThrottledMouseMoveDirective(); throttledMousemoveDirective.isEnabled = true; throttledMousemoveDirective.onThrottledMouseMove.emit = jest.fn(); const mouseEvent = {} as MouseEvent; throttledMousemoveDirective.throttleMovement(mouseEvent); expect( throttledMousemoveDirective .onThrottledMouseMove.emit, ).toBeCalledWith(mouseEvent); }); // tslint:disable-next-line test('It calls setTimeout with the supplied maxTriggersPerMilliseconds', () => { jest.useFakeTimers(); const throttledMousemoveDirective = initThrottledMouseMoveDirective(); throttledMousemoveDirective.isEnabled = true; throttledMousemoveDirective.maxTriggersPerMilliseconds = 50; const mouseEvent = {} as MouseEvent; throttledMousemoveDirective.throttleMovement(mouseEvent); expect(setTimeout.mock.calls[0][1]) .toBe( throttledMousemoveDirective .maxTriggersPerMilliseconds, ); }); // tslint:disable-next-line test('It sets isEnabled to false', () => { const throttledMousemoveDirective = initThrottledMouseMoveDirective(); throttledMousemoveDirective.isEnabled = true; throttledMousemoveDirective.maxTriggersPerMilliseconds = 50; const mouseEvent = {} as MouseEvent; throttledMousemoveDirective.throttleMovement(mouseEvent); expect( throttledMousemoveDirective.isEnabled, ).toBe(false); }); // tslint:disable-next-line test('It sets isEnabled to true after the timeout has finished', () => { jest.useFakeTimers(); const throttledMousemoveDirective = initThrottledMouseMoveDirective(); throttledMousemoveDirective.isEnabled = true; throttledMousemoveDirective.maxTriggersPerMilliseconds = 50; const mouseEvent = {} as MouseEvent; throttledMousemoveDirective.throttleMovement(mouseEvent); jest.runAllTimers(); expect( throttledMousemoveDirective.isEnabled, ).toBe(true); }); });