import { TestBed, ComponentFixture } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { InputMask } from './inputmask'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Component } from '@angular/core'; import { FormsModule } from '@angular/forms'; @Component({ template: `` }) class TestInputMaskComponent { val: string; } describe('InputMask', () => { let inputmask: InputMask; let testComponent: TestInputMaskComponent; let fixture: ComponentFixture; beforeEach(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, FormsModule ], declarations: [ InputMask, TestInputMaskComponent, ] }); fixture = TestBed.createComponent(TestInputMaskComponent); inputmask = fixture.debugElement.children[0].componentInstance; testComponent = fixture.componentInstance; }); it('should display by default', () => { inputmask.mask = "99-999999"; fixture.detectChanges(); const inputMaskEl = fixture.debugElement.query(By.css('input')); expect(inputMaskEl.nativeElement).toBeTruthy(); }); it('should change style styleClass placeholder inputId size tabindex title and autoFocus', () => { inputmask.mask = "99-999999"; inputmask.style = { 'height': '300px' } inputmask.styleClass = "BluOneRocks"; inputmask.placeholder = "GiveMeANumber"; inputmask.inputId = "BluOne"; inputmask.size = 5; inputmask.tabindex = "1"; inputmask.required = true; inputmask.autoFocus = true; inputmask.title = "TheTitle"; fixture.detectChanges(); const inputMaskEl = fixture.debugElement.query(By.css('input')); expect(inputMaskEl.nativeElement).toBeTruthy(); expect(inputMaskEl.nativeElement.style['height']).toEqual("300px"); expect(inputMaskEl.nativeElement.className).toContain("BluOneRocks"); expect(inputMaskEl.nativeElement.placeholder).toEqual("GiveMeANumber"); expect(inputMaskEl.nativeElement.id).toEqual("BluOne"); expect(inputMaskEl.nativeElement.size).toEqual(5); expect(inputMaskEl.nativeElement.tabIndex).toEqual(1); expect(inputMaskEl.nativeElement.required).toBeTruthy(); expect(inputMaskEl.nativeElement.autofocus).toBeTruthy(); expect(inputMaskEl.nativeElement.title).toEqual("TheTitle"); }); it('should change value with keydown event', () => { inputmask.mask = "99-999999"; fixture.detectChanges(); const keydownSpy = spyOn(inputmask, "onKeyDown").and.callThrough(); const onKeyPressSpy = spyOn(inputmask, "onKeyPress").and.callThrough(); const onInputSpy = spyOn(inputmask, "onInputChange").and.callThrough(); const onInputBlurSpy = spyOn(inputmask, "onInputBlur").and.callThrough(); let inputMaskEl = fixture.debugElement.query(By.css('input')); inputMaskEl.nativeElement.focus(); fixture.detectChanges(); const event: any = document.createEvent('CustomEvent'); event.which = 53; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); inputMaskEl = fixture.debugElement.query(By.css('input')); expect(keydownSpy).toHaveBeenCalled(); expect(onInputSpy).toHaveBeenCalled(); expect(onKeyPressSpy).toHaveBeenCalled(); expect(testComponent.val).toContain("5"); inputMaskEl.nativeElement.dispatchEvent(new Event("blur")); fixture.detectChanges(); expect(onInputBlurSpy).toHaveBeenCalled(); }); it('should delete with backspace key', () => { inputmask.mask = "99-999999"; fixture.detectChanges(); let inputMaskEl = fixture.debugElement.query(By.css('input')); inputMaskEl.nativeElement.focus(); fixture.detectChanges(); const event: any = document.createEvent('CustomEvent'); event.which = 53; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); event.which = 53; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); expect(testComponent.val).toContain("55"); event.which = 8; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); expect(testComponent.val).not.toContain("55"); }); it('should call onInputBlur with enter key', () => { inputmask.mask = "99-999999"; inputmask.unmask = true; fixture.detectChanges(); const onInputBlurSpy = spyOn(inputmask, "onInputBlur").and.callThrough(); let inputMaskEl = fixture.debugElement.query(By.css('input')); inputMaskEl.nativeElement.focus(); fixture.detectChanges(); const event: any = document.createEvent('CustomEvent'); event.which = 53; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); event.which = 53; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); expect(testComponent.val).toContain("55"); event.which = 13; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); expect(onInputBlurSpy).toHaveBeenCalled(); }); it('should call updateModel when press esc key', () => { inputmask.mask = "99-999999"; fixture.detectChanges(); let inputMaskEl = fixture.debugElement.query(By.css('input')); const updateModelSpy = spyOn(inputmask, "updateModel").and.callThrough(); inputMaskEl.nativeElement.focus(); fixture.detectChanges(); const event: any = document.createEvent('CustomEvent'); event.which = 53; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); event.which = 53; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); expect(testComponent.val).toContain("55"); event.which = 27; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); fixture.detectChanges(); expect(updateModelSpy).toHaveBeenCalled(); }); it('should focus on input', () => { inputmask.mask = "99-999999"; fixture.detectChanges(); let inputMaskEl = fixture.debugElement.query(By.css('input')); const onInputFocusSpy = spyOn(inputmask, "onInputFocus").and.callThrough(); inputMaskEl.nativeElement.focus(); inputMaskEl.nativeElement.dispatchEvent(new Event("focus")); fixture.detectChanges(); inputMaskEl = fixture.debugElement.query(By.css('input')); expect(inputMaskEl.parent.nativeElement.className).toContain("ui-inputwrapper-focus"); expect(onInputFocusSpy).toHaveBeenCalled(); }); it('should disabled with setDisabledState', () => { inputmask.setDisabledState(true); fixture.detectChanges(); inputmask.focus(); fixture.detectChanges(); expect(document.activeElement).not.toEqual(inputmask.inputViewChild.nativeElement); }); it('should be readonly', () => { inputmask.readonly = true; fixture.detectChanges(); const updateModelSpy = spyOn(inputmask, "updateModel").and.callThrough(); const inputMaskEl = fixture.debugElement.query(By.css("input")); const event: any = document.createEvent('CustomEvent'); event.which = 13; event.initEvent('keydown', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('input', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); event.initEvent('keypress', true, true); inputMaskEl.nativeElement.dispatchEvent(event as KeyboardEvent); inputMaskEl.nativeElement.dispatchEvent(new Event("focus")); fixture.detectChanges(); expect(document.activeElement).not.toEqual(inputmask.inputViewChild.nativeElement); expect(updateModelSpy).not.toHaveBeenCalled(); }); });