import { TestBed, ComponentFixture, fakeAsync, tick, async } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { KeyFilter } from './keyfilter'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Component } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { InputText } from "mirra-ui/inputtext"; @Component({ template: `` }) class TestKeyFilterComponent { type: string = "int"; cc: any; validateOnly = false; } describe('KeyFilter', () => { let keyfilter: KeyFilter; let fixture: ComponentFixture; let component: TestKeyFilterComponent; beforeEach(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, FormsModule ], declarations: [ KeyFilter, TestKeyFilterComponent, InputText ] }); fixture = TestBed.createComponent(TestKeyFilterComponent); keyfilter = fixture.debugElement.query(By.directive(KeyFilter)).injector.get(KeyFilter); component = fixture.componentInstance; }); it('should created', () => { fixture.detectChanges(); expect(fixture.debugElement.query(By.css("input"))).toBeTruthy(); }); it('should use keypress (string) and return false', () => { fixture.detectChanges(); const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; const keydownEvent: any = document.createEvent('CustomEvent'); keydownEvent.keyCode = 100; keydownEvent.initEvent('keypress', true, true); const preventDefaultSpy = spyOn(keydownEvent,'preventDefault').and.callThrough(); inputEl.dispatchEvent(keydownEvent as KeyboardEvent); fixture.detectChanges(); expect(preventDefaultSpy).toHaveBeenCalled(); expect(keydownEvent.returnValue).toBeFalsy(); }); it('should use keypress (int) and return true', () => { fixture.detectChanges(); const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; const keydownEvent: any = document.createEvent('CustomEvent'); keydownEvent.keyCode = 53; keydownEvent.initEvent('keypress', true, true); inputEl.dispatchEvent(keydownEvent as KeyboardEvent); inputEl.dispatchEvent(new KeyboardEvent("input",{'key':"s"})); fixture.detectChanges(); expect(keydownEvent.returnValue).toBeTruthy(); }); it('should use keypress (enter) don\'n call prevenDefault', () => { fixture.detectChanges(); const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; const keydownEvent: any = document.createEvent('CustomEvent'); keydownEvent.keyCode = 13; keydownEvent.initEvent('keypress', true, true); const preventDefaultSpy = spyOn(keydownEvent,'preventDefault').and.callThrough(); inputEl.dispatchEvent(keydownEvent as KeyboardEvent); fixture.detectChanges(); expect(preventDefaultSpy).not.toHaveBeenCalled(); expect(keydownEvent.returnValue).toBeTruthy(); }); it('should recognize special and nav keys', () => { fixture.detectChanges(); const keydownEvent: any = document.createEvent('CustomEvent'); keydownEvent.keyCode = 13; keydownEvent.initEvent('keypress', true, true); fixture.detectChanges(); let value = keyfilter.isSpecialKey(keydownEvent); expect(value).toBeTruthy(); keydownEvent.keyCode = 38; value = keyfilter.isNavKeyPress(keydownEvent); expect(value).toBeTruthy(); keydownEvent.keyCode = 49; value = keyfilter.isNavKeyPress(keydownEvent); expect(value).toBeFalsy(); value = keyfilter.isSpecialKey(keydownEvent); expect(value).toBeFalsy(); }); it('should use pValidateOnly', () => { component.validateOnly = true; fixture.detectChanges(); const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; const keydownEvent: any = document.createEvent('CustomEvent'); keydownEvent.keyCode = 13; keydownEvent.initEvent('keypress', true, true); const preventDefaultSpy = spyOn(keydownEvent,'preventDefault').and.callThrough(); inputEl.dispatchEvent(keydownEvent as KeyboardEvent); fixture.detectChanges(); expect(preventDefaultSpy).not.toHaveBeenCalled(); expect(keydownEvent.returnValue).toBeTruthy(); }); it('should use metaKey and don\'n call preventDefault', () => { fixture.detectChanges(); const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; const keydownEvent: any = document.createEvent('CustomEvent'); keydownEvent.keyCode = 53; keydownEvent.ctrlKey = true; keydownEvent.initEvent('keypress', true, true); const preventDefaultSpy = spyOn(keydownEvent,'preventDefault').and.callThrough(); inputEl.dispatchEvent(keydownEvent as KeyboardEvent); fixture.detectChanges(); expect(preventDefaultSpy).not.toHaveBeenCalled(); expect(keydownEvent.returnValue).toBeTruthy(); }); it('should use paste', () => { fixture.detectChanges(); const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; const keydownEvent: any = document.createEvent('CustomEvent'); keydownEvent.clipboardData = { getData:(type) => { return "53"; } } keydownEvent.initEvent('paste', true, true); const preventDefaultSpy = spyOn(keydownEvent,'preventDefault').and.callThrough(); inputEl.dispatchEvent(keydownEvent); fixture.detectChanges(); expect(preventDefaultSpy).not.toHaveBeenCalled(); expect(keydownEvent.returnValue).toBeTruthy(); }); it('should use paste and keyfilter cancel the paste event', () => { fixture.detectChanges(); const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; const keydownEvent: any = document.createEvent('CustomEvent'); keydownEvent.initEvent('paste', true, true); keydownEvent.clipboardData = { getData:(type) => { return "pasteevent"; } } const preventDefaultSpy = spyOn(keydownEvent,'preventDefault').and.callThrough(); inputEl.dispatchEvent(keydownEvent); fixture.detectChanges(); expect(preventDefaultSpy).toHaveBeenCalled(); expect(keydownEvent.returnValue).toBeFalsy(); }); it('should use input (mocking android)', () => { fixture.detectChanges(); keyfilter.isAndroid = true; keyfilter.el.nativeElement.value = "BluOne"; fixture.detectChanges(); const inputEl = fixture.debugElement.query(By.css('input')).nativeElement; const inputEvent: any = document.createEvent('CustomEvent'); inputEvent.initEvent('input', true, true); inputEl.dispatchEvent(inputEvent); fixture.detectChanges(); expect(keyfilter.el.nativeElement.value).not.toContain("BluOne"); keyfilter.el.nativeElement.value = "3507"; inputEl.dispatchEvent(inputEvent); fixture.detectChanges(); keyfilter.el.nativeElement.value = "35a07"; inputEl.dispatchEvent(inputEvent); fixture.detectChanges(); expect(keyfilter.el.nativeElement.value).toContain("3507"); }); });