diff --git a/common/tests/functional/testDOMEvents.js b/common/tests/functional/testDOMEvents.js new file mode 100644 index 00000000..75d33a4c --- /dev/null +++ b/common/tests/functional/testDOMEvents.js @@ -0,0 +1,92 @@ +"use strict"; + +var utils = require("utils"); +const { module } = utils; + +var { interfaces: Ci } = Components; +var { nsIDOMKeyEvent: KeyEvent } = Ci; + +var controller, dactyl; +var dactyllib = module("dactyl"); +var jumlib = module("resource://mozmill/modules/jum.js"); + +var setupModule = function (module) { + controller = mozmill.getBrowserController(); + dactyl = new dactyllib.Controller(controller); +}; +var teardownModule = function (module) { + dactyl.teardown(); +} + +var keyDefaults = { + keyCode: 0, + charCode: 0, + altKey: false, + ctrlKey: false, + metaKey: false, + shiftKey: false +}; + +var keyMap = { + "a": { + charCode: "a".charCodeAt(0) + }, + "A": { + charCode: "A".charCodeAt(0), + shiftKey: true + }, + "": { + aliases: [""], + charCode: "a".charCodeAt(0), + ctrlKey: true, + }, + "": { + aliases: [""], + charCode: "A".charCodeAt(0), + ctrlKey: true, + shiftKey: true, + }, + "": { + aliases: [""], + keyCode: KeyEvent.DOM_VK_RETURN + }, + "": { + aliases: [""], + keyCode: KeyEvent.DOM_VK_RETURN, + shiftKey: true + }, + "": { + aliases: [" ", "< >"], + charCode: " ".charCodeAt(0) + } +}; + +function testKeys() { + let { DOM, update } = dactyl.modules; + + for (let [name, object] in Iterator(keyMap)) { + for each (let key in (object.aliases || []).concat(name)) { + dactyl.assertNoErrors(function () { + let result = DOM.Event.parse(key); + jumlib.assertEquals(result.length, 1); + + for (let [k, v] in Iterator(keyDefaults)) + if (k != "keyCode" || "keyCode" in object || result.keyCode == 0) // TODO + jumlib.assertEquals(result[0][k], + k in object ? object[k] : v, + name + ":" + key + ":" + k); + + jumlib.assertEquals(DOM.Event.stringify(result[0]), + name); + }); + } + + jumlib.assertEquals(name, + DOM.Event.stringify( + update({ type: "keypress" }, + keyDefaults, + object))); + } +} + +// vim: sw=4 ts=8 et: