diff --git a/src/lib/menu/menu-trigger.ts b/src/lib/menu/menu-trigger.ts
index 419d8a827d09..d7ce7b122fb8 100644
--- a/src/lib/menu/menu-trigger.ts
+++ b/src/lib/menu/menu-trigger.ts
@@ -66,9 +66,11 @@ export class MdMenuTrigger implements AfterViewInit, OnDestroy {
}
openMenu(): void {
- this._createOverlay();
- this._overlayRef.attach(this._portal);
- this._initMenu();
+ if (!this._menuOpen) {
+ this._createOverlay();
+ this._overlayRef.attach(this._portal);
+ this._initMenu();
+ }
}
closeMenu(): void {
diff --git a/src/lib/menu/menu.spec.ts b/src/lib/menu/menu.spec.ts
index b54f2e6a555f..1bdf9b2e1977 100644
--- a/src/lib/menu/menu.spec.ts
+++ b/src/lib/menu/menu.spec.ts
@@ -1,6 +1,7 @@
import {TestBed, async} from '@angular/core/testing';
-import {Component} from '@angular/core';
-import {MdMenuModule} from './menu';
+import {Component, ViewChild} from '@angular/core';
+import {By} from '@angular/platform-browser';
+import {MdMenuModule, MdMenuTrigger} from './menu';
describe('MdMenu', () => {
@@ -8,17 +9,35 @@ describe('MdMenu', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [MdMenuModule.forRoot()],
- declarations: [TestMenu],
+ declarations: [SimpleMenu],
});
TestBed.compileComponents();
}));
- it('should add and remove focus class on focus/blur', () => {
- let fixture = TestBed.createComponent(TestMenu);
- expect(fixture).toBeTruthy();
+ it('should open the menu as an idempotent operation', () => {
+ let fixture = TestBed.createComponent(SimpleMenu);
+ fixture.detectChanges();
+ let menu = fixture.debugElement.query(By.css('.md-menu'));
+ expect(menu).toBe(null);
+ expect(() => {
+ fixture.componentInstance.trigger.openMenu();
+ fixture.componentInstance.trigger.openMenu();
+
+ menu = fixture.debugElement.query(By.css('.md-menu'));
+ expect(menu.nativeElement.innerHTML.trim()).toEqual('Content');
+ }).not.toThrowError();
});
});
-@Component({template: ``})
-class TestMenu {}
+@Component({
+ template: `
+
+
+ Content
+
+ `
+})
+class SimpleMenu {
+ @ViewChild(MdMenuTrigger) trigger: MdMenuTrigger;
+}