import {ComponentFixture, TestBed} from '@angular/core/testing'; import {Component, DebugElement} from "@angular/core"; import {By} from "@angular/platform-browser"; import {InputPreventionPatternDirective} from './inputPreventionPattern.directive'; @Component({ template: `` }) class TestHoverFocusComponent { } describe('InputPrevention Pattern Directive', () => { let component: TestHoverFocusComponent; let fixture: ComponentFixture; let directiveInstance : InputPreventionPatternDirective; let inputEl: DebugElement; beforeEach(() => { TestBed.configureTestingModule({ declarations: [TestHoverFocusComponent, InputPreventionPatternDirective] }); fixture = TestBed.createComponent(TestHoverFocusComponent); component = fixture.componentInstance; inputEl = fixture.debugElement.query(By.css('input')); directiveInstance = inputEl.injector.get(InputPreventionPatternDirective); }); test('directive should be defined', () => { expect(directiveInstance).toBeDefined(); }); test('pattern exists', () => { expect(inputEl.nativeElement.pattern).toEqual('^[a-zA-Z0-9._-]*$'); }); test('kepress legal input', () => { fixture.detectChanges(); inputEl.nativeElement.value = "legalInput"; expect(new RegExp(inputEl.nativeElement.pattern).test(inputEl.nativeElement.value)).toBeTruthy(); }); test('kepress illegal input', () => { inputEl.triggerEventHandler('kepress', " "); fixture.detectChanges(); expect(inputEl.nativeElement.value).toBe(''); }); test('kepress event legal input should return event', () => { const event = { key: 'A'}; inputEl.nativeElement.value = "legalInput"; let result = directiveInstance.onKeypress(event); expect(result).toBe(event); }); test('kepress event legal(-) input should return event', () => { const event = { key: '-'}; inputEl.nativeElement.value = "legalInput"; let result = directiveInstance.onKeypress(event); expect(result).toBe(event); }); test('kepress event legal (.) input should return event', () => { const event = { key: '.'}; inputEl.nativeElement.value = "legalInput"; let result = directiveInstance.onKeypress(event); expect(result).toBe(event); }); test('kepress event illegal input should prevent default', () => { const event = {key: '$', preventDefault : function () {} }; jest.spyOn(event, 'preventDefault'); inputEl.nativeElement.value = "$"; let result = directiveInstance.onKeypress(event); expect(event.preventDefault).toHaveBeenCalled(); }); });