From 77371a63dc1dad7fafaeebb0f651def3f660a8de Mon Sep 17 00:00:00 2001 From: Thomas Shafer Date: Mon, 13 Feb 2017 09:06:37 -0800 Subject: [PATCH] fix(menu,tooltip): Ensure subscription exists before unsubscribing. --- src/lib/menu/menu-directive.ts | 4 +++- src/lib/menu/menu.spec.ts | 6 ++++++ src/lib/tooltip/tooltip.spec.ts | 10 ++++++++++ src/lib/tooltip/tooltip.ts | 4 +++- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/lib/menu/menu-directive.ts b/src/lib/menu/menu-directive.ts index bdfcc1507b34..c3d0d3c8dab0 100644 --- a/src/lib/menu/menu-directive.ts +++ b/src/lib/menu/menu-directive.ts @@ -69,7 +69,9 @@ export class MdMenu implements AfterContentInit, MdMenuPanel, OnDestroy { } ngOnDestroy() { - this._tabSubscription.unsubscribe(); + if (this._tabSubscription) { + this._tabSubscription.unsubscribe(); + } } /** diff --git a/src/lib/menu/menu.spec.ts b/src/lib/menu/menu.spec.ts index fbf23d4bed85..52d77061bc3a 100644 --- a/src/lib/menu/menu.spec.ts +++ b/src/lib/menu/menu.spec.ts @@ -384,6 +384,12 @@ describe('MdMenu', () => { }); + describe('destroy', () => { + it('does not throw an error on destroy', () => { + const fixture = TestBed.createComponent(SimpleMenu); + expect(fixture.destroy.bind(fixture)).not.toThrow(); + }); + }); }); @Component({ diff --git a/src/lib/tooltip/tooltip.spec.ts b/src/lib/tooltip/tooltip.spec.ts index 5873f340f0e6..30c6499221f9 100644 --- a/src/lib/tooltip/tooltip.spec.ts +++ b/src/lib/tooltip/tooltip.spec.ts @@ -398,6 +398,15 @@ describe('MdTooltip', () => { expect(tooltipDirective._tooltipInstance).toBeNull(); })); }); + + describe('destroy', () => { + it('does not throw an error on destroy', () => { + const fixture = TestBed.createComponent(BasicTooltipDemo); + fixture.detectChanges(); + delete fixture.componentInstance.tooltip.scrollSubscription; + expect(fixture.destroy.bind(fixture)).not.toThrow(); + }); + }); }); @Component({ @@ -413,6 +422,7 @@ class BasicTooltipDemo { position: string = 'below'; message: string = initialTooltipMessage; showButton: boolean = true; + @ViewChild(MdTooltip) tooltip: MdTooltip; } @Component({ diff --git a/src/lib/tooltip/tooltip.ts b/src/lib/tooltip/tooltip.ts index 7b27abaa3968..a58bca3d1742 100644 --- a/src/lib/tooltip/tooltip.ts +++ b/src/lib/tooltip/tooltip.ts @@ -154,7 +154,9 @@ export class MdTooltip implements OnInit, OnDestroy { this._disposeTooltip(); } - this.scrollSubscription.unsubscribe(); + if (this.scrollSubscription) { + this.scrollSubscription.unsubscribe(); + } } /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */