diff --git a/src/lib/sidenav/sidenav.html b/src/lib/sidenav/sidenav.html index fe7f020b5642..2e278d672083 100644 --- a/src/lib/sidenav/sidenav.html +++ b/src/lib/sidenav/sidenav.html @@ -1,4 +1,4 @@ -
diff --git a/src/lib/sidenav/sidenav.spec.ts b/src/lib/sidenav/sidenav.spec.ts index bc69e4d9f7fd..206519434115 100644 --- a/src/lib/sidenav/sidenav.spec.ts +++ b/src/lib/sidenav/sidenav.spec.ts @@ -190,6 +190,49 @@ describe('MdSidenav', () => { tick(); }).not.toThrow(); })); + + it('should emit the backdrop-clicked event when the backdrop is clicked', fakeAsync(() => { + let fixture = TestBed.createComponent(BasicTestApp); + + let testComponent: BasicTestApp = fixture.debugElement.componentInstance; + let openButtonElement = fixture.debugElement.query(By.css('.open')); + openButtonElement.nativeElement.click(); + fixture.detectChanges(); + tick(); + + endSidenavTransition(fixture); + tick(); + + expect(testComponent.backdropClickedCount).toBe(0); + + let sidenavBackdropElement = fixture.debugElement.query(By.css('.md-sidenav-backdrop')); + sidenavBackdropElement.nativeElement.click(); + fixture.detectChanges(); + tick(); + + expect(testComponent.backdropClickedCount).toBe(1); + + endSidenavTransition(fixture); + tick(); + + openButtonElement.nativeElement.click(); + fixture.detectChanges(); + tick(); + + endSidenavTransition(fixture); + tick(); + + let closeButtonElement = fixture.debugElement.query(By.css('.close')); + closeButtonElement.nativeElement.click(); + fixture.detectChanges(); + tick(); + + endSidenavTransition(fixture); + tick(); + + expect(testComponent.backdropClickedCount).toBe(1); + })); + }); describe('attributes', () => { @@ -267,7 +310,7 @@ class SidenavLayoutTwoSidenavTestApp { } /** Test component that contains an MdSidenavLayout and one MdSidenav. */ @Component({ template: ` - + (); + /** The sidenav at the start/end alignment, independent of direction. */ private _start: MdSidenav; private _end: MdSidenav; @@ -380,6 +383,11 @@ export class MdSidenavLayout implements AfterContentInit { this._setDrawersValid(true); } + _onBackdropClicked() { + this.onBackdropClicked.emit(); + this._closeModalSidenav(); + } + _closeModalSidenav() { if (this._start != null && this._start.mode != 'side') { this._start.close();