import 'reflect-metadata'; import { ElementRef } from '@angular/core'; import { InputDecimalPlacesDirective, } from './input-decimal-places.directive'; const initInputDecimalPlacesDirective = ( elementRef?: ElementRef, ) => { return new InputDecimalPlacesDirective(elementRef); }; describe('keydown', () => { const keydownTest = ( key: string, expectPreventDefault = false, startingValue = '', selectionStart = null, selectionEnd = null, ) => { const elementRef = { nativeElement: { selectionEnd, selectionStart, value: startingValue, }, } as ElementRef; const inputDecimalPlacesDirective = initInputDecimalPlacesDirective( elementRef, ); const event = { key, } as KeyboardEvent; event.preventDefault = jest.fn(); inputDecimalPlacesDirective.keydown(event); if (expectPreventDefault) { expect(event.preventDefault).toHaveBeenCalled(); } else { expect(event.preventDefault).not.toHaveBeenCalled(); } }; test('Does not prevent default if key is backspace', () => { keydownTest('Backspace'); }); test('Does not prevent default if key is Tab', () => { keydownTest('Tab'); }); test('Does not prevent default if key is End', () => { keydownTest('End'); }); test('Does not prevent default if key is Home', () => { keydownTest('Home'); }); test('Does not prevent default if key is ArrowRight', () => { keydownTest('ArrowRight'); }); test('Does not prevent default if key is ArrowLeft', () => { keydownTest('ArrowLeft'); }); test('Does not prevent default if key is ArrowUp', () => { keydownTest('ArrowUp'); }); test('Does not prevent default if key is ArrowDown', () => { keydownTest('ArrowDown'); }); test('Does not prevent default is just numbers', () => { keydownTest('1'); }); test('Does not prevent adding a decimal point', () => { keydownTest('.', false, '1'); }); // tslint:disable-next-line test('Does not prevent default if numbers added do not take the numbers over 2dp', () => { keydownTest('1', false, '1.1'); }); test('Prevents default if numbers added takes the numbers over 2dp', () => { keydownTest('1', true, '1.11'); }); test('Prevents default if key is minus', () => { keydownTest('-', true); }); test('Lets the user enter values if a selection is made', () => { keydownTest('1', false, '12.13', 1, 2); }); // tslint:disable-next-line test('Does not let the user enter values if the field is full but the selection has a length of 0', () => { keydownTest('1', true, '12.13', 1, 1); }); });