diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/dom_tests/dom_tests.coffee | 159 | ||||
| -rw-r--r-- | tests/dom_tests/dom_tests.html | 2 |
2 files changed, 154 insertions, 7 deletions
diff --git a/tests/dom_tests/dom_tests.coffee b/tests/dom_tests/dom_tests.coffee index dad4def9..2311b768 100644 --- a/tests/dom_tests/dom_tests.coffee +++ b/tests/dom_tests/dom_tests.coffee @@ -1,3 +1,4 @@ +window.vimiumDomTestsAreRunning = true # Install frontend event handlers. installListeners() @@ -7,6 +8,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 +21,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 +333,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 +735,146 @@ 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> + """ + 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() + + should "re-use an existing selection", -> + assert.equal "I", getSelection() + sendKeyboardEvents "ww" + assert.equal "a", getSelection() + sendKeyboardEvent "escape" + new VisualMode + assert.equal "a", getSelection() + + should "not move the selection on caret/visual mode toggle", -> + sendKeyboardEvents "ww" + assert.equal "a", getSelection() + for key in "vcvcvc".split() + sendKeyboardEvent key + assert.equal "a", 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> + """ + 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() @@ -744,7 +891,7 @@ context "Mode utilities", count = 0 class Test extends Mode - constructor: -> count += 1; super singleton: Test + constructor: -> count += 1; super singleton: "test" exit: -> count -= 1; super() assert.isTrue count == 0 diff --git a/tests/dom_tests/dom_tests.html b/tests/dom_tests/dom_tests.html index 9aa804d1..ab48a88a 100644 --- a/tests/dom_tests/dom_tests.html +++ b/tests/dom_tests/dom_tests.html @@ -44,8 +44,8 @@ <script type="text/javascript" src="../../content_scripts/scroller.js"></script> <script type="text/javascript" src="../../content_scripts/mode_insert.js"></script> <script type="text/javascript" src="../../content_scripts/mode_find.js"></script> - <script type="text/javascript" src="../../content_scripts/mode_visual_edit.js"></script> <script type="text/javascript" src="../../content_scripts/mode_key_handler.js"></script> + <script type="text/javascript" src="../../content_scripts/mode_visual.js"></script> <script type="text/javascript" src="../../content_scripts/hud.js"></script> <script type="text/javascript" src="../../content_scripts/vimium_frontend.js"></script> |
