diff options
| author | Stephen Blott | 2017-04-13 14:09:14 +0100 |
|---|---|---|
| committer | Stephen Blott | 2017-04-18 05:50:51 +0100 |
| commit | 8e4119f84bbde748eb595e6766dbb47a6cd0133c (patch) | |
| tree | 56fa1b1d54e1662754aee9e2d7289d316b905d7b /tests | |
| parent | 388d866e995249a0be3154c349db2edac664a3fa (diff) | |
| download | vimium-8e4119f84bbde748eb595e6766dbb47a6cd0133c.tar.bz2 | |
Rework tests for all key handling on keydown.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/dom_tests/dom_tests.coffee | 157 | ||||
| -rw-r--r-- | tests/dom_tests/phantom_runner.coffee | 24 |
2 files changed, 47 insertions, 134 deletions
diff --git a/tests/dom_tests/dom_tests.coffee b/tests/dom_tests/dom_tests.coffee index 9088fe30..cbf60532 100644 --- a/tests/dom_tests/dom_tests.coffee +++ b/tests/dom_tests/dom_tests.coffee @@ -1,33 +1,11 @@ window.vimiumDomTestsAreRunning = true # Install frontend event handlers. -installListeners() HUD.init() Frame.registerFrameId chromeFrameId: 0 -installListener = (element, event, callback) -> - element.addEventListener event, (-> callback.apply(this, arguments)), true - getSelection = -> - window.getSelection().toString() - -# A count of the number of keyboard events received by the page (for the most recently-sent keystroke). E.g., -# we expect 3 if the keystroke is passed through (keydown, keypress, keyup), and 0 if it is suppressed. -pageKeyboardEventCount = 0 - -sendKeyboardEvent = (key) -> - pageKeyboardEventCount = 0 - response = window.callPhantom - request: "keyboard" - key: key - -sendKeyboardEvents = (keys) -> - sendKeyboardEvent ch for ch in keys.split() - -# These listeners receive events after the main frontend listeners, and do not receive suppressed events. -for type in [ "keydown", "keypress", "keyup" ] - installListener window, type, (event) -> - pageKeyboardEventCount += 1 + window.getSelection().toString() commandName = commandCount = null @@ -163,6 +141,16 @@ context "jsaction matching", linkHints.deactivateMode() assert.equal 0, hintMarkers.length +sendKeyboardEvent = (key, type="keydown", extra={}) -> + handlerStack.bubbleEvent type, extend extra, + type: type + key: key + preventDefault: -> + stopImmediatePropagation: -> + +sendKeyboardEvents = (keys) -> + sendKeyboardEvent key for key in keys.split "" + inputs = [] context "Test link hints for focusing input elements correctly", @@ -227,16 +215,16 @@ context "Test link hints for changing mode", should "change mode on shift", -> assert.equal "curr-tab", @linkHints.mode.name - sendKeyboardEvent "shift-down" + sendKeyboardEvent "Shift", "keydown", keyCode: keyCodes.shiftKey assert.equal "bg-tab", @linkHints.mode.name - sendKeyboardEvent "shift-up" + sendKeyboardEvent "Shift", "keyup", keyCode: keyCodes.shiftKey assert.equal "curr-tab", @linkHints.mode.name should "change mode on ctrl", -> assert.equal "curr-tab", @linkHints.mode.name - sendKeyboardEvent "ctrl-down" + sendKeyboardEvent "Control", "keydown", keyCode: keyCodes.ctrlKey assert.equal "fg-tab", @linkHints.mode.name - sendKeyboardEvent "ctrl-up" + sendKeyboardEvent "Control", "keyup", keyCode: keyCodes.ctrlKey assert.equal "curr-tab", @linkHints.mode.name context "Alphabetical link hints", @@ -247,6 +235,7 @@ context "Alphabetical link hints", stubSettings "linkHintCharacters", "ab" stub window, "windowIsFocused", -> true + document.getElementById("test-div").innerHTML = "" # Three hints will trigger double hint chars. createLinks 3 @linkHints = activateLinkHintsMode() @@ -258,12 +247,13 @@ context "Alphabetical link hints", should "label the hints correctly", -> hintMarkers = getHintMarkers() expectedHints = ["aa", "b", "ab"] + assert.equal 3, hintMarkers.length for hint, i in expectedHints assert.equal hint, hintMarkers[i].hintString should "narrow the hints", -> hintMarkers = getHintMarkers() - sendKeyboardEvent "A" + sendKeyboardEvent "a" assert.equal "none", hintMarkers[1].style.display assert.equal "", hintMarkers[0].style.display @@ -314,24 +304,25 @@ context "Filtered link hints", should "narrow the hints", -> hintMarkers = getHintMarkers() - sendKeyboardEvent "T" - sendKeyboardEvent "R" + sendKeyboardEvent "t" + sendKeyboardEvent "r" assert.equal "none", hintMarkers[0].style.display assert.equal "3", hintMarkers[1].hintString assert.equal "", hintMarkers[1].style.display - sendKeyboardEvent "A" + sendKeyboardEvent "a" assert.equal "1", hintMarkers[3].hintString - # This test is the same as above, but with an extra non-matching character. + # This test is the same as above, but with an extra non-matching character. The effect should be the + # same. should "narrow the hints and ignore typing mistakes", -> hintMarkers = getHintMarkers() - sendKeyboardEvent "T" - sendKeyboardEvent "R" - sendKeyboardEvent "X" + sendKeyboardEvent "t" + sendKeyboardEvent "r" + sendKeyboardEvent "x" assert.equal "none", hintMarkers[0].style.display assert.equal "3", hintMarkers[1].hintString assert.equal "", hintMarkers[1].style.display - sendKeyboardEvent "A" + sendKeyboardEvent "a" assert.equal "1", hintMarkers[3].hintString context "Image hints", @@ -428,9 +419,9 @@ context "Filtered link hints", should "use tab to select the active hint", -> sendKeyboardEvents "abc" assert.equal "8", @getActiveHintMarker() - sendKeyboardEvent "tab" + sendKeyboardEvent "Tab", "keydown", keyCode: keyCodes.tab assert.equal "7", @getActiveHintMarker() - sendKeyboardEvent "tab" + sendKeyboardEvent "Tab", "keydown", keyCode: keyCodes.tab assert.equal "9", @getActiveHintMarker() context "Input focus", @@ -576,93 +567,55 @@ context "Key mapping", should "set and call command handler", -> sendKeyboardEvent "m" assert.isTrue @handlerCalled - assert.equal 0, pageKeyboardEventCount should "not call command handler for pass keys", -> sendKeyboardEvent "p" assert.isFalse @handlerCalled - assert.equal 3, pageKeyboardEventCount should "accept a count prefix with a single digit", -> sendKeyboardEvent "2" sendKeyboardEvent "m" assert.equal 2, @handlerCalledCount - assert.equal 0, pageKeyboardEventCount should "accept a count prefix with multiple digits", -> sendKeyboardEvent "2" sendKeyboardEvent "0" sendKeyboardEvent "m" assert.equal 20, @handlerCalledCount - assert.equal 0, pageKeyboardEventCount should "cancel a count prefix", -> sendKeyboardEvent "2" sendKeyboardEvent "z" sendKeyboardEvent "m" assert.equal 1, @handlerCalledCount - assert.equal 0, pageKeyboardEventCount should "accept a count prefix for multi-key command mappings", -> - sendKeyboardEvent "2" + sendKeyboardEvent "5" sendKeyboardEvent "z" sendKeyboardEvent "p" - assert.equal 2, @handlerCalledCount - assert.equal 0, pageKeyboardEventCount + assert.equal 5, @handlerCalledCount should "cancel a key prefix", -> sendKeyboardEvent "z" sendKeyboardEvent "m" assert.equal 1, @handlerCalledCount - assert.equal 0, pageKeyboardEventCount should "cancel a count prefix after a prefix key", -> sendKeyboardEvent "2" sendKeyboardEvent "z" sendKeyboardEvent "m" assert.equal 1, @handlerCalledCount - assert.equal 0, pageKeyboardEventCount should "cancel a prefix key on escape", -> sendKeyboardEvent "z" - sendKeyboardEvent "escape" + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC sendKeyboardEvent "p" assert.equal 0, @handlerCalledCount - should "not handle escape on its own", -> - sendKeyboardEvent "escape" - assert.equal 2, pageKeyboardEventCount - context "Normal mode", setup -> initializeModeState() - should "suppress mapped keys", -> - sendKeyboardEvent "m" - assert.equal 0, pageKeyboardEventCount - - should "not suppress unmapped keys", -> - sendKeyboardEvent "u" - assert.equal 3, pageKeyboardEventCount - - should "not suppress escape", -> - sendKeyboardEvent "escape" - assert.equal 2, pageKeyboardEventCount - - should "not suppress passKeys", -> - sendKeyboardEvent "p" - assert.equal 3, pageKeyboardEventCount - - should "suppress passKeys with a non-empty key state (a count)", -> - sendKeyboardEvent "5" - sendKeyboardEvent "p" - assert.equal 0, pageKeyboardEventCount - - should "suppress passKeys with a non-empty key state (a key)", -> - sendKeyboardEvent "z" - sendKeyboardEvent "p" - assert.equal 0, pageKeyboardEventCount - should "invoke commands for mapped keys", -> sendKeyboardEvent "m" assert.equal "m", commandName @@ -706,7 +659,7 @@ context "Normal mode", assert.equal 2, commandCount should "accept count prefixes of length 2", -> - sendKeyboardEvent "12" + sendKeyboardEvents "12" sendKeyboardEvent "m" assert.equal 12, commandCount @@ -763,19 +716,16 @@ context "Insert mode", initializeModeState() @insertMode = new InsertMode global: true - should "not suppress mapped keys in insert mode", -> - sendKeyboardEvent "m" - assert.equal 3, pageKeyboardEventCount - should "exit on escape", -> assert.isTrue @insertMode.modeIsActive - sendKeyboardEvent "escape" + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC assert.isFalse @insertMode.modeIsActive should "resume normal mode after leaving insert mode", -> + assert.equal null, commandCount @insertMode.exit() sendKeyboardEvent "m" - assert.equal 0, pageKeyboardEventCount + assert.equal 1, commandCount context "Triggering insert mode", setup -> @@ -833,7 +783,7 @@ context "Caret mode", assert.equal "I", getSelection() should "exit caret mode on escape", -> - sendKeyboardEvent "escape" + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC assert.equal "", getSelection() should "move caret with l and h", -> @@ -868,7 +818,7 @@ context "Caret mode", assert.equal "I", getSelection() sendKeyboardEvents "ww" assert.equal "a", getSelection() - sendKeyboardEvent "escape" + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC new VisualMode assert.equal "a", getSelection() @@ -983,16 +933,14 @@ context "Mode utilities", test = new Mode exitOnEscape: true assert.isTrue test.modeIsActive - sendKeyboardEvent "escape" - assert.equal 0, pageKeyboardEventCount + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC assert.isFalse test.modeIsActive should "not exit on escape if not enabled", -> test = new Mode exitOnEscape: false assert.isTrue test.modeIsActive - sendKeyboardEvent "escape" - assert.equal 2, pageKeyboardEventCount + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC assert.isTrue test.modeIsActive should "exit on blur", -> @@ -1031,21 +979,21 @@ context "PostFindMode", assert.isFalse @postFindMode.modeIsActive should "suppress unmapped printable keys", -> - sendKeyboardEvent "m" - assert.equal 0, pageKeyboardEventCount + sendKeyboardEvent "a" + assert.equal null, commandCount should "be deactivated on click events", -> handlerStack.bubbleEvent "click", target: document.activeElement assert.isFalse @postFindMode.modeIsActive should "enter insert mode on immediate escape", -> - sendKeyboardEvent "escape" - assert.equal 0, pageKeyboardEventCount + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC + assert.equal null, commandCount assert.isFalse @postFindMode.modeIsActive should "not enter insert mode on subsequent escapes", -> sendKeyboardEvent "a" - sendKeyboardEvent "escape" + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC assert.isTrue @postFindMode.modeIsActive context "WaitForEnter", @@ -1057,14 +1005,14 @@ context "WaitForEnter", should "exit with success on Enter", -> assert.isTrue @waitForEnter.modeIsActive assert.isFalse @isSuccess? - sendKeyboardEvent "enter" + sendKeyboardEvent "Enter", "keydown", keyCode: keyCodes.enter assert.isFalse @waitForEnter.modeIsActive assert.isTrue @isSuccess? and @isSuccess == true should "exit without success on Escape", -> assert.isTrue @waitForEnter.modeIsActive assert.isFalse @isSuccess? - sendKeyboardEvent "escape" + sendKeyboardEvent "Escape", "keydown", keyCode: keyCodes.ESC assert.isFalse @waitForEnter.modeIsActive assert.isTrue @isSuccess? and @isSuccess == false @@ -1075,17 +1023,6 @@ context "WaitForEnter", assert.isTrue @waitForEnter.modeIsActive assert.isFalse @isSuccess? -context "SuppressAllKeyboardEvents", - setup -> - initializeModeState() - - should "supress keyboard events", -> - sendKeyboardEvent "a" - assert.equal 3, pageKeyboardEventCount - new SuppressAllKeyboardEvents - sendKeyboardEvent "a" - assert.equal 0, pageKeyboardEventCount - context "GrabBackFocus", setup -> testContent = "<input type='text' value='some value' id='input'/>" diff --git a/tests/dom_tests/phantom_runner.coffee b/tests/dom_tests/phantom_runner.coffee index 09d7d584..b91919bb 100644 --- a/tests/dom_tests/phantom_runner.coffee +++ b/tests/dom_tests/phantom_runner.coffee @@ -21,30 +21,6 @@ page.onError = (msg, trace) -> page.onResourceError = (resourceError) -> console.log(resourceError.errorString) -page.onCallback = (request) -> - switch request.request - when "keyboard" - switch request.key - when "escape" - page.sendEvent "keydown", page.event.key.Escape - page.sendEvent "keyup", page.event.key.Escape - when "enter" - page.sendEvent "keydown", page.event.key.Enter - page.sendEvent "keyup", page.event.key.Enter - when "tab" - page.sendEvent "keydown", page.event.key.Tab - page.sendEvent "keyup", page.event.key.Tab - when "shift-down" - page.sendEvent "keydown", page.event.key.Shift - when "shift-up" - page.sendEvent "keyup", page.event.key.Shift - when "ctrl-down" - page.sendEvent "keydown", page.event.key.Control - when "ctrl-up" - page.sendEvent "keyup", page.event.key.Control - else - page.sendEvent "keypress", request.key - testfile = path.join(path.dirname(system.args[0]), 'dom_tests.html') page.open testfile, (status) -> if status != 'success' |
