aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorStephen Blott2017-04-13 14:09:14 +0100
committerStephen Blott2017-04-18 05:50:51 +0100
commit8e4119f84bbde748eb595e6766dbb47a6cd0133c (patch)
tree56fa1b1d54e1662754aee9e2d7289d316b905d7b /tests
parent388d866e995249a0be3154c349db2edac664a3fa (diff)
downloadvimium-8e4119f84bbde748eb595e6766dbb47a6cd0133c.tar.bz2
Rework tests for all key handling on keydown.
Diffstat (limited to 'tests')
-rw-r--r--tests/dom_tests/dom_tests.coffee157
-rw-r--r--tests/dom_tests/phantom_runner.coffee24
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'