aboutsummaryrefslogtreecommitdiffstats
path: root/tests/dom_tests
diff options
context:
space:
mode:
authorStephen Blott2015-01-11 07:15:06 +0000
committerStephen Blott2015-01-11 07:15:06 +0000
commitd65075a3b66fae93a10b849162fa907d0eb99846 (patch)
tree721de43d14028cea46b53b792eaf907912c044c8 /tests/dom_tests
parent06a2ea5ccdef3703df23fe4233921bd2a6af3abf (diff)
downloadvimium-d65075a3b66fae93a10b849162fa907d0eb99846.tar.bz2
Modes; add DOM tests.
Diffstat (limited to 'tests/dom_tests')
-rw-r--r--tests/dom_tests/dom_tests.coffee111
1 files changed, 108 insertions, 3 deletions
diff --git a/tests/dom_tests/dom_tests.coffee b/tests/dom_tests/dom_tests.coffee
index 4a61877c..ce54190a 100644
--- a/tests/dom_tests/dom_tests.coffee
+++ b/tests/dom_tests/dom_tests.coffee
@@ -8,10 +8,15 @@ mockKeyboardEvent = (keyChar) ->
event.charCode = (if keyCodes[keyChar] isnt undefined then keyCodes[keyChar] else keyChar.charCodeAt(0))
event.keyIdentifier = "U+00" + event.charCode.toString(16)
event.keyCode = event.charCode
- event.stopImmediatePropagation = ->
- event.preventDefault = ->
+ event.stopImmediatePropagation = (event) -> @suppressed = true
+ event.preventDefault = (event) -> @suppressed = true
event
+# Some of these tests have side effects on the handler stack. Therefore, we take backups of the stack, and
+# restore them later.
+backupHandlerStack = -> handlerStack.backup = handlerStack.stack
+restoreHandlerStack = -> handlerStack.stack = handlerStack.backup
+
#
# Retrieve the hint markers as an array object.
#
@@ -170,9 +175,11 @@ context "Input focus",
testContent = "<input type='text' id='first'/><input style='display:none;' id='second'/>
<input type='password' id='third' value='some value'/>"
document.getElementById("test-div").innerHTML = testContent
+ backupHandlerStack()
tearDown ->
document.getElementById("test-div").innerHTML = ""
+ restoreHandlerStack()
should "focus the right element", ->
focusInput 1
@@ -243,9 +250,107 @@ context "Find prev / next links",
goNext()
assert.equal '#first', window.location.hash
-
createLinks = (n) ->
for i in [0...n] by 1
link = document.createElement("a")
link.textContent = "test"
document.getElementById("test-div").appendChild link
+
+context "Normal mode",
+ setup ->
+ backupHandlerStack()
+ refreshCompletionKeys
+ completionKeys: "o"
+ validFirstKeys: "o"
+
+ tearDown ->
+ restoreHandlerStack()
+
+ should "suppress mapped keys", ->
+ for event in [ "keydown", "keypress", "keyup" ]
+ key = mockKeyboardEvent "o"
+ handlerStack.bubbleEvent event, key
+ assert.isTrue key.suppressed
+
+ should "not suppress unmapped keys", ->
+ for event in [ "keydown", "keypress", "keyup" ]
+ key = mockKeyboardEvent "a"
+ handlerStack.bubbleEvent event, key
+ assert.isFalse key.suppressed
+
+context "Passkeys mode",
+ setup ->
+ backupHandlerStack()
+ refreshCompletionKeys
+ completionKeys: "oj"
+ validFirstKeys: "oj"
+
+ handlerStack.bubbleEvent "registerStateChange",
+ enabled: true
+ passKeys: "j"
+
+ tearDown ->
+ restoreHandlerStack()
+ handlerStack.bubbleEvent "registerStateChange",
+ enabled: true
+ passKeys: ""
+
+ should "not suppress passKeys", ->
+ # First check normal-mode key (just to verify the framework).
+ for event in [ "keydown", "keypress", "keyup" ]
+ key = mockKeyboardEvent "o"
+ handlerStack.bubbleEvent event, key
+ assert.isTrue key.suppressed
+
+ # Then check passKey.
+ for event in [ "keydown", "keypress", "keyup" ]
+ key = mockKeyboardEvent "j"
+ handlerStack.bubbleEvent event, key
+ assert.isFalse key.suppressed
+
+context "Insert mode",
+ setup ->
+ backupHandlerStack()
+ refreshCompletionKeys
+ completionKeys: "o"
+ validFirstKeys: "o"
+
+ tearDown ->
+ backupHandlerStack()
+
+ should "not suppress mapped keys in insert mode", ->
+ # First check normal-mode key (just to verify the framework).
+ for event in [ "keydown", "keypress", "keyup" ]
+ key = mockKeyboardEvent "o"
+ handlerStack.bubbleEvent event, key
+ assert.isTrue key.suppressed
+
+ # Install insert mode.
+ insertMode = new InsertMode()
+
+ # Then verify insert mode.
+ for event in [ "keydown", "keypress", "keyup" ]
+ key = mockKeyboardEvent "o"
+ handlerStack.bubbleEvent event, key
+ assert.isFalse key.suppressed
+
+ insertMode.exit()
+
+ # Then check insert mode has been successfully removed.
+ for event in [ "keydown", "keypress", "keyup" ]
+ key = mockKeyboardEvent "o"
+ handlerStack.bubbleEvent event, key
+ assert.isTrue key.suppressed
+
+context "Insert mode trigger",
+ setup ->
+ backupHandlerStack()
+ refreshCompletionKeys
+ completionKeys: "o"
+ validFirstKeys: "o"
+
+ tearDown ->
+ backupHandlerStack()
+
+ should "trigger insert mode on input-focus events", ->
+