import 'reflect-metadata'; import { TrackFocusDirective, } from './track-focus.directive'; const initTrackFocusDirective = () => { return new TrackFocusDirective(); }; const isFocusMouseClass = 'is-focus--mouse'; describe('default', () => { test('Sets the default of lastEventWasMouse', () => { const trackFocusDirective = initTrackFocusDirective(); expect(trackFocusDirective.lastEventWasMouse).toBe(true); }); }); describe('keydown', () => { // tslint:disable-next-line test('It sets lastEventWasMouse to false', () => { const trackFocusDirective = initTrackFocusDirective(); trackFocusDirective.lastEventWasMouse = true; trackFocusDirective.keydown(); expect(trackFocusDirective.lastEventWasMouse) .toBe(false); }); }); describe('mouseup', () => { // tslint:disable-next-line test('It sets lastEventWasMouse to true', () => { const trackFocusDirective = initTrackFocusDirective(); trackFocusDirective.lastEventWasMouse = false; trackFocusDirective.mouseup(); expect(trackFocusDirective.lastEventWasMouse) .toBe(true); }); }); describe('focusin', () => { // tslint:disable-next-line test('If lastEventWasMouse is true it adds the class to the event target', () => { const trackFocusDirective = initTrackFocusDirective(); trackFocusDirective.lastEventWasMouse = true; const target = { classList: {}, } as HTMLElement; const event = { target: target as EventTarget, } as Event; target.classList.add = jest.fn(); trackFocusDirective.focusin(event); expect(target.classList.add) .toHaveBeenCalledWith(isFocusMouseClass); }); // tslint:disable-next-line test('If lastEventWasMouse is false it does not add the class to the event target', () => { const trackFocusDirective = initTrackFocusDirective(); trackFocusDirective.lastEventWasMouse = false; const target = { classList: {}, } as HTMLElement; const event = { target: target as EventTarget, } as Event; target.classList.add = jest.fn(); trackFocusDirective.focusin(event); expect(target.classList.add) .not.toHaveBeenCalled(); }); }); describe('focusout', () => { // tslint:disable-next-line test('If lastEventWasMouse is true it removes the class to the event target', () => { const trackFocusDirective = initTrackFocusDirective(); trackFocusDirective.lastEventWasMouse = true; const target = { classList: {}, } as HTMLElement; const event = { target: target as EventTarget, } as Event; target.classList.remove = jest.fn(); trackFocusDirective.focusout(event); expect(target.classList.remove) .toHaveBeenCalledWith(isFocusMouseClass); }); // tslint:disable-next-line test('If lastEventWasMouse is false it does not remove the class to the event target', () => { const trackFocusDirective = initTrackFocusDirective(); trackFocusDirective.lastEventWasMouse = false; const target = { classList: {}, } as HTMLElement; const event = { target: target as EventTarget, } as Event; target.classList.remove = jest.fn(); trackFocusDirective.focusout(event); expect(target.classList.remove) .not.toHaveBeenCalled(); }); });