diff options
| author | Stephen Blott | 2015-01-11 15:01:12 +0000 |
|---|---|---|
| committer | Stephen Blott | 2015-01-11 15:54:47 +0000 |
| commit | 8066a3838ef44b010f6dfb46cea8b47c6bdfc087 (patch) | |
| tree | 209fe896b61e34c6d622584d9e0d7773b288828e /tests | |
| parent | f76c15c6ae6565c0c08569a127974dfd3383ed88 (diff) | |
| download | vimium-8066a3838ef44b010f6dfb46cea8b47c6bdfc087.tar.bz2 | |
Modes; yet more tweaks, yet more tests.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/dom_tests/dom_tests.coffee | 128 |
1 files changed, 102 insertions, 26 deletions
diff --git a/tests/dom_tests/dom_tests.coffee b/tests/dom_tests/dom_tests.coffee index d9e7775f..eacd0aed 100644 --- a/tests/dom_tests/dom_tests.coffee +++ b/tests/dom_tests/dom_tests.coffee @@ -12,8 +12,8 @@ mockKeyboardEvent = (keyChar) -> event.preventDefault = -> @suppressed = true event -# Some of these tests have side effects on the handler stack and mode. Therefore, we take backups and restore -# them on tear down. +# Some of these tests have side effects on the handler stack and active mode. Therefore, we take backups and +# restore them on tear down. backupStackState = -> Mode.backup = Mode.modes[..] handlerStack.backup = handlerStack.stack[..] @@ -202,15 +202,15 @@ context "Input focus", focusInput 1 assert.equal "first", document.activeElement.id # deactivate the tabbing mode and its overlays - assert.isTrue Mode.modes[Mode.modes.length-1].name != "insert" + assert.isTrue Mode.top() != "insert" handlerStack.bubbleEvent 'keydown', mockKeyboardEvent("A") - assert.isTrue Mode.modes[Mode.modes.length-1].name == "insert" + assert.isTrue Mode.top() == "insert" focusInput 100 assert.equal "third", document.activeElement.id - assert.isTrue Mode.modes[Mode.modes.length-1].name != "insert" + assert.isTrue Mode.top() != "insert" handlerStack.bubbleEvent 'keydown', mockKeyboardEvent("A") - assert.isTrue Mode.modes[Mode.modes.length-1].name == "insert" + assert.isTrue Mode.top() == "insert" # TODO: these find prev/next link tests could be refactored into unit tests which invoke a function which has # a tighter contract than goNext(), since they test minor aspects of goNext()'s link matching behavior, and we @@ -393,19 +393,19 @@ context "Insert-mode trigger", target: isContentEditable: true - assert.isTrue Mode.modes[Mode.modes.length-1].name == "insert" + assert.isTrue Mode.top() == "insert" should "trigger insert mode on focus of text input", -> document.getElementById("first").focus() handlerStack.bubbleEvent "focus", { target: document.activeElement } - assert.isTrue Mode.modes[Mode.modes.length-1].name == "insert" + assert.isTrue Mode.top() == "insert" should "trigger insert mode on focus of password input", -> document.getElementById("third").focus() handlerStack.bubbleEvent "focus", { target: document.activeElement } - assert.isTrue Mode.modes[Mode.modes.length-1].name == "insert" + assert.isTrue Mode.top() == "insert" should "not trigger insert mode on focus of contentEditable elements", -> new InsertModeBlocker() @@ -413,21 +413,21 @@ context "Insert-mode trigger", target: isContentEditable: true - assert.isTrue Mode.modes[Mode.modes.length-1].name != "insert" + assert.isTrue Mode.top() != "insert" should "not trigger insert mode on focus of text input", -> new InsertModeBlocker() document.getElementById("first").focus() handlerStack.bubbleEvent "focus", { target: document.activeElement } - assert.isTrue Mode.modes[Mode.modes.length-1].name != "insert" + assert.isTrue Mode.top() != "insert" should "not trigger insert mode on focus of password input", -> new InsertModeBlocker() document.getElementById("third").focus() handlerStack.bubbleEvent "focus", { target: document.activeElement } - assert.isTrue Mode.modes[Mode.modes.length-1].name != "insert" + assert.isTrue Mode.top() != "insert" context "Mode utilities", setup -> @@ -458,10 +458,11 @@ context "Mode utilities", super() assert.isTrue count == 0 - new Test() - assert.isTrue count == 1 - new Test() - assert.isTrue count == 1 + for [1..10] + mode = new Test(); assert.isTrue count == 1 + + mode.exit() + assert.isTrue count == 0 should "exit on escape", -> escape = @@ -471,20 +472,47 @@ context "Mode utilities", exitOnEscape: true name: "test" - assert.isTrue Mode.modes[Mode.modes.length-1].name == "test" + assert.isTrue Mode.top() == "test" + handlerStack.bubbleEvent "keydown", escape + assert.isTrue Mode.top() != "test" + + should "not exit on escape if not enabled", -> + escape = + keyCode: 27 + keyIdentifier: "" + stopImmediatePropagation: -> + + new Mode + exitOnEscape: false + name: "test" + + assert.isTrue Mode.top() == "test" handlerStack.bubbleEvent "keydown", escape - assert.isTrue Mode.modes[Mode.modes.length-1].name != "test" + assert.isTrue Mode.top() == "test" should "exit on blur", -> element = document.getElementById("first") + element.focus() new Mode exitOnBlur: element name: "test" - assert.isTrue Mode.modes[Mode.modes.length-1].name == "test" + assert.isTrue Mode.top() == "test" handlerStack.bubbleEvent "blur", { srcElement: element } - assert.isTrue Mode.modes[Mode.modes.length-1].name != "test" + assert.isTrue Mode.top() != "test" + + should "not exit on blur if not enabled", -> + element = document.getElementById("first") + element.focus() + + new Mode + exitOnBlur: null + name: "test" + + assert.isTrue Mode.top() == "test" + handlerStack.bubbleEvent "blur", { srcElement: element } + assert.isTrue Mode.top() == "test" should "register state change", -> enabled = null @@ -623,21 +651,69 @@ context "PostFindMode", should "be clickable to focus", -> new PostFindMode @element - assert.isTrue Mode.modes[Mode.modes.length-1].name != "insert" + assert.isTrue Mode.top() != "insert" handlerStack.bubbleEvent "click", { target: document.activeElement } - assert.isTrue Mode.modes[Mode.modes.length-1].name == "insert" + assert.isTrue Mode.top() == "insert" should "enter insert mode on immediate escape", -> new PostFindMode @element - assert.isTrue Mode.modes[Mode.modes.length-1].name == "post-find" + assert.isTrue Mode.top() == "post-find" handlerStack.bubbleEvent "keydown", @escape - assert.isTrue Mode.modes[Mode.modes.length-1].name == "insert" + assert.isTrue Mode.top() == "insert" should "not enter insert mode on subsequent escape", -> new PostFindMode @element - assert.isTrue Mode.modes[Mode.modes.length-1].name == "post-find" + assert.isTrue Mode.top() == "post-find" handlerStack.bubbleEvent "keydown", mockKeyboardEvent "u" handlerStack.bubbleEvent "keydown", @escape - assert.isTrue Mode.modes[Mode.modes.length-1].name == "post-find" + assert.isTrue Mode.top() == "post-find" + +context "Mode badges", + setup -> + backupStackState() + + tearDown -> + restoreStackState() + + should "have an N badge without passKeys", -> + handlerStack.bubbleEvent "registerStateChange", + enabled: true + passKeys: "" + + handlerStack.bubbleEvent "updateBadge", badge = { badge: "" } + assert.isTrue badge.badge == "N" + + should "have an P badge with passKeys", -> + handlerStack.bubbleEvent "registerStateChange", + enabled: true + passKeys: "p" + + handlerStack.bubbleEvent "updateBadge", badge = { badge: "" } + assert.isTrue badge.badge == "P" + + should "have an I badge in insert mode", -> + handlerStack.bubbleEvent "registerStateChange", + enabled: true + passKeys: "" + + handlerStack.bubbleEvent "updateBadge", badge = { badge: "" } + assert.isTrue badge.badge == "N" + + insertMode = new InsertMode() + handlerStack.bubbleEvent "updateBadge", badge = { badge: "" } + assert.isTrue badge.badge == "I" + + insertMode.exit() + handlerStack.bubbleEvent "updateBadge", badge = { badge: "" } + assert.isTrue badge.badge == "N" + + should "have no badge when disabled", -> + handlerStack.bubbleEvent "registerStateChange", + enabled: false + passKeys: "" + + new InsertMode() + handlerStack.bubbleEvent "updateBadge", badge = { badge: "" } + assert.isTrue badge.badge == "" |
