diff --git a/platform/representation/src/actions/ContextMenuAction.js b/platform/representation/src/actions/ContextMenuAction.js index 14367c7f55..ffe3a190df 100644 --- a/platform/representation/src/actions/ContextMenuAction.js +++ b/platform/representation/src/actions/ContextMenuAction.js @@ -31,7 +31,7 @@ define( var MENU_TEMPLATE = "" + "", dismissExistingMenu; @@ -75,7 +75,7 @@ define( // Remove the context menu function dismiss() { menu.remove(); - body.off("click", dismiss); + body.off("mousedown", dismiss); dismissExistingMenu = undefined; } diff --git a/platform/representation/test/actions/ContextMenuActionSpec.js b/platform/representation/test/actions/ContextMenuActionSpec.js index 73b877ddc3..03298162b4 100644 --- a/platform/representation/test/actions/ContextMenuActionSpec.js +++ b/platform/representation/test/actions/ContextMenuActionSpec.js @@ -69,7 +69,7 @@ define( mockCompiledTemplate.andReturn(mockMenu); mockDocument.find.andReturn(mockBody); mockRootScope.$new.andReturn(mockScope); - + mockActionContext = {key: 'menu', domainObject: mockDomainObject, event: mockEvent}; action = new ContextMenuAction( @@ -118,9 +118,9 @@ define( it("removes a menu when body is clicked", function () { // Show the menu action.perform(); - + // Verify precondition - expect(mockBody.off).not.toHaveBeenCalled(); + expect(mockBody.remove).not.toHaveBeenCalled(); // Find and fire body's mousedown listener mockBody.on.calls.forEach(function (call) { @@ -133,8 +133,29 @@ define( expect(mockMenu.remove).toHaveBeenCalled(); // Listener should have been detached from body - expect(mockBody.off).toHaveBeenCalled(); + expect(mockBody.off).toHaveBeenCalledWith( + 'mousedown', + jasmine.any(Function) + ); + }); + + it("removes a menu when it is clicked", function () { + // Show the menu + action.perform(); + + // Verify precondition + expect(mockMenu.remove).not.toHaveBeenCalled(); + + // Find and fire body's mousedown listener + mockMenu.on.calls.forEach(function (call) { + if (call.args[0] === 'click') { + call.args[1](); + } + }); + + // Menu should have been removed + expect(mockMenu.remove).toHaveBeenCalled(); }); }); } -); \ No newline at end of file +);