From 3c1b205c45d09d1e230b36a6608a5fa71005334a Mon Sep 17 00:00:00 2001 From: ddaribo Date: Tue, 4 Jun 2024 13:28:35 +0300 Subject: [PATCH 1/2] feat(tooltip): test for target defined before toggle action on host --- .../tooltip/tooltip.directive.spec.ts | 35 +++++++++++++++++-- .../lib/test-utils/tooltip-components.spec.ts | 18 ++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts index eba79d8a54b..1d935105328 100644 --- a/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts @@ -1,7 +1,7 @@ import { fakeAsync, TestBed, tick, flush, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { IgxTooltipSingleTargetComponent, IgxTooltipMultipleTargetsComponent, IgxTooltipPlainStringComponent } from '../../test-utils/tooltip-components.spec'; +import { IgxTooltipSingleTargetComponent, IgxTooltipMultipleTargetsComponent, IgxTooltipPlainStringComponent, IgxTooltipWithToggleActionComponent } from '../../test-utils/tooltip-components.spec'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { configureTestSuite } from '../../test-utils/configure-suite'; import { HorizontalAlignment, VerticalAlignment, AutoPositionStrategy } from '../../services/public_api'; @@ -24,7 +24,8 @@ describe('IgxTooltip', () => { NoopAnimationsModule, IgxTooltipSingleTargetComponent, IgxTooltipMultipleTargetsComponent, - IgxTooltipPlainStringComponent + IgxTooltipPlainStringComponent, + IgxTooltipWithToggleActionComponent ] }).compileComponents(); UIInteractions.clearOverlay(); @@ -554,6 +555,36 @@ describe('IgxTooltip', () => { verifyTooltipPosition(tooltipNativeElement, buttonOne, false); })); }); + + describe('Tooltip integration', () => { + beforeEach(waitForAsync(() => { + fix = TestBed.createComponent(IgxTooltipWithToggleActionComponent); + fix.detectChanges(); + tooltipNativeElement = fix.debugElement.query(By.directive(IgxTooltipDirective)).nativeElement; + tooltipTarget = fix.componentInstance.tooltipTarget as IgxTooltipTargetDirective; + button = fix.debugElement.query(By.directive(IgxTooltipTargetDirective)); + })); + + it('Correctly sets tooltip target when defined before igxToggleAction directive on same host - issue #14196', fakeAsync(() => { + expect(tooltipTarget.target.element).toBe(tooltipNativeElement); + expect(fix.componentInstance.toggleDir.collapsed).toBe(true); + + hoverElement(button); + flush(); + + verifyTooltipVisibility(tooltipNativeElement, tooltipTarget, true); + + UIInteractions.simulateClickEvent(button.nativeElement); + fix.detectChanges(); + + verifyTooltipVisibility(tooltipNativeElement, tooltipTarget, false); + + UIInteractions.simulateClickEvent(button.nativeElement); + fix.detectChanges(); + + expect(fix.componentInstance.toggleDir.collapsed).toBe(false); + })); + }); }); const hoverElement = (element) => element.nativeElement.dispatchEvent(new MouseEvent('mouseenter')); diff --git a/projects/igniteui-angular/src/lib/test-utils/tooltip-components.spec.ts b/projects/igniteui-angular/src/lib/test-utils/tooltip-components.spec.ts index 244ec9a0e03..c70a0776ffc 100644 --- a/projects/igniteui-angular/src/lib/test-utils/tooltip-components.spec.ts +++ b/projects/igniteui-angular/src/lib/test-utils/tooltip-components.spec.ts @@ -1,6 +1,7 @@ import { Component, ViewChild } from '@angular/core'; import { IgxTooltipDirective } from '../directives/tooltip/tooltip.directive'; import { ITooltipHideEventArgs, ITooltipShowEventArgs, IgxTooltipTargetDirective } from '../directives/tooltip/tooltip-target.directive'; +import { IgxToggleActionDirective, IgxToggleDirective } from '../directives/toggle/toggle.directive'; @Component({ template: ` @@ -72,3 +73,20 @@ export class IgxTooltipMultipleTargetsComponent { export class IgxTooltipPlainStringComponent { @ViewChild(IgxTooltipTargetDirective, { static: true }) public tooltipTarget: IgxTooltipTargetDirective; } + +@Component({ + template: ` + +
Toggle content
+
Test
+ `, + standalone: true, + imports: [IgxTooltipDirective, IgxTooltipTargetDirective, IgxToggleActionDirective, IgxToggleDirective] +}) +export class IgxTooltipWithToggleActionComponent { + @ViewChild(IgxTooltipDirective, { static: true }) public tooltip: IgxTooltipDirective; + @ViewChild(IgxTooltipTargetDirective, { static: true }) public tooltipTarget: IgxTooltipTargetDirective; + @ViewChild(IgxToggleDirective, { static: true }) public toggleDir: IgxToggleDirective; +} From a8de2cd7082ca7fd1a6bd9875817f5a2c0e5e48e Mon Sep 17 00:00:00 2001 From: ddaribo Date: Thu, 6 Jun 2024 09:49:41 +0300 Subject: [PATCH 2/2] fix(tooltip): check if target is instance of IgxTooltipDirective --- .../src/lib/directives/tooltip/tooltip-target.directive.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/igniteui-angular/src/lib/directives/tooltip/tooltip-target.directive.ts b/projects/igniteui-angular/src/lib/directives/tooltip/tooltip-target.directive.ts index 9771004eb74..32ddc527a1e 100644 --- a/projects/igniteui-angular/src/lib/directives/tooltip/tooltip-target.directive.ts +++ b/projects/igniteui-angular/src/lib/directives/tooltip/tooltip-target.directive.ts @@ -99,7 +99,7 @@ export class IgxTooltipTargetDirective extends IgxToggleActionDirective implemen */ @Input('igxTooltipTarget') public override set target(target: any) { - if (target !== null && target !== '') { + if (target instanceof IgxTooltipDirective) { this._target = target; } }