import { TestBed, ComponentFixture, fakeAsync, tick } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { Tooltip } from './tooltip';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { Component } from '@angular/core';
import { InputText } from 'mirra-ui/inputtext';
@Component({
template: `
`
})
class TestTooltipComponent {
position: string ="right";
event: string = "hover";
positionStyle: string = "absolute";
disabled: boolean = false;
appendTo: any = 'body';
}
describe('Tooltip', () => {
let tooltip: Tooltip;
let component: TestTooltipComponent;
let fixture: ComponentFixture;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
NoopAnimationsModule
],
declarations: [
Tooltip,
InputText,
TestTooltipComponent
]
});
fixture = TestBed.createComponent(TestTooltipComponent);
tooltip = fixture.debugElement.children[0].componentInstance;
component = fixture.componentInstance;
});
it('should created', () => {
fixture.detectChanges();
expect(fixture.debugElement.query(By.css("input"))).toBeTruthy();
});
it('should create tooltip on right', () => {
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("mouseenter"));
fixture.detectChanges();
const panelEl = document.getElementsByClassName('ui-tooltip-right')[0];
expect(panelEl).toBeTruthy();
});
it('should create tooltip on left (out of bounds and its gonna be on the right)', () => {
fixture.detectChanges();
component.position = 'left';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("mouseenter"));
fixture.detectChanges();
const panelEl = document.getElementsByClassName('ui-tooltip-right')[0];
expect(panelEl).toBeTruthy();
});
it('should create tooltip on top', () => {
fixture.detectChanges();
component.position = 'top';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("mouseenter"));
fixture.detectChanges();
const panelEl = document.getElementsByClassName('ui-tooltip-top')[0];
expect(panelEl).toBeTruthy();
});
it('should create tooltip on bottom', () => {
fixture.detectChanges();
component.position = 'bottom';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("mouseenter"));
fixture.detectChanges();
const panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeTruthy();
});
it('should hide tooltip when mouseleave', () => {
fixture.detectChanges();
component.appendTo = 'target';
component.position = 'bottom';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("mouseenter"));
fixture.detectChanges();
let panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeTruthy();
inputEl.nativeElement.dispatchEvent(new Event("mouseleave"));
fixture.detectChanges();
panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeFalsy();
});
it('should hide tooltip when click', () => {
fixture.detectChanges();
component.position = 'bottom';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("mouseenter"));
fixture.detectChanges();
let panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeTruthy();
inputEl.nativeElement.dispatchEvent(new Event("click"));
fixture.detectChanges();
panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeFalsy();
});
it('should create panel when focus', () => {
component.event = "focus";
fixture.detectChanges();
component.position = 'bottom';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("focus"));
fixture.detectChanges();
let panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeTruthy();
});
it('should hide panel when blur', () => {
component.event = "focus";
fixture.detectChanges();
component.position = 'bottom';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("focus"));
fixture.detectChanges();
let panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeTruthy();
inputEl.nativeElement.dispatchEvent(new Event("blur"));
fixture.detectChanges();
panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeFalsy();
});
it('shouldn\'t show panel when disabled', () => {
component.event = "focus";
component.disabled = true;
fixture.detectChanges();
component.position = 'bottom';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("focus"));
fixture.detectChanges();
let panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeFalsy();
});
it('should hide panel when resize', () => {
component.event = "focus";
fixture.detectChanges();
component.position = 'bottom';
fixture.detectChanges();
const inputEl = fixture.debugElement.query(By.css('input'));
inputEl.nativeElement.dispatchEvent(new Event("focus"));
fixture.detectChanges();
let panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeTruthy();
window.dispatchEvent(new Event("resize"));
fixture.detectChanges();
panelEl = document.getElementsByClassName('ui-tooltip-bottom')[0];
expect(panelEl).toBeFalsy();
});
});