[Dialogs] Close dialogs by pressing the ESC key

Issue #1197
This commit is contained in:
Colm Seale
2016-12-29 00:06:47 +00:00
parent 94319df69b
commit bee22311a7
3 changed files with 62 additions and 3 deletions

View File

@ -33,6 +33,8 @@ define(
mockLog,
mockOverlay,
mockDeferred,
mockDocument,
mockBody,
dialogService;
beforeEach(function () {
@ -56,6 +58,16 @@ define(
"deferred",
["resolve", "reject"]
);
mockDocument = jasmine.createSpyObj(
"$document",
["find"]
);
mockBody = angular.element(document.createElement('body'));
spyOn(mockBody, 'on').andCallThrough();
spyOn(mockBody, 'off').andCallThrough();
mockDocument.find.andReturn(mockBody);
mockDeferred.promise = "mock promise";
mockQ.defer.andReturn(mockDeferred);
@ -64,7 +76,8 @@ define(
dialogService = new DialogService(
mockOverlayService,
mockQ,
mockLog
mockLog,
mockDocument
);
});
@ -130,6 +143,38 @@ define(
);
});
it("adds a keydown event listener to the body", function () {
dialogService.getUserInput({}, {});
expect(mockDocument.find).toHaveBeenCalledWith("body");
expect(mockBody.on).toHaveBeenCalledWith("keydown", jasmine.any(Function));
});
it("destroys the event listener when the dialog is cancelled", function () {
dialogService.getUserInput({}, {});
mockOverlayService.createOverlay.mostRecentCall.args[1].cancel();
expect(mockBody.off).toHaveBeenCalledWith("keydown", jasmine.any(Function));
});
it("cancels the dialog when an escape keydown event is triggered", function () {
dialogService.getUserInput({}, {});
mockBody.triggerHandler({
type: 'keydown',
keyCode: 27
});
expect(mockDeferred.reject).toHaveBeenCalled();
expect(mockDeferred.resolve).not.toHaveBeenCalled();
});
it("ignores non escape keydown events", function () {
dialogService.getUserInput({}, {});
mockBody.triggerHandler({
type: 'keydown',
keyCode: 13
});
expect(mockDeferred.reject).not.toHaveBeenCalled();
expect(mockDeferred.resolve).not.toHaveBeenCalled();
});
describe("the blocking message dialog", function () {
var dialogModel = {};
var dialogHandle;