diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/dom_tests/dom_tests.coffee | 153 |
1 files changed, 148 insertions, 5 deletions
diff --git a/tests/dom_tests/dom_tests.coffee b/tests/dom_tests/dom_tests.coffee index 979500f5..d67b6c5d 100644 --- a/tests/dom_tests/dom_tests.coffee +++ b/tests/dom_tests/dom_tests.coffee @@ -7,6 +7,9 @@ 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 @@ -17,6 +20,9 @@ sendKeyboardEvent = (key) -> 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) -> @@ -326,23 +332,23 @@ context "Filtered link hints", @linkHints.deactivateMode() should "score start-of-word matches highly", -> - sendKeyboardEvent ch for ch in "bu".split() + sendKeyboardEvents "bu" assert.equal "6", @getActiveHintMarker() should "score start-of-text matches highly (br)", -> - sendKeyboardEvent ch for ch in "on".split() + sendKeyboardEvents "on" assert.equal "2", @getActiveHintMarker() should "score whole-word matches highly", -> - sendKeyboardEvent ch for ch in "boy".split() + sendKeyboardEvents "boy" assert.equal "1", @getActiveHintMarker() should "score shorter texts more highly", -> - sendKeyboardEvent ch for ch in "stood".split() + sendKeyboardEvents "stood" assert.equal "5", @getActiveHintMarker() should "use tab to select the active hint", -> - sendKeyboardEvent ch for ch in "abc".split() + sendKeyboardEvents "abc" assert.equal "8", @getActiveHintMarker() sendKeyboardEvent "tab" assert.equal "7", @getActiveHintMarker() @@ -728,6 +734,143 @@ context "Triggering insert mode", document.getElementById("fifth").focus() assert.isFalse InsertMode.permanentInstance.isActive() +context "Caret mode", + setup -> + document.getElementById("test-div").innerHTML = """ + <p><pre> + It is an ancient Mariner, + And he stoppeth one of three. + By thy long grey beard and glittering eye, + Now wherefore stopp'st thou me? + </pre></p> + <p><pre> + The Bridegroom's doors are opened wide, + And I am next of kin; + The guests are met, the feast is set: + May'st hear the merry din. + </pre></p> + """ + initializeModeState() + @initialVisualMode = new VisualMode + + tearDown -> + document.getElementById("test-div").innerHTML = "" + + should "enter caret mode", -> + assert.isFalse @initialVisualMode.modeIsActive + assert.equal "I", getSelection() + + should "exit caret mode on escape", -> + sendKeyboardEvent "escape" + assert.equal "", getSelection() + + should "move caret with l and h", -> + assert.equal "I", getSelection() + sendKeyboardEvent "l" + assert.equal "t", getSelection() + sendKeyboardEvent "h" + assert.equal "I", getSelection() + + should "move caret with w and b", -> + assert.equal "I", getSelection() + sendKeyboardEvent "w" + assert.equal "i", getSelection() + sendKeyboardEvent "b" + assert.equal "I", getSelection() + + should "move caret with e", -> + assert.equal "I", getSelection() + sendKeyboardEvent "e" + assert.equal " ", getSelection() + sendKeyboardEvent "e" + assert.equal " ", getSelection() + + should "move caret with j and k", -> + assert.equal "I", getSelection() + sendKeyboardEvent "j" + assert.equal "A", getSelection() + sendKeyboardEvent "k" + assert.equal "I", getSelection() + +context "Visual mode", + setup -> + document.getElementById("test-div").innerHTML = """ + <p><pre> + It is an ancient Mariner, + And he stoppeth one of three. + By thy long grey beard and glittering eye, + Now wherefore stopp'st thou me? + </pre></p> + <p><pre> + The Bridegroom's doors are opened wide, + And I am next of kin; + The guests are met, the feast is set: + May'st hear the merry din. + </pre></p> + """ + initializeModeState() + @initialVisualMode = new VisualMode + sendKeyboardEvent "w" + sendKeyboardEvent "w" + # We should now be at the "a" of "an". + sendKeyboardEvent "v" + + tearDown -> + document.getElementById("test-div").innerHTML = "" + + should "select word with e", -> + assert.equal "a", getSelection() + sendKeyboardEvent "e" + assert.equal "an", getSelection() + sendKeyboardEvent "e" + assert.equal "an ancient", getSelection() + + should "select opposite end of the selection with o", -> + assert.equal "a", getSelection() + sendKeyboardEvent "e" + assert.equal "an", getSelection() + sendKeyboardEvent "e" + assert.equal "an ancient", getSelection() + sendKeyboardEvents "ow" + assert.equal "ancient", getSelection() + sendKeyboardEvents "oe" + assert.equal "ancient Mariner", getSelection() + + should "accept a count", -> + assert.equal "a", getSelection() + sendKeyboardEvents "2e" + assert.equal "an ancient", getSelection() + + should "select a word", -> + assert.equal "a", getSelection() + sendKeyboardEvents "aw" + assert.equal "an", getSelection() + + should "select a word with a count", -> + assert.equal "a", getSelection() + sendKeyboardEvents "2aw" + assert.equal "an ancient", getSelection() + + should "select a word with a count", -> + assert.equal "a", getSelection() + sendKeyboardEvents "2aw" + assert.equal "an ancient", getSelection() + + should "select to start of line", -> + assert.equal "a", getSelection() + sendKeyboardEvents "0" + assert.equal "It is", getSelection().trim() + + should "select to end of line", -> + assert.equal "a", getSelection() + sendKeyboardEvents "$" + assert.equal "an ancient Mariner,", getSelection() + + should "re-enter caret mode", -> + assert.equal "a", getSelection() + sendKeyboardEvents "cww" + assert.equal "M", getSelection() + context "Mode utilities", setup -> initializeModeState() |
