From c59d55418d6f4e82a91cb42d6e6e0189c366abeb Mon Sep 17 00:00:00 2001 From: Robert Krahn Date: Sat, 16 Mar 2013 18:02:28 -0700 Subject: [PATCH] fix for setKeyboardHandler bug introduced in 8634f26 --- lib/ace/keyboard/keybinding.js | 2 +- lib/ace/keyboard/keybinding_test.js | 69 +++++++++++++++++++++++++++++ lib/ace/test/all_browser.js | 1 + 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 lib/ace/keyboard/keybinding_test.js diff --git a/lib/ace/keyboard/keybinding.js b/lib/ace/keyboard/keybinding.js index e559ff7b..3c79b724 100644 --- a/lib/ace/keyboard/keybinding.js +++ b/lib/ace/keyboard/keybinding.js @@ -54,7 +54,7 @@ var KeyBinding = function(editor) { if (h[h.length - 1] == kb) return; - while (h[h.length - 1] && h[h.length - 1] != this.defaultHandler) + while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) this.removeKeyboardHandler(h[h.length - 1]); this.addKeyboardHandler(kb, 1); diff --git a/lib/ace/keyboard/keybinding_test.js b/lib/ace/keyboard/keybinding_test.js new file mode 100644 index 00000000..617d99c4 --- /dev/null +++ b/lib/ace/keyboard/keybinding_test.js @@ -0,0 +1,69 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ + +if (typeof process !== "undefined") { + require("amd-loader"); +} + +define(function(require, exports, module) { +"use strict"; + +var EditSession = require("./../edit_session").EditSession, + Editor = require("./../editor").Editor, + MockRenderer = require("./../test/mockrenderer").MockRenderer, + assert = require("./../test/assertions"), + HashHandler = require('./hash_handler').HashHandler, + keys = require('../lib/keys'), + editor; + +function initEditor(docString) { + var doc = new EditSession(docString.split("\n")); + editor = new Editor(new MockRenderer(), doc); +} + +module.exports = { + + "test: adding a new keyboard handler does not remove the default handler": function() { + initEditor('abc'); + var handler = new HashHandler({'del': 'f1'}); + editor.keyBinding.setKeyboardHandler(handler); + editor.onCommandKey({}, 0, keys['f1']); + assert.equal('bc', editor.getValue(), "binding of new handler"); + editor.onCommandKey({}, 0, keys['delete']); + assert.equal('c', editor.getValue(), "bindings of the old handler should still work"); + } + +}; + +}); + +if (typeof module !== "undefined" && module === require.main) { + require("asyncjs").test.testcase(module.exports).exec() +} diff --git a/lib/ace/test/all_browser.js b/lib/ace/test/all_browser.js index e818c904..9a274329 100644 --- a/lib/ace/test/all_browser.js +++ b/lib/ace/test/all_browser.js @@ -22,6 +22,7 @@ var testNames = [ "ace/editor_text_edit_test", "ace/ext/static_highlight_test", "ace/keyboard/emacs_test", + "ace/keyboard/keybinding_test", "ace/layer/text_test", "ace/lib/event_emitter_test", "ace/mode/coffee/parser_test",