Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support multi-cursor in test harness #4583

Closed
wants to merge 1 commit into from
Closed

Conversation

J-Fields
Copy link
Member

Now you can just put multiple cursors into the 'start' or 'end' of a test, a few examples are in multicursor.test.ts.
Fixes #4582

@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.12.4 build /home/travis/build/VSCodeVim/Vim
> gulp build

[05:38:15] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[05:38:15] Starting 'build'...
[05:38:15] Starting 'prettier'...
[05:38:16] Finished 'prettier' after 925 ms
[05:38:16] Starting 'tsc'...
[05:38:16] Starting 'tslint'...
[05:38:22] Finished 'tslint' after 6.73 s
[05:38:30] Finished 'tsc' after 14 s
[05:38:30] Starting 'commit-hash'...
[05:38:30] Finished 'commit-hash' after 27 ms
[05:38:30] Finished 'build' after 15 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-25T05:38:34.856Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative

    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (39ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (38ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (50ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (79ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (86ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (45ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command (40ms)

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (47ms)

  command-line lexer
    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot
    ✓ can lex one number
    ✓ can lex longer number
    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search
    ✓ can lex forward search escaping
    ✓ can lex reverse search
    ✓ can lex reverse search escaping
    ✓ can lex command name
    ✓ can lex command args
    ✓ can lex command args with leading whitespace
    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1163ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma
    ✓ can parse right - dollar
  command line scanner
    ✓ ctor
    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan
    ✓ can emit
    ✓ can ignore
    ✓ can skip whitespace
    ✓ can skip whitespace with one char before EOF
    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 
    ✓ nextWord() return word before EOF
    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (531ms)

    ✓ :smile editor contains smile text (543ms)

  Basic sort

    ✓ Sort whole file, asc (85ms)

    ✓ Sort whole file, asc, ignoreCase (66ms)

    ✓ Sort whole file, dsc (86ms)

    ✓ Sort whole file, dsc, ignoreCase (71ms)

    ✓ Sort range, asc (100ms)

    ✓ Sort range, asc, ignoreCase (87ms)

    ✓ Sort range, dsc (105ms)

    ✓ Sort range, dsc, ignoreCase (83ms)

    ✓ Sort whole file, asc, unique (88ms)

  Horizontal split

    ✓ :sp creates a second split (68ms)

    ✓ :split creates a second split (63ms)

    ✓ :new creates a second split (249ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag

    ✓ Replace with flags AND count (88ms)

    ✓ Replace with `c` flag (46ms)

    ✓ Replace with `gc` flag (54ms)

    ✓ Replace across all lines (53ms)

    ✓ Replace on specific single line (80ms)

    ✓ Replace on current line using dot (80ms)

    ✓ Replace single relative line using dot and plus (68ms)

    ✓ Replace across specific line range (47ms)

    ✓ Replace across relative line range using dot, plus, and minus (128ms)

    ✓ Replace across relative line range using numLines+colon shorthand (147ms)

    ✓ Repeat replacement across relative line range (66ms)

    ✓ Replace with range AND count but no flags (57ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (70ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (73ms)

    ✓ Undocumented: trailing operators use 1 as RHS (55ms)

    ✓ Replace specific single equal lines (68ms)

    ✓ Replace current line with no active selection (53ms)

    ✓ Replace text in selection (75ms)

    ✓ Substitute support marks (89ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (38ms)

      ✓ Replace with `g` flag inverts global flag

      ✓ Replace with `c` flag inverts global flag (55ms)

      ✓ Replace multiple lines (51ms)

      ✓ Replace across specific lines (158ms)

      ✓ Replace current line with no active selection (60ms)

      ✓ Replace text in selection (64ms)

      ✓ Substitute support marks (114ms)

      ✓ Substitute with escaped delimiter
    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (154ms)

      ✓ Substitute with previous search using # (123ms)

      ✓ Substitute with previous search using / (152ms)

      ✓ Substitute with parameters should update search state (96ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (264ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (214ms)

      ✓ Substitute repeat previous should accept flags (47ms)

      ✓ Substitute with empty search string should use last searched pattern (175ms)

      ✓ Ampersand (&) should repeat the last substitution (39ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (58ms)

    ✓ tabe with current file path does nothing (45ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (50ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (147ms)

    ✓ command line file tab completion with space in file path (110ms)

  Vertical split

    ✓ :vs creates a second split (62ms)

    ✓ :vsp creates a second split (58ms)

    ✓ :vsplit creates a second split (56ms)

    ✓ :vnew creates a second split (208ms)

    ✓ :vne creates a second split (225ms)

  Basic write-quit

    ✓ Run write and quit (54ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (40ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (60ms)

    ✓ getMatchingRemap (52ms)

    ✓ jj -> <Esc> through modehandler (92ms)

    ✓ 0 -> :wq through modehandler (63ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (85ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (57ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (92ms)

    ✓ d -> black hole register delete in normal mode through modehandler (109ms)

    ✓ d -> black hole register delete in normal mode through modehandler (87ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (119ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers
    ✓ all defined configurations in package.json have handlers
  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg (43ms)

        ✓ Can track jumps for keys: GggG

        ✓ Can track jumps for keys: GggGgg (50ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: /b<CR>n (110ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (54ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i> (41ms)

        ✓ Can track jumps for keys: j%%<C-o>%

        ✓ Can track jumps for keys: j%%<C-o>gg (39ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (38ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (53ms)

        ✓ Can enter number to jump back multiple times (39ms)

        ✓ Can track one-line `` jumps (46ms)

        ✓ Can track one-line double `` jumps (47ms)

        ✓ Can track one-line '' jumps (61ms)

        ✓ Can track one-line double '' jumps (60ms)

        ✓ Can handle '' jumps with no previous jump (79ms)

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (54ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (44ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (60ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (52ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (72ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (101ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (84ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (116ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (118ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (48ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (86ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (130ms)

    ✓ Can repeat last invoked macro (175ms)

    ✓ Can play back with count (335ms)

    ✓ Can play back with count, abort when a motion fails (241ms)

    ✓ Repeat change on contiguous lines (122ms)

    ✓ Append command to a macro (125ms)

    ✓ Can record Ctrl Keys and repeat (98ms)

[main 2020-02-25T05:39:04.858Z] update#setState checking for updates

[main 2020-02-25T05:39:04.942Z] update#setState idle

    ✓ Can execute macros with dot commands properly (78ms)

    ✓ : (command) register can be used as a macro (116ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (49ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (42ms)

    ✓ <C-c> can exit insert (45ms)

    ✓ <Esc> can exit insert

    ✓ Stay in insert when entering characters (62ms)

    ✓ Can handle 'O' (80ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (70ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines (137ms)

    ✓ Backspace works at beginning of file (66ms)

    ✓ Delete works in insert mode

    ✓ Delete works at line end

    ✓ Delete works at end of file (39ms)

    ✓ Delete works with repeat (237ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (68ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (47ms)

    ✓ Can perform insert command prefixed with count

    ✓ Can perform append command prefixed with count

    ✓ Can perform insert at start of line command prefixed with count

    ✓ Can perform append to end of line command prefixed with count (43ms)

    ✓ Can perform change char (s) command prefixed with count (69ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (76ms)

    ✓ Can handle 'O' with count (61ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (48ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line (43ms)

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (115ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (48ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again

    ✓ Can handle 'dl' at end of line (57ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT' (43ms)

    ✓ Can handle 'd3' then <enter> (42ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis (42ms)

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'cw' (44ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (50ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (43ms)

    ✓ Can handle 'c]}' without deleting closing bracket

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position (56ms)

    ✓ Can handle 'ciw' (67ms)

    ✓ Can handle 'ciw' on blanks (46ms)

    ✓ Can handle 'caw' (45ms)

    ✓ Can handle 'caw' on first letter (40ms)

    ✓ Can handle 'caw' on blanks (49ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens (52ms)

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)'

    ✓ Can handle count prefixed 'ca)' (44ms)

    ✓ Can handle 'ca(' spanning multiple lines (56ms)

    ✓ Can handle 'cab' spanning multiple lines (44ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead (41ms)

    ✓ Can handle 'ci"' on opening quote (65ms)

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (38ms)

    ✓ Can handle 'ci"' with a single escaped quote (40ms)

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (56ms)

    ✓ Can handle 'ca"' starting on the closing quote (40ms)

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (39ms)

    ✓ can handle cj (44ms)

    ✓ can handle ck (47ms)

    ✓ can handle c2j (121ms)

    ✓ can handle c2k (51ms)

    ✓ can handle cj on last line (82ms)

    ✓ can handle ck on first line (57ms)

    ✓ can handle c2j on last line (58ms)

    ✓ can handle c2k on first line (50ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces (42ms)

    ✓ Can handle 'daw' on word with leading spaces (40ms)

    ✓ Can handle 'daw' on word with numeric prefix (49ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (43ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word (43ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace

    ✓ Can handle 'daw' around word at end of line (39ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (88ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (81ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines

    ✓ Can handle 'daW' on beginning of word (39ms)

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces (39ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (42ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces (40ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces (134ms)

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle d} at beginning of line (55ms)

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (65ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (99ms)

    ✓ A should update desiredColumn

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (70ms)

    ✓ leaving insert mode should update desired column when entered with i (53ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position (56ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (52ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (46ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (43ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (47ms)

    ✓ Can handle ']p' after yy (52ms)

    ✓ Can handle ']p' after 'Nyy'

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible

    ✓ Can handle '[p' after yy

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible

    ✓ Can handle 'p' after y'a (73ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket (38ms)

    ✓ Can handle pasting in visual mode over selection (92ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (52ms)

    ✓ gI works correctly (44ms)

    ✓ gi works correctly (75ms)

    ✓ `. works correctly (50ms)

    ✓ '. works correctly (50ms)

    ✓ g; works correctly (122ms)

    ✓ g, works correctly (80ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly

    ✓ gq handles spaces before single line comments correctly

    ✓ gq handles tabs before single line comments correctly

    ✓ Can handle space

    ✓ Can handle space

    ✓ Undo 1 (52ms)

    ✓ Undo 2 (62ms)

    ✓ Undo cursor (106ms)

    ✓ Undo cursor 2 (79ms)

    ✓ Undo cursor 3 (95ms)

    ✓ Undo with movement first (260ms)

    ✓ Can handle 'U'

    ✓ Can handle 'U' for multiple changes (67ms)

    ✓ Can handle 'U' for new line below (64ms)

    ✓ Can handle 'U' for new line above (92ms)

    ✓ Can handle 'U' for consecutive changes only (98ms)

    ✓ Can handle 'u' to undo 'U'

    ✓ Can handle 'U' to undo 'U' (38ms)

    ✓ Can handle 'u' after :s/abc/def (66ms)

    ✓ Redo (80ms)

    ✓ Redo (74ms)

    ✓ Redo (74ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (39ms)

    ✓ can handle s in visual mode (43ms)

    ✓ can handle p with selection (51ms)

    ✓ can handle P with selection (61ms)

    ✓ can handle p in visual to end of line (94ms)

    ✓ can repeat backspace twice (152ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count (39ms)

    ✓ can delete with - motion and count (38ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor) (40ms)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal 

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after  (46ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number) (39ms)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y (39ms)

    ✓ Can do S

    ✓ / does not affect mark (54ms)

    ✓ / can search with regex

    ✓ / can search with newline (43ms)

    ✓ / can search through multiple newlines (107ms)

    ✓ / matches ^ per line (61ms)

    ✓ / matches $ per line (54ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (48ms)

    ✓ /\C forces case sensitive search (43ms)

    ✓ <BS> deletes the last character in search in progress mode

    ✓ <S-BS> deletes the last character in search in progress mode (61ms)

    ✓ <C-h> deletes the last character in search in progress mode

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc (43ms)

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (72ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (54ms)

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (64ms)

    ✓ '] go to the end of the previously operated or put text (216ms)

    ✓ `[ go to the start of the previously operated or put text (89ms)

    ✓ '[ go to the start of the previously operated or put text (90ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end (41ms)

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (175ms)

      ✓ gn selects the current word at |hello (163ms)

      ✓ gn selects the current word at h|ello (195ms)

      ✓ gn selects the current word at hel|lo (160ms)

      ✓ gn selects the current word at hell|o (164ms)

      ✓ gn selects the next word at hello| (237ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (79ms)

      ✓ dgn deletes the current word when cursor is at |hello (271ms)

      ✓ dgn deletes the current word when cursor is at h|ello (47ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (50ms)

      ✓ dgn deletes the current word when cursor is at hell|o (48ms)

      ✓ dgn deletes the next word when cursor is at hello| (70ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (73ms)

      ✓ cgn deletes the current word when cursor is at |hello (49ms)

      ✓ cgn deletes the current word when cursor is at h|ello (53ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (38ms)

      ✓ cgn deletes the current word when cursor is at hell|o (59ms)

      ✓ cgn deletes the next word when cursor is at hello| (56ms)

    can handle gN

      ✓ gN selects the previous match text (191ms)

      ✓ gN selects the current word at hell|o (173ms)

      ✓ gN selects the current word at hel|lo (188ms)

      ✓ gN selects the current word at h|ello (161ms)

      ✓ gN selects the current word at |hello (172ms)

      ✓ gN selects the previous word at | hello (180ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (45ms)

      ✓ dgN deletes the current word when cursor is at hell|o (57ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (66ms)

      ✓ dgN deletes the current word when cursor is at h|ello (52ms)

      ✓ dgN deletes the current word when cursor is at |hello (43ms)

      ✓ dgN deletes the previous word when cursor is at | hello (49ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (55ms)

      ✓ cgN deletes the current word when cursor is at hell|o (64ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (53ms)

      ✓ cgN deletes the current word when cursor is at h|ello (107ms)

      ✓ cgN deletes the current word when cursor is at |hello (61ms)

      ✓ cgN deletes the previous word when cursor is at | hello (65ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (40ms)

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (76ms)

    ✓ Can handle R across lines and exit Replace Mode (50ms)

    ✓ Can handle R with {count} (69ms)

    ✓ Can handle backspace (46ms)

    ✓ Can handle backspace (54ms)

    ✓ Can handle backspace across lines (59ms)

    ✓ Can handle arrows (40ms)

    ✓ Can handle . (68ms)

    ✓ Can handle . across lines (144ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (113ms)

    ✓ Can handle wd (85ms)

    ✓ Can handle x (66ms)

    ✓ Can handle x across a selection (66ms)

    ✓ Can do vwd in middle of sentence (114ms)

    ✓ Can do vwd in middle of sentence (76ms)

    ✓ Can do vwd multiple times (145ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (122ms)

    ✓ Can handle H key

    ✓ Can handle backspace key

    ✓ handles case where we delete over a newline (131ms)

    ✓ handles change operator (91ms)

    ✓ Can do vat on multiple matching tags (38ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (45ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags

    ✓ Repeat-prefixed vat does not bleed below (63ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (44ms)

    ✓ Can do vi) on a matching parenthesis

    ✓ Can do vi) on multiple matching parens (38ms)

    ✓ Can do va) on a matching parenthesis

    ✓ Can do va) on multiple matching parens

    ✓ Failed va) does not expand or move selection, remains in visual mode

    ✓ Repeat-prefixed va) does not bleed below

    ✓ Can do va} on a matching bracket as first character (39ms)

    ✓ Can do va} on multiple matching brackets (45ms)

    ✓ Can do vi( on a matching bracket near first character (39ms)

    ✓ Can do vi{ on outer pair of nested braces (43ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (43ms)

    ✓ Can do va] on multiple matching brackets (43ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (40ms)

    ✓ Repeat-prefixed vaf does not bleed below (54ms)

    ✓ vaf only expands to enclosing pairs

    ✓ Can use . to repeat indent in visual (58ms)

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL (46ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (38ms)

    ✓ Can do v$x to delete to last char including EOL (39ms)

    ✓ Can do gv to reselect previous selection (50ms)

    Vim's EOL handling is weird

      ✓ delete through eol (118ms)

      ✓ join 2 lines by deleting through eol (74ms)

      ✓ d$ doesn't delete whole line (65ms)

      ✓ vd$ does delete whole line (60ms)

      ✓ Paste over selection copies the selection (61ms)

      ✓ Paste over selection copies the selection linewise (48ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (49ms)

      ✓ Can handle <down> key (69ms)

      ✓ Can handle <left> key

      ✓ Can handle <right> key

    Screen line motions in Visual Mode

      ✓ Can handle 'gk'

      ✓ Can handle 'gj' (50ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (40ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (54ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (44ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (45ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (38ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (38ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (39ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (39ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (47ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (45ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (41ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (40ms)

      ✓ Can handle 'Y' in visual mode (47ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode

      ✓ Select sentence with leading spaces in visual mode

      ✓ Select multiple sentences in visual mode

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (40ms)

      ✓ Select inner sentence with leading spaces in visual mode

      ✓ Select spaces between sentences in visual mode (39ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets

      ✓ Can do vat on a matching tag (44ms)

    handles replace in visual mode

      ✓ Can do a single line replace (44ms)

      ✓ Can do a multi line replace (45ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines

      ✓ D deletes the current line (41ms)

    handles indent blocks in visual mode

      ✓ Can do vai (66ms)

      ✓ Can do vii

      ✓ Doesn't naively select the next line

      ✓ Searches backwards if cursor line is empty (41ms)

      ✓ Can do vaI

    visualstar

      ✓ Works with * (41ms)

      ✓ Works with #

    search works in visual mode

      ✓ Works with / (43ms)

      ✓ Works with ? (46ms)

      ✓ Selects correct range (106ms)

    X will delete linewise

      ✓ normal selection

      ✓ normal selection (56ms)

    C will delete linewise

      ✓ normal selection (44ms)

      ✓ normal selection

    R will delete linewise

      ✓ normal selection (45ms)

      ✓ normal selection (78ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (67ms)

      ✓ upward selection (92ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (43ms)

      ✓ multiline indent bottom up selection

      ✓ repeat multiline indent top down selection (55ms)

      ✓ repeat multiline indent bottom up selection (44ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection

      ✓ multiline outdent bottom up selection (74ms)

      ✓ repeat multiline outdent top down selection (56ms)

      ✓ repeat multiline outdent bottom up selection (45ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (108ms)

    vi{ will go to end of second to last line

      ✓ select

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (243ms)

      ✓ gv selects the last pasted text (which is longer than original) (294ms)

      ✓ gv selects the last pasted text (multiline) (171ms)

    can handle gn

      ✓ gn selects the next match text (152ms)

      ✓ gn selects the current word at |hello (148ms)

      ✓ gn selects the current word at h|ello (182ms)

      ✓ gn selects the current word at hel|lo (141ms)

      ✓ gn selects the next word at hell|o (155ms)

      ✓ gn selects the next word at hello| (170ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (47ms)

      ✓ U/gU across a selection (59ms)

      ✓ U/gU across a selection (reverse) (51ms)

      ✓ u/gu on single character (51ms)

      ✓ u/gu across a selection (59ms)

      ✓ u/gu across a selection (reverse) (50ms)

  Mode Visual Block

    ✓ can be activated

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D'

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (80ms)

    ✓ o works in visual block mode (46ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (138ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (113ms)

    ✓ Can handle wd (65ms)

    ✓ Can handle x (67ms)

    ✓ Can handle x across a selection (145ms)

    ✓ Can do vwd in middle of sentence (107ms)

    ✓ Can do vwd in middle of sentence (81ms)

    ✓ Can do vwd multiple times (146ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (106ms)

    ✓ handles case where we delete over a newline (103ms)

    ✓ handles change operator (356ms)

    ✓ Vp updates register content (46ms)

    ✓ Vp does not append unnecessary newlines (first line) (85ms)

    ✓ Vp does not append unnecessary newlines (middle line)

    ✓ Vp does not append unnecessary newlines (last line) (45ms)

    ✓ Exiting via <Esc> returns cursor to original column

    Vim's EOL handling is weird

      ✓ delete through eol (56ms)

      ✓ join 2 lines by deleting through eol (61ms)

      ✓ d$ doesn't delete whole line (51ms)

      ✓ vd$ does delete whole line (68ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk'

      ✓ Can handle 'gj'

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key

      ✓ Can handle d key (43ms)

      ✓ Can handle d key (49ms)

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up

    search works in visual line mode

      ✓ Works with / (101ms)

      ✓ Works with ? (63ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (123ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position

      ✓ linewise visual put works also in the end of document

      ✓ gv selects the last pasted text (which is shorter than original) (217ms)

      ✓ gv selects the last pasted text (which is longer than original) (277ms)

      ✓ gv selects the last pasted text (multiline) (143ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly (85ms)

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (45ms)

    ✓ Can handle 'x' at end of line (46ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (51ms)

    ✓ Can handle '<Del>' at end of line (54ms)

    ✓ Can handle 'cc' (43ms)

    ✓ Can handle 'Ncc' (44ms)

    ✓ Can handle 'yy' (45ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC' (104ms)

    ✓ Can handle 'NC' and put (48ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd'

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
'

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (43ms)

    ✓ Can handle 'J' with leading white space on next line (60ms)

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (78ms)

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (46ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (48ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (54ms)

    ✓ Can handle dot with I (112ms)

    ✓ Can repeat actions that require selections (46ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (47ms)

    ✓ Can repeat insert change and '<C-t>' (125ms)

    ✓ Can repeat change by `<C-a>` (62ms)

    ✓ Only one arrow key can be repeated in Insert Mode (45ms)

    ✓ Cached content change will be cleared by arrow keys (205ms)

  Matching Bracket (%)

    ✓ before opening parenthesis (70ms)

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ]) (57ms)

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]} (60ms)

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (40ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    38) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (45ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count (98ms)

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search (38ms)

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (38ms)

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search

    ✓ cancelled search reverts to previous search state (48ms)

    ✓ Backspace on empty search cancels (43ms)

    ✓ Search offsets: b does nothing (40ms)

    ✓ Search offsets: b2 goes 2 to the right (39ms)

    ✓ Search offsets: b+3 goes 3 to the right (47ms)

    ✓ Search offsets: e goes to the end

    ✓ Search offsets: character offset goes across line boundaries (49ms)

    ✓ Search offsets: 2 goes 2 down (44ms)

    ✓ Search offsets: -2 goes 2 up (47ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix (41ms)

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat (102ms)

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g# (40ms)

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word (56ms)

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history (40ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (73ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    39) Can handle g_

    ✓ Can handle g_ with count prefix (74ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key (47ms)

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down
    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end

    ✓ document begin

    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    line up

      ✓ should move cursor one line up
      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)

    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document
    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file

      ✓ search wraps around the start of the file

    wrapscan disabled

      ✓ search stops at the end of the file (83ms)

      ✓ search stops at the start of the file (45ms)

  Multicursor

    ✓ can add multiple cursors below (73ms)

    ✓ can add multiple cursors above (71ms)

    ✓ dd works with multi-cursor

    47) cw works with multi-cursor

    48) <count>f<char> works with multi-cursor

    49) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (188ms)

    ✓ gcj comments in current and next line (67ms)

    ✓ block comment with motion (78ms)

    ✓ block comment in Visual Mode (130ms)

    ✓ comment in visual line mode (181ms)

    ✓ comment in visual block mode (826ms)

  format operator

    ✓ == formats current line (396ms)

    ✓ =$ formats entire line (94ms)

    ✓ =j formats two lines (61ms)

    ✓ 3=k formats three lines (117ms)

    50) =gg formats to top of file

    ✓ =G formats to bottom of file (83ms)

    ✓ =ip formats paragraph (87ms)

    ✓ format in visual mode (200ms)

  put operator

    ✓ basic put test (91ms)

    ✓ test yy end of line (58ms)

    ✓ test yy first line (56ms)

    ✓ test yy middle line (58ms)

    ✓ test yy with correct positon movement (64ms)

    ✓ test visual block single line yank p (65ms)

    ✓ test visual block single line yank P (97ms)

    ✓ test visual block single line delete p (41ms)

    ✓ test visual block single line delete P (49ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works

    ✓ g? in visual line mode works

    51) g? in visual block mode works

  shift operator

    ✓ basic shift left test

    ✓ shift left goto end test (116ms)

    ✓ shift left goto line test (108ms)

    ✓ shift right goto end test

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word (43ms)

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word (44ms)

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (44ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (55ms)

      ✓ delete from start of underscore_word (84ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (41ms)

      ✓ delete from start of underscore_word (154ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word (47ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (65ms)

    ✓ Can handle 2s move (43ms)

    ✓ Can handle f move (38ms)

    ✓ Can handle 2f move (48ms)

    ✓ Can handle F move

    ✓ Can handle 2F move (102ms)

    ✓ Can handle t move (78ms)

    ✓ Can handle bd-t move (50ms)

    ✓ Can handle 2t move (45ms)

    ✓ Can handle bd-t2 move (44ms)

    ✓ Can handle T move (74ms)

    ✓ Can handle 2T move (83ms)

    ✓ Can handle w move

    ✓ Can handle bd-w move (112ms)

    ✓ Can handle b move

    ✓ Can handle e move (81ms)

    ✓ Can handle bd-e move

    ✓ Can handle ge move (49ms)

    ✓ Can handle n-char move (56ms)

    ✓ Can handle j move (245ms)

    ✓ Can handle k move (50ms)

    ✓ Can handle bd-jk move (1) (50ms)

    ✓ Can handle bd-jk move (2) (57ms)

    ✓ Can handle lineforward move (1) (43ms)

    ✓ Can handle lineforward move (2) (74ms)

    52) Can handle linebackward move (1)

    53) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (47ms)

    ✓ Replaces within inner Word (47ms)

    ✓ Replaces within '' (66ms)

    ✓ Replaces within '' including spaces (50ms)

    ✓ Replaces within () (148ms)

    ✓ Replaces within () including spaces (52ms)

    ✓ Replaces within a paragraph (64ms)

    ✓ Replaces using a specified register (65ms)

    ✓ Replaces within {} over multiple lines (47ms)

    ✓ Replaces a multiline register within {} over multiple lines (49ms)

    ✓ Replaces a multiline register within {} over multiple lines (42ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (55ms)

    ✓ grr replaces the entire line with the register (42ms)

    ✓ grr can replace multiple lines (39ms)

    ✓ Replaces in visual mode (42ms)

    ✓ Replaces in visual mode using a specified register (122ms)

    ✓ Replaces in visual line mode (58ms)

    ✓ grj is linewise (51ms)

  sneak plugin

    ✓ Can handle s motion (58ms)

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion

    ✓ Can handle s; motion

    ✓ Can handle s, motion (92ms)

    ✓ Can handle S; motion (39ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (78ms)

    ✓ Can handle single letter <operator>Z motion (54ms)

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion (404ms)

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion (64ms)

    ✓ Can handle multiline single char <number>s motion (39ms)

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (78ms)

    ✓ 'ysiw(' surrounds word with space (57ms)

    ✓ 'ysw)' surrounds word without space (131ms)

    ✓ 'ysw(' surrounds word with space (46ms)

    ✓ 'ysaw)' surrounds word without space (68ms)

    ✓ 'ysaw(' surrounds word with space (88ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (52ms)

    ✓ 'ysiw<' surrounds word with tags (66ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (59ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (51ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (106ms)

    ✓ change surround (47ms)

    ✓ change surround with two pairs of quotes (41ms)

    ✓ change surround with two pairs of parens (62ms)

    ✓ change surround with alias (84ms)

    ✓ change surround to tags (143ms)

    ✓ delete surround

    ✓ delete surround with quotes (48ms)

    ✓ delete surround with nested of quotes (50ms)

    ✓ delete surround with inconsistent quotes (50ms)

    ✓ delete surround with mixed quotes (164ms)

    ✓ delete surround with empty quotes cursor at start (45ms)

    ✓ delete surround with empty quotes cursor at end (43ms)

    ✓ don't delete surround if cursor is after closing match (53ms)

    ✓ delete surround if cursor is before opening match (52ms)

    ✓ delete surround with two pairs of parens (50ms)

    ✓ delete surround with alias (48ms)

    ✓ delete surround with tags (61ms)

    ✓ change surround brackets at end of line (54ms)

    ✓ changing brackets with surround works again (46ms)

    ✓ change surround with tags that contain an attribute and preserve them (64ms)

    ✓ change surround with tags that contain an attribute and remove them (57ms)

  register

    ✓ Can copy to a register (47ms)

    ✓ Can use two registers together (66ms)

    ✓ Can use black hole register (79ms)

    ✓ System clipboard works with chinese characters (40ms)

    ✓ Yank stores text in Register '0' (238ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (116ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (139ms)

    ✓ Register '1'-'9' stores delete content (165ms)

    ✓ "A appends linewise text to "a (492ms)

    ✓ "A appends character wise text to "a (133ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (104ms)

    ✓ Small deletion using Del is stored in small delete register (150ms)

    ✓ Small deletion using X is stored in small delete register (121ms)

    ✓ Search register (/) is set by forward search (214ms)

    ✓ Search register (/) is set by backward search (195ms)

    ✓ Search register (/) is set by star search (231ms)

    ✓ Command register (:) is set by command line (79ms)

    ✓ Read-only registers cannot be written to (111ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (79ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward (41ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line

      ✓ move one sentence backward - multiline - previous line - period

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar' (40ms)

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1283 passing (3m)

  4 pending

  53 failing

  1) Mode Normal
       can ctrl-a on an octal :

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +31
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)


  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Content does not match; Expected=test aaa test aaa test aaa test . Actual=.
      + expected - actual

      +test aaa test aaa test aaa test 
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  9) Mode Visual
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)

  16) Mode Visual Block
       Can handle c forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)

  17) Mode Visual Block
       Can handle c backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)

  18) Mode Visual Block
       Can handle C:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)

  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)

  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Actual and expected number of cursors do not match
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -2
      +0
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +8
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)


  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)


  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)


  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  47) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three  five. Actual=one  three | five.
      + expected - actual

      -one  three | five
      +one  three  five
      
      at Suite.<anonymous> (test/multicursor.test.ts:59:3)


  48) Multicursor
       <count>f<char> works with multi-cursor:

      Content does not match; Expected=date! eggplant! fig.. Actual=|date! eggplant! fig..
      + expected - actual

      -|date! eggplant! fig.
      +date! eggplant! fig.
      
      at Suite.<anonymous> (test/multicursor.test.ts:67:3)


  49) Multicursor
       o works with multi-cursor:

      Content does not match; Expected=line2. Actual=l|ine2.
      + expected - actual

      -l|ine2
      +line2
      
      at Suite.<anonymous> (test/multicursor.test.ts:75:3)


  50) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  51) rot13 operator
       g? in visual block mode works:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  52) easymotion plugin
       Can handle linebackward move (1):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -6
      +3
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  53) easymotion plugin
       Can handle linebackward move (2):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -8
      +6
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-8.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-25T05:38:34.856Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative

    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (39ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (38ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (50ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (79ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (86ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (45ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command (40ms)

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (47ms)

  command-line lexer
    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot
    ✓ can lex one number
    ✓ can lex longer number
    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search
    ✓ can lex forward search escaping
    ✓ can lex reverse search
    ✓ can lex reverse search escaping
    ✓ can lex command name
    ✓ can lex command args
    ✓ can lex command args with leading whitespace
    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1163ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma
    ✓ can parse right - dollar
  command line scanner
    ✓ ctor
    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan
    ✓ can emit
    ✓ can ignore
    ✓ can skip whitespace
    ✓ can skip whitespace with one char before EOF
    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 
    ✓ nextWord() return word before EOF
    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (531ms)

    ✓ :smile editor contains smile text (543ms)

  Basic sort

    ✓ Sort whole file, asc (85ms)

    ✓ Sort whole file, asc, ignoreCase (66ms)

    ✓ Sort whole file, dsc (86ms)

    ✓ Sort whole file, dsc, ignoreCase (71ms)

    ✓ Sort range, asc (100ms)

    ✓ Sort range, asc, ignoreCase (87ms)

    ✓ Sort range, dsc (105ms)

    ✓ Sort range, dsc, ignoreCase (83ms)

    ✓ Sort whole file, asc, unique (88ms)

  Horizontal split

    ✓ :sp creates a second split (68ms)

    ✓ :split creates a second split (63ms)

    ✓ :new creates a second split (249ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag

    ✓ Replace with flags AND count (88ms)

    ✓ Replace with `c` flag (46ms)

    ✓ Replace with `gc` flag (54ms)

    ✓ Replace across all lines (53ms)

    ✓ Replace on specific single line (80ms)

    ✓ Replace on current line using dot (80ms)

    ✓ Replace single relative line using dot and plus (68ms)

    ✓ Replace across specific line range (47ms)

    ✓ Replace across relative line range using dot, plus, and minus (128ms)

    ✓ Replace across relative line range using numLines+colon shorthand (147ms)

    ✓ Repeat replacement across relative line range (66ms)

    ✓ Replace with range AND count but no flags (57ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (70ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (73ms)

    ✓ Undocumented: trailing operators use 1 as RHS (55ms)

    ✓ Replace specific single equal lines (68ms)

    ✓ Replace current line with no active selection (53ms)

    ✓ Replace text in selection (75ms)

    ✓ Substitute support marks (89ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (38ms)

      ✓ Replace with `g` flag inverts global flag

      ✓ Replace with `c` flag inverts global flag (55ms)

      ✓ Replace multiple lines (51ms)

      ✓ Replace across specific lines (158ms)

      ✓ Replace current line with no active selection (60ms)

      ✓ Replace text in selection (64ms)

      ✓ Substitute support marks (114ms)

      ✓ Substitute with escaped delimiter
    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (154ms)

      ✓ Substitute with previous search using # (123ms)

      ✓ Substitute with previous search using / (152ms)

      ✓ Substitute with parameters should update search state (96ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (264ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (214ms)

      ✓ Substitute repeat previous should accept flags (47ms)

      ✓ Substitute with empty search string should use last searched pattern (175ms)

      ✓ Ampersand (&) should repeat the last substitution (39ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (58ms)

    ✓ tabe with current file path does nothing (45ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (50ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (147ms)

    ✓ command line file tab completion with space in file path (110ms)

  Vertical split

    ✓ :vs creates a second split (62ms)

    ✓ :vsp creates a second split (58ms)

    ✓ :vsplit creates a second split (56ms)

    ✓ :vnew creates a second split (208ms)

    ✓ :vne creates a second split (225ms)

  Basic write-quit

    ✓ Run write and quit (54ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (40ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (60ms)

    ✓ getMatchingRemap (52ms)

    ✓ jj -> <Esc> through modehandler (92ms)

    ✓ 0 -> :wq through modehandler (63ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (85ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (57ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (92ms)

    ✓ d -> black hole register delete in normal mode through modehandler (109ms)

    ✓ d -> black hole register delete in normal mode through modehandler (87ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (119ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers
    ✓ all defined configurations in package.json have handlers
  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg (43ms)

        ✓ Can track jumps for keys: GggG

        ✓ Can track jumps for keys: GggGgg (50ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: /b<CR>n (110ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (54ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i> (41ms)

        ✓ Can track jumps for keys: j%%<C-o>%

        ✓ Can track jumps for keys: j%%<C-o>gg (39ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (38ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (53ms)

        ✓ Can enter number to jump back multiple times (39ms)

        ✓ Can track one-line `` jumps (46ms)

        ✓ Can track one-line double `` jumps (47ms)

        ✓ Can track one-line '' jumps (61ms)

        ✓ Can track one-line double '' jumps (60ms)

        ✓ Can handle '' jumps with no previous jump (79ms)

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (54ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (44ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (60ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (52ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (72ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (101ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (84ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (116ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (118ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (48ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (86ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (130ms)

    ✓ Can repeat last invoked macro (175ms)

    ✓ Can play back with count (335ms)

    ✓ Can play back with count, abort when a motion fails (241ms)

    ✓ Repeat change on contiguous lines (122ms)

    ✓ Append command to a macro (125ms)

    ✓ Can record Ctrl Keys and repeat (98ms)

[main 2020-02-25T05:39:04.858Z] update#setState checking for updates

[main 2020-02-25T05:39:04.942Z] update#setState idle

    ✓ Can execute macros with dot commands properly (78ms)

    ✓ : (command) register can be used as a macro (116ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (49ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (42ms)

    ✓ <C-c> can exit insert (45ms)

    ✓ <Esc> can exit insert

    ✓ Stay in insert when entering characters (62ms)

    ✓ Can handle 'O' (80ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (70ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines (137ms)

    ✓ Backspace works at beginning of file (66ms)

    ✓ Delete works in insert mode

    ✓ Delete works at line end

    ✓ Delete works at end of file (39ms)

    ✓ Delete works with repeat (237ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (68ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (47ms)

    ✓ Can perform insert command prefixed with count

    ✓ Can perform append command prefixed with count

    ✓ Can perform insert at start of line command prefixed with count

    ✓ Can perform append to end of line command prefixed with count (43ms)

    ✓ Can perform change char (s) command prefixed with count (69ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (76ms)

    ✓ Can handle 'O' with count (61ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (48ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line (43ms)

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (115ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (48ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again

    ✓ Can handle 'dl' at end of line (57ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT' (43ms)

    ✓ Can handle 'd3' then <enter> (42ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis (42ms)

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'cw' (44ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (50ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (43ms)

    ✓ Can handle 'c]}' without deleting closing bracket

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position (56ms)

    ✓ Can handle 'ciw' (67ms)

    ✓ Can handle 'ciw' on blanks (46ms)

    ✓ Can handle 'caw' (45ms)

    ✓ Can handle 'caw' on first letter (40ms)

    ✓ Can handle 'caw' on blanks (49ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens (52ms)

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)'

    ✓ Can handle count prefixed 'ca)' (44ms)

    ✓ Can handle 'ca(' spanning multiple lines (56ms)

    ✓ Can handle 'cab' spanning multiple lines (44ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead (41ms)

    ✓ Can handle 'ci"' on opening quote (65ms)

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (38ms)

    ✓ Can handle 'ci"' with a single escaped quote (40ms)

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (56ms)

    ✓ Can handle 'ca"' starting on the closing quote (40ms)

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (39ms)

    ✓ can handle cj (44ms)

    ✓ can handle ck (47ms)

    ✓ can handle c2j (121ms)

    ✓ can handle c2k (51ms)

    ✓ can handle cj on last line (82ms)

    ✓ can handle ck on first line (57ms)

    ✓ can handle c2j on last line (58ms)

    ✓ can handle c2k on first line (50ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces (42ms)

    ✓ Can handle 'daw' on word with leading spaces (40ms)

    ✓ Can handle 'daw' on word with numeric prefix (49ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (43ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word (43ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace

    ✓ Can handle 'daw' around word at end of line (39ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (88ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (81ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines

    ✓ Can handle 'daW' on beginning of word (39ms)

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces (39ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (42ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces (40ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces (134ms)

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle d} at beginning of line (55ms)

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (65ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (99ms)

    ✓ A should update desiredColumn

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (70ms)

    ✓ leaving insert mode should update desired column when entered with i (53ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position (56ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (52ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (46ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (43ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (47ms)

    ✓ Can handle ']p' after yy (52ms)

    ✓ Can handle ']p' after 'Nyy'

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible

    ✓ Can handle '[p' after yy

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible

    ✓ Can handle 'p' after y'a (73ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket (38ms)

    ✓ Can handle pasting in visual mode over selection (92ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (52ms)

    ✓ gI works correctly (44ms)

    ✓ gi works correctly (75ms)

    ✓ `. works correctly (50ms)

    ✓ '. works correctly (50ms)

    ✓ g; works correctly (122ms)

    ✓ g, works correctly (80ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly

    ✓ gq handles spaces before single line comments correctly

    ✓ gq handles tabs before single line comments correctly

    ✓ Can handle space

    ✓ Can handle space

    ✓ Undo 1 (52ms)

    ✓ Undo 2 (62ms)

    ✓ Undo cursor (106ms)

    ✓ Undo cursor 2 (79ms)

    ✓ Undo cursor 3 (95ms)

    ✓ Undo with movement first (260ms)

    ✓ Can handle 'U'

    ✓ Can handle 'U' for multiple changes (67ms)

    ✓ Can handle 'U' for new line below (64ms)

    ✓ Can handle 'U' for new line above (92ms)

    ✓ Can handle 'U' for consecutive changes only (98ms)

    ✓ Can handle 'u' to undo 'U'

    ✓ Can handle 'U' to undo 'U' (38ms)

    ✓ Can handle 'u' after :s/abc/def (66ms)

    ✓ Redo (80ms)

    ✓ Redo (74ms)

    ✓ Redo (74ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (39ms)

    ✓ can handle s in visual mode (43ms)

    ✓ can handle p with selection (51ms)

    ✓ can handle P with selection (61ms)

    ✓ can handle p in visual to end of line (94ms)

    ✓ can repeat backspace twice (152ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count (39ms)

    ✓ can delete with - motion and count (38ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor) (40ms)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal 

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after  (46ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number) (39ms)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y (39ms)

    ✓ Can do S

    ✓ / does not affect mark (54ms)

    ✓ / can search with regex

    ✓ / can search with newline (43ms)

    ✓ / can search through multiple newlines (107ms)

    ✓ / matches ^ per line (61ms)

    ✓ / matches $ per line (54ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (48ms)

    ✓ /\C forces case sensitive search (43ms)

    ✓ <BS> deletes the last character in search in progress mode

    ✓ <S-BS> deletes the last character in search in progress mode (61ms)

    ✓ <C-h> deletes the last character in search in progress mode

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc (43ms)

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (72ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (54ms)

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (64ms)

    ✓ '] go to the end of the previously operated or put text (216ms)

    ✓ `[ go to the start of the previously operated or put text (89ms)

    ✓ '[ go to the start of the previously operated or put text (90ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end (41ms)

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (175ms)

      ✓ gn selects the current word at |hello (163ms)

      ✓ gn selects the current word at h|ello (195ms)

      ✓ gn selects the current word at hel|lo (160ms)

      ✓ gn selects the current word at hell|o (164ms)

      ✓ gn selects the next word at hello| (237ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (79ms)

      ✓ dgn deletes the current word when cursor is at |hello (271ms)

      ✓ dgn deletes the current word when cursor is at h|ello (47ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (50ms)

      ✓ dgn deletes the current word when cursor is at hell|o (48ms)

      ✓ dgn deletes the next word when cursor is at hello| (70ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (73ms)

      ✓ cgn deletes the current word when cursor is at |hello (49ms)

      ✓ cgn deletes the current word when cursor is at h|ello (53ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (38ms)

      ✓ cgn deletes the current word when cursor is at hell|o (59ms)

      ✓ cgn deletes the next word when cursor is at hello| (56ms)

    can handle gN

      ✓ gN selects the previous match text (191ms)

      ✓ gN selects the current word at hell|o (173ms)

      ✓ gN selects the current word at hel|lo (188ms)

      ✓ gN selects the current word at h|ello (161ms)

      ✓ gN selects the current word at |hello (172ms)

      ✓ gN selects the previous word at | hello (180ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (45ms)

      ✓ dgN deletes the current word when cursor is at hell|o (57ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (66ms)

      ✓ dgN deletes the current word when cursor is at h|ello (52ms)

      ✓ dgN deletes the current word when cursor is at |hello (43ms)

      ✓ dgN deletes the previous word when cursor is at | hello (49ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (55ms)

      ✓ cgN deletes the current word when cursor is at hell|o (64ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (53ms)

      ✓ cgN deletes the current word when cursor is at h|ello (107ms)

      ✓ cgN deletes the current word when cursor is at |hello (61ms)

      ✓ cgN deletes the previous word when cursor is at | hello (65ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (40ms)

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (76ms)

    ✓ Can handle R across lines and exit Replace Mode (50ms)

    ✓ Can handle R with {count} (69ms)

    ✓ Can handle backspace (46ms)

    ✓ Can handle backspace (54ms)

    ✓ Can handle backspace across lines (59ms)

    ✓ Can handle arrows (40ms)

    ✓ Can handle . (68ms)

    ✓ Can handle . across lines (144ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (113ms)

    ✓ Can handle wd (85ms)

    ✓ Can handle x (66ms)

    ✓ Can handle x across a selection (66ms)

    ✓ Can do vwd in middle of sentence (114ms)

    ✓ Can do vwd in middle of sentence (76ms)

    ✓ Can do vwd multiple times (145ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (122ms)

    ✓ Can handle H key

    ✓ Can handle backspace key

    ✓ handles case where we delete over a newline (131ms)

    ✓ handles change operator (91ms)

    ✓ Can do vat on multiple matching tags (38ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (45ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags

    ✓ Repeat-prefixed vat does not bleed below (63ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (44ms)

    ✓ Can do vi) on a matching parenthesis

    ✓ Can do vi) on multiple matching parens (38ms)

    ✓ Can do va) on a matching parenthesis

    ✓ Can do va) on multiple matching parens

    ✓ Failed va) does not expand or move selection, remains in visual mode

    ✓ Repeat-prefixed va) does not bleed below

    ✓ Can do va} on a matching bracket as first character (39ms)

    ✓ Can do va} on multiple matching brackets (45ms)

    ✓ Can do vi( on a matching bracket near first character (39ms)

    ✓ Can do vi{ on outer pair of nested braces (43ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (43ms)

    ✓ Can do va] on multiple matching brackets (43ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (40ms)

    ✓ Repeat-prefixed vaf does not bleed below (54ms)

    ✓ vaf only expands to enclosing pairs

    ✓ Can use . to repeat indent in visual (58ms)

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL (46ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (38ms)

    ✓ Can do v$x to delete to last char including EOL (39ms)

    ✓ Can do gv to reselect previous selection (50ms)

    Vim's EOL handling is weird

      ✓ delete through eol (118ms)

      ✓ join 2 lines by deleting through eol (74ms)

      ✓ d$ doesn't delete whole line (65ms)

      ✓ vd$ does delete whole line (60ms)

      ✓ Paste over selection copies the selection (61ms)

      ✓ Paste over selection copies the selection linewise (48ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (49ms)

      ✓ Can handle <down> key (69ms)

      ✓ Can handle <left> key

      ✓ Can handle <right> key

    Screen line motions in Visual Mode

      ✓ Can handle 'gk'

      ✓ Can handle 'gj' (50ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (40ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (54ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (44ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (45ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (38ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (38ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (39ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (39ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (47ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (45ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (41ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (40ms)

      ✓ Can handle 'Y' in visual mode (47ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode

      ✓ Select sentence with leading spaces in visual mode

      ✓ Select multiple sentences in visual mode

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (40ms)

      ✓ Select inner sentence with leading spaces in visual mode

      ✓ Select spaces between sentences in visual mode (39ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets

      ✓ Can do vat on a matching tag (44ms)

    handles replace in visual mode

      ✓ Can do a single line replace (44ms)

      ✓ Can do a multi line replace (45ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines

      ✓ D deletes the current line (41ms)

    handles indent blocks in visual mode

      ✓ Can do vai (66ms)

      ✓ Can do vii

      ✓ Doesn't naively select the next line

      ✓ Searches backwards if cursor line is empty (41ms)

      ✓ Can do vaI

    visualstar

      ✓ Works with * (41ms)

      ✓ Works with #

    search works in visual mode

      ✓ Works with / (43ms)

      ✓ Works with ? (46ms)

      ✓ Selects correct range (106ms)

    X will delete linewise

      ✓ normal selection

      ✓ normal selection (56ms)

    C will delete linewise

      ✓ normal selection (44ms)

      ✓ normal selection

    R will delete linewise

      ✓ normal selection (45ms)

      ✓ normal selection (78ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (67ms)

      ✓ upward selection (92ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (43ms)

      ✓ multiline indent bottom up selection

      ✓ repeat multiline indent top down selection (55ms)

      ✓ repeat multiline indent bottom up selection (44ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection

      ✓ multiline outdent bottom up selection (74ms)

      ✓ repeat multiline outdent top down selection (56ms)

      ✓ repeat multiline outdent bottom up selection (45ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (108ms)

    vi{ will go to end of second to last line

      ✓ select

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (243ms)

      ✓ gv selects the last pasted text (which is longer than original) (294ms)

      ✓ gv selects the last pasted text (multiline) (171ms)

    can handle gn

      ✓ gn selects the next match text (152ms)

      ✓ gn selects the current word at |hello (148ms)

      ✓ gn selects the current word at h|ello (182ms)

      ✓ gn selects the current word at hel|lo (141ms)

      ✓ gn selects the next word at hell|o (155ms)

      ✓ gn selects the next word at hello| (170ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (47ms)

      ✓ U/gU across a selection (59ms)

      ✓ U/gU across a selection (reverse) (51ms)

      ✓ u/gu on single character (51ms)

      ✓ u/gu across a selection (59ms)

      ✓ u/gu across a selection (reverse) (50ms)

  Mode Visual Block

    ✓ can be activated

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D'

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (80ms)

    ✓ o works in visual block mode (46ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (138ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (113ms)

    ✓ Can handle wd (65ms)

    ✓ Can handle x (67ms)

    ✓ Can handle x across a selection (145ms)

    ✓ Can do vwd in middle of sentence (107ms)

    ✓ Can do vwd in middle of sentence (81ms)

    ✓ Can do vwd multiple times (146ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (106ms)

    ✓ handles case where we delete over a newline (103ms)

    ✓ handles change operator (356ms)

    ✓ Vp updates register content (46ms)

    ✓ Vp does not append unnecessary newlines (first line) (85ms)

    ✓ Vp does not append unnecessary newlines (middle line)

    ✓ Vp does not append unnecessary newlines (last line) (45ms)

    ✓ Exiting via <Esc> returns cursor to original column

    Vim's EOL handling is weird

      ✓ delete through eol (56ms)

      ✓ join 2 lines by deleting through eol (61ms)

      ✓ d$ doesn't delete whole line (51ms)

      ✓ vd$ does delete whole line (68ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk'

      ✓ Can handle 'gj'

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key

      ✓ Can handle d key (43ms)

      ✓ Can handle d key (49ms)

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up

    search works in visual line mode

      ✓ Works with / (101ms)

      ✓ Works with ? (63ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (123ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position

      ✓ linewise visual put works also in the end of document

      ✓ gv selects the last pasted text (which is shorter than original) (217ms)

      ✓ gv selects the last pasted text (which is longer than original) (277ms)

      ✓ gv selects the last pasted text (multiline) (143ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly (85ms)

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (45ms)

    ✓ Can handle 'x' at end of line (46ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (51ms)

    ✓ Can handle '<Del>' at end of line (54ms)

    ✓ Can handle 'cc' (43ms)

    ✓ Can handle 'Ncc' (44ms)

    ✓ Can handle 'yy' (45ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC' (104ms)

    ✓ Can handle 'NC' and put (48ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd'

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
'

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (43ms)

    ✓ Can handle 'J' with leading white space on next line (60ms)

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (78ms)

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (46ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (48ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (54ms)

    ✓ Can handle dot with I (112ms)

    ✓ Can repeat actions that require selections (46ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (47ms)

    ✓ Can repeat insert change and '<C-t>' (125ms)

    ✓ Can repeat change by `<C-a>` (62ms)

    ✓ Only one arrow key can be repeated in Insert Mode (45ms)

    ✓ Cached content change will be cleared by arrow keys (205ms)

  Matching Bracket (%)

    ✓ before opening parenthesis (70ms)

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ]) (57ms)

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]} (60ms)

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (40ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    38) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (45ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count (98ms)

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search (38ms)

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (38ms)

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search

    ✓ cancelled search reverts to previous search state (48ms)

    ✓ Backspace on empty search cancels (43ms)

    ✓ Search offsets: b does nothing (40ms)

    ✓ Search offsets: b2 goes 2 to the right (39ms)

    ✓ Search offsets: b+3 goes 3 to the right (47ms)

    ✓ Search offsets: e goes to the end

    ✓ Search offsets: character offset goes across line boundaries (49ms)

    ✓ Search offsets: 2 goes 2 down (44ms)

    ✓ Search offsets: -2 goes 2 up (47ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix (41ms)

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat (102ms)

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g# (40ms)

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word (56ms)

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history (40ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (73ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    39) Can handle g_

    ✓ Can handle g_ with count prefix (74ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key (47ms)

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down
    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end

    ✓ document begin

    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    line up

      ✓ should move cursor one line up
      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)

    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document
    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file

      ✓ search wraps around the start of the file

    wrapscan disabled

      ✓ search stops at the end of the file (83ms)

      ✓ search stops at the start of the file (45ms)

  Multicursor

    ✓ can add multiple cursors below (73ms)

    ✓ can add multiple cursors above (71ms)

    ✓ dd works with multi-cursor

    47) cw works with multi-cursor

    48) <count>f<char> works with multi-cursor

    49) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (188ms)

    ✓ gcj comments in current and next line (67ms)

    ✓ block comment with motion (78ms)

    ✓ block comment in Visual Mode (130ms)

    ✓ comment in visual line mode (181ms)

    ✓ comment in visual block mode (826ms)

  format operator

    ✓ == formats current line (396ms)

    ✓ =$ formats entire line (94ms)

    ✓ =j formats two lines (61ms)

    ✓ 3=k formats three lines (117ms)

    50) =gg formats to top of file

    ✓ =G formats to bottom of file (83ms)

    ✓ =ip formats paragraph (87ms)

    ✓ format in visual mode (200ms)

  put operator

    ✓ basic put test (91ms)

    ✓ test yy end of line (58ms)

    ✓ test yy first line (56ms)

    ✓ test yy middle line (58ms)

    ✓ test yy with correct positon movement (64ms)

    ✓ test visual block single line yank p (65ms)

    ✓ test visual block single line yank P (97ms)

    ✓ test visual block single line delete p (41ms)

    ✓ test visual block single line delete P (49ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works

    ✓ g? in visual line mode works

    51) g? in visual block mode works

  shift operator

    ✓ basic shift left test

    ✓ shift left goto end test (116ms)

    ✓ shift left goto line test (108ms)

    ✓ shift right goto end test

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word (43ms)

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word (44ms)

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (44ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (55ms)

      ✓ delete from start of underscore_word (84ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (41ms)

      ✓ delete from start of underscore_word (154ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word (47ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (65ms)

    ✓ Can handle 2s move (43ms)

    ✓ Can handle f move (38ms)

    ✓ Can handle 2f move (48ms)

    ✓ Can handle F move

    ✓ Can handle 2F move (102ms)

    ✓ Can handle t move (78ms)

    ✓ Can handle bd-t move (50ms)

    ✓ Can handle 2t move (45ms)

    ✓ Can handle bd-t2 move (44ms)

    ✓ Can handle T move (74ms)

    ✓ Can handle 2T move (83ms)

    ✓ Can handle w move

    ✓ Can handle bd-w move (112ms)

    ✓ Can handle b move

    ✓ Can handle e move (81ms)

    ✓ Can handle bd-e move

    ✓ Can handle ge move (49ms)

    ✓ Can handle n-char move (56ms)

    ✓ Can handle j move (245ms)

    ✓ Can handle k move (50ms)

    ✓ Can handle bd-jk move (1) (50ms)

    ✓ Can handle bd-jk move (2) (57ms)

    ✓ Can handle lineforward move (1) (43ms)

    ✓ Can handle lineforward move (2) (74ms)

    52) Can handle linebackward move (1)

    53) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (47ms)

    ✓ Replaces within inner Word (47ms)

    ✓ Replaces within '' (66ms)

    ✓ Replaces within '' including spaces (50ms)

    ✓ Replaces within () (148ms)

    ✓ Replaces within () including spaces (52ms)

    ✓ Replaces within a paragraph (64ms)

    ✓ Replaces using a specified register (65ms)

    ✓ Replaces within {} over multiple lines (47ms)

    ✓ Replaces a multiline register within {} over multiple lines (49ms)

    ✓ Replaces a multiline register within {} over multiple lines (42ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (55ms)

    ✓ grr replaces the entire line with the register (42ms)

    ✓ grr can replace multiple lines (39ms)

    ✓ Replaces in visual mode (42ms)

    ✓ Replaces in visual mode using a specified register (122ms)

    ✓ Replaces in visual line mode (58ms)

    ✓ grj is linewise (51ms)

  sneak plugin

    ✓ Can handle s motion (58ms)

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion

    ✓ Can handle s; motion

    ✓ Can handle s, motion (92ms)

    ✓ Can handle S; motion (39ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (78ms)

    ✓ Can handle single letter <operator>Z motion (54ms)

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion (404ms)

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion (64ms)

    ✓ Can handle multiline single char <number>s motion (39ms)

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (78ms)

    ✓ 'ysiw(' surrounds word with space (57ms)

    ✓ 'ysw)' surrounds word without space (131ms)

    ✓ 'ysw(' surrounds word with space (46ms)

    ✓ 'ysaw)' surrounds word without space (68ms)

    ✓ 'ysaw(' surrounds word with space (88ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (52ms)

    ✓ 'ysiw<' surrounds word with tags (66ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (59ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (51ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (106ms)

    ✓ change surround (47ms)

    ✓ change surround with two pairs of quotes (41ms)

    ✓ change surround with two pairs of parens (62ms)

    ✓ change surround with alias (84ms)

    ✓ change surround to tags (143ms)

    ✓ delete surround

    ✓ delete surround with quotes (48ms)

    ✓ delete surround with nested of quotes (50ms)

    ✓ delete surround with inconsistent quotes (50ms)

    ✓ delete surround with mixed quotes (164ms)

    ✓ delete surround with empty quotes cursor at start (45ms)

    ✓ delete surround with empty quotes cursor at end (43ms)

    ✓ don't delete surround if cursor is after closing match (53ms)

    ✓ delete surround if cursor is before opening match (52ms)

    ✓ delete surround with two pairs of parens (50ms)

    ✓ delete surround with alias (48ms)

    ✓ delete surround with tags (61ms)

    ✓ change surround brackets at end of line (54ms)

    ✓ changing brackets with surround works again (46ms)

    ✓ change surround with tags that contain an attribute and preserve them (64ms)

    ✓ change surround with tags that contain an attribute and remove them (57ms)

  register

    ✓ Can copy to a register (47ms)

    ✓ Can use two registers together (66ms)

    ✓ Can use black hole register (79ms)

    ✓ System clipboard works with chinese characters (40ms)

    ✓ Yank stores text in Register '0' (238ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (116ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (139ms)

    ✓ Register '1'-'9' stores delete content (165ms)

    ✓ "A appends linewise text to "a (492ms)

    ✓ "A appends character wise text to "a (133ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (104ms)

    ✓ Small deletion using Del is stored in small delete register (150ms)

    ✓ Small deletion using X is stored in small delete register (121ms)

    ✓ Search register (/) is set by forward search (214ms)

    ✓ Search register (/) is set by backward search (195ms)

    ✓ Search register (/) is set by star search (231ms)

    ✓ Command register (:) is set by command line (79ms)

    ✓ Read-only registers cannot be written to (111ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (79ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward (41ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line

      ✓ move one sentence backward - multiline - previous line - period

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar' (40ms)

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1283 passing (3m)

  4 pending

  53 failing

  1) Mode Normal
       can ctrl-a on an octal :

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +31
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)


  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Content does not match; Expected=test aaa test aaa test aaa test . Actual=.
      + expected - actual

      +test aaa test aaa test aaa test 
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  9) Mode Visual
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)

  16) Mode Visual Block
       Can handle c forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)

  17) Mode Visual Block
       Can handle c backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)

  18) Mode Visual Block
       Can handle C:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)

  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)

  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Actual and expected number of cursors do not match
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -2
      +0
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +8
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)


  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)


  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)


  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  47) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three  five. Actual=one  three | five.
      + expected - actual

      -one  three | five
      +one  three  five
      
      at Suite.<anonymous> (test/multicursor.test.ts:59:3)


  48) Multicursor
       <count>f<char> works with multi-cursor:

      Content does not match; Expected=date! eggplant! fig.. Actual=|date! eggplant! fig..
      + expected - actual

      -|date! eggplant! fig.
      +date! eggplant! fig.
      
      at Suite.<anonymous> (test/multicursor.test.ts:67:3)


  49) Multicursor
       o works with multi-cursor:

      Content does not match; Expected=line2. Actual=l|ine2.
      + expected - actual

      -l|ine2
      +line2
      
      at Suite.<anonymous> (test/multicursor.test.ts:75:3)


  50) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  51) rot13 operator
       g? in visual block mode works:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  52) easymotion plugin
       Can handle linebackward move (1):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -6
      +3
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  53) easymotion plugin
       Can handle linebackward move (2):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -8
      +6
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: 8316ded0-5791-11ea-b14f-b186f6b55800

@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.12.4 build /home/travis/build/VSCodeVim/Vim
> gulp build

[07:37:15] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[07:37:15] Starting 'build'...
[07:37:15] Starting 'prettier'...
[07:37:15] Finished 'prettier' after 602 ms
[07:37:15] Starting 'tsc'...
[07:37:15] Starting 'tslint'...
[07:37:23] Finished 'tslint' after 7.54 s
[07:37:31] Finished 'tsc' after 16 s
[07:37:32] Starting 'commit-hash'...
[07:37:32] Finished 'commit-hash' after 28 ms
[07:37:32] Finished 'build' after 17 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-25T07:37:36.228Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (57ms)

    ✓ command <C-w> can remove word in search mode (58ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (50ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor (49ms)

    ✓ <C-u> deletes from cursor to first character (83ms)

    ✓ <C-b> puts cursor at start of command line (41ms)

    ✓ <Home> puts cursor at start of command line (62ms)

    ✓ <C-e> puts cursor at end of command line (41ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (83ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (85ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (128ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (110ms)

  cursor location

    ✓ cursor location in command line (42ms)

    ✓ cursor location in search (52ms)

  HistoryFile

    ✓ add command (41ms)

    ✓ add empty command (46ms)

    ✓ add command over configuration.history (43ms)

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (75ms)

  command-line lexer

    ✓ can lex empty string
    ✓ can lex comma
    ✓ can lex percent
    ✓ can lex dollar
    ✓ can lex dot
    ✓ can lex one number
    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1490ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit
    ✓ can ignore
    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF
    ✓ can skip whitespace at EOF
    ✓ nextWord() return EOF at EOF
    ✓ nextWord() return word before trailing spaces
    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (543ms)

    ✓ :smile editor contains smile text (550ms)

  Basic sort

    ✓ Sort whole file, asc (138ms)

    ✓ Sort whole file, asc, ignoreCase (87ms)

    ✓ Sort whole file, dsc (91ms)

    ✓ Sort whole file, dsc, ignoreCase (98ms)

    ✓ Sort range, asc (148ms)

    ✓ Sort range, asc, ignoreCase (150ms)

    ✓ Sort range, dsc (116ms)

    ✓ Sort range, dsc, ignoreCase (121ms)

    ✓ Sort whole file, asc, unique (114ms)

  Horizontal split

    ✓ :sp creates a second split (77ms)

    ✓ :split creates a second split (70ms)

    ✓ :new creates a second split (294ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !
    ✓ throws if bad input
  :quit args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !

    ✓ throws if space before !
    ✓ ignores space after !
    ✓ throws if bad input
  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count
    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args
    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs
  getParser

    ✓ empty

    ✓ :marks
    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall
    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name
      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty
  Basic substitute

    ✓ Replace single word once (68ms)

    ✓ Replace with `g` flag (53ms)

    ✓ Replace with flags AND count (117ms)

    ✓ Replace with `c` flag (47ms)

    ✓ Replace with `gc` flag (101ms)

    ✓ Replace across all lines (93ms)

    ✓ Replace on specific single line (101ms)

    ✓ Replace on current line using dot (78ms)

    ✓ Replace single relative line using dot and plus (81ms)

    ✓ Replace across specific line range (101ms)

    ✓ Replace across relative line range using dot, plus, and minus (112ms)

    ✓ Replace across relative line range using numLines+colon shorthand (161ms)

    ✓ Repeat replacement across relative line range (115ms)

    ✓ Replace with range AND count but no flags (63ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (104ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (98ms)

    ✓ Undocumented: trailing operators use 1 as RHS (79ms)

    ✓ Replace specific single equal lines (89ms)

    ✓ Replace current line with no active selection (94ms)

    ✓ Replace text in selection (108ms)

    ✓ Substitute support marks (118ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (61ms)

      ✓ Replace with `g` flag inverts global flag (58ms)

      ✓ Replace with `c` flag inverts global flag (91ms)

      ✓ Replace multiple lines (103ms)

      ✓ Replace across specific lines (181ms)

      ✓ Replace current line with no active selection (103ms)

      ✓ Replace text in selection (134ms)

      ✓ Substitute support marks (115ms)

      ✓ Substitute with escaped delimiter (49ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (226ms)

      ✓ Substitute with previous search using # (284ms)

      ✓ Substitute with previous search using / (234ms)

      ✓ Substitute with parameters should update search state (127ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (281ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (165ms)

      ✓ Substitute repeat previous should accept flags (71ms)

      ✓ Substitute with empty search string should use last searched pattern (294ms)

      ✓ Ampersand (&) should repeat the last substitution (66ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file (64ms)

    ✓ tabe with absolute path when not in workspace opens file (107ms)

    ✓ tabe with current file path does nothing (53ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path (39ms)

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (47ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (88ms)

    ✓ command line file tab completion with space in file path (133ms)

  Vertical split

    ✓ :vs creates a second split (68ms)

    ✓ :vsp creates a second split (69ms)

    ✓ :vsplit creates a second split (69ms)

    ✓ :vnew creates a second split (257ms)

    ✓ :vne creates a second split (222ms)

  Basic write-quit

    ✓ Run write and quit (78ms)
  Provide line completions
    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (84ms)

      ✓ Can complete lines in file with different indentation (61ms)

      ✓ Returns no completions for unmatched line (46ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords (42ms)

  Notation
    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (70ms)

    ✓ getMatchingRemap (63ms)

    ✓ jj -> <Esc> through modehandler (114ms)

    ✓ 0 -> :wq through modehandler (83ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (95ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (84ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (96ms)

    ✓ d -> black hole register delete in normal mode through modehandler (146ms)

    ✓ d -> black hole register delete in normal mode through modehandler (137ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (150ms)

  Neovim Validator

    ✓ neovim enabled without path
    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc
    ✓ remapping missing after and command

    ✓ remappings are de-duped
  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory
  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg (47ms)

        ✓ Can track jumps for keys: GggG (50ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (47ms)

        ✓ Can track jumps for keys: /b<CR>n (55ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (64ms)

        ✓ Can track jumps for keys: j%% (38ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (65ms)

[main 2020-02-25T07:38:06.231Z] update#setState checking for updates

[main 2020-02-25T07:38:06.311Z] update#setState idle

        ✓ Can track jumps for keys: j%%<C-o><C-i> (53ms)

        ✓ Can track jumps for keys: j%%<C-o>% (43ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (57ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (52ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (80ms)

        ✓ Can enter number to jump back multiple times (56ms)

        ✓ Can track one-line `` jumps (59ms)

        ✓ Can track one-line double `` jumps (74ms)

        ✓ Can track one-line '' jumps (77ms)

        ✓ Can track one-line double '' jumps (93ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (211ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (102ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (149ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (109ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (118ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (154ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (148ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (209ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (176ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (49ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (117ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (63ms)

  Record and execute a macro

    ✓ Can record and execute (164ms)

    ✓ Can repeat last invoked macro (202ms)

    ✓ Can play back with count (458ms)

    ✓ Can play back with count, abort when a motion fails (491ms)

    ✓ Repeat change on contiguous lines (152ms)

    ✓ Append command to a macro (168ms)

    ✓ Can record Ctrl Keys and repeat (161ms)

    ✓ Can execute macros with dot commands properly (116ms)

    ✓ : (command) register can be used as a macro (87ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (120ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (74ms)

    ✓ <C-c> can exit insert (78ms)

    ✓ <Esc> can exit insert (45ms)

    ✓ Stay in insert when entering characters (132ms)

    ✓ Can handle 'O' (171ms)

    ✓ 'i' puts you in insert mode before the cursor (43ms)

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word (53ms)

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (50ms)

    ✓ <C-u> deletes to start of line (48ms)

    ✓ Can handle <C-u> on leading characters (38ms)

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (85ms)

    ✓ will not remove leading spaces input by user (63ms)

    ✓ will remove closing bracket (49ms)

    ✓ Backspace works on whitespace only lines (71ms)

    ✓ Backspace works on end of whitespace only lines (68ms)

    ✓ Backspace works at beginning of file (47ms)

    ✓ Delete works in insert mode (44ms)

    ✓ Delete works at line end (46ms)

    ✓ Delete works at end of file (43ms)

    ✓ Delete works with repeat (185ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (70ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (53ms)

    ✓ Can perform insert command prefixed with count (47ms)

    ✓ Can perform append command prefixed with count (51ms)

    ✓ Can perform insert at start of line command prefixed with count (61ms)

    ✓ Can perform append to end of line command prefixed with count (50ms)

    ✓ Can perform change char (s) command prefixed with count (77ms)

    ✓ Can perform command prefixed with count with <C-[> (41ms)

    ✓ Can handle 'o' with count (123ms)

    ✓ Can handle 'O' with count (84ms)

    ✓ Can handle backspace at beginning of line with all spaces (58ms)

    ✓ Can handle digraph insert (267ms)

    ✓ Can handle custom digraph insert (40ms)

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw (48ms)

    ✓ Can handle dw across lines (1) (47ms)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd (44ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document (38ms)

    ✓ Can handle d2d (58ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (43ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (60ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (56ms)

    ✓ Can handle 'dl' at end of line (99ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter> (65ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (145ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (46ms)

    ✓ Can handle 'd]}' without deleting closing bracket (44ms)

    ✓ Can handle 'cw' (71ms)

    ✓ Can handle 'cw' without deleting following white spaces (41ms)

    ✓ Can handle 'c2w' (40ms)

    ✓ Can handle 'cw' without removing EOL (52ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (57ms)

    ✓ Can handle 'c]}' without deleting closing bracket (45ms)

    ✓ Can handle 's' (46ms)

    ✓ Can handle 'yiw' with correct cursor ending position (47ms)

    ✓ Can handle 'ciw' (108ms)

    ✓ Can handle 'ciw' on blanks (52ms)

    ✓ Can handle 'caw' (62ms)

    ✓ Can handle 'caw' on first letter (58ms)

    ✓ Can handle 'caw' on blanks (71ms)

    ✓ Can handle 'caw' on blanks (43ms)

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses (48ms)

    ✓ Can handle 'ci(' backwards through nested parens (50ms)

    ✓ Can handle 'cib' on first parentheses (83ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (41ms)

    ✓ Can handle count prefixed 'ci)' (48ms)

    ✓ Can handle count prefixed 'ca)' (41ms)

    ✓ Can handle 'ca(' spanning multiple lines (46ms)

    ✓ Can handle 'cab' spanning multiple lines (62ms)

    ✓ Can handle 'ci{' spanning multiple lines (38ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (79ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (39ms)

    ✓ Can handle 'ci(' on the closing bracket (49ms)

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no () (70ms)

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {} (45ms)

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (49ms)

    ✓ Can handle 'ca]' on first bracket (40ms)

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (47ms)

    ✓ Can handle 'ci'' on closing quote (47ms)

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote (41ms)

    ✓ Can handle 'ci"' starting behind the quoted word (180ms)

    ✓ Can handle 'ca"' starting behind the quoted word (63ms)

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (63ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind (49ms)

    ✓ Can handle 'ci"' with an escaped backslash (53ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (49ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"' (49ms)

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (79ms)

    ✓ can handle cj (69ms)

    ✓ can handle ck (58ms)

    ✓ can handle c2j (86ms)

    ✓ can handle c2k (96ms)

    ✓ can handle cj on last line (89ms)

    ✓ can handle ck on first line (80ms)

    ✓ can handle c2j on last line (92ms)

    ✓ can handle c2k on first line (89ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (40ms)

    ✓ Can handle 'daw' on word with trailing spaces (44ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (41ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (74ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (55ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (48ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (54ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (56ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line (42ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (73ms)

    ✓ Can handle 'daw' around word at end of line (48ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces (38ms)

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines (88ms)

    ✓ Can handle 'daW' on beginning of word (45ms)

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (89ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (40ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (66ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (50ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (91ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces (44ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (54ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines (51ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (58ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces (56ms)

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (51ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines (46ms)

    ✓ Can handle 'diW' on beginning of word (47ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (38ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line (53ms)

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces (41ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (53ms)

    ✓ Can handle 'df' (46ms)

    ✓ Can handle 'dt' (38ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (57ms)

    ✓ I should updated desiredColumn (48ms)

    ✓ leaving insert mode should update desired column when entered with a (88ms)

    ✓ leaving insert mode should update desired column when entered with i (114ms)

    ✓ Can handle 'yy' without changing cursor position (58ms)

    ✓ Can handle 'P' after 'yy' (46ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy' (49ms)

    ✓ Can handle 'p' after 'Nyy' (60ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (47ms)

    ✓ Can handle 'gp' after 'yy' (51ms)

    ✓ Can handle 'gp' after 'Nyy' (71ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (56ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (51ms)

    ✓ Can handle 'gP' after 'yy' (44ms)

    ✓ Can handle 'gP' after 'Nyy' (64ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (52ms)

    ✓ Can handle ']p' after yy (234ms)

    ✓ Can handle ']p' after 'Nyy' (53ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (71ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (43ms)

    ✓ Can handle '[p' after yy (50ms)

    ✓ Can handle '[p' after 'Nyy' (54ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (60ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (67ms)

    ✓ Can handle 'p' after y'a (49ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (79ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (57ms)

    ✓ Can handle pasting in visual mode over selection (121ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (129ms)

    ✓ gI works correctly (72ms)

    ✓ gi works correctly (99ms)

    ✓ `. works correctly (79ms)

    ✓ '. works correctly (63ms)

    ✓ g; works correctly (129ms)

    ✓ g, works correctly (110ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly (53ms)

    ✓ gq handles spaces after single line comments correctly (50ms)

    ✓ gq handles spaces before single line comments correctly (49ms)

    ✓ gq handles tabs before single line comments correctly (102ms)

    ✓ Can handle space

    ✓ Can handle space (53ms)

    ✓ Undo 1 (89ms)

    ✓ Undo 2 (76ms)

    ✓ Undo cursor (127ms)

    ✓ Undo cursor 2 (118ms)

    ✓ Undo cursor 3 (135ms)

    ✓ Undo with movement first (106ms)

    ✓ Can handle 'U' (99ms)

    ✓ Can handle 'U' for multiple changes (85ms)

    ✓ Can handle 'U' for new line below (93ms)

    ✓ Can handle 'U' for new line above (84ms)

    ✓ Can handle 'U' for consecutive changes only (156ms)

    ✓ Can handle 'u' to undo 'U' (72ms)

    ✓ Can handle 'U' to undo 'U' (65ms)

    ✓ Can handle 'u' after :s/abc/def (84ms)

    ✓ Redo (123ms)

    ✓ Redo (127ms)

    ✓ Redo (141ms)

    ✓ Can handle u

    ✓ Can handle guw (84ms)

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (43ms)

    ✓ can handle s in visual mode (84ms)

    ✓ can handle p with selection (67ms)

    ✓ can handle P with selection (89ms)

    ✓ can handle p in visual to end of line (119ms)

    ✓ can repeat backspace twice (84ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count (51ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly (133ms)

    ✓ can ctrl-a correctly behind a word (38ms)

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal (48ms)

    1) can ctrl-a on an octal 

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after  (47ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (84ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S (82ms)

    ✓ / does not affect mark (56ms)

    ✓ / can search with regex (39ms)

    ✓ / can search with newline (39ms)

    ✓ / can search through multiple newlines (62ms)

    ✓ / matches ^ per line (67ms)

    ✓ / matches $ per line (50ms)

    ✓ Can search for forward slash (54ms)

    ✓ Can search backward for question mark (50ms)

    ✓ /\c forces case insensitive search (50ms)

    ✓ /\C forces case sensitive search (74ms)

    ✓ <BS> deletes the last character in search in progress mode (38ms)

    ✓ <S-BS> deletes the last character in search in progress mode (42ms)

    ✓ <C-h> deletes the last character in search in progress mode (56ms)

    ✓ Can do C (116ms)

    ✓ Can do cit on a matching tag (43ms)

    ✓ Ignores cit on a non-matching tag (44ms)

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag (45ms)

    ✓ Can do cat on a matching tag (48ms)

    ✓ Can do cit on a multiline tag (46ms)

    ✓ Can do cit on a multiline tag with nested tags (86ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (42ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (52ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags (45ms)

    ✓ Respects indentation with cc (38ms)

    ✓ Resets cursor to indent end with cc (58ms)

    ✓ can handle 'cc' on empty line (42ms)

    ✓ cc copies linewise (52ms)

    ✓ Indent current line with correct Vim Mode (40ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words (51ms)

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (68ms)

    ✓ Can do cii (99ms)

    ✓ Can do caI (39ms)

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI (53ms)

    ✓ `] go to the end of the previously operated or put text (71ms)

    ✓ '] go to the end of the previously operated or put text (166ms)

    ✓ `[ go to the start of the previously operated or put text (85ms)

    ✓ '[ go to the start of the previously operated or put text (80ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (116ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (227ms)

      ✓ gn selects the current word at |hello (370ms)

      ✓ gn selects the current word at h|ello (260ms)

      ✓ gn selects the current word at hel|lo (267ms)

      ✓ gn selects the current word at hell|o (280ms)

      ✓ gn selects the next word at hello| (268ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (71ms)

      ✓ dgn deletes the current word when cursor is at |hello (82ms)

      ✓ dgn deletes the current word when cursor is at h|ello (71ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (69ms)

      ✓ dgn deletes the current word when cursor is at hell|o (77ms)

      ✓ dgn deletes the next word when cursor is at hello| (77ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (120ms)

      ✓ cgn deletes the current word when cursor is at |hello (63ms)

      ✓ cgn deletes the current word when cursor is at h|ello (71ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (75ms)

      ✓ cgn deletes the current word when cursor is at hell|o (64ms)

      ✓ cgn deletes the next word when cursor is at hello| (79ms)

    can handle gN

      ✓ gN selects the previous match text (311ms)

      ✓ gN selects the current word at hell|o (240ms)

      ✓ gN selects the current word at hel|lo (247ms)

      ✓ gN selects the current word at h|ello (496ms)

      ✓ gN selects the current word at |hello (280ms)

      ✓ gN selects the previous word at | hello (267ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (68ms)

      ✓ dgN deletes the current word when cursor is at hell|o (73ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (133ms)

      ✓ dgN deletes the current word when cursor is at h|ello (141ms)

      ✓ dgN deletes the current word when cursor is at |hello (85ms)

      ✓ dgN deletes the previous word when cursor is at | hello (90ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (75ms)

      ✓ cgN deletes the current word when cursor is at hell|o (97ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (112ms)

      ✓ cgN deletes the current word when cursor is at h|ello (83ms)

      ✓ cgN deletes the current word when cursor is at |hello (80ms)

      ✓ cgN deletes the previous word when cursor is at | hello (96ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (47ms)

    ✓ Can handle R past current line (239ms)

    ✓ Can handle R and exit Replace Mode (59ms)

    ✓ Can handle R across lines (102ms)

    ✓ Can handle R across lines and exit Replace Mode (94ms)

    ✓ Can handle R with {count} (86ms)

    ✓ Can handle backspace (65ms)

    ✓ Can handle backspace (104ms)

    ✓ Can handle backspace across lines (109ms)

    ✓ Can handle arrows (65ms)

    ✓ Can handle . (112ms)

    ✓ Can handle . across lines (249ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (156ms)

    ✓ Can handle wd (120ms)

    ✓ Can handle x (116ms)

    ✓ Can handle x across a selection (132ms)

    ✓ Can do vwd in middle of sentence (180ms)

    ✓ Can do vwd in middle of sentence (117ms)

    ✓ Can do vwd multiple times (227ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (144ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (48ms)

    ✓ handles case where we delete over a newline (183ms)

    ✓ handles change operator (146ms)

    ✓ Can do vat on multiple matching tags (90ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (80ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (46ms)

    ✓ Repeat-prefixed vat does not bleed below (68ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (72ms)

    ✓ Can do vi) on a matching parenthesis (48ms)

    ✓ Can do vi) on multiple matching parens (67ms)

    ✓ Can do va) on a matching parenthesis (43ms)

    ✓ Can do va) on multiple matching parens (65ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (65ms)

    ✓ Repeat-prefixed va) does not bleed below (95ms)

    ✓ Can do va} on a matching bracket as first character (44ms)

    ✓ Can do va} on multiple matching brackets (50ms)

    ✓ Can do vi( on a matching bracket near first character (73ms)

    ✓ Can do vi{ on outer pair of nested braces (49ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (58ms)

    ✓ Can do va] on multiple matching brackets (79ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (53ms)

    ✓ Repeat-prefixed vaf does not bleed below (63ms)

    ✓ vaf only expands to enclosing pairs (52ms)

    ✓ Can use . to repeat indent in visual (63ms)

    ✓ Can do v_x to delete to first char (47ms)

    ✓ Can do vg_x to delete to last char with no EOL (50ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (81ms)

    ✓ Can do v$x to delete to last char including EOL (75ms)

    ✓ Can do gv to reselect previous selection (89ms)

    Vim's EOL handling is weird

      ✓ delete through eol (115ms)

      ✓ join 2 lines by deleting through eol (132ms)

      ✓ d$ doesn't delete whole line (103ms)

      ✓ vd$ does delete whole line (102ms)

      ✓ Paste over selection copies the selection (107ms)

      ✓ Paste over selection copies the selection linewise (92ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (52ms)

      ✓ Can handle <down> key (112ms)

      ✓ Can handle <left> key (49ms)

      ✓ Can handle <right> key (44ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (60ms)

      ✓ Can handle 'gj' (95ms)

      - Preserves cursor position when handling 'gk'
      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (49ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces (45ms)

      ✓ Can handle 'vawd' on word with numeric prefix (66ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (61ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (59ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (46ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (55ms)

      ✓ Can handle 'vaWd' on word with leading spaces (43ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (64ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (60ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (46ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (45ms)

      ✓ Can handle 'vaWd' on word with leading spaces (46ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (39ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (44ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (46ms)

      ✓ Can handle 'vawd' on word with trailing spaces (82ms)

      ✓ Can handle 'vawd' on word with leading spaces (45ms)

      ✓ Can handle 'vawd' on word with numeric prefix (61ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (42ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (103ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (48ms)

      ✓ Can handle 'vaWd' on word with leading spaces (61ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (44ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (52ms)

      ✓ Can handle 'Y' in visual mode (49ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (92ms)

      ✓ Select sentence with leading spaces in visual mode (49ms)

      ✓ Select multiple sentences in visual mode (49ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (48ms)

      ✓ Select inner sentence with leading spaces in visual mode (248ms)

      ✓ Select spaces between sentences in visual mode (56ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (61ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (70ms)

      ✓ Can do vat on a matching tag (48ms)

    handles replace in visual mode

      ✓ Can do a single line replace (61ms)

      ✓ Can do a multi line replace (90ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (41ms)

      ✓ D deletes the current line (44ms)

    handles indent blocks in visual mode

      ✓ Can do vai (74ms)

      ✓ Can do vii (45ms)

      ✓ Doesn't naively select the next line (51ms)

      ✓ Searches backwards if cursor line is empty (79ms)

      ✓ Can do vaI (47ms)

    visualstar

      ✓ Works with * (47ms)

      ✓ Works with # (49ms)

    search works in visual mode

      ✓ Works with / (81ms)

      ✓ Works with ? (61ms)

      ✓ Selects correct range (95ms)

    X will delete linewise

      ✓ normal selection (64ms)

      ✓ normal selection (87ms)

    C will delete linewise

      ✓ normal selection (81ms)

      ✓ normal selection (102ms)

    R will delete linewise

      ✓ normal selection (42ms)

      ✓ normal selection (43ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (109ms)

      ✓ upward selection (84ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (49ms)

      ✓ multiline indent bottom up selection (50ms)

      ✓ repeat multiline indent top down selection (142ms)

      ✓ repeat multiline indent bottom up selection (69ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (63ms)

      ✓ multiline outdent bottom up selection (47ms)

      ✓ repeat multiline outdent top down selection (79ms)

      ✓ repeat multiline outdent bottom up selection (95ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (158ms)

    vi{ will go to end of second to last line

      ✓ select (83ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode (42ms)

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (356ms)

      ✓ gv selects the last pasted text (which is longer than original) (496ms)

      ✓ gv selects the last pasted text (multiline) (199ms)

    can handle gn

      ✓ gn selects the next match text (248ms)

      ✓ gn selects the current word at |hello (292ms)

      ✓ gn selects the current word at h|ello (465ms)

      ✓ gn selects the current word at hel|lo (224ms)

      ✓ gn selects the next word at hell|o (250ms)

      ✓ gn selects the next word at hello| (234ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (59ms)

      ✓ U/gU across a selection (103ms)

      ✓ U/gU across a selection (reverse) (124ms)

      ✓ u/gu on single character (74ms)

      ✓ u/gu across a selection (94ms)

      ✓ u/gu across a selection (reverse) (116ms)

  Mode Visual Block

    ✓ can be activated

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D' (55ms)

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (109ms)

    ✓ o works in visual block mode (55ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (228ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (153ms)

    ✓ Can handle wd (137ms)

    ✓ Can handle x (112ms)

    ✓ Can handle x across a selection (197ms)

    ✓ Can do vwd in middle of sentence (256ms)

    ✓ Can do vwd in middle of sentence (118ms)

    ✓ Can do vwd multiple times (183ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (158ms)

    ✓ handles case where we delete over a newline (193ms)

    ✓ handles change operator (98ms)

    ✓ Vp updates register content (53ms)

    ✓ Vp does not append unnecessary newlines (first line) (46ms)

    ✓ Vp does not append unnecessary newlines (middle line) (47ms)

    ✓ Vp does not append unnecessary newlines (last line) (119ms)

    ✓ Exiting via <Esc> returns cursor to original column (39ms)

    Vim's EOL handling is weird

      ✓ delete through eol (94ms)

      ✓ join 2 lines by deleting through eol (83ms)

      ✓ d$ doesn't delete whole line (76ms)

      ✓ vd$ does delete whole line (153ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (45ms)

      ✓ Can handle <down> key (53ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (55ms)

      ✓ Can handle 'gj' (60ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (56ms)

      ✓ Can handle d key (60ms)

      ✓ Can handle d key (188ms)

      ✓ Can handle d key (50ms)

      ✓ can handle 'c' (59ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (52ms)

      ✓ Can do a multi visual line replace (44ms)

      ✓ Can do a multi visual line replace from the bottom up (83ms)

    search works in visual line mode

      ✓ Works with / (63ms)

      ✓ Works with ? (50ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (451ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (44ms)

      ✓ linewise visual put works also in the end of document (96ms)

      ✓ gv selects the last pasted text (which is shorter than original) (341ms)

      ✓ gv selects the last pasted text (which is longer than original) (381ms)

      ✓ gv selects the last pasted text (multiline) (148ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly (91ms)

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (44ms)

    ✓ Can handle 'x' at end of line (69ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (111ms)

    ✓ Can handle 'cc' (48ms)

    ✓ Can handle 'Ncc' (55ms)

    ✓ Can handle 'yy' (62ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines (52ms)

    ✓ Can handle 'DD' (49ms)

    ✓ Can handle 'C' (38ms)

    ✓ Can handle 'NC' (52ms)

    ✓ Can handle 'NC' and put (388ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r' (39ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (47ms)

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
' (53ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (96ms)

    ✓ Can handle 'J' with empty last line (60ms)

    ✓ Can handle 'J's with multiple empty last lines (76ms)

    ✓ Can handle 'J' with leading white space on next line (38ms)

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once (68ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (41ms)

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle '<BS>' in insert mode (136ms)

    ✓ Can handle undo with P (68ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (68ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (74ms)

    ✓ Can handle dot with I (86ms)

    ✓ Can repeat actions that require selections (65ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (72ms)

    ✓ Can repeat insert change and '<C-t>' (89ms)

    ✓ Can repeat change by `<C-a>` (65ms)

    ✓ Only one arrow key can be repeated in Insert Mode (73ms)

    ✓ Cached content change will be cleared by arrow keys (111ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning (39ms)

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end (75ms)

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [( (338ms)

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ]) (69ms)

    ✓ Can handle nested ])

    ✓ Can handle <number>]) (47ms)

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{ (113ms)

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive (78ms)

    ✓ Can handle 'ge' (45ms)

    ✓ Can handle 'gg' (67ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline (73ms)

    38) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (60ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file (86ms)

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count (43ms)

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice (41ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (80ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search (46ms)

    ✓ Can handle 'f' and multiple back searches (50ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search (79ms)

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (152ms)

    ✓ Can run a forward and find next search (44ms)

    ✓ Can run a forward and find previous search from end of word (44ms)

    ✓ Can run a reverse search (61ms)

    ✓ Can run a reverse and find next search (38ms)

    ✓ cancelled search reverts to previous search state (132ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (60ms)

    ✓ Search offsets: b2 goes 2 to the right (76ms)

    ✓ Search offsets: b+3 goes 3 to the right (46ms)

    ✓ Search offsets: e goes to the end (51ms)

    ✓ Search offsets: character offset goes across line boundaries (56ms)

    ✓ Search offsets: 2 goes 2 down (45ms)

    ✓ Search offsets: -2 goes 2 up (68ms)

    ✓ maintains column position correctly (40ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix (73ms)

    ✓ Can handle G with number prefix

    ✓ Can handle gg (39ms)

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle * (67ms)

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g# (247ms)

    ✓ Can handle g#n

    ✓ Can handle # (298ms)

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history (86ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (70ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _ (47ms)

    ✓ Can handle _ with count prefix

    39) Can handle g_

    ✓ Can handle g_ with count prefix (99ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key (40ms)

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right
    ✓ char right
    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line

      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)

    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word

      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left
      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line (50ms)

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (44ms)

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line (39ms)

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (41ms)

    wrapscan enabled

      ✓ search wraps around the end of the file (53ms)

      ✓ search wraps around the start of the file (53ms)

    wrapscan disabled

      ✓ search stops at the end of the file (41ms)

      ✓ search stops at the start of the file (52ms)

  Multicursor

    ✓ can add multiple cursors below (130ms)

    ✓ can add multiple cursors above (174ms)

    ✓ dd works with multi-cursor (48ms)

    47) dab works with multi-cursor

    ✓ Vd works with multi-cursor (45ms)

    48) <C-v>d works with multi-cursor

    49) cw works with multi-cursor

    50) <count>f<char> works with multi-cursor

    51) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (172ms)

    ✓ gcj comments in current and next line (72ms)

    ✓ block comment with motion (133ms)

    ✓ block comment in Visual Mode (446ms)

    ✓ comment in visual line mode (329ms)

    ✓ comment in visual block mode (298ms)

  format operator

    ✓ == formats current line (496ms)

    ✓ =$ formats entire line (420ms)

    ✓ =j formats two lines (193ms)

    ✓ 3=k formats three lines (108ms)

    52) =gg formats to top of file

    ✓ =G formats to bottom of file (168ms)

    ✓ =ip formats paragraph (108ms)

    ✓ format in visual mode (79ms)

  put operator

    ✓ basic put test (46ms)

    ✓ test yy end of line (81ms)

    ✓ test yy first line (55ms)

    ✓ test yy middle line (89ms)

    ✓ test yy with correct positon movement (68ms)

    ✓ test visual block single line yank p (66ms)

    ✓ test visual block single line yank P (74ms)

    ✓ test visual block single line delete p (132ms)

    ✓ test visual block single line delete P (132ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (45ms)

    ✓ g? in visual mode works (45ms)

    ✓ g? in visual line mode works (119ms)

    53) g? in visual block mode works

  shift operator

    ✓ basic shift left test (53ms)

    ✓ shift left goto end test (48ms)

    ✓ shift left goto line test (55ms)

    ✓ shift right goto end test (44ms)

    ✓ shift right goto line test (337ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work (46ms)

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace (72ms)

      ✓ step to Camel word (42ms)

      ✓ step to CAP word (55ms)

      ✓ step after CAP word (81ms)

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over (83ms)

    handles <leader>w for underscore_var

      ✓ step to _word (45ms)

      ✓ step over whitespace to word

      ✓ step from inside word to _word (40ms)

      ✓ step form _word to number (45ms)

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word (95ms)

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (71ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (51ms)

      ✓ delete two words from camelWord (43ms)

      ✓ delete from start of underscore_word (123ms)

      ✓ delete from middle of underscore_word (74ms)

      ✓ delete two words from camel_word (66ms)

    handles di<leader>w

      ✓ delete from start of camelWord (85ms)

      ✓ delete from middle of camelWord (44ms)

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (236ms)

      ✓ delete from start of underscore_word (121ms)

      ✓ delete from middle of underscore_word (38ms)

      ✓ delete two words from camel_word (42ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord (93ms)

      ✓ back twice over operator (46ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator (110ms)

  easymotion plugin

    ✓ Can handle s move (54ms)

    ✓ Can handle 2s move (67ms)

    ✓ Can handle f move

    ✓ Can handle 2f move (78ms)

    ✓ Can handle F move (122ms)

    ✓ Can handle 2F move (51ms)

    ✓ Can handle t move (39ms)

    ✓ Can handle bd-t move (40ms)

    ✓ Can handle 2t move (41ms)

    ✓ Can handle bd-t2 move (182ms)

    ✓ Can handle T move (97ms)

    ✓ Can handle 2T move (115ms)

    ✓ Can handle w move (45ms)

    ✓ Can handle bd-w move (66ms)

    ✓ Can handle b move (75ms)

    ✓ Can handle e move (85ms)

    ✓ Can handle bd-e move (48ms)

    ✓ Can handle ge move (45ms)

    ✓ Can handle n-char move (49ms)

    ✓ Can handle j move (42ms)

    ✓ Can handle k move (72ms)

    ✓ Can handle bd-jk move (1) (79ms)

    ✓ Can handle bd-jk move (2) (40ms)

    ✓ Can handle lineforward move (1) (63ms)

    ✓ Can handle lineforward move (2) (47ms)

    54) Can handle linebackward move (1)

    55) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (50ms)

    ✓ Can handle searching for carat (^) (39ms)

    ✓ Can handle searching for dot (.) (480ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (65ms)

    ✓ Replaces within inner Word (54ms)

    ✓ Replaces within '' (60ms)

    ✓ Replaces within '' including spaces (53ms)

    ✓ Replaces within () (166ms)

    ✓ Replaces within () including spaces (95ms)

    ✓ Replaces within a paragraph (59ms)

    ✓ Replaces using a specified register (87ms)

    ✓ Replaces within {} over multiple lines (55ms)

    ✓ Replaces a multiline register within {} over multiple lines (133ms)

    ✓ Replaces a multiline register within {} over multiple lines (96ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (48ms)

    ✓ grr replaces the entire line with the register (111ms)

    ✓ grr can replace multiple lines (87ms)

    ✓ Replaces in visual mode (108ms)

    ✓ Replaces in visual mode using a specified register (121ms)

    ✓ Replaces in visual line mode (59ms)

    ✓ grj is linewise (77ms)

  sneak plugin

    ✓ Can handle s motion (43ms)

    ✓ Can handle S motion (48ms)

    ✓ Can handle <operator>z motion (78ms)

    ✓ Can handle <operator>Z motion (74ms)

    ✓ Can handle s; motion

    ✓ Can handle s, motion

    ✓ Can handle S; motion (58ms)

    ✓ Can handle S, motion (61ms)

    ✓ Can handle single letter s motion (58ms)

    ✓ Can handle single letter S motion (244ms)

    ✓ Can handle single letter <operator>z motion (78ms)

    ✓ Can handle single letter <operator>Z motion (105ms)

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion (46ms)

    ✓ Can handle single letter S; motion (60ms)

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion (142ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (46ms)

    ✓ sneakReplacesF backward (67ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (131ms)

    ✓ 'ysiw(' surrounds word with space (139ms)

    ✓ 'ysw)' surrounds word without space (139ms)

    ✓ 'ysw(' surrounds word with space (128ms)

    ✓ 'ysaw)' surrounds word without space (76ms)

    ✓ 'ysaw(' surrounds word with space (64ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (62ms)

    ✓ 'ysiw<' surrounds word with tags (67ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (66ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (139ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (67ms)

    ✓ change surround (81ms)

    ✓ change surround with two pairs of quotes (57ms)

    ✓ change surround with two pairs of parens (137ms)

    ✓ change surround with alias (117ms)

    ✓ change surround to tags (69ms)

    ✓ delete surround (117ms)

    ✓ delete surround with quotes (60ms)

    ✓ delete surround with nested of quotes (66ms)

    ✓ delete surround with inconsistent quotes (70ms)

    ✓ delete surround with mixed quotes (129ms)

    ✓ delete surround with empty quotes cursor at start (51ms)

    ✓ delete surround with empty quotes cursor at end (449ms)

    ✓ don't delete surround if cursor is after closing match (51ms)

    ✓ delete surround if cursor is before opening match (84ms)

    ✓ delete surround with two pairs of parens (77ms)

    ✓ delete surround with alias (99ms)

    ✓ delete surround with tags (79ms)

    ✓ change surround brackets at end of line (68ms)

    ✓ changing brackets with surround works again (164ms)

    ✓ change surround with tags that contain an attribute and preserve them (103ms)

    ✓ change surround with tags that contain an attribute and remove them (74ms)

  register

    ✓ Can copy to a register

    ✓ Can use two registers together (121ms)

    ✓ Can use black hole register (156ms)

    ✓ System clipboard works with chinese characters (45ms)

    ✓ Yank stores text in Register '0' (323ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (250ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (283ms)

    ✓ Register '1'-'9' stores delete content (323ms)

    ✓ "A appends linewise text to "a (267ms)

    ✓ "A appends character wise text to "a (280ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (514ms)

    ✓ Small deletion using Del is stored in small delete register (305ms)

    ✓ Small deletion using X is stored in small delete register (193ms)

    ✓ Search register (/) is set by forward search (368ms)

    ✓ Search register (/) is set by backward search (532ms)

    ✓ Search register (/) is set by star search (331ms)

    ✓ Command register (:) is set by command line (208ms)

    ✓ Read-only registers cannot be written to (233ms)

    clipboard

      ✓ Can access '*' (clipboard) register (69ms)

      ✓ Can access '+' (clipboard) register (46ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character> (71ms)

    ✓ Can repeat t<character> (63ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward (50ms)

      ✓ move one sentence backward (53ms)

      ✓ move [count] sentences backward (242ms)

      ✓ move one sentence backward single line - middle (62ms)

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period (389ms)

      ✓ move one sentence backward - multiline - previous line (58ms)

      ✓ move one sentence backward - multiline - previous line - period (39ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar' (73ms)

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath
      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows
      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix
    resolveUri
      ✓ posix
      ✓ win32

  1284 passing (4m)
  4 pending
  55 failing
  1) Mode Normal
       can ctrl-a on an octal :

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)

  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +31
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)

  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Content does not match; Expected=test aaa test aaa test aaa test . Actual=.
      + expected - actual

      +test aaa test aaa test aaa test 
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)

  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)

  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)

  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)

  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)

  9) Mode Visual
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)


  16) Mode Visual Block
       Can handle c forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)


  17) Mode Visual Block
       Can handle c backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)


  18) Mode Visual Block
       Can handle C:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)


  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Actual and expected number of cursors do not match
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -2
      +0
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +8
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)

  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)

  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)

  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)

  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)

  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)

  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)

  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)

  47) Multicursor
       dab works with multi-cursor:

      Content does not match; Expected=. Actual=two.
      + expected - actual

      -two
      
      at Suite.<anonymous> (test/multicursor.test.ts:59:3)


  48) Multicursor
       <C-v>d works with multi-cursor:

      Missing '|' in test object.
      + expected - actual

      -false
      +true
      
      at Suite.<anonymous> (test/multicursor.test.ts:75:3)

  49) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three  five. Actual=one  three | five.
      + expected - actual

      -one  three | five
      +one  three  five
      
      at Suite.<anonymous> (test/multicursor.test.ts:83:3)

  50) Multicursor
       <count>f<char> works with multi-cursor:

      Content does not match; Expected=date! eggplant! fig.. Actual=|date! eggplant! fig..
      + expected - actual

      -|date! eggplant! fig.
      +date! eggplant! fig.
      
      at Suite.<anonymous> (test/multicursor.test.ts:91:3)

  51) Multicursor
       o works with multi-cursor:

      Content does not match; Expected=line2. Actual=l|ine2.
      + expected - actual

      -l|ine2
      +line2
      
      at Suite.<anonymous> (test/multicursor.test.ts:99:3)

  52) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  53) rot13 operator
       g? in visual block mode works:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  54) easymotion plugin
       Can handle linebackward move (1):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -6
      +3
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  55) easymotion plugin
       Can handle linebackward move (2):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -8
      +6
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-8.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-25T07:37:36.228Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (57ms)

    ✓ command <C-w> can remove word in search mode (58ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (50ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor (49ms)

    ✓ <C-u> deletes from cursor to first character (83ms)

    ✓ <C-b> puts cursor at start of command line (41ms)

    ✓ <Home> puts cursor at start of command line (62ms)

    ✓ <C-e> puts cursor at end of command line (41ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (83ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (85ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (128ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (110ms)

  cursor location

    ✓ cursor location in command line (42ms)

    ✓ cursor location in search (52ms)

  HistoryFile

    ✓ add command (41ms)

    ✓ add empty command (46ms)

    ✓ add command over configuration.history (43ms)

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (75ms)

  command-line lexer

    ✓ can lex empty string
    ✓ can lex comma
    ✓ can lex percent
    ✓ can lex dollar
    ✓ can lex dot
    ✓ can lex one number
    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1490ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit
    ✓ can ignore
    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF
    ✓ can skip whitespace at EOF
    ✓ nextWord() return EOF at EOF
    ✓ nextWord() return word before trailing spaces
    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (543ms)

    ✓ :smile editor contains smile text (550ms)

  Basic sort

    ✓ Sort whole file, asc (138ms)

    ✓ Sort whole file, asc, ignoreCase (87ms)

    ✓ Sort whole file, dsc (91ms)

    ✓ Sort whole file, dsc, ignoreCase (98ms)

    ✓ Sort range, asc (148ms)

    ✓ Sort range, asc, ignoreCase (150ms)

    ✓ Sort range, dsc (116ms)

    ✓ Sort range, dsc, ignoreCase (121ms)

    ✓ Sort whole file, asc, unique (114ms)

  Horizontal split

    ✓ :sp creates a second split (77ms)

    ✓ :split creates a second split (70ms)

    ✓ :new creates a second split (294ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !
    ✓ throws if bad input
  :quit args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !

    ✓ throws if space before !
    ✓ ignores space after !
    ✓ throws if bad input
  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count
    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args
    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs
  getParser

    ✓ empty

    ✓ :marks
    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall
    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name
      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty
  Basic substitute

    ✓ Replace single word once (68ms)

    ✓ Replace with `g` flag (53ms)

    ✓ Replace with flags AND count (117ms)

    ✓ Replace with `c` flag (47ms)

    ✓ Replace with `gc` flag (101ms)

    ✓ Replace across all lines (93ms)

    ✓ Replace on specific single line (101ms)

    ✓ Replace on current line using dot (78ms)

    ✓ Replace single relative line using dot and plus (81ms)

    ✓ Replace across specific line range (101ms)

    ✓ Replace across relative line range using dot, plus, and minus (112ms)

    ✓ Replace across relative line range using numLines+colon shorthand (161ms)

    ✓ Repeat replacement across relative line range (115ms)

    ✓ Replace with range AND count but no flags (63ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (104ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (98ms)

    ✓ Undocumented: trailing operators use 1 as RHS (79ms)

    ✓ Replace specific single equal lines (89ms)

    ✓ Replace current line with no active selection (94ms)

    ✓ Replace text in selection (108ms)

    ✓ Substitute support marks (118ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (61ms)

      ✓ Replace with `g` flag inverts global flag (58ms)

      ✓ Replace with `c` flag inverts global flag (91ms)

      ✓ Replace multiple lines (103ms)

      ✓ Replace across specific lines (181ms)

      ✓ Replace current line with no active selection (103ms)

      ✓ Replace text in selection (134ms)

      ✓ Substitute support marks (115ms)

      ✓ Substitute with escaped delimiter (49ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (226ms)

      ✓ Substitute with previous search using # (284ms)

      ✓ Substitute with previous search using / (234ms)

      ✓ Substitute with parameters should update search state (127ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (281ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (165ms)

      ✓ Substitute repeat previous should accept flags (71ms)

      ✓ Substitute with empty search string should use last searched pattern (294ms)

      ✓ Ampersand (&) should repeat the last substitution (66ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file (64ms)

    ✓ tabe with absolute path when not in workspace opens file (107ms)

    ✓ tabe with current file path does nothing (53ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path (39ms)

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (47ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (88ms)

    ✓ command line file tab completion with space in file path (133ms)

  Vertical split

    ✓ :vs creates a second split (68ms)

    ✓ :vsp creates a second split (69ms)

    ✓ :vsplit creates a second split (69ms)

    ✓ :vnew creates a second split (257ms)

    ✓ :vne creates a second split (222ms)

  Basic write-quit

    ✓ Run write and quit (78ms)
  Provide line completions
    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (84ms)

      ✓ Can complete lines in file with different indentation (61ms)

      ✓ Returns no completions for unmatched line (46ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords (42ms)

  Notation
    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (70ms)

    ✓ getMatchingRemap (63ms)

    ✓ jj -> <Esc> through modehandler (114ms)

    ✓ 0 -> :wq through modehandler (83ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (95ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (84ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (96ms)

    ✓ d -> black hole register delete in normal mode through modehandler (146ms)

    ✓ d -> black hole register delete in normal mode through modehandler (137ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (150ms)

  Neovim Validator

    ✓ neovim enabled without path
    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc
    ✓ remapping missing after and command

    ✓ remappings are de-duped
  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory
  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg (47ms)

        ✓ Can track jumps for keys: GggG (50ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (47ms)

        ✓ Can track jumps for keys: /b<CR>n (55ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (64ms)

        ✓ Can track jumps for keys: j%% (38ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (65ms)

[main 2020-02-25T07:38:06.231Z] update#setState checking for updates

[main 2020-02-25T07:38:06.311Z] update#setState idle

        ✓ Can track jumps for keys: j%%<C-o><C-i> (53ms)

        ✓ Can track jumps for keys: j%%<C-o>% (43ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (57ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (52ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (80ms)

        ✓ Can enter number to jump back multiple times (56ms)

        ✓ Can track one-line `` jumps (59ms)

        ✓ Can track one-line double `` jumps (74ms)

        ✓ Can track one-line '' jumps (77ms)

        ✓ Can track one-line double '' jumps (93ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (211ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (102ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (149ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (109ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (118ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (154ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (148ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (209ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (176ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (49ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (117ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (63ms)

  Record and execute a macro

    ✓ Can record and execute (164ms)

    ✓ Can repeat last invoked macro (202ms)

    ✓ Can play back with count (458ms)

    ✓ Can play back with count, abort when a motion fails (491ms)

    ✓ Repeat change on contiguous lines (152ms)

    ✓ Append command to a macro (168ms)

    ✓ Can record Ctrl Keys and repeat (161ms)

    ✓ Can execute macros with dot commands properly (116ms)

    ✓ : (command) register can be used as a macro (87ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (120ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (74ms)

    ✓ <C-c> can exit insert (78ms)

    ✓ <Esc> can exit insert (45ms)

    ✓ Stay in insert when entering characters (132ms)

    ✓ Can handle 'O' (171ms)

    ✓ 'i' puts you in insert mode before the cursor (43ms)

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word (53ms)

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (50ms)

    ✓ <C-u> deletes to start of line (48ms)

    ✓ Can handle <C-u> on leading characters (38ms)

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (85ms)

    ✓ will not remove leading spaces input by user (63ms)

    ✓ will remove closing bracket (49ms)

    ✓ Backspace works on whitespace only lines (71ms)

    ✓ Backspace works on end of whitespace only lines (68ms)

    ✓ Backspace works at beginning of file (47ms)

    ✓ Delete works in insert mode (44ms)

    ✓ Delete works at line end (46ms)

    ✓ Delete works at end of file (43ms)

    ✓ Delete works with repeat (185ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (70ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (53ms)

    ✓ Can perform insert command prefixed with count (47ms)

    ✓ Can perform append command prefixed with count (51ms)

    ✓ Can perform insert at start of line command prefixed with count (61ms)

    ✓ Can perform append to end of line command prefixed with count (50ms)

    ✓ Can perform change char (s) command prefixed with count (77ms)

    ✓ Can perform command prefixed with count with <C-[> (41ms)

    ✓ Can handle 'o' with count (123ms)

    ✓ Can handle 'O' with count (84ms)

    ✓ Can handle backspace at beginning of line with all spaces (58ms)

    ✓ Can handle digraph insert (267ms)

    ✓ Can handle custom digraph insert (40ms)

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw (48ms)

    ✓ Can handle dw across lines (1) (47ms)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd (44ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document (38ms)

    ✓ Can handle d2d (58ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (43ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (60ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (56ms)

    ✓ Can handle 'dl' at end of line (99ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter> (65ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (145ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (46ms)

    ✓ Can handle 'd]}' without deleting closing bracket (44ms)

    ✓ Can handle 'cw' (71ms)

    ✓ Can handle 'cw' without deleting following white spaces (41ms)

    ✓ Can handle 'c2w' (40ms)

    ✓ Can handle 'cw' without removing EOL (52ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (57ms)

    ✓ Can handle 'c]}' without deleting closing bracket (45ms)

    ✓ Can handle 's' (46ms)

    ✓ Can handle 'yiw' with correct cursor ending position (47ms)

    ✓ Can handle 'ciw' (108ms)

    ✓ Can handle 'ciw' on blanks (52ms)

    ✓ Can handle 'caw' (62ms)

    ✓ Can handle 'caw' on first letter (58ms)

    ✓ Can handle 'caw' on blanks (71ms)

    ✓ Can handle 'caw' on blanks (43ms)

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses (48ms)

    ✓ Can handle 'ci(' backwards through nested parens (50ms)

    ✓ Can handle 'cib' on first parentheses (83ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (41ms)

    ✓ Can handle count prefixed 'ci)' (48ms)

    ✓ Can handle count prefixed 'ca)' (41ms)

    ✓ Can handle 'ca(' spanning multiple lines (46ms)

    ✓ Can handle 'cab' spanning multiple lines (62ms)

    ✓ Can handle 'ci{' spanning multiple lines (38ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (79ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (39ms)

    ✓ Can handle 'ci(' on the closing bracket (49ms)

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no () (70ms)

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {} (45ms)

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (49ms)

    ✓ Can handle 'ca]' on first bracket (40ms)

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (47ms)

    ✓ Can handle 'ci'' on closing quote (47ms)

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote (41ms)

    ✓ Can handle 'ci"' starting behind the quoted word (180ms)

    ✓ Can handle 'ca"' starting behind the quoted word (63ms)

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (63ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind (49ms)

    ✓ Can handle 'ci"' with an escaped backslash (53ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (49ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"' (49ms)

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (79ms)

    ✓ can handle cj (69ms)

    ✓ can handle ck (58ms)

    ✓ can handle c2j (86ms)

    ✓ can handle c2k (96ms)

    ✓ can handle cj on last line (89ms)

    ✓ can handle ck on first line (80ms)

    ✓ can handle c2j on last line (92ms)

    ✓ can handle c2k on first line (89ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (40ms)

    ✓ Can handle 'daw' on word with trailing spaces (44ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (41ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (74ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (55ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (48ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (54ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (56ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line (42ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (73ms)

    ✓ Can handle 'daw' around word at end of line (48ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces (38ms)

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines (88ms)

    ✓ Can handle 'daW' on beginning of word (45ms)

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (89ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (40ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (66ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (50ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (91ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces (44ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (54ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines (51ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (58ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces (56ms)

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (51ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines (46ms)

    ✓ Can handle 'diW' on beginning of word (47ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (38ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line (53ms)

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces (41ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (53ms)

    ✓ Can handle 'df' (46ms)

    ✓ Can handle 'dt' (38ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (57ms)

    ✓ I should updated desiredColumn (48ms)

    ✓ leaving insert mode should update desired column when entered with a (88ms)

    ✓ leaving insert mode should update desired column when entered with i (114ms)

    ✓ Can handle 'yy' without changing cursor position (58ms)

    ✓ Can handle 'P' after 'yy' (46ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy' (49ms)

    ✓ Can handle 'p' after 'Nyy' (60ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (47ms)

    ✓ Can handle 'gp' after 'yy' (51ms)

    ✓ Can handle 'gp' after 'Nyy' (71ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (56ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (51ms)

    ✓ Can handle 'gP' after 'yy' (44ms)

    ✓ Can handle 'gP' after 'Nyy' (64ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (52ms)

    ✓ Can handle ']p' after yy (234ms)

    ✓ Can handle ']p' after 'Nyy' (53ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (71ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (43ms)

    ✓ Can handle '[p' after yy (50ms)

    ✓ Can handle '[p' after 'Nyy' (54ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (60ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (67ms)

    ✓ Can handle 'p' after y'a (49ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (79ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (57ms)

    ✓ Can handle pasting in visual mode over selection (121ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (129ms)

    ✓ gI works correctly (72ms)

    ✓ gi works correctly (99ms)

    ✓ `. works correctly (79ms)

    ✓ '. works correctly (63ms)

    ✓ g; works correctly (129ms)

    ✓ g, works correctly (110ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly (53ms)

    ✓ gq handles spaces after single line comments correctly (50ms)

    ✓ gq handles spaces before single line comments correctly (49ms)

    ✓ gq handles tabs before single line comments correctly (102ms)

    ✓ Can handle space

    ✓ Can handle space (53ms)

    ✓ Undo 1 (89ms)

    ✓ Undo 2 (76ms)

    ✓ Undo cursor (127ms)

    ✓ Undo cursor 2 (118ms)

    ✓ Undo cursor 3 (135ms)

    ✓ Undo with movement first (106ms)

    ✓ Can handle 'U' (99ms)

    ✓ Can handle 'U' for multiple changes (85ms)

    ✓ Can handle 'U' for new line below (93ms)

    ✓ Can handle 'U' for new line above (84ms)

    ✓ Can handle 'U' for consecutive changes only (156ms)

    ✓ Can handle 'u' to undo 'U' (72ms)

    ✓ Can handle 'U' to undo 'U' (65ms)

    ✓ Can handle 'u' after :s/abc/def (84ms)

    ✓ Redo (123ms)

    ✓ Redo (127ms)

    ✓ Redo (141ms)

    ✓ Can handle u

    ✓ Can handle guw (84ms)

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (43ms)

    ✓ can handle s in visual mode (84ms)

    ✓ can handle p with selection (67ms)

    ✓ can handle P with selection (89ms)

    ✓ can handle p in visual to end of line (119ms)

    ✓ can repeat backspace twice (84ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count (51ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly (133ms)

    ✓ can ctrl-a correctly behind a word (38ms)

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal (48ms)

    1) can ctrl-a on an octal 

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after  (47ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (84ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S (82ms)

    ✓ / does not affect mark (56ms)

    ✓ / can search with regex (39ms)

    ✓ / can search with newline (39ms)

    ✓ / can search through multiple newlines (62ms)

    ✓ / matches ^ per line (67ms)

    ✓ / matches $ per line (50ms)

    ✓ Can search for forward slash (54ms)

    ✓ Can search backward for question mark (50ms)

    ✓ /\c forces case insensitive search (50ms)

    ✓ /\C forces case sensitive search (74ms)

    ✓ <BS> deletes the last character in search in progress mode (38ms)

    ✓ <S-BS> deletes the last character in search in progress mode (42ms)

    ✓ <C-h> deletes the last character in search in progress mode (56ms)

    ✓ Can do C (116ms)

    ✓ Can do cit on a matching tag (43ms)

    ✓ Ignores cit on a non-matching tag (44ms)

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag (45ms)

    ✓ Can do cat on a matching tag (48ms)

    ✓ Can do cit on a multiline tag (46ms)

    ✓ Can do cit on a multiline tag with nested tags (86ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (42ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (52ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags (45ms)

    ✓ Respects indentation with cc (38ms)

    ✓ Resets cursor to indent end with cc (58ms)

    ✓ can handle 'cc' on empty line (42ms)

    ✓ cc copies linewise (52ms)

    ✓ Indent current line with correct Vim Mode (40ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words (51ms)

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (68ms)

    ✓ Can do cii (99ms)

    ✓ Can do caI (39ms)

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI (53ms)

    ✓ `] go to the end of the previously operated or put text (71ms)

    ✓ '] go to the end of the previously operated or put text (166ms)

    ✓ `[ go to the start of the previously operated or put text (85ms)

    ✓ '[ go to the start of the previously operated or put text (80ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (116ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (227ms)

      ✓ gn selects the current word at |hello (370ms)

      ✓ gn selects the current word at h|ello (260ms)

      ✓ gn selects the current word at hel|lo (267ms)

      ✓ gn selects the current word at hell|o (280ms)

      ✓ gn selects the next word at hello| (268ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (71ms)

      ✓ dgn deletes the current word when cursor is at |hello (82ms)

      ✓ dgn deletes the current word when cursor is at h|ello (71ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (69ms)

      ✓ dgn deletes the current word when cursor is at hell|o (77ms)

      ✓ dgn deletes the next word when cursor is at hello| (77ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (120ms)

      ✓ cgn deletes the current word when cursor is at |hello (63ms)

      ✓ cgn deletes the current word when cursor is at h|ello (71ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (75ms)

      ✓ cgn deletes the current word when cursor is at hell|o (64ms)

      ✓ cgn deletes the next word when cursor is at hello| (79ms)

    can handle gN

      ✓ gN selects the previous match text (311ms)

      ✓ gN selects the current word at hell|o (240ms)

      ✓ gN selects the current word at hel|lo (247ms)

      ✓ gN selects the current word at h|ello (496ms)

      ✓ gN selects the current word at |hello (280ms)

      ✓ gN selects the previous word at | hello (267ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (68ms)

      ✓ dgN deletes the current word when cursor is at hell|o (73ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (133ms)

      ✓ dgN deletes the current word when cursor is at h|ello (141ms)

      ✓ dgN deletes the current word when cursor is at |hello (85ms)

      ✓ dgN deletes the previous word when cursor is at | hello (90ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (75ms)

      ✓ cgN deletes the current word when cursor is at hell|o (97ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (112ms)

      ✓ cgN deletes the current word when cursor is at h|ello (83ms)

      ✓ cgN deletes the current word when cursor is at |hello (80ms)

      ✓ cgN deletes the previous word when cursor is at | hello (96ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (47ms)

    ✓ Can handle R past current line (239ms)

    ✓ Can handle R and exit Replace Mode (59ms)

    ✓ Can handle R across lines (102ms)

    ✓ Can handle R across lines and exit Replace Mode (94ms)

    ✓ Can handle R with {count} (86ms)

    ✓ Can handle backspace (65ms)

    ✓ Can handle backspace (104ms)

    ✓ Can handle backspace across lines (109ms)

    ✓ Can handle arrows (65ms)

    ✓ Can handle . (112ms)

    ✓ Can handle . across lines (249ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (156ms)

    ✓ Can handle wd (120ms)

    ✓ Can handle x (116ms)

    ✓ Can handle x across a selection (132ms)

    ✓ Can do vwd in middle of sentence (180ms)

    ✓ Can do vwd in middle of sentence (117ms)

    ✓ Can do vwd multiple times (227ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (144ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (48ms)

    ✓ handles case where we delete over a newline (183ms)

    ✓ handles change operator (146ms)

    ✓ Can do vat on multiple matching tags (90ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (80ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (46ms)

    ✓ Repeat-prefixed vat does not bleed below (68ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (72ms)

    ✓ Can do vi) on a matching parenthesis (48ms)

    ✓ Can do vi) on multiple matching parens (67ms)

    ✓ Can do va) on a matching parenthesis (43ms)

    ✓ Can do va) on multiple matching parens (65ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (65ms)

    ✓ Repeat-prefixed va) does not bleed below (95ms)

    ✓ Can do va} on a matching bracket as first character (44ms)

    ✓ Can do va} on multiple matching brackets (50ms)

    ✓ Can do vi( on a matching bracket near first character (73ms)

    ✓ Can do vi{ on outer pair of nested braces (49ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (58ms)

    ✓ Can do va] on multiple matching brackets (79ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (53ms)

    ✓ Repeat-prefixed vaf does not bleed below (63ms)

    ✓ vaf only expands to enclosing pairs (52ms)

    ✓ Can use . to repeat indent in visual (63ms)

    ✓ Can do v_x to delete to first char (47ms)

    ✓ Can do vg_x to delete to last char with no EOL (50ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (81ms)

    ✓ Can do v$x to delete to last char including EOL (75ms)

    ✓ Can do gv to reselect previous selection (89ms)

    Vim's EOL handling is weird

      ✓ delete through eol (115ms)

      ✓ join 2 lines by deleting through eol (132ms)

      ✓ d$ doesn't delete whole line (103ms)

      ✓ vd$ does delete whole line (102ms)

      ✓ Paste over selection copies the selection (107ms)

      ✓ Paste over selection copies the selection linewise (92ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (52ms)

      ✓ Can handle <down> key (112ms)

      ✓ Can handle <left> key (49ms)

      ✓ Can handle <right> key (44ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (60ms)

      ✓ Can handle 'gj' (95ms)

      - Preserves cursor position when handling 'gk'
      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (49ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces (45ms)

      ✓ Can handle 'vawd' on word with numeric prefix (66ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (61ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (59ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (46ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (55ms)

      ✓ Can handle 'vaWd' on word with leading spaces (43ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (64ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (60ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (46ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (45ms)

      ✓ Can handle 'vaWd' on word with leading spaces (46ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (39ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (44ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (46ms)

      ✓ Can handle 'vawd' on word with trailing spaces (82ms)

      ✓ Can handle 'vawd' on word with leading spaces (45ms)

      ✓ Can handle 'vawd' on word with numeric prefix (61ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (42ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (103ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (48ms)

      ✓ Can handle 'vaWd' on word with leading spaces (61ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (44ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (52ms)

      ✓ Can handle 'Y' in visual mode (49ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (92ms)

      ✓ Select sentence with leading spaces in visual mode (49ms)

      ✓ Select multiple sentences in visual mode (49ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (48ms)

      ✓ Select inner sentence with leading spaces in visual mode (248ms)

      ✓ Select spaces between sentences in visual mode (56ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (61ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (70ms)

      ✓ Can do vat on a matching tag (48ms)

    handles replace in visual mode

      ✓ Can do a single line replace (61ms)

      ✓ Can do a multi line replace (90ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (41ms)

      ✓ D deletes the current line (44ms)

    handles indent blocks in visual mode

      ✓ Can do vai (74ms)

      ✓ Can do vii (45ms)

      ✓ Doesn't naively select the next line (51ms)

      ✓ Searches backwards if cursor line is empty (79ms)

      ✓ Can do vaI (47ms)

    visualstar

      ✓ Works with * (47ms)

      ✓ Works with # (49ms)

    search works in visual mode

      ✓ Works with / (81ms)

      ✓ Works with ? (61ms)

      ✓ Selects correct range (95ms)

    X will delete linewise

      ✓ normal selection (64ms)

      ✓ normal selection (87ms)

    C will delete linewise

      ✓ normal selection (81ms)

      ✓ normal selection (102ms)

    R will delete linewise

      ✓ normal selection (42ms)

      ✓ normal selection (43ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (109ms)

      ✓ upward selection (84ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (49ms)

      ✓ multiline indent bottom up selection (50ms)

      ✓ repeat multiline indent top down selection (142ms)

      ✓ repeat multiline indent bottom up selection (69ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (63ms)

      ✓ multiline outdent bottom up selection (47ms)

      ✓ repeat multiline outdent top down selection (79ms)

      ✓ repeat multiline outdent bottom up selection (95ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (158ms)

    vi{ will go to end of second to last line

      ✓ select (83ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode (42ms)

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (356ms)

      ✓ gv selects the last pasted text (which is longer than original) (496ms)

      ✓ gv selects the last pasted text (multiline) (199ms)

    can handle gn

      ✓ gn selects the next match text (248ms)

      ✓ gn selects the current word at |hello (292ms)

      ✓ gn selects the current word at h|ello (465ms)

      ✓ gn selects the current word at hel|lo (224ms)

      ✓ gn selects the next word at hell|o (250ms)

      ✓ gn selects the next word at hello| (234ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (59ms)

      ✓ U/gU across a selection (103ms)

      ✓ U/gU across a selection (reverse) (124ms)

      ✓ u/gu on single character (74ms)

      ✓ u/gu across a selection (94ms)

      ✓ u/gu across a selection (reverse) (116ms)

  Mode Visual Block

    ✓ can be activated

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D' (55ms)

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (109ms)

    ✓ o works in visual block mode (55ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (228ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (153ms)

    ✓ Can handle wd (137ms)

    ✓ Can handle x (112ms)

    ✓ Can handle x across a selection (197ms)

    ✓ Can do vwd in middle of sentence (256ms)

    ✓ Can do vwd in middle of sentence (118ms)

    ✓ Can do vwd multiple times (183ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (158ms)

    ✓ handles case where we delete over a newline (193ms)

    ✓ handles change operator (98ms)

    ✓ Vp updates register content (53ms)

    ✓ Vp does not append unnecessary newlines (first line) (46ms)

    ✓ Vp does not append unnecessary newlines (middle line) (47ms)

    ✓ Vp does not append unnecessary newlines (last line) (119ms)

    ✓ Exiting via <Esc> returns cursor to original column (39ms)

    Vim's EOL handling is weird

      ✓ delete through eol (94ms)

      ✓ join 2 lines by deleting through eol (83ms)

      ✓ d$ doesn't delete whole line (76ms)

      ✓ vd$ does delete whole line (153ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (45ms)

      ✓ Can handle <down> key (53ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (55ms)

      ✓ Can handle 'gj' (60ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (56ms)

      ✓ Can handle d key (60ms)

      ✓ Can handle d key (188ms)

      ✓ Can handle d key (50ms)

      ✓ can handle 'c' (59ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (52ms)

      ✓ Can do a multi visual line replace (44ms)

      ✓ Can do a multi visual line replace from the bottom up (83ms)

    search works in visual line mode

      ✓ Works with / (63ms)

      ✓ Works with ? (50ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (451ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (44ms)

      ✓ linewise visual put works also in the end of document (96ms)

      ✓ gv selects the last pasted text (which is shorter than original) (341ms)

      ✓ gv selects the last pasted text (which is longer than original) (381ms)

      ✓ gv selects the last pasted text (multiline) (148ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly (91ms)

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (44ms)

    ✓ Can handle 'x' at end of line (69ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (111ms)

    ✓ Can handle 'cc' (48ms)

    ✓ Can handle 'Ncc' (55ms)

    ✓ Can handle 'yy' (62ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines (52ms)

    ✓ Can handle 'DD' (49ms)

    ✓ Can handle 'C' (38ms)

    ✓ Can handle 'NC' (52ms)

    ✓ Can handle 'NC' and put (388ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r' (39ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (47ms)

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
' (53ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (96ms)

    ✓ Can handle 'J' with empty last line (60ms)

    ✓ Can handle 'J's with multiple empty last lines (76ms)

    ✓ Can handle 'J' with leading white space on next line (38ms)

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once (68ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (41ms)

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle '<BS>' in insert mode (136ms)

    ✓ Can handle undo with P (68ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (68ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (74ms)

    ✓ Can handle dot with I (86ms)

    ✓ Can repeat actions that require selections (65ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (72ms)

    ✓ Can repeat insert change and '<C-t>' (89ms)

    ✓ Can repeat change by `<C-a>` (65ms)

    ✓ Only one arrow key can be repeated in Insert Mode (73ms)

    ✓ Cached content change will be cleared by arrow keys (111ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning (39ms)

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end (75ms)

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [( (338ms)

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ]) (69ms)

    ✓ Can handle nested ])

    ✓ Can handle <number>]) (47ms)

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{ (113ms)

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive (78ms)

    ✓ Can handle 'ge' (45ms)

    ✓ Can handle 'gg' (67ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline (73ms)

    38) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (60ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file (86ms)

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count (43ms)

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice (41ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (80ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search (46ms)

    ✓ Can handle 'f' and multiple back searches (50ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search (79ms)

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (152ms)

    ✓ Can run a forward and find next search (44ms)

    ✓ Can run a forward and find previous search from end of word (44ms)

    ✓ Can run a reverse search (61ms)

    ✓ Can run a reverse and find next search (38ms)

    ✓ cancelled search reverts to previous search state (132ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (60ms)

    ✓ Search offsets: b2 goes 2 to the right (76ms)

    ✓ Search offsets: b+3 goes 3 to the right (46ms)

    ✓ Search offsets: e goes to the end (51ms)

    ✓ Search offsets: character offset goes across line boundaries (56ms)

    ✓ Search offsets: 2 goes 2 down (45ms)

    ✓ Search offsets: -2 goes 2 up (68ms)

    ✓ maintains column position correctly (40ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix (73ms)

    ✓ Can handle G with number prefix

    ✓ Can handle gg (39ms)

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle * (67ms)

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g# (247ms)

    ✓ Can handle g#n

    ✓ Can handle # (298ms)

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history (86ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (70ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _ (47ms)

    ✓ Can handle _ with count prefix

    39) Can handle g_

    ✓ Can handle g_ with count prefix (99ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key (40ms)

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right
    ✓ char right
    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line

      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)

    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word

      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left
      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line (50ms)

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (44ms)

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line (39ms)

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (41ms)

    wrapscan enabled

      ✓ search wraps around the end of the file (53ms)

      ✓ search wraps around the start of the file (53ms)

    wrapscan disabled

      ✓ search stops at the end of the file (41ms)

      ✓ search stops at the start of the file (52ms)

  Multicursor

    ✓ can add multiple cursors below (130ms)

    ✓ can add multiple cursors above (174ms)

    ✓ dd works with multi-cursor (48ms)

    47) dab works with multi-cursor

    ✓ Vd works with multi-cursor (45ms)

    48) <C-v>d works with multi-cursor

    49) cw works with multi-cursor

    50) <count>f<char> works with multi-cursor

    51) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (172ms)

    ✓ gcj comments in current and next line (72ms)

    ✓ block comment with motion (133ms)

    ✓ block comment in Visual Mode (446ms)

    ✓ comment in visual line mode (329ms)

    ✓ comment in visual block mode (298ms)

  format operator

    ✓ == formats current line (496ms)

    ✓ =$ formats entire line (420ms)

    ✓ =j formats two lines (193ms)

    ✓ 3=k formats three lines (108ms)

    52) =gg formats to top of file

    ✓ =G formats to bottom of file (168ms)

    ✓ =ip formats paragraph (108ms)

    ✓ format in visual mode (79ms)

  put operator

    ✓ basic put test (46ms)

    ✓ test yy end of line (81ms)

    ✓ test yy first line (55ms)

    ✓ test yy middle line (89ms)

    ✓ test yy with correct positon movement (68ms)

    ✓ test visual block single line yank p (66ms)

    ✓ test visual block single line yank P (74ms)

    ✓ test visual block single line delete p (132ms)

    ✓ test visual block single line delete P (132ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (45ms)

    ✓ g? in visual mode works (45ms)

    ✓ g? in visual line mode works (119ms)

    53) g? in visual block mode works

  shift operator

    ✓ basic shift left test (53ms)

    ✓ shift left goto end test (48ms)

    ✓ shift left goto line test (55ms)

    ✓ shift right goto end test (44ms)

    ✓ shift right goto line test (337ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work (46ms)

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace (72ms)

      ✓ step to Camel word (42ms)

      ✓ step to CAP word (55ms)

      ✓ step after CAP word (81ms)

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over (83ms)

    handles <leader>w for underscore_var

      ✓ step to _word (45ms)

      ✓ step over whitespace to word

      ✓ step from inside word to _word (40ms)

      ✓ step form _word to number (45ms)

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word (95ms)

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (71ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (51ms)

      ✓ delete two words from camelWord (43ms)

      ✓ delete from start of underscore_word (123ms)

      ✓ delete from middle of underscore_word (74ms)

      ✓ delete two words from camel_word (66ms)

    handles di<leader>w

      ✓ delete from start of camelWord (85ms)

      ✓ delete from middle of camelWord (44ms)

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (236ms)

      ✓ delete from start of underscore_word (121ms)

      ✓ delete from middle of underscore_word (38ms)

      ✓ delete two words from camel_word (42ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord (93ms)

      ✓ back twice over operator (46ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator (110ms)

  easymotion plugin

    ✓ Can handle s move (54ms)

    ✓ Can handle 2s move (67ms)

    ✓ Can handle f move

    ✓ Can handle 2f move (78ms)

    ✓ Can handle F move (122ms)

    ✓ Can handle 2F move (51ms)

    ✓ Can handle t move (39ms)

    ✓ Can handle bd-t move (40ms)

    ✓ Can handle 2t move (41ms)

    ✓ Can handle bd-t2 move (182ms)

    ✓ Can handle T move (97ms)

    ✓ Can handle 2T move (115ms)

    ✓ Can handle w move (45ms)

    ✓ Can handle bd-w move (66ms)

    ✓ Can handle b move (75ms)

    ✓ Can handle e move (85ms)

    ✓ Can handle bd-e move (48ms)

    ✓ Can handle ge move (45ms)

    ✓ Can handle n-char move (49ms)

    ✓ Can handle j move (42ms)

    ✓ Can handle k move (72ms)

    ✓ Can handle bd-jk move (1) (79ms)

    ✓ Can handle bd-jk move (2) (40ms)

    ✓ Can handle lineforward move (1) (63ms)

    ✓ Can handle lineforward move (2) (47ms)

    54) Can handle linebackward move (1)

    55) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (50ms)

    ✓ Can handle searching for carat (^) (39ms)

    ✓ Can handle searching for dot (.) (480ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (65ms)

    ✓ Replaces within inner Word (54ms)

    ✓ Replaces within '' (60ms)

    ✓ Replaces within '' including spaces (53ms)

    ✓ Replaces within () (166ms)

    ✓ Replaces within () including spaces (95ms)

    ✓ Replaces within a paragraph (59ms)

    ✓ Replaces using a specified register (87ms)

    ✓ Replaces within {} over multiple lines (55ms)

    ✓ Replaces a multiline register within {} over multiple lines (133ms)

    ✓ Replaces a multiline register within {} over multiple lines (96ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (48ms)

    ✓ grr replaces the entire line with the register (111ms)

    ✓ grr can replace multiple lines (87ms)

    ✓ Replaces in visual mode (108ms)

    ✓ Replaces in visual mode using a specified register (121ms)

    ✓ Replaces in visual line mode (59ms)

    ✓ grj is linewise (77ms)

  sneak plugin

    ✓ Can handle s motion (43ms)

    ✓ Can handle S motion (48ms)

    ✓ Can handle <operator>z motion (78ms)

    ✓ Can handle <operator>Z motion (74ms)

    ✓ Can handle s; motion

    ✓ Can handle s, motion

    ✓ Can handle S; motion (58ms)

    ✓ Can handle S, motion (61ms)

    ✓ Can handle single letter s motion (58ms)

    ✓ Can handle single letter S motion (244ms)

    ✓ Can handle single letter <operator>z motion (78ms)

    ✓ Can handle single letter <operator>Z motion (105ms)

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion (46ms)

    ✓ Can handle single letter S; motion (60ms)

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion (142ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (46ms)

    ✓ sneakReplacesF backward (67ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (131ms)

    ✓ 'ysiw(' surrounds word with space (139ms)

    ✓ 'ysw)' surrounds word without space (139ms)

    ✓ 'ysw(' surrounds word with space (128ms)

    ✓ 'ysaw)' surrounds word without space (76ms)

    ✓ 'ysaw(' surrounds word with space (64ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (62ms)

    ✓ 'ysiw<' surrounds word with tags (67ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (66ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (139ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (67ms)

    ✓ change surround (81ms)

    ✓ change surround with two pairs of quotes (57ms)

    ✓ change surround with two pairs of parens (137ms)

    ✓ change surround with alias (117ms)

    ✓ change surround to tags (69ms)

    ✓ delete surround (117ms)

    ✓ delete surround with quotes (60ms)

    ✓ delete surround with nested of quotes (66ms)

    ✓ delete surround with inconsistent quotes (70ms)

    ✓ delete surround with mixed quotes (129ms)

    ✓ delete surround with empty quotes cursor at start (51ms)

    ✓ delete surround with empty quotes cursor at end (449ms)

    ✓ don't delete surround if cursor is after closing match (51ms)

    ✓ delete surround if cursor is before opening match (84ms)

    ✓ delete surround with two pairs of parens (77ms)

    ✓ delete surround with alias (99ms)

    ✓ delete surround with tags (79ms)

    ✓ change surround brackets at end of line (68ms)

    ✓ changing brackets with surround works again (164ms)

    ✓ change surround with tags that contain an attribute and preserve them (103ms)

    ✓ change surround with tags that contain an attribute and remove them (74ms)

  register

    ✓ Can copy to a register

    ✓ Can use two registers together (121ms)

    ✓ Can use black hole register (156ms)

    ✓ System clipboard works with chinese characters (45ms)

    ✓ Yank stores text in Register '0' (323ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (250ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (283ms)

    ✓ Register '1'-'9' stores delete content (323ms)

    ✓ "A appends linewise text to "a (267ms)

    ✓ "A appends character wise text to "a (280ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (514ms)

    ✓ Small deletion using Del is stored in small delete register (305ms)

    ✓ Small deletion using X is stored in small delete register (193ms)

    ✓ Search register (/) is set by forward search (368ms)

    ✓ Search register (/) is set by backward search (532ms)

    ✓ Search register (/) is set by star search (331ms)

    ✓ Command register (:) is set by command line (208ms)

    ✓ Read-only registers cannot be written to (233ms)

    clipboard

      ✓ Can access '*' (clipboard) register (69ms)

      ✓ Can access '+' (clipboard) register (46ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character> (71ms)

    ✓ Can repeat t<character> (63ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward (50ms)

      ✓ move one sentence backward (53ms)

      ✓ move [count] sentences backward (242ms)

      ✓ move one sentence backward single line - middle (62ms)

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period (389ms)

      ✓ move one sentence backward - multiline - previous line (58ms)

      ✓ move one sentence backward - multiline - previous line - period (39ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar' (73ms)

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath
      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows
      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix
    resolveUri
      ✓ posix
      ✓ win32

  1284 passing (4m)
  4 pending
  55 failing
  1) Mode Normal
       can ctrl-a on an octal :

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)

  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +31
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)

  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Content does not match; Expected=test aaa test aaa test aaa test . Actual=.
      + expected - actual

      +test aaa test aaa test aaa test 
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)

  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)

  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)

  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)

  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)

  9) Mode Visual
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)


  16) Mode Visual Block
       Can handle c forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)


  17) Mode Visual Block
       Can handle c backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)


  18) Mode Visual Block
       Can handle C:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)


  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Actual and expected number of cursors do not match
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -2
      +0
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +8
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)

  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)

  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)

  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)

  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)

  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)

  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)

  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)

  47) Multicursor
       dab works with multi-cursor:

      Content does not match; Expected=. Actual=two.
      + expected - actual

      -two
      
      at Suite.<anonymous> (test/multicursor.test.ts:59:3)


  48) Multicursor
       <C-v>d works with multi-cursor:

      Missing '|' in test object.
      + expected - actual

      -false
      +true
      
      at Suite.<anonymous> (test/multicursor.test.ts:75:3)

  49) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three  five. Actual=one  three | five.
      + expected - actual

      -one  three | five
      +one  three  five
      
      at Suite.<anonymous> (test/multicursor.test.ts:83:3)

  50) Multicursor
       <count>f<char> works with multi-cursor:

      Content does not match; Expected=date! eggplant! fig.. Actual=|date! eggplant! fig..
      + expected - actual

      -|date! eggplant! fig.
      +date! eggplant! fig.
      
      at Suite.<anonymous> (test/multicursor.test.ts:91:3)

  51) Multicursor
       o works with multi-cursor:

      Content does not match; Expected=line2. Actual=l|ine2.
      + expected - actual

      -l|ine2
      +line2
      
      at Suite.<anonymous> (test/multicursor.test.ts:99:3)

  52) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  53) rot13 operator
       g? in visual block mode works:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  54) easymotion plugin
       Can handle linebackward move (1):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -6
      +3
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  55) easymotion plugin
       Can handle linebackward move (2):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -8
      +6
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: 42274610-57a2-11ea-acab-ef795e2c3319

@J-Fields J-Fields added this to the v1.13.0 milestone Feb 25, 2020
@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.12.4 build /home/travis/build/VSCodeVim/Vim
> gulp build

[02:56:08] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[02:56:08] Starting 'build'...
[02:56:08] Starting 'prettier'...
[02:56:09] Finished 'prettier' after 566 ms
[02:56:09] Starting 'tsc'...
[02:56:09] Starting 'tslint'...
[02:56:16] Finished 'tslint' after 7.61 s
[02:56:25] Finished 'tsc' after 16 s
[02:56:25] Starting 'commit-hash'...
[02:56:25] Finished 'commit-hash' after 30 ms
[02:56:25] Finished 'build' after 17 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T02:56:33.088Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative

    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (43ms)

    ✓ command <C-w> can remove word in search mode (53ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (56ms)

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line (40ms)

    ✓ <C-e> puts cursor at end of command line (57ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (70ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (95ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (130ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (101ms)

  cursor location

    ✓ cursor location in command line (43ms)

    ✓ cursor location in search

  HistoryFile

    ✓ add command (38ms)

    ✓ add empty command

    ✓ add command over configuration.history (46ms)

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (68ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1633ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar

  command line scanner

    ✓ ctor
    ✓ can detect EOF with empty input
    ✓ next() returns EOF at EOF
    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF
    ✓ nextWord() return EOF at EOF
    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set
    ✓ can expect only one of a set
  Smile command

    ✓ :smile creates new tab (539ms)

    ✓ :smile editor contains smile text (542ms)

  Basic sort

    ✓ Sort whole file, asc (141ms)

    ✓ Sort whole file, asc, ignoreCase (83ms)

    ✓ Sort whole file, dsc (136ms)

    ✓ Sort whole file, dsc, ignoreCase (112ms)

    ✓ Sort range, asc (236ms)

    ✓ Sort range, asc, ignoreCase (138ms)

    ✓ Sort range, dsc (131ms)

    ✓ Sort range, dsc, ignoreCase (124ms)

    ✓ Sort whole file, asc, unique (125ms)

  Horizontal split

    ✓ :sp creates a second split (143ms)

    ✓ :split creates a second split (84ms)

    ✓ :new creates a second split (232ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser
    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !
    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count
    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch
    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (63ms)

    ✓ Replace with `g` flag (63ms)

    ✓ Replace with flags AND count (132ms)

    ✓ Replace with `c` flag (80ms)

    ✓ Replace with `gc` flag (71ms)

    ✓ Replace across all lines (86ms)

    ✓ Replace on specific single line (96ms)

    ✓ Replace on current line using dot (166ms)

    ✓ Replace single relative line using dot and plus (93ms)

    ✓ Replace across specific line range (105ms)

    ✓ Replace across relative line range using dot, plus, and minus (126ms)

    ✓ Replace across relative line range using numLines+colon shorthand (99ms)

    ✓ Repeat replacement across relative line range (88ms)

    ✓ Replace with range AND count but no flags (99ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (104ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (97ms)

    ✓ Undocumented: trailing operators use 1 as RHS (87ms)

    ✓ Replace specific single equal lines (94ms)

    ✓ Replace current line with no active selection (117ms)

    ✓ Replace text in selection (143ms)

    ✓ Substitute support marks (149ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (52ms)

      ✓ Replace with `g` flag inverts global flag (56ms)

      ✓ Replace with `c` flag inverts global flag (74ms)

      ✓ Replace multiple lines (210ms)

      ✓ Replace across specific lines (87ms)

      ✓ Replace current line with no active selection (95ms)

      ✓ Replace text in selection (117ms)

      ✓ Substitute support marks (109ms)

      ✓ Substitute with escaped delimiter (72ms)
    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (253ms)

      ✓ Substitute with previous search using # (200ms)

      ✓ Substitute with previous search using / (251ms)

      ✓ Substitute with parameters should update search state (126ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (318ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (144ms)

      ✓ Substitute repeat previous should accept flags (65ms)

      ✓ Substitute with empty search string should use last searched pattern (293ms)

      ✓ Ampersand (&) should repeat the last substitution (63ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (64ms)

    ✓ tabe with current file path does nothing (47ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (52ms)

    ✓ command line file navigate tab completion (67ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (87ms)

    ✓ command line file tab completion with space in file path (231ms)

  Vertical split

    ✓ :vs creates a second split (69ms)

    ✓ :vsp creates a second split (80ms)

    ✓ :vsplit creates a second split (71ms)

    ✓ :vnew creates a second split (245ms)

    ✓ :vne creates a second split (224ms)

  Basic write-quit

    ✓ Run write and quit (62ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (43ms)

      ✓ Can complete lines in file with different indentation (58ms)

      ✓ Returns no completions for unmatched line (39ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (77ms)

    ✓ getMatchingRemap (84ms)

    ✓ jj -> <Esc> through modehandler (131ms)

    ✓ 0 -> :wq through modehandler (96ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (84ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (74ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (104ms)

    ✓ d -> black hole register delete in normal mode through modehandler (149ms)

    ✓ d -> black hole register delete in normal mode through modehandler (128ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (149ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg (40ms)

        ✓ Can track jumps for keys: GggG (40ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (118ms)

        ✓ Can track jumps for keys: /b<CR>n (55ms)

[main 2020-02-26T02:57:03.092Z] update#setState checking for updates

[main 2020-02-26T02:57:03.176Z] update#setState idle

        ✓ Can track jumps for keys: G?b<CR>ggG (72ms)

        ✓ Can track jumps for keys: j%% (46ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (140ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (51ms)

        ✓ Can track jumps for keys: j%%<C-o>% (48ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (58ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (51ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (109ms)

        ✓ Can enter number to jump back multiple times (70ms)

        ✓ Can track one-line `` jumps (78ms)

        ✓ Can track one-line double `` jumps (90ms)

        ✓ Can track one-line '' jumps (102ms)

        ✓ Can track one-line double '' jumps (103ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (82ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (102ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (97ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (136ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (101ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (149ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (184ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (199ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (180ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (65ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (121ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (60ms)

  Record and execute a macro

    ✓ Can record and execute (178ms)

    ✓ Can repeat last invoked macro (224ms)

    ✓ Can play back with count (541ms)

    ✓ Can play back with count, abort when a motion fails (412ms)

    ✓ Repeat change on contiguous lines (155ms)

    ✓ Append command to a macro (169ms)

    ✓ Can record Ctrl Keys and repeat (178ms)

    ✓ Can execute macros with dot commands properly (110ms)

    ✓ : (command) register can be used as a macro (95ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get
  Mode Insert

    ✓ can be activated (75ms)

    ✓ can handle key events (52ms)

    ✓ <Esc> should change cursor position (57ms)

    ✓ <C-c> can exit insert (58ms)

    ✓ <Esc> can exit insert (104ms)

    ✓ Stay in insert when entering characters (75ms)

    ✓ Can handle 'O' (48ms)

    ✓ 'i' puts you in insert mode before the cursor (48ms)

    ✓ 'I' puts you in insert mode at start of line (52ms)

    ✓ 'a' puts you in insert mode after the cursor (39ms)

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace (41ms)

    ✓ Correctly places the cursor after deleting the previous line break (72ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (49ms)

    ✓ Backspace works on whitespace only lines (49ms)

    ✓ Backspace works on end of whitespace only lines (47ms)

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode (45ms)

    ✓ Delete works at line end (57ms)

    ✓ Delete works at end of file

    ✓ Delete works with repeat (301ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o> (40ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (89ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (50ms)

    ✓ Can perform insert command prefixed with count (44ms)

    ✓ Can perform append command prefixed with count (66ms)

    ✓ Can perform insert at start of line command prefixed with count (94ms)

    ✓ Can perform append to end of line command prefixed with count (60ms)

    ✓ Can perform change char (s) command prefixed with count (135ms)

    ✓ Can perform command prefixed with count with <C-[> (46ms)

    ✓ Can handle 'o' with count (110ms)

    ✓ Can handle 'O' with count (97ms)

    ✓ Can handle backspace at beginning of line with all spaces (47ms)

    ✓ Can handle digraph insert (104ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw (53ms)

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2) (46ms)

    ✓ Can handle dd last line (55ms)

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document (45ms)

    ✓ Can handle d2d (46ms)

    ✓ Can handle dd empty line (45ms)

    ✓ Can handle ddp (49ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (50ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (43ms)

    ✓ Can handle 'dl' at end of line (56ms)

    ✓ Can handle 'dF' (59ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter> (52ms)

    ✓ Can handle 'dj' (125ms)

    ✓ Can handle 'dk' (40ms)

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'cw' (68ms)

    ✓ Can handle 'cw' without deleting following white spaces (39ms)

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (41ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (40ms)

    ✓ Can handle 'c]}' without deleting closing bracket (43ms)

    ✓ Can handle 's' (45ms)

    ✓ Can handle 'yiw' with correct cursor ending position (79ms)

    ✓ Can handle 'ciw' (79ms)

    ✓ Can handle 'ciw' on blanks (64ms)

    ✓ Can handle 'caw' (206ms)

    ✓ Can handle 'caw' on first letter (99ms)

    ✓ Can handle 'caw' on blanks (81ms)

    ✓ Can handle 'caw' on blanks (39ms)

    ✓ Can handle 'ci(' on first parentheses (45ms)

    ✓ Can handle 'ci(' with nested parentheses (49ms)

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses (73ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (47ms)

    ✓ Can handle count prefixed 'ci)' (47ms)

    ✓ Can handle count prefixed 'ca)' (53ms)

    ✓ Can handle 'ca(' spanning multiple lines (144ms)

    ✓ Can handle 'cab' spanning multiple lines (79ms)

    ✓ Can handle 'ci{' spanning multiple lines (39ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (47ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (52ms)

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {} (45ms)

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (54ms)

    ✓ Can handle 'ca]' on first bracket (49ms)

    ✓ Can handle 'ci'' on first quote (46ms)

    ✓ Can handle 'ci'' inside quoted string (39ms)

    ✓ Can handle 'ci'' on closing quote (49ms)

    ✓ Can handle 'ci'' when string is ahead (45ms)

    ✓ Can handle 'ci"' on opening quote (41ms)

    ✓ Can handle 'ci"' starting behind the quoted word (42ms)

    ✓ Can handle 'ca"' starting behind the quoted word (38ms)

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (42ms)

    ✓ Can handle 'ci"' with a single escaped quote (44ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (44ms)

    ✓ Can handle 'ci"' with an escaped backslash (108ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (53ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences (43ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (39ms)

    ✓ will fail when ca" ahead of quoted string (45ms)

    ✓ Can handle 'ca`' inside word (49ms)

    ✓ can handle cj (67ms)

    ✓ can handle ck (74ms)

    ✓ can handle c2j (60ms)

    ✓ can handle c2k (88ms)

    ✓ can handle cj on last line (68ms)

    ✓ can handle ck on first line (97ms)

    ✓ can handle c2j on last line (63ms)

    ✓ can handle c2k on first line (111ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces (39ms)

    ✓ Can handle 'daw' on word with numeric prefix (45ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (57ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (42ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (38ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (119ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (48ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line (48ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (39ms)

    ✓ Can handle 'daw' around word at end of line (50ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (40ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces (40ms)

    ✓ Can handle 'daW' on word with leading spaces (40ms)

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines (84ms)

    ✓ Can handle 'daW' on beginning of word (72ms)

    ✓ Can handle 'daW' on end of one line (42ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (54ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (66ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (49ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (44ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word (56ms)

    ✓ Can handle 'diw' on word with numeric prefix (149ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line (46ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (42ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (49ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (66ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces (60ms)

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'diW' on beginning of word (55ms)

    ✓ Can handle d} at beginning of line (43ms)

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line (43ms)

    ✓ Can handle } with operator and count, at beginning of line (47ms)

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces (41ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces (43ms)

    ✓ Select spaces between sentences (69ms)

    ✓ Can handle 'df' (47ms)

    ✓ Can handle 'dt' (44ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (54ms)

    ✓ A should update desiredColumn (48ms)

    ✓ I should updated desiredColumn (50ms)

    ✓ leaving insert mode should update desired column when entered with a (87ms)

    ✓ leaving insert mode should update desired column when entered with i (89ms)

    ✓ Can handle 'yy' without changing cursor position (43ms)

    ✓ Can handle 'P' after 'yy' (47ms)

    ✓ Can handle 'p' after 'yy' (47ms)

    ✓ Can handle 'P' after 'Nyy' (48ms)

    ✓ Can handle 'p' after 'Nyy' (42ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (49ms)

    ✓ Can handle 'gp' after 'yy' (57ms)

    ✓ Can handle 'gp' after 'Nyy' (55ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (60ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (57ms)

    ✓ Can handle 'gP' after 'yy' (46ms)

    ✓ Can handle 'gP' after 'Nyy' (53ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (52ms)

    ✓ Can handle ']p' after yy (59ms)

    ✓ Can handle ']p' after 'Nyy' (59ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (59ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (45ms)

    ✓ Can handle '[p' after yy (62ms)

    ✓ Can handle '[p' after 'Nyy' (75ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (64ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (60ms)

    ✓ Can handle 'p' after y'a (65ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (151ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (39ms)

    ✓ Can handle pasting in visual mode over selection (108ms)

    ✓ Can repeat w (38ms)

    ✓ Can repeat p (80ms)

    ✓ I works correctly (71ms)

    ✓ gI works correctly (90ms)

    ✓ gi works correctly (105ms)

    ✓ `. works correctly (75ms)

    ✓ '. works correctly (77ms)

    ✓ g; works correctly (87ms)

    ✓ g, works correctly (110ms)

    ✓ g_ works correctly (39ms)

    ✓ 3g_ works correctly (71ms)

    ✓ gq handles spaces after single line comments correctly (54ms)

    ✓ gq handles spaces before single line comments correctly (44ms)

    ✓ gq handles tabs before single line comments correctly (52ms)

    ✓ Can handle space

    ✓ Can handle space (70ms)

    ✓ Undo 1 (81ms)

    ✓ Undo 2 (78ms)

    ✓ Undo cursor (115ms)

    ✓ Undo cursor 2 (140ms)

    ✓ Undo cursor 3 (117ms)

    ✓ Undo with movement first (87ms)

    ✓ Can handle 'U'

    ✓ Can handle 'U' for multiple changes (93ms)

    ✓ Can handle 'U' for new line below (130ms)

    ✓ Can handle 'U' for new line above (288ms)

    ✓ Can handle 'U' for consecutive changes only (155ms)

    ✓ Can handle 'u' to undo 'U' (48ms)

    ✓ Can handle 'U' to undo 'U' (59ms)

    ✓ Can handle 'u' after :s/abc/def (86ms)

    ✓ Redo (119ms)

    ✓ Redo (110ms)

    ✓ Redo (114ms)

    ✓ Can handle u (50ms)

    ✓ Can handle guw (52ms)

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (40ms)

    ✓ can handle s in visual mode (120ms)

    ✓ can handle p with selection (62ms)

    ✓ can handle P with selection (59ms)

    ✓ can handle p in visual to end of line (89ms)

    ✓ can repeat backspace twice (83ms)

    ✓ can delete linewise with d2G (42ms)

    ✓ can delete with + motion and count (49ms)

    ✓ can delete with - motion and count (42ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number (95ms)

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (42ms)

    ✓ can ctrl-a on a decimal (50ms)

    1) can ctrl-a on an octal 

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (40ms)

    ✓ can ctrl-x on a negative number with word before and after  (53ms)

    ✓ can ctrl-a properly on multiple lines (59ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (70ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it (38ms)

    ✓ can do Y

    ✓ Can do S (38ms)

    ✓ / does not affect mark (52ms)

    ✓ / can search with regex (42ms)

    ✓ / can search with newline (45ms)

    ✓ / can search through multiple newlines (117ms)

    ✓ / matches ^ per line (69ms)

    ✓ / matches $ per line (62ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark (53ms)

    ✓ /\c forces case insensitive search (67ms)

    ✓ /\C forces case sensitive search (42ms)

    ✓ <BS> deletes the last character in search in progress mode (60ms)

    ✓ <S-BS> deletes the last character in search in progress mode (49ms)

    ✓ <C-h> deletes the last character in search in progress mode (49ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (52ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (119ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag (48ms)

    ✓ Can do cit on a multiline tag (48ms)

    ✓ Can do cit on a multiline tag with nested tags (45ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (43ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (55ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (68ms)

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc (38ms)

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (59ms)

    ✓ cc copies linewise (64ms)

    ✓ Indent current line with correct Vim Mode (48ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent (45ms)

    ✓ Can do cai (45ms)

    ✓ Can do cii (42ms)

    ✓ Can do caI (66ms)

    ✓ Can do dai (44ms)

    ✓ Can do dii (276ms)

    ✓ Can do daI (38ms)

    ✓ `] go to the end of the previously operated or put text (78ms)

    ✓ '] go to the end of the previously operated or put text (135ms)

    ✓ `[ go to the start of the previously operated or put text (100ms)

    ✓ '[ go to the start of the previously operated or put text (293ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (220ms)

      ✓ gn selects the current word at |hello (332ms)

      ✓ gn selects the current word at h|ello (239ms)

      ✓ gn selects the current word at hel|lo (302ms)

      ✓ gn selects the current word at hell|o (299ms)

      ✓ gn selects the next word at hello| (265ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (67ms)

      ✓ dgn deletes the current word when cursor is at |hello (76ms)

      ✓ dgn deletes the current word when cursor is at h|ello (151ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (61ms)

      ✓ dgn deletes the current word when cursor is at hell|o (85ms)

      ✓ dgn deletes the next word when cursor is at hello| (75ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (85ms)

      ✓ cgn deletes the current word when cursor is at |hello (87ms)

      ✓ cgn deletes the current word when cursor is at h|ello (67ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (74ms)

      ✓ cgn deletes the current word when cursor is at hell|o (83ms)

      ✓ cgn deletes the next word when cursor is at hello| (90ms)

    can handle gN

      ✓ gN selects the previous match text (259ms)

      ✓ gN selects the current word at hell|o (263ms)

      ✓ gN selects the current word at hel|lo (224ms)

      ✓ gN selects the current word at h|ello (312ms)

      ✓ gN selects the current word at |hello (230ms)

      ✓ gN selects the previous word at | hello (338ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (67ms)

      ✓ dgN deletes the current word when cursor is at hell|o (75ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (309ms)

      ✓ dgN deletes the current word when cursor is at h|ello (141ms)

      ✓ dgN deletes the current word when cursor is at |hello (67ms)

      ✓ dgN deletes the previous word when cursor is at | hello (78ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (86ms)

      ✓ cgN deletes the current word when cursor is at hell|o (88ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (131ms)

      ✓ cgN deletes the current word when cursor is at h|ello (90ms)

      ✓ cgN deletes the current word when cursor is at |hello (80ms)

      ✓ cgN deletes the previous word when cursor is at | hello (114ms)

    marks

      ✓ capital marks can change the editors active document (115ms)

      ✓ can jump to lowercase mark (63ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (45ms)

    ✓ Can handle R past current line (48ms)

    ✓ Can handle R and exit Replace Mode (48ms)

    ✓ Can handle R across lines (277ms)

    ✓ Can handle R across lines and exit Replace Mode (98ms)

    ✓ Can handle R with {count} (85ms)

    ✓ Can handle backspace (131ms)

    ✓ Can handle backspace (63ms)

    ✓ Can handle backspace across lines (111ms)

    ✓ Can handle arrows (58ms)

    ✓ Can handle . (117ms)

    ✓ Can handle . across lines (169ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (153ms)

    ✓ Can handle wd (112ms)

    ✓ Can handle x (128ms)

    ✓ Can handle x across a selection (131ms)

    ✓ Can do vwd in middle of sentence (169ms)

    ✓ Can do vwd in middle of sentence (136ms)

    ✓ Can do vwd multiple times (244ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (145ms)

    ✓ Can handle H key (45ms)

    ✓ Can handle backspace key (50ms)

    ✓ handles case where we delete over a newline (230ms)

    ✓ handles change operator (124ms)

    ✓ Can do vat on multiple matching tags (61ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (93ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (158ms)

    ✓ Repeat-prefixed vat does not bleed below (60ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (41ms)

    ✓ Can do vi) on a matching parenthesis (46ms)

    ✓ Can do vi) on multiple matching parens (71ms)

    ✓ Can do va) on a matching parenthesis (52ms)

    ✓ Can do va) on multiple matching parens (90ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (46ms)

    ✓ Repeat-prefixed va) does not bleed below (53ms)

    ✓ Can do va} on a matching bracket as first character (86ms)

    ✓ Can do va} on multiple matching brackets (64ms)

    ✓ Can do vi( on a matching bracket near first character (60ms)

    ✓ Can do vi{ on outer pair of nested braces (92ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (59ms)

    ✓ Can do va] on multiple matching brackets (65ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (92ms)

    ✓ Repeat-prefixed vaf does not bleed below (56ms)

    ✓ vaf only expands to enclosing pairs (56ms)

    ✓ Can use . to repeat indent in visual (58ms)

    ✓ Can do v_x to delete to first char (147ms)

    ✓ Can do vg_x to delete to last char with no EOL (53ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (56ms)

    ✓ Can do v$x to delete to last char including EOL (49ms)

    ✓ Can do gv to reselect previous selection (146ms)

    Vim's EOL handling is weird

      ✓ delete through eol (112ms)

      ✓ join 2 lines by deleting through eol (84ms)

      ✓ d$ doesn't delete whole line (86ms)

      ✓ vd$ does delete whole line (78ms)

      ✓ Paste over selection copies the selection (63ms)

      ✓ Paste over selection copies the selection linewise (133ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (63ms)

      ✓ Can handle <down> key (48ms)

      ✓ Can handle <left> key (42ms)

      ✓ Can handle <right> key (49ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (47ms)

      ✓ Can handle 'gj'

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (49ms)

      ✓ Can handle 'vawd' on word with trailing spaces (159ms)

      ✓ Can handle 'vawd' on word with leading spaces (66ms)

      ✓ Can handle 'vawd' on word with numeric prefix (56ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (86ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (53ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (73ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (50ms)

      ✓ Can handle 'vaWd' on word with leading spaces (48ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (58ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (51ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (57ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (58ms)

      ✓ Can handle 'vaWd' on word with leading spaces (49ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (49ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (114ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (50ms)

      ✓ Can handle 'vawd' on word with trailing spaces (43ms)

      ✓ Can handle 'vawd' on word with leading spaces (46ms)

      ✓ Can handle 'vawd' on word with numeric prefix (122ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (46ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (59ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (61ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (47ms)

      ✓ Can handle 'vaWd' on word with leading spaces (42ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (51ms)

      ✓ Can handle 'Y' in visual mode (66ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (83ms)

      ✓ Select sentence with leading spaces in visual mode (68ms)

      ✓ Select multiple sentences in visual mode (47ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (69ms)

      ✓ Select inner sentence with leading spaces in visual mode (68ms)

      ✓ Select spaces between sentences in visual mode (95ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (49ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (56ms)

      ✓ Can do vat on a matching tag (63ms)

    handles replace in visual mode

      ✓ Can do a single line replace (48ms)

      ✓ Can do a multi line replace (58ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (101ms)

      ✓ D deletes the current line (65ms)

    handles indent blocks in visual mode

      ✓ Can do vai (52ms)

      ✓ Can do vii (51ms)

      ✓ Doesn't naively select the next line (39ms)

      ✓ Searches backwards if cursor line is empty (93ms)

      ✓ Can do vaI (46ms)

    visualstar

      ✓ Works with * (60ms)

      ✓ Works with # (51ms)

    search works in visual mode

      ✓ Works with / (65ms)

      ✓ Works with ? (60ms)

      ✓ Selects correct range (143ms)

    X will delete linewise

      ✓ normal selection (165ms)

      ✓ normal selection (43ms)

    C will delete linewise

      ✓ normal selection (86ms)

      ✓ normal selection (96ms)

    R will delete linewise

      ✓ normal selection (82ms)

      ✓ normal selection (50ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (86ms)

      ✓ upward selection (109ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (48ms)

      ✓ multiline indent bottom up selection (64ms)

      ✓ repeat multiline indent top down selection (86ms)

      ✓ repeat multiline indent bottom up selection (67ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (55ms)

      ✓ multiline outdent bottom up selection (48ms)

      ✓ repeat multiline outdent top down selection (63ms)

      ✓ repeat multiline outdent bottom up selection (108ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (174ms)

    vi{ will go to end of second to last line

      ✓ select (139ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (537ms)

      ✓ gv selects the last pasted text (which is longer than original) (486ms)

      ✓ gv selects the last pasted text (multiline) (278ms)

    can handle gn

      ✓ gn selects the next match text (294ms)

      ✓ gn selects the current word at |hello (221ms)

      ✓ gn selects the current word at h|ello (294ms)

      ✓ gn selects the current word at hel|lo (263ms)

      ✓ gn selects the next word at hell|o (235ms)

      ✓ gn selects the next word at hello| (331ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (72ms)

      ✓ U/gU across a selection (79ms)

      ✓ U/gU across a selection (reverse) (122ms)

      ✓ u/gu on single character (72ms)

      ✓ u/gu across a selection (88ms)

      ✓ u/gu across a selection (reverse) (131ms)

  Mode Visual Block

    ✓ can be activated (46ms)

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D' (68ms)

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (142ms)

    ✓ o works in visual block mode (48ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (178ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (183ms)

    ✓ Can handle wd (131ms)

    ✓ Can handle x (199ms)

    ✓ Can handle x across a selection (151ms)

    ✓ Can do vwd in middle of sentence (218ms)

    ✓ Can do vwd in middle of sentence (159ms)

    ✓ Can do vwd multiple times (458ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (136ms)

    ✓ handles case where we delete over a newline (180ms)

    ✓ handles change operator (187ms)

    ✓ Vp updates register content (152ms)

    ✓ Vp does not append unnecessary newlines (first line) (48ms)

    ✓ Vp does not append unnecessary newlines (middle line) (99ms)

    ✓ Vp does not append unnecessary newlines (last line) (65ms)

    ✓ Exiting via <Esc> returns cursor to original column (48ms)

    Vim's EOL handling is weird

      ✓ delete through eol (82ms)

      ✓ join 2 lines by deleting through eol (135ms)

      ✓ d$ doesn't delete whole line (77ms)

      ✓ vd$ does delete whole line (81ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (68ms)

      ✓ Can handle <down> key (43ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (52ms)

      ✓ Can handle 'gj' (44ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (56ms)

      ✓ Can handle d key (50ms)

      ✓ Can handle d key (114ms)

      ✓ Can handle d key (45ms)

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace (38ms)

      ✓ Can do a multi visual line replace from the bottom up (48ms)

    search works in visual line mode

      ✓ Works with / (63ms)

      ✓ Works with ? (56ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (249ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (48ms)

      ✓ linewise visual put works also in the end of document (49ms)

      ✓ gv selects the last pasted text (which is shorter than original) (422ms)

      ✓ gv selects the last pasted text (which is longer than original) (459ms)

      ✓ gv selects the last pasted text (multiline) (186ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly (79ms)

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (54ms)

    ✓ Can handle 'x' at end of line (171ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (58ms)

    ✓ Can handle '<Del>' at end of line (132ms)

    ✓ Can handle 'cc' (46ms)

    ✓ Can handle 'Ncc' (50ms)

    ✓ Can handle 'yy' (47ms)

    ✓ Can handle 'D' (51ms)

    ✓ Can handle 'D' on empty lines (109ms)

    ✓ Can handle 'DD' (77ms)

    ✓ Can handle 'C' (44ms)

    ✓ Can handle 'NC' (46ms)

    ✓ Can handle 'NC' and put (120ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r' (43ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (51ms)

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
'

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (90ms)

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (93ms)

    ✓ Can handle 'J' with leading white space on next line (40ms)

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines (67ms)

    ✓ Can handle 'J' with ')' first character on next line (44ms)

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode (48ms)

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (83ms)

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}' (233ms)

    ✓ Can handle '<BS>' in insert mode (75ms)

    ✓ Can handle undo with P (118ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (60ms)

    ✓ Can repeat '~' with dot (51ms)

    ✓ Can repeat 'x' (43ms)

    ✓ Can repeat 'J' (40ms)

    ✓ Can handle dot with A (103ms)

    ✓ Can handle dot with I (70ms)

    ✓ Can repeat actions that require selections (82ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (75ms)

    ✓ Can repeat insert change and '<C-t>' (106ms)

    ✓ Can repeat change by `<C-a>` (86ms)

    ✓ Only one arrow key can be repeated in Insert Mode (70ms)

    ✓ Cached content change will be cleared by arrow keys (70ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end (38ms)

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end (42ms)

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ]) (42ms)

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge' (38ms)

    ✓ Can handle 'gg' (57ms)

    ✓ Can handle 'gg' to first non blank char on random line (123ms)

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline (57ms)

    38) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (45ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file (68ms)

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count (86ms)

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (44ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (38ms)

    ✓ Can handle 'F' and find back search (94ms)

    ✓ Can handle 'f' and multiple back searches (46ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice (139ms)

    ✓ Can handle 't' and find back search (92ms)

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (51ms)

    ✓ Can run a forward and find next search (128ms)

    ✓ Can run a forward and find previous search from end of word (61ms)

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (39ms)

    ✓ cancelled search reverts to previous search state (57ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (61ms)

    ✓ Search offsets: b2 goes 2 to the right (51ms)

    ✓ Search offsets: b+3 goes 3 to the right (55ms)

    ✓ Search offsets: e goes to the end (44ms)

    ✓ Search offsets: character offset goes across line boundaries (58ms)

    ✓ Search offsets: 2 goes 2 down (101ms)

    ✓ Search offsets: -2 goes 2 up (56ms)

    ✓ maintains column position correctly (110ms)

    ✓ maintains column position correctly with $ (43ms)

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat (51ms)

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g# (42ms)

    ✓ Can handle g#n (145ms)

    ✓ Can handle # (67ms)

    ✓ Can handle # already on the word

    ✓ Can handle ## (40ms)

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle + (94ms)

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (43ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix (83ms)

    39) Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line
    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word
    word left
      ✓ move cursor word left across the different char kind
      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up
      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (41ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (115ms)

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (45ms)

      insert mode

        ✓ <left> does not wrap to previous line (92ms)

        ✓ <right> does not wrap to next line (49ms)

    wrapscan enabled

      ✓ search wraps around the end of the file (60ms)

      ✓ search wraps around the start of the file (66ms)

    wrapscan disabled

      ✓ search stops at the end of the file (139ms)

      ✓ search stops at the start of the file (50ms)

  Multicursor

    ✓ can add multiple cursors below (116ms)

    ✓ can add multiple cursors above (221ms)

    ✓ dd works with multi-cursor (65ms)

    47) dab works with multi-cursor

    ✓ Vd works with multi-cursor (45ms)

    48) <C-v>d works with multi-cursor

    49) cw works with multi-cursor

    50) <count>f<char> works with multi-cursor

    51) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (157ms)

    ✓ gcj comments in current and next line (167ms)

    ✓ block comment with motion (152ms)

    ✓ block comment in Visual Mode (186ms)

    ✓ comment in visual line mode (200ms)

    ✓ comment in visual block mode (213ms)

  format operator

    ✓ == formats current line (460ms)

    ✓ =$ formats entire line (345ms)

    ✓ =j formats two lines (408ms)

    ✓ 3=k formats three lines (221ms)

    52) =gg formats to top of file

    ✓ =G formats to bottom of file (255ms)

    ✓ =ip formats paragraph (188ms)

    ✓ format in visual mode (157ms)

  put operator

    ✓ basic put test (49ms)

    ✓ test yy end of line (60ms)

    ✓ test yy first line (62ms)

    ✓ test yy middle line (128ms)

    ✓ test yy with correct positon movement (95ms)

    ✓ test visual block single line yank p (76ms)

    ✓ test visual block single line yank P (68ms)

    ✓ test visual block single line delete p (65ms)

    ✓ test visual block single line delete P (77ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (77ms)

    ✓ g? in visual mode works (67ms)

    ✓ g? in visual line mode works (70ms)

    53) g? in visual block mode works

  shift operator

    ✓ basic shift left test (57ms)

    ✓ shift left goto end test

    ✓ shift left goto line test

    ✓ shift right goto end test (61ms)

    ✓ shift right goto line test (80ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work (125ms)

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace (111ms)

      ✓ step to Camel word

      ✓ step to CAP word (65ms)

      ✓ step after CAP word (46ms)

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word (126ms)

      ✓ step to operator and then over (71ms)

    handles <leader>w for underscore_var

      ✓ step to _word (39ms)

      ✓ step over whitespace to word (53ms)

      ✓ step from inside word to _word (46ms)

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (91ms)

      ✓ delete from middle of camelWord (51ms)

      ✓ delete from start of CamelWord (82ms)

      ✓ delete two words from camelWord (75ms)

      ✓ delete from start of underscore_word (40ms)

      ✓ delete from middle of underscore_word (39ms)

      ✓ delete two words from camel_word (50ms)

    handles di<leader>w

      ✓ delete from start of camelWord (51ms)

      ✓ delete from middle of camelWord (268ms)

      ✓ delete from start of CamelWord (62ms)

      ✓ delete two words from camelWord (61ms)

      ✓ delete from start of underscore_word (54ms)

      ✓ delete from middle of underscore_word (495ms)

      ✓ delete two words from camel_word (77ms)

    handles <leader>b

      ✓ back from middle of word (48ms)

      ✓ back over whitespace to camelWord

      ✓ back twice over operator (76ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator (54ms)

  easymotion plugin

    ✓ Can handle s move (55ms)

    ✓ Can handle 2s move (61ms)

    ✓ Can handle f move (44ms)

    ✓ Can handle 2f move (93ms)

    ✓ Can handle F move (74ms)

    ✓ Can handle 2F move (53ms)

    ✓ Can handle t move (71ms)

    ✓ Can handle bd-t move (67ms)

    ✓ Can handle 2t move (113ms)

    ✓ Can handle bd-t2 move (115ms)

    ✓ Can handle T move (126ms)

    ✓ Can handle 2T move (84ms)

    ✓ Can handle w move (92ms)

    ✓ Can handle bd-w move (76ms)

    ✓ Can handle b move (55ms)

    ✓ Can handle e move

    ✓ Can handle bd-e move (66ms)

    ✓ Can handle ge move

    ✓ Can handle n-char move (151ms)

    ✓ Can handle j move (51ms)

    ✓ Can handle k move (57ms)

    ✓ Can handle bd-jk move (1) (61ms)

    ✓ Can handle bd-jk move (2) (43ms)

    ✓ Can handle lineforward move (1) (303ms)

    ✓ Can handle lineforward move (2) (84ms)

    54) Can handle linebackward move (1)

    55) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (49ms)

    ✓ Can handle searching for carat (^) (46ms)

    ✓ Can handle searching for dot (.) (43ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (139ms)

    ✓ Replaces within inner Word (84ms)

    ✓ Replaces within '' (62ms)

    ✓ Replaces within '' including spaces (91ms)

    ✓ Replaces within () (82ms)

    ✓ Replaces within () including spaces (49ms)

    ✓ Replaces within a paragraph (109ms)

    ✓ Replaces using a specified register (65ms)

    ✓ Replaces within {} over multiple lines (86ms)

    ✓ Replaces a multiline register within {} over multiple lines (77ms)

    ✓ Replaces a multiline register within {} over multiple lines (112ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (120ms)

    ✓ grr replaces the entire line with the register (63ms)

    ✓ grr can replace multiple lines (58ms)

    ✓ Replaces in visual mode (142ms)

    ✓ Replaces in visual mode using a specified register (127ms)

    ✓ Replaces in visual line mode (82ms)

    ✓ grj is linewise (87ms)

  sneak plugin

    ✓ Can handle s motion (514ms)

    ✓ Can handle S motion (47ms)

    ✓ Can handle <operator>z motion (51ms)

    ✓ Can handle <operator>Z motion (58ms)

    ✓ Can handle s; motion (88ms)

    ✓ Can handle s, motion (55ms)

    ✓ Can handle S; motion (49ms)

    ✓ Can handle S, motion (51ms)

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (214ms)

    ✓ Can handle single letter <operator>Z motion (123ms)

    ✓ Can handle single letter s; motion (40ms)

    ✓ Can handle single letter s, motion (41ms)

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion (72ms)

    ✓ Can handle multiline single char <number>s motion

  sneakReplacesF

    ✓ sneakReplacesF forward (42ms)

    ✓ sneakReplacesF backward (78ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (92ms)

    ✓ 'ysiw(' surrounds word with space (74ms)

    ✓ 'ysw)' surrounds word without space (82ms)

    ✓ 'ysw(' surrounds word with space (71ms)

    ✓ 'ysaw)' surrounds word without space (121ms)

    ✓ 'ysaw(' surrounds word with space (74ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (157ms)

    ✓ 'ysiw<' surrounds word with tags (183ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (109ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (71ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (94ms)

    ✓ change surround (48ms)

    ✓ change surround with two pairs of quotes (73ms)

    ✓ change surround with two pairs of parens (83ms)

    ✓ change surround with alias (205ms)

    ✓ change surround to tags (218ms)

    ✓ delete surround (167ms)

    ✓ delete surround with quotes (108ms)

    ✓ delete surround with nested of quotes (74ms)

    ✓ delete surround with inconsistent quotes (63ms)

    ✓ delete surround with mixed quotes (98ms)

    ✓ delete surround with empty quotes cursor at start (80ms)

    ✓ delete surround with empty quotes cursor at end (99ms)

    ✓ don't delete surround if cursor is after closing match (38ms)

    ✓ delete surround if cursor is before opening match (116ms)

    ✓ delete surround with two pairs of parens (53ms)

    ✓ delete surround with alias (56ms)

    ✓ delete surround with tags (104ms)

    ✓ change surround brackets at end of line (58ms)

    ✓ changing brackets with surround works again (496ms)

    ✓ change surround with tags that contain an attribute and preserve them (125ms)

    ✓ change surround with tags that contain an attribute and remove them (85ms)

  register

    ✓ Can copy to a register (82ms)

    ✓ Can use two registers together (201ms)

    ✓ Can use black hole register (116ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (407ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (313ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (219ms)

    ✓ Register '1'-'9' stores delete content (312ms)

    ✓ "A appends linewise text to "a (308ms)

    ✓ "A appends character wise text to "a (377ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (218ms)

    ✓ Small deletion using Del is stored in small delete register (203ms)

    ✓ Small deletion using X is stored in small delete register (391ms)

    ✓ Search register (/) is set by forward search (405ms)

    ✓ Search register (/) is set by backward search (408ms)

    ✓ Search register (/) is set by star search (250ms)

    ✓ Command register (:) is set by command line (80ms)

    ✓ Read-only registers cannot be written to (230ms)

    clipboard

      ✓ Can access '*' (clipboard) register (140ms)

      ✓ Can access '+' (clipboard) register (58ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (248ms)

    ✓ Can repeat N times reversed t<character> (135ms)

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward (88ms)

      ✓ move one sentence backward

      ✓ move [count] sentences backward (52ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (76ms)

      ✓ move one sentence backward no space - middle (114ms)

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line (60ms)

      ✓ move one sentence backward - multiline - previous line - period (41ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar' (71ms)

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath
      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1290 passing (4m)

  4 pending

  55 failing

  1) Mode Normal
       can ctrl-a on an octal :

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +31
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)


  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Content does not match; Expected=test aaa test aaa test aaa test . Actual=.
      + expected - actual

      +test aaa test aaa test aaa test 
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  9) Mode Visual
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)


  16) Mode Visual Block
       Can handle c forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)


  17) Mode Visual Block
       Can handle c backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)


  18) Mode Visual Block
       Can handle C:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)


  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Actual and expected number of cursors do not match
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -2
      +0
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +8
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)


  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)


  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)


  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)

  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)

  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  47) Multicursor
       dab works with multi-cursor:

      Content does not match; Expected=. Actual=two.
      + expected - actual

      -two
      
      at Suite.<anonymous> (test/multicursor.test.ts:59:3)


  48) Multicursor
       <C-v>d works with multi-cursor:

      Missing '|' in test object.
      + expected - actual

      -false
      +true
      
      at Suite.<anonymous> (test/multicursor.test.ts:75:3)


  49) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three  five. Actual=one  three | five.
      + expected - actual

      -one  three | five
      +one  three  five
      
      at Suite.<anonymous> (test/multicursor.test.ts:83:3)

  50) Multicursor
       <count>f<char> works with multi-cursor:

      Content does not match; Expected=date! eggplant! fig.. Actual=|date! eggplant! fig..
      + expected - actual

      -|date! eggplant! fig.
      +date! eggplant! fig.
      
      at Suite.<anonymous> (test/multicursor.test.ts:91:3)


  51) Multicursor
       o works with multi-cursor:

      Content does not match; Expected=line2. Actual=l|ine2.
      + expected - actual

      -l|ine2
      +line2
      
      at Suite.<anonymous> (test/multicursor.test.ts:99:3)


  52) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  53) rot13 operator
       g? in visual block mode works:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  54) easymotion plugin
       Can handle linebackward move (1):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -6
      +3
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  55) easymotion plugin
       Can handle linebackward move (2):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -8
      +6
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00
/home/travis/.npm/content-v2/sha512/4f/e9/bcf557578ff7a2759c9e8ef9a83fd8e2bd78010dd90e4815508d4f64177e3d344c75d1074f346c4779951a8f5225277dbf7b07725c98e7271cb126ba18c2
/home/travis/.npm/index-v5/89/35/dfa57d791c1e604b351918399fa163d7f2b1e44c6f26901b366440432cc6\n
changes detected, packing new archive
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T02:56:33.088Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative

    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (43ms)

    ✓ command <C-w> can remove word in search mode (53ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (56ms)

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line (40ms)

    ✓ <C-e> puts cursor at end of command line (57ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (70ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (95ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (130ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (101ms)

  cursor location

    ✓ cursor location in command line (43ms)

    ✓ cursor location in search

  HistoryFile

    ✓ add command (38ms)

    ✓ add empty command

    ✓ add command over configuration.history (46ms)

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (68ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1633ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar

  command line scanner

    ✓ ctor
    ✓ can detect EOF with empty input
    ✓ next() returns EOF at EOF
    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF
    ✓ nextWord() return EOF at EOF
    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set
    ✓ can expect only one of a set
  Smile command

    ✓ :smile creates new tab (539ms)

    ✓ :smile editor contains smile text (542ms)

  Basic sort

    ✓ Sort whole file, asc (141ms)

    ✓ Sort whole file, asc, ignoreCase (83ms)

    ✓ Sort whole file, dsc (136ms)

    ✓ Sort whole file, dsc, ignoreCase (112ms)

    ✓ Sort range, asc (236ms)

    ✓ Sort range, asc, ignoreCase (138ms)

    ✓ Sort range, dsc (131ms)

    ✓ Sort range, dsc, ignoreCase (124ms)

    ✓ Sort whole file, asc, unique (125ms)

  Horizontal split

    ✓ :sp creates a second split (143ms)

    ✓ :split creates a second split (84ms)

    ✓ :new creates a second split (232ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser
    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !
    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count
    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch
    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (63ms)

    ✓ Replace with `g` flag (63ms)

    ✓ Replace with flags AND count (132ms)

    ✓ Replace with `c` flag (80ms)

    ✓ Replace with `gc` flag (71ms)

    ✓ Replace across all lines (86ms)

    ✓ Replace on specific single line (96ms)

    ✓ Replace on current line using dot (166ms)

    ✓ Replace single relative line using dot and plus (93ms)

    ✓ Replace across specific line range (105ms)

    ✓ Replace across relative line range using dot, plus, and minus (126ms)

    ✓ Replace across relative line range using numLines+colon shorthand (99ms)

    ✓ Repeat replacement across relative line range (88ms)

    ✓ Replace with range AND count but no flags (99ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (104ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (97ms)

    ✓ Undocumented: trailing operators use 1 as RHS (87ms)

    ✓ Replace specific single equal lines (94ms)

    ✓ Replace current line with no active selection (117ms)

    ✓ Replace text in selection (143ms)

    ✓ Substitute support marks (149ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (52ms)

      ✓ Replace with `g` flag inverts global flag (56ms)

      ✓ Replace with `c` flag inverts global flag (74ms)

      ✓ Replace multiple lines (210ms)

      ✓ Replace across specific lines (87ms)

      ✓ Replace current line with no active selection (95ms)

      ✓ Replace text in selection (117ms)

      ✓ Substitute support marks (109ms)

      ✓ Substitute with escaped delimiter (72ms)
    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (253ms)

      ✓ Substitute with previous search using # (200ms)

      ✓ Substitute with previous search using / (251ms)

      ✓ Substitute with parameters should update search state (126ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (318ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (144ms)

      ✓ Substitute repeat previous should accept flags (65ms)

      ✓ Substitute with empty search string should use last searched pattern (293ms)

      ✓ Ampersand (&) should repeat the last substitution (63ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (64ms)

    ✓ tabe with current file path does nothing (47ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (52ms)

    ✓ command line file navigate tab completion (67ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (87ms)

    ✓ command line file tab completion with space in file path (231ms)

  Vertical split

    ✓ :vs creates a second split (69ms)

    ✓ :vsp creates a second split (80ms)

    ✓ :vsplit creates a second split (71ms)

    ✓ :vnew creates a second split (245ms)

    ✓ :vne creates a second split (224ms)

  Basic write-quit

    ✓ Run write and quit (62ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (43ms)

      ✓ Can complete lines in file with different indentation (58ms)

      ✓ Returns no completions for unmatched line (39ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (77ms)

    ✓ getMatchingRemap (84ms)

    ✓ jj -> <Esc> through modehandler (131ms)

    ✓ 0 -> :wq through modehandler (96ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (84ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (74ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (104ms)

    ✓ d -> black hole register delete in normal mode through modehandler (149ms)

    ✓ d -> black hole register delete in normal mode through modehandler (128ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (149ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg (40ms)

        ✓ Can track jumps for keys: GggG (40ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (118ms)

        ✓ Can track jumps for keys: /b<CR>n (55ms)

[main 2020-02-26T02:57:03.092Z] update#setState checking for updates

[main 2020-02-26T02:57:03.176Z] update#setState idle

        ✓ Can track jumps for keys: G?b<CR>ggG (72ms)

        ✓ Can track jumps for keys: j%% (46ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (140ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (51ms)

        ✓ Can track jumps for keys: j%%<C-o>% (48ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (58ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (51ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (109ms)

        ✓ Can enter number to jump back multiple times (70ms)

        ✓ Can track one-line `` jumps (78ms)

        ✓ Can track one-line double `` jumps (90ms)

        ✓ Can track one-line '' jumps (102ms)

        ✓ Can track one-line double '' jumps (103ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (82ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (102ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (97ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (136ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (101ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (149ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (184ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (199ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (180ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (65ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (121ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (60ms)

  Record and execute a macro

    ✓ Can record and execute (178ms)

    ✓ Can repeat last invoked macro (224ms)

    ✓ Can play back with count (541ms)

    ✓ Can play back with count, abort when a motion fails (412ms)

    ✓ Repeat change on contiguous lines (155ms)

    ✓ Append command to a macro (169ms)

    ✓ Can record Ctrl Keys and repeat (178ms)

    ✓ Can execute macros with dot commands properly (110ms)

    ✓ : (command) register can be used as a macro (95ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get
  Mode Insert

    ✓ can be activated (75ms)

    ✓ can handle key events (52ms)

    ✓ <Esc> should change cursor position (57ms)

    ✓ <C-c> can exit insert (58ms)

    ✓ <Esc> can exit insert (104ms)

    ✓ Stay in insert when entering characters (75ms)

    ✓ Can handle 'O' (48ms)

    ✓ 'i' puts you in insert mode before the cursor (48ms)

    ✓ 'I' puts you in insert mode at start of line (52ms)

    ✓ 'a' puts you in insert mode after the cursor (39ms)

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace (41ms)

    ✓ Correctly places the cursor after deleting the previous line break (72ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (49ms)

    ✓ Backspace works on whitespace only lines (49ms)

    ✓ Backspace works on end of whitespace only lines (47ms)

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode (45ms)

    ✓ Delete works at line end (57ms)

    ✓ Delete works at end of file

    ✓ Delete works with repeat (301ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o> (40ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (89ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (50ms)

    ✓ Can perform insert command prefixed with count (44ms)

    ✓ Can perform append command prefixed with count (66ms)

    ✓ Can perform insert at start of line command prefixed with count (94ms)

    ✓ Can perform append to end of line command prefixed with count (60ms)

    ✓ Can perform change char (s) command prefixed with count (135ms)

    ✓ Can perform command prefixed with count with <C-[> (46ms)

    ✓ Can handle 'o' with count (110ms)

    ✓ Can handle 'O' with count (97ms)

    ✓ Can handle backspace at beginning of line with all spaces (47ms)

    ✓ Can handle digraph insert (104ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw (53ms)

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2) (46ms)

    ✓ Can handle dd last line (55ms)

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document (45ms)

    ✓ Can handle d2d (46ms)

    ✓ Can handle dd empty line (45ms)

    ✓ Can handle ddp (49ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (50ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (43ms)

    ✓ Can handle 'dl' at end of line (56ms)

    ✓ Can handle 'dF' (59ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter> (52ms)

    ✓ Can handle 'dj' (125ms)

    ✓ Can handle 'dk' (40ms)

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'cw' (68ms)

    ✓ Can handle 'cw' without deleting following white spaces (39ms)

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (41ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (40ms)

    ✓ Can handle 'c]}' without deleting closing bracket (43ms)

    ✓ Can handle 's' (45ms)

    ✓ Can handle 'yiw' with correct cursor ending position (79ms)

    ✓ Can handle 'ciw' (79ms)

    ✓ Can handle 'ciw' on blanks (64ms)

    ✓ Can handle 'caw' (206ms)

    ✓ Can handle 'caw' on first letter (99ms)

    ✓ Can handle 'caw' on blanks (81ms)

    ✓ Can handle 'caw' on blanks (39ms)

    ✓ Can handle 'ci(' on first parentheses (45ms)

    ✓ Can handle 'ci(' with nested parentheses (49ms)

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses (73ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (47ms)

    ✓ Can handle count prefixed 'ci)' (47ms)

    ✓ Can handle count prefixed 'ca)' (53ms)

    ✓ Can handle 'ca(' spanning multiple lines (144ms)

    ✓ Can handle 'cab' spanning multiple lines (79ms)

    ✓ Can handle 'ci{' spanning multiple lines (39ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (47ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (52ms)

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {} (45ms)

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (54ms)

    ✓ Can handle 'ca]' on first bracket (49ms)

    ✓ Can handle 'ci'' on first quote (46ms)

    ✓ Can handle 'ci'' inside quoted string (39ms)

    ✓ Can handle 'ci'' on closing quote (49ms)

    ✓ Can handle 'ci'' when string is ahead (45ms)

    ✓ Can handle 'ci"' on opening quote (41ms)

    ✓ Can handle 'ci"' starting behind the quoted word (42ms)

    ✓ Can handle 'ca"' starting behind the quoted word (38ms)

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (42ms)

    ✓ Can handle 'ci"' with a single escaped quote (44ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (44ms)

    ✓ Can handle 'ci"' with an escaped backslash (108ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (53ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences (43ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (39ms)

    ✓ will fail when ca" ahead of quoted string (45ms)

    ✓ Can handle 'ca`' inside word (49ms)

    ✓ can handle cj (67ms)

    ✓ can handle ck (74ms)

    ✓ can handle c2j (60ms)

    ✓ can handle c2k (88ms)

    ✓ can handle cj on last line (68ms)

    ✓ can handle ck on first line (97ms)

    ✓ can handle c2j on last line (63ms)

    ✓ can handle c2k on first line (111ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces (39ms)

    ✓ Can handle 'daw' on word with numeric prefix (45ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (57ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (42ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (38ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (119ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (48ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line (48ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (39ms)

    ✓ Can handle 'daw' around word at end of line (50ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (40ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces (40ms)

    ✓ Can handle 'daW' on word with leading spaces (40ms)

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines (84ms)

    ✓ Can handle 'daW' on beginning of word (72ms)

    ✓ Can handle 'daW' on end of one line (42ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (54ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (66ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (49ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (44ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word (56ms)

    ✓ Can handle 'diw' on word with numeric prefix (149ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line (46ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (42ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (49ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (66ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces (60ms)

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'diW' on beginning of word (55ms)

    ✓ Can handle d} at beginning of line (43ms)

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line (43ms)

    ✓ Can handle } with operator and count, at beginning of line (47ms)

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces (41ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces (43ms)

    ✓ Select spaces between sentences (69ms)

    ✓ Can handle 'df' (47ms)

    ✓ Can handle 'dt' (44ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (54ms)

    ✓ A should update desiredColumn (48ms)

    ✓ I should updated desiredColumn (50ms)

    ✓ leaving insert mode should update desired column when entered with a (87ms)

    ✓ leaving insert mode should update desired column when entered with i (89ms)

    ✓ Can handle 'yy' without changing cursor position (43ms)

    ✓ Can handle 'P' after 'yy' (47ms)

    ✓ Can handle 'p' after 'yy' (47ms)

    ✓ Can handle 'P' after 'Nyy' (48ms)

    ✓ Can handle 'p' after 'Nyy' (42ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (49ms)

    ✓ Can handle 'gp' after 'yy' (57ms)

    ✓ Can handle 'gp' after 'Nyy' (55ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (60ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (57ms)

    ✓ Can handle 'gP' after 'yy' (46ms)

    ✓ Can handle 'gP' after 'Nyy' (53ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (52ms)

    ✓ Can handle ']p' after yy (59ms)

    ✓ Can handle ']p' after 'Nyy' (59ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (59ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (45ms)

    ✓ Can handle '[p' after yy (62ms)

    ✓ Can handle '[p' after 'Nyy' (75ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (64ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (60ms)

    ✓ Can handle 'p' after y'a (65ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (151ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (39ms)

    ✓ Can handle pasting in visual mode over selection (108ms)

    ✓ Can repeat w (38ms)

    ✓ Can repeat p (80ms)

    ✓ I works correctly (71ms)

    ✓ gI works correctly (90ms)

    ✓ gi works correctly (105ms)

    ✓ `. works correctly (75ms)

    ✓ '. works correctly (77ms)

    ✓ g; works correctly (87ms)

    ✓ g, works correctly (110ms)

    ✓ g_ works correctly (39ms)

    ✓ 3g_ works correctly (71ms)

    ✓ gq handles spaces after single line comments correctly (54ms)

    ✓ gq handles spaces before single line comments correctly (44ms)

    ✓ gq handles tabs before single line comments correctly (52ms)

    ✓ Can handle space

    ✓ Can handle space (70ms)

    ✓ Undo 1 (81ms)

    ✓ Undo 2 (78ms)

    ✓ Undo cursor (115ms)

    ✓ Undo cursor 2 (140ms)

    ✓ Undo cursor 3 (117ms)

    ✓ Undo with movement first (87ms)

    ✓ Can handle 'U'

    ✓ Can handle 'U' for multiple changes (93ms)

    ✓ Can handle 'U' for new line below (130ms)

    ✓ Can handle 'U' for new line above (288ms)

    ✓ Can handle 'U' for consecutive changes only (155ms)

    ✓ Can handle 'u' to undo 'U' (48ms)

    ✓ Can handle 'U' to undo 'U' (59ms)

    ✓ Can handle 'u' after :s/abc/def (86ms)

    ✓ Redo (119ms)

    ✓ Redo (110ms)

    ✓ Redo (114ms)

    ✓ Can handle u (50ms)

    ✓ Can handle guw (52ms)

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (40ms)

    ✓ can handle s in visual mode (120ms)

    ✓ can handle p with selection (62ms)

    ✓ can handle P with selection (59ms)

    ✓ can handle p in visual to end of line (89ms)

    ✓ can repeat backspace twice (83ms)

    ✓ can delete linewise with d2G (42ms)

    ✓ can delete with + motion and count (49ms)

    ✓ can delete with - motion and count (42ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number (95ms)

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (42ms)

    ✓ can ctrl-a on a decimal (50ms)

    1) can ctrl-a on an octal 

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (40ms)

    ✓ can ctrl-x on a negative number with word before and after  (53ms)

    ✓ can ctrl-a properly on multiple lines (59ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (70ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it (38ms)

    ✓ can do Y

    ✓ Can do S (38ms)

    ✓ / does not affect mark (52ms)

    ✓ / can search with regex (42ms)

    ✓ / can search with newline (45ms)

    ✓ / can search through multiple newlines (117ms)

    ✓ / matches ^ per line (69ms)

    ✓ / matches $ per line (62ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark (53ms)

    ✓ /\c forces case insensitive search (67ms)

    ✓ /\C forces case sensitive search (42ms)

    ✓ <BS> deletes the last character in search in progress mode (60ms)

    ✓ <S-BS> deletes the last character in search in progress mode (49ms)

    ✓ <C-h> deletes the last character in search in progress mode (49ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (52ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (119ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag (48ms)

    ✓ Can do cit on a multiline tag (48ms)

    ✓ Can do cit on a multiline tag with nested tags (45ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (43ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (55ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (68ms)

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc (38ms)

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (59ms)

    ✓ cc copies linewise (64ms)

    ✓ Indent current line with correct Vim Mode (48ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent (45ms)

    ✓ Can do cai (45ms)

    ✓ Can do cii (42ms)

    ✓ Can do caI (66ms)

    ✓ Can do dai (44ms)

    ✓ Can do dii (276ms)

    ✓ Can do daI (38ms)

    ✓ `] go to the end of the previously operated or put text (78ms)

    ✓ '] go to the end of the previously operated or put text (135ms)

    ✓ `[ go to the start of the previously operated or put text (100ms)

    ✓ '[ go to the start of the previously operated or put text (293ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (220ms)

      ✓ gn selects the current word at |hello (332ms)

      ✓ gn selects the current word at h|ello (239ms)

      ✓ gn selects the current word at hel|lo (302ms)

      ✓ gn selects the current word at hell|o (299ms)

      ✓ gn selects the next word at hello| (265ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (67ms)

      ✓ dgn deletes the current word when cursor is at |hello (76ms)

      ✓ dgn deletes the current word when cursor is at h|ello (151ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (61ms)

      ✓ dgn deletes the current word when cursor is at hell|o (85ms)

      ✓ dgn deletes the next word when cursor is at hello| (75ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (85ms)

      ✓ cgn deletes the current word when cursor is at |hello (87ms)

      ✓ cgn deletes the current word when cursor is at h|ello (67ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (74ms)

      ✓ cgn deletes the current word when cursor is at hell|o (83ms)

      ✓ cgn deletes the next word when cursor is at hello| (90ms)

    can handle gN

      ✓ gN selects the previous match text (259ms)

      ✓ gN selects the current word at hell|o (263ms)

      ✓ gN selects the current word at hel|lo (224ms)

      ✓ gN selects the current word at h|ello (312ms)

      ✓ gN selects the current word at |hello (230ms)

      ✓ gN selects the previous word at | hello (338ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (67ms)

      ✓ dgN deletes the current word when cursor is at hell|o (75ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (309ms)

      ✓ dgN deletes the current word when cursor is at h|ello (141ms)

      ✓ dgN deletes the current word when cursor is at |hello (67ms)

      ✓ dgN deletes the previous word when cursor is at | hello (78ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (86ms)

      ✓ cgN deletes the current word when cursor is at hell|o (88ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (131ms)

      ✓ cgN deletes the current word when cursor is at h|ello (90ms)

      ✓ cgN deletes the current word when cursor is at |hello (80ms)

      ✓ cgN deletes the previous word when cursor is at | hello (114ms)

    marks

      ✓ capital marks can change the editors active document (115ms)

      ✓ can jump to lowercase mark (63ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (45ms)

    ✓ Can handle R past current line (48ms)

    ✓ Can handle R and exit Replace Mode (48ms)

    ✓ Can handle R across lines (277ms)

    ✓ Can handle R across lines and exit Replace Mode (98ms)

    ✓ Can handle R with {count} (85ms)

    ✓ Can handle backspace (131ms)

    ✓ Can handle backspace (63ms)

    ✓ Can handle backspace across lines (111ms)

    ✓ Can handle arrows (58ms)

    ✓ Can handle . (117ms)

    ✓ Can handle . across lines (169ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (153ms)

    ✓ Can handle wd (112ms)

    ✓ Can handle x (128ms)

    ✓ Can handle x across a selection (131ms)

    ✓ Can do vwd in middle of sentence (169ms)

    ✓ Can do vwd in middle of sentence (136ms)

    ✓ Can do vwd multiple times (244ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (145ms)

    ✓ Can handle H key (45ms)

    ✓ Can handle backspace key (50ms)

    ✓ handles case where we delete over a newline (230ms)

    ✓ handles change operator (124ms)

    ✓ Can do vat on multiple matching tags (61ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (93ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (158ms)

    ✓ Repeat-prefixed vat does not bleed below (60ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (41ms)

    ✓ Can do vi) on a matching parenthesis (46ms)

    ✓ Can do vi) on multiple matching parens (71ms)

    ✓ Can do va) on a matching parenthesis (52ms)

    ✓ Can do va) on multiple matching parens (90ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (46ms)

    ✓ Repeat-prefixed va) does not bleed below (53ms)

    ✓ Can do va} on a matching bracket as first character (86ms)

    ✓ Can do va} on multiple matching brackets (64ms)

    ✓ Can do vi( on a matching bracket near first character (60ms)

    ✓ Can do vi{ on outer pair of nested braces (92ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (59ms)

    ✓ Can do va] on multiple matching brackets (65ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (92ms)

    ✓ Repeat-prefixed vaf does not bleed below (56ms)

    ✓ vaf only expands to enclosing pairs (56ms)

    ✓ Can use . to repeat indent in visual (58ms)

    ✓ Can do v_x to delete to first char (147ms)

    ✓ Can do vg_x to delete to last char with no EOL (53ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (56ms)

    ✓ Can do v$x to delete to last char including EOL (49ms)

    ✓ Can do gv to reselect previous selection (146ms)

    Vim's EOL handling is weird

      ✓ delete through eol (112ms)

      ✓ join 2 lines by deleting through eol (84ms)

      ✓ d$ doesn't delete whole line (86ms)

      ✓ vd$ does delete whole line (78ms)

      ✓ Paste over selection copies the selection (63ms)

      ✓ Paste over selection copies the selection linewise (133ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (63ms)

      ✓ Can handle <down> key (48ms)

      ✓ Can handle <left> key (42ms)

      ✓ Can handle <right> key (49ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (47ms)

      ✓ Can handle 'gj'

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (49ms)

      ✓ Can handle 'vawd' on word with trailing spaces (159ms)

      ✓ Can handle 'vawd' on word with leading spaces (66ms)

      ✓ Can handle 'vawd' on word with numeric prefix (56ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (86ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (53ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (73ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (50ms)

      ✓ Can handle 'vaWd' on word with leading spaces (48ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (58ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (51ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (57ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (58ms)

      ✓ Can handle 'vaWd' on word with leading spaces (49ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (49ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (114ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (50ms)

      ✓ Can handle 'vawd' on word with trailing spaces (43ms)

      ✓ Can handle 'vawd' on word with leading spaces (46ms)

      ✓ Can handle 'vawd' on word with numeric prefix (122ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (46ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (59ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (61ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (47ms)

      ✓ Can handle 'vaWd' on word with leading spaces (42ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (51ms)

      ✓ Can handle 'Y' in visual mode (66ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (83ms)

      ✓ Select sentence with leading spaces in visual mode (68ms)

      ✓ Select multiple sentences in visual mode (47ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (69ms)

      ✓ Select inner sentence with leading spaces in visual mode (68ms)

      ✓ Select spaces between sentences in visual mode (95ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (49ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (56ms)

      ✓ Can do vat on a matching tag (63ms)

    handles replace in visual mode

      ✓ Can do a single line replace (48ms)

      ✓ Can do a multi line replace (58ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (101ms)

      ✓ D deletes the current line (65ms)

    handles indent blocks in visual mode

      ✓ Can do vai (52ms)

      ✓ Can do vii (51ms)

      ✓ Doesn't naively select the next line (39ms)

      ✓ Searches backwards if cursor line is empty (93ms)

      ✓ Can do vaI (46ms)

    visualstar

      ✓ Works with * (60ms)

      ✓ Works with # (51ms)

    search works in visual mode

      ✓ Works with / (65ms)

      ✓ Works with ? (60ms)

      ✓ Selects correct range (143ms)

    X will delete linewise

      ✓ normal selection (165ms)

      ✓ normal selection (43ms)

    C will delete linewise

      ✓ normal selection (86ms)

      ✓ normal selection (96ms)

    R will delete linewise

      ✓ normal selection (82ms)

      ✓ normal selection (50ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (86ms)

      ✓ upward selection (109ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (48ms)

      ✓ multiline indent bottom up selection (64ms)

      ✓ repeat multiline indent top down selection (86ms)

      ✓ repeat multiline indent bottom up selection (67ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (55ms)

      ✓ multiline outdent bottom up selection (48ms)

      ✓ repeat multiline outdent top down selection (63ms)

      ✓ repeat multiline outdent bottom up selection (108ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (174ms)

    vi{ will go to end of second to last line

      ✓ select (139ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (537ms)

      ✓ gv selects the last pasted text (which is longer than original) (486ms)

      ✓ gv selects the last pasted text (multiline) (278ms)

    can handle gn

      ✓ gn selects the next match text (294ms)

      ✓ gn selects the current word at |hello (221ms)

      ✓ gn selects the current word at h|ello (294ms)

      ✓ gn selects the current word at hel|lo (263ms)

      ✓ gn selects the next word at hell|o (235ms)

      ✓ gn selects the next word at hello| (331ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (72ms)

      ✓ U/gU across a selection (79ms)

      ✓ U/gU across a selection (reverse) (122ms)

      ✓ u/gu on single character (72ms)

      ✓ u/gu across a selection (88ms)

      ✓ u/gu across a selection (reverse) (131ms)

  Mode Visual Block

    ✓ can be activated (46ms)

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D' (68ms)

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (142ms)

    ✓ o works in visual block mode (48ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (178ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (183ms)

    ✓ Can handle wd (131ms)

    ✓ Can handle x (199ms)

    ✓ Can handle x across a selection (151ms)

    ✓ Can do vwd in middle of sentence (218ms)

    ✓ Can do vwd in middle of sentence (159ms)

    ✓ Can do vwd multiple times (458ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (136ms)

    ✓ handles case where we delete over a newline (180ms)

    ✓ handles change operator (187ms)

    ✓ Vp updates register content (152ms)

    ✓ Vp does not append unnecessary newlines (first line) (48ms)

    ✓ Vp does not append unnecessary newlines (middle line) (99ms)

    ✓ Vp does not append unnecessary newlines (last line) (65ms)

    ✓ Exiting via <Esc> returns cursor to original column (48ms)

    Vim's EOL handling is weird

      ✓ delete through eol (82ms)

      ✓ join 2 lines by deleting through eol (135ms)

      ✓ d$ doesn't delete whole line (77ms)

      ✓ vd$ does delete whole line (81ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (68ms)

      ✓ Can handle <down> key (43ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (52ms)

      ✓ Can handle 'gj' (44ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (56ms)

      ✓ Can handle d key (50ms)

      ✓ Can handle d key (114ms)

      ✓ Can handle d key (45ms)

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace (38ms)

      ✓ Can do a multi visual line replace from the bottom up (48ms)

    search works in visual line mode

      ✓ Works with / (63ms)

      ✓ Works with ? (56ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (249ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (48ms)

      ✓ linewise visual put works also in the end of document (49ms)

      ✓ gv selects the last pasted text (which is shorter than original) (422ms)

      ✓ gv selects the last pasted text (which is longer than original) (459ms)

      ✓ gv selects the last pasted text (multiline) (186ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly (79ms)

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (54ms)

    ✓ Can handle 'x' at end of line (171ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (58ms)

    ✓ Can handle '<Del>' at end of line (132ms)

    ✓ Can handle 'cc' (46ms)

    ✓ Can handle 'Ncc' (50ms)

    ✓ Can handle 'yy' (47ms)

    ✓ Can handle 'D' (51ms)

    ✓ Can handle 'D' on empty lines (109ms)

    ✓ Can handle 'DD' (77ms)

    ✓ Can handle 'C' (44ms)

    ✓ Can handle 'NC' (46ms)

    ✓ Can handle 'NC' and put (120ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r' (43ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (51ms)

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
'

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (90ms)

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (93ms)

    ✓ Can handle 'J' with leading white space on next line (40ms)

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines (67ms)

    ✓ Can handle 'J' with ')' first character on next line (44ms)

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode (48ms)

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (83ms)

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}' (233ms)

    ✓ Can handle '<BS>' in insert mode (75ms)

    ✓ Can handle undo with P (118ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (60ms)

    ✓ Can repeat '~' with dot (51ms)

    ✓ Can repeat 'x' (43ms)

    ✓ Can repeat 'J' (40ms)

    ✓ Can handle dot with A (103ms)

    ✓ Can handle dot with I (70ms)

    ✓ Can repeat actions that require selections (82ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (75ms)

    ✓ Can repeat insert change and '<C-t>' (106ms)

    ✓ Can repeat change by `<C-a>` (86ms)

    ✓ Only one arrow key can be repeated in Insert Mode (70ms)

    ✓ Cached content change will be cleared by arrow keys (70ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end (38ms)

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end (42ms)

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ]) (42ms)

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge' (38ms)

    ✓ Can handle 'gg' (57ms)

    ✓ Can handle 'gg' to first non blank char on random line (123ms)

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline (57ms)

    38) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (45ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file (68ms)

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count (86ms)

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (44ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (38ms)

    ✓ Can handle 'F' and find back search (94ms)

    ✓ Can handle 'f' and multiple back searches (46ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice (139ms)

    ✓ Can handle 't' and find back search (92ms)

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (51ms)

    ✓ Can run a forward and find next search (128ms)

    ✓ Can run a forward and find previous search from end of word (61ms)

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (39ms)

    ✓ cancelled search reverts to previous search state (57ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (61ms)

    ✓ Search offsets: b2 goes 2 to the right (51ms)

    ✓ Search offsets: b+3 goes 3 to the right (55ms)

    ✓ Search offsets: e goes to the end (44ms)

    ✓ Search offsets: character offset goes across line boundaries (58ms)

    ✓ Search offsets: 2 goes 2 down (101ms)

    ✓ Search offsets: -2 goes 2 up (56ms)

    ✓ maintains column position correctly (110ms)

    ✓ maintains column position correctly with $ (43ms)

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat (51ms)

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g# (42ms)

    ✓ Can handle g#n (145ms)

    ✓ Can handle # (67ms)

    ✓ Can handle # already on the word

    ✓ Can handle ## (40ms)

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle + (94ms)

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (43ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix (83ms)

    39) Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line
    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word
    word left
      ✓ move cursor word left across the different char kind
      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up
      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (41ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (115ms)

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (45ms)

      insert mode

        ✓ <left> does not wrap to previous line (92ms)

        ✓ <right> does not wrap to next line (49ms)

    wrapscan enabled

      ✓ search wraps around the end of the file (60ms)

      ✓ search wraps around the start of the file (66ms)

    wrapscan disabled

      ✓ search stops at the end of the file (139ms)

      ✓ search stops at the start of the file (50ms)

  Multicursor

    ✓ can add multiple cursors below (116ms)

    ✓ can add multiple cursors above (221ms)

    ✓ dd works with multi-cursor (65ms)

    47) dab works with multi-cursor

    ✓ Vd works with multi-cursor (45ms)

    48) <C-v>d works with multi-cursor

    49) cw works with multi-cursor

    50) <count>f<char> works with multi-cursor

    51) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (157ms)

    ✓ gcj comments in current and next line (167ms)

    ✓ block comment with motion (152ms)

    ✓ block comment in Visual Mode (186ms)

    ✓ comment in visual line mode (200ms)

    ✓ comment in visual block mode (213ms)

  format operator

    ✓ == formats current line (460ms)

    ✓ =$ formats entire line (345ms)

    ✓ =j formats two lines (408ms)

    ✓ 3=k formats three lines (221ms)

    52) =gg formats to top of file

    ✓ =G formats to bottom of file (255ms)

    ✓ =ip formats paragraph (188ms)

    ✓ format in visual mode (157ms)

  put operator

    ✓ basic put test (49ms)

    ✓ test yy end of line (60ms)

    ✓ test yy first line (62ms)

    ✓ test yy middle line (128ms)

    ✓ test yy with correct positon movement (95ms)

    ✓ test visual block single line yank p (76ms)

    ✓ test visual block single line yank P (68ms)

    ✓ test visual block single line delete p (65ms)

    ✓ test visual block single line delete P (77ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (77ms)

    ✓ g? in visual mode works (67ms)

    ✓ g? in visual line mode works (70ms)

    53) g? in visual block mode works

  shift operator

    ✓ basic shift left test (57ms)

    ✓ shift left goto end test

    ✓ shift left goto line test

    ✓ shift right goto end test (61ms)

    ✓ shift right goto line test (80ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work (125ms)

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace (111ms)

      ✓ step to Camel word

      ✓ step to CAP word (65ms)

      ✓ step after CAP word (46ms)

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word (126ms)

      ✓ step to operator and then over (71ms)

    handles <leader>w for underscore_var

      ✓ step to _word (39ms)

      ✓ step over whitespace to word (53ms)

      ✓ step from inside word to _word (46ms)

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (91ms)

      ✓ delete from middle of camelWord (51ms)

      ✓ delete from start of CamelWord (82ms)

      ✓ delete two words from camelWord (75ms)

      ✓ delete from start of underscore_word (40ms)

      ✓ delete from middle of underscore_word (39ms)

      ✓ delete two words from camel_word (50ms)

    handles di<leader>w

      ✓ delete from start of camelWord (51ms)

      ✓ delete from middle of camelWord (268ms)

      ✓ delete from start of CamelWord (62ms)

      ✓ delete two words from camelWord (61ms)

      ✓ delete from start of underscore_word (54ms)

      ✓ delete from middle of underscore_word (495ms)

      ✓ delete two words from camel_word (77ms)

    handles <leader>b

      ✓ back from middle of word (48ms)

      ✓ back over whitespace to camelWord

      ✓ back twice over operator (76ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator (54ms)

  easymotion plugin

    ✓ Can handle s move (55ms)

    ✓ Can handle 2s move (61ms)

    ✓ Can handle f move (44ms)

    ✓ Can handle 2f move (93ms)

    ✓ Can handle F move (74ms)

    ✓ Can handle 2F move (53ms)

    ✓ Can handle t move (71ms)

    ✓ Can handle bd-t move (67ms)

    ✓ Can handle 2t move (113ms)

    ✓ Can handle bd-t2 move (115ms)

    ✓ Can handle T move (126ms)

    ✓ Can handle 2T move (84ms)

    ✓ Can handle w move (92ms)

    ✓ Can handle bd-w move (76ms)

    ✓ Can handle b move (55ms)

    ✓ Can handle e move

    ✓ Can handle bd-e move (66ms)

    ✓ Can handle ge move

    ✓ Can handle n-char move (151ms)

    ✓ Can handle j move (51ms)

    ✓ Can handle k move (57ms)

    ✓ Can handle bd-jk move (1) (61ms)

    ✓ Can handle bd-jk move (2) (43ms)

    ✓ Can handle lineforward move (1) (303ms)

    ✓ Can handle lineforward move (2) (84ms)

    54) Can handle linebackward move (1)

    55) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (49ms)

    ✓ Can handle searching for carat (^) (46ms)

    ✓ Can handle searching for dot (.) (43ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (139ms)

    ✓ Replaces within inner Word (84ms)

    ✓ Replaces within '' (62ms)

    ✓ Replaces within '' including spaces (91ms)

    ✓ Replaces within () (82ms)

    ✓ Replaces within () including spaces (49ms)

    ✓ Replaces within a paragraph (109ms)

    ✓ Replaces using a specified register (65ms)

    ✓ Replaces within {} over multiple lines (86ms)

    ✓ Replaces a multiline register within {} over multiple lines (77ms)

    ✓ Replaces a multiline register within {} over multiple lines (112ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (120ms)

    ✓ grr replaces the entire line with the register (63ms)

    ✓ grr can replace multiple lines (58ms)

    ✓ Replaces in visual mode (142ms)

    ✓ Replaces in visual mode using a specified register (127ms)

    ✓ Replaces in visual line mode (82ms)

    ✓ grj is linewise (87ms)

  sneak plugin

    ✓ Can handle s motion (514ms)

    ✓ Can handle S motion (47ms)

    ✓ Can handle <operator>z motion (51ms)

    ✓ Can handle <operator>Z motion (58ms)

    ✓ Can handle s; motion (88ms)

    ✓ Can handle s, motion (55ms)

    ✓ Can handle S; motion (49ms)

    ✓ Can handle S, motion (51ms)

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (214ms)

    ✓ Can handle single letter <operator>Z motion (123ms)

    ✓ Can handle single letter s; motion (40ms)

    ✓ Can handle single letter s, motion (41ms)

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion (72ms)

    ✓ Can handle multiline single char <number>s motion

  sneakReplacesF

    ✓ sneakReplacesF forward (42ms)

    ✓ sneakReplacesF backward (78ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (92ms)

    ✓ 'ysiw(' surrounds word with space (74ms)

    ✓ 'ysw)' surrounds word without space (82ms)

    ✓ 'ysw(' surrounds word with space (71ms)

    ✓ 'ysaw)' surrounds word without space (121ms)

    ✓ 'ysaw(' surrounds word with space (74ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (157ms)

    ✓ 'ysiw<' surrounds word with tags (183ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (109ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (71ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (94ms)

    ✓ change surround (48ms)

    ✓ change surround with two pairs of quotes (73ms)

    ✓ change surround with two pairs of parens (83ms)

    ✓ change surround with alias (205ms)

    ✓ change surround to tags (218ms)

    ✓ delete surround (167ms)

    ✓ delete surround with quotes (108ms)

    ✓ delete surround with nested of quotes (74ms)

    ✓ delete surround with inconsistent quotes (63ms)

    ✓ delete surround with mixed quotes (98ms)

    ✓ delete surround with empty quotes cursor at start (80ms)

    ✓ delete surround with empty quotes cursor at end (99ms)

    ✓ don't delete surround if cursor is after closing match (38ms)

    ✓ delete surround if cursor is before opening match (116ms)

    ✓ delete surround with two pairs of parens (53ms)

    ✓ delete surround with alias (56ms)

    ✓ delete surround with tags (104ms)

    ✓ change surround brackets at end of line (58ms)

    ✓ changing brackets with surround works again (496ms)

    ✓ change surround with tags that contain an attribute and preserve them (125ms)

    ✓ change surround with tags that contain an attribute and remove them (85ms)

  register

    ✓ Can copy to a register (82ms)

    ✓ Can use two registers together (201ms)

    ✓ Can use black hole register (116ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (407ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (313ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (219ms)

    ✓ Register '1'-'9' stores delete content (312ms)

    ✓ "A appends linewise text to "a (308ms)

    ✓ "A appends character wise text to "a (377ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (218ms)

    ✓ Small deletion using Del is stored in small delete register (203ms)

    ✓ Small deletion using X is stored in small delete register (391ms)

    ✓ Search register (/) is set by forward search (405ms)

    ✓ Search register (/) is set by backward search (408ms)

    ✓ Search register (/) is set by star search (250ms)

    ✓ Command register (:) is set by command line (80ms)

    ✓ Read-only registers cannot be written to (230ms)

    clipboard

      ✓ Can access '*' (clipboard) register (140ms)

      ✓ Can access '+' (clipboard) register (58ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (248ms)

    ✓ Can repeat N times reversed t<character> (135ms)

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward (88ms)

      ✓ move one sentence backward

      ✓ move [count] sentences backward (52ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (76ms)

      ✓ move one sentence backward no space - middle (114ms)

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line (60ms)

      ✓ move one sentence backward - multiline - previous line - period (41ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar' (71ms)

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath
      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1290 passing (4m)

  4 pending

  55 failing

  1) Mode Normal
       can ctrl-a on an octal :

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +31
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)


  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Content does not match; Expected=test aaa test aaa test aaa test . Actual=.
      + expected - actual

      +test aaa test aaa test aaa test 
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  9) Mode Visual
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)


  16) Mode Visual Block
       Can handle c forward select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)


  17) Mode Visual Block
       Can handle c backwards select:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)


  18) Mode Visual Block
       Can handle C:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)


  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Actual and expected number of cursors do not match
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Actual and expected number of cursors do not match
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -2
      +0
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +8
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)


  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)


  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #0's LINE position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)


  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)

  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)

  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  47) Multicursor
       dab works with multi-cursor:

      Content does not match; Expected=. Actual=two.
      + expected - actual

      -two
      
      at Suite.<anonymous> (test/multicursor.test.ts:59:3)


  48) Multicursor
       <C-v>d works with multi-cursor:

      Missing '|' in test object.
      + expected - actual

      -false
      +true
      
      at Suite.<anonymous> (test/multicursor.test.ts:75:3)


  49) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three  five. Actual=one  three | five.
      + expected - actual

      -one  three | five
      +one  three  five
      
      at Suite.<anonymous> (test/multicursor.test.ts:83:3)

  50) Multicursor
       <count>f<char> works with multi-cursor:

      Content does not match; Expected=date! eggplant! fig.. Actual=|date! eggplant! fig..
      + expected - actual

      -|date! eggplant! fig.
      +date! eggplant! fig.
      
      at Suite.<anonymous> (test/multicursor.test.ts:91:3)


  51) Multicursor
       o works with multi-cursor:

      Content does not match; Expected=line2. Actual=l|ine2.
      + expected - actual

      -l|ine2
      +line2
      
      at Suite.<anonymous> (test/multicursor.test.ts:99:3)


  52) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  53) rot13 operator
       g? in visual block mode works:

      Actual and expected number of cursors do not match
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  54) easymotion plugin
       Can handle linebackward move (1):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -6
      +3
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  55) easymotion plugin
       Can handle linebackward move (2):

      Cursor #0's CHARACTER position is wrong.
      + expected - actual

      -8
      +6
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: 2f4198f0-5844-11ea-b533-891a36a4ac0b

@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
travis_time:end:26d3d83f:start=1582688209144200025,finish=1582688209152211067,duration=8011042,event=script
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T03:37:09.437Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (86ms)

    ✓ command <C-w> can remove word in search mode (39ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (42ms)

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (43ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (80ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (78ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (96ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (48ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (61ms)

  command-line lexer

    ✓ can lex empty string
    ✓ can lex comma
    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus
    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1266ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (539ms)

    ✓ :smile editor contains smile text (537ms)

  Basic sort

    ✓ Sort whole file, asc (131ms)

    ✓ Sort whole file, asc, ignoreCase (71ms)

    ✓ Sort whole file, dsc (103ms)

    ✓ Sort whole file, dsc, ignoreCase (81ms)

    ✓ Sort range, asc (419ms)

    ✓ Sort range, asc, ignoreCase (92ms)

    ✓ Sort range, dsc (115ms)

    ✓ Sort range, dsc, ignoreCase (123ms)

    ✓ Sort whole file, asc, unique (93ms)

  Horizontal split

    ✓ :sp creates a second split (74ms)

    ✓ :split creates a second split (55ms)

    ✓ :new creates a second split (193ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks
    ✓ :write
    ✓ :nohlsearch
    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (40ms)

    ✓ Replace with flags AND count (96ms)

    ✓ Replace with `c` flag (42ms)

    ✓ Replace with `gc` flag (60ms)

    ✓ Replace across all lines (73ms)

    ✓ Replace on specific single line (83ms)

    ✓ Replace on current line using dot (66ms)

    ✓ Replace single relative line using dot and plus (58ms)

    ✓ Replace across specific line range (171ms)

    ✓ Replace across relative line range using dot, plus, and minus (92ms)

    ✓ Replace across relative line range using numLines+colon shorthand (84ms)

    ✓ Repeat replacement across relative line range (99ms)

    ✓ Replace with range AND count but no flags (126ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (78ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (79ms)

    ✓ Undocumented: trailing operators use 1 as RHS (68ms)

    ✓ Replace specific single equal lines (71ms)

    ✓ Replace current line with no active selection (66ms)

    ✓ Replace text in selection (99ms)

    ✓ Substitute support marks (92ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (39ms)

      ✓ Replace with `g` flag inverts global flag (53ms)

      ✓ Replace with `c` flag inverts global flag (74ms)

      ✓ Replace multiple lines (76ms)

      ✓ Replace across specific lines (65ms)

      ✓ Replace current line with no active selection (83ms)

      ✓ Replace text in selection (133ms)

      ✓ Substitute support marks (79ms)

      ✓ Substitute with escaped delimiter (39ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (177ms)

      ✓ Substitute with previous search using # (253ms)

      ✓ Substitute with previous search using / (143ms)

      ✓ Substitute with parameters should update search state (96ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (260ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (136ms)

      ✓ Substitute repeat previous should accept flags (57ms)

      ✓ Substitute with empty search string should use last searched pattern (174ms)

      ✓ Ampersand (&) should repeat the last substitution (48ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (56ms)

    ✓ tabe with current file path does nothing (44ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (40ms)

    ✓ command line file navigate tab completion

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (72ms)

    ✓ command line file tab completion with space in file path (120ms)

  Vertical split

    ✓ :vs creates a second split (68ms)

    ✓ :vsp creates a second split (57ms)

    ✓ :vsplit creates a second split (68ms)

    ✓ :vnew creates a second split (267ms)

    ✓ :vne creates a second split (209ms)

  Basic write-quit

    ✓ Run write and quit (62ms)
  Provide line completions
    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (51ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line (45ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (62ms)

    ✓ getMatchingRemap (55ms)

    ✓ jj -> <Esc> through modehandler (92ms)

    ✓ 0 -> :wq through modehandler (83ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (79ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (81ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (76ms)

    ✓ d -> black hole register delete in normal mode through modehandler (109ms)

    ✓ d -> black hole register delete in normal mode through modehandler (114ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (130ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim

      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (56ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (76ms)

        ✓ Can track jumps for keys: /b<CR>n (45ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (75ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i> (55ms)

        ✓ Can track jumps for keys: j%%<C-o>% (57ms)

        ✓ Can track jumps for keys: j%%<C-o>gg

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (54ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (59ms)

        ✓ Can enter number to jump back multiple times

        ✓ Can track one-line `` jumps (70ms)

        ✓ Can track one-line double `` jumps (56ms)

        ✓ Can track one-line '' jumps (63ms)

        ✓ Can track one-line double '' jumps (71ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (82ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (65ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (67ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (70ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (99ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (133ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (148ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (169ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (144ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (46ms)

      Can track jumps from macros

[main 2020-02-26T03:37:39.439Z] update#setState checking for updates

[main 2020-02-26T03:37:39.502Z] update#setState idle

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (91ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (47ms)

  Record and execute a macro

    ✓ Can record and execute (119ms)

    ✓ Can repeat last invoked macro (203ms)

    ✓ Can play back with count (348ms)

    ✓ Can play back with count, abort when a motion fails (342ms)

    ✓ Repeat change on contiguous lines (112ms)

    ✓ Append command to a macro (139ms)

    ✓ Can record Ctrl Keys and repeat (118ms)

    ✓ Can execute macros with dot commands properly (100ms)

    ✓ : (command) register can be used as a macro (83ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (68ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (51ms)

    ✓ <C-c> can exit insert (46ms)

    ✓ <Esc> can exit insert (52ms)

    ✓ Stay in insert when entering characters (51ms)

    ✓ Can handle 'O' (41ms)

    ✓ 'i' puts you in insert mode before the cursor (74ms)

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line (41ms)

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (49ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode

    ✓ Delete works at line end

    ✓ Delete works at end of file

    ✓ Delete works with repeat (144ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o> (48ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (67ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (47ms)

    ✓ Can perform insert command prefixed with count

    ✓ Can perform append command prefixed with count (38ms)

    ✓ Can perform insert at start of line command prefixed with count (44ms)

    ✓ Can perform append to end of line command prefixed with count

    ✓ Can perform change char (s) command prefixed with count (68ms)

    ✓ Can perform command prefixed with count with <C-[> (38ms)

    ✓ Can handle 'o' with count (65ms)

    ✓ Can handle 'O' with count (86ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (65ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1) (46ms)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd (114ms)

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d

    ✓ Can handle dd empty line

    ✓ Can handle ddp (66ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (47ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again

    ✓ Can handle 'dl' at end of line (48ms)

    ✓ Can handle 'dF' (45ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (38ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (39ms)

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'cw' (61ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w' (42ms)

    ✓ Can handle 'cw' without removing EOL (38ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket (46ms)

    ✓ Can handle 's' (60ms)

    ✓ Can handle 'yiw' with correct cursor ending position (47ms)

    ✓ Can handle 'ciw' (84ms)

    ✓ Can handle 'ciw' on blanks (46ms)

    ✓ Can handle 'caw' (61ms)

    ✓ Can handle 'caw' on first letter (54ms)

    ✓ Can handle 'caw' on blanks (52ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'ci(' on first parentheses (54ms)

    ✓ Can handle 'ci(' with nested parentheses (88ms)

    ✓ Can handle 'ci(' backwards through nested parens (56ms)

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)' (44ms)

    ✓ Can handle count prefixed 'ca)' (41ms)

    ✓ Can handle 'ca(' spanning multiple lines (50ms)

    ✓ Can handle 'cab' spanning multiple lines (59ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (57ms)

    ✓ Can handle 'ci(' on the closing bracket (39ms)

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {} (39ms)

    ✓ Can handle 'ci[' spanning multiple lines (38ms)

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind (43ms)

    ✓ Can handle 'ci"' with an escaped backslash (42ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (45ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (59ms)

    ✓ can handle cj (62ms)

    ✓ can handle ck (77ms)

    ✓ can handle c2j (61ms)

    ✓ can handle c2k (56ms)

    ✓ can handle cj on last line (52ms)

    ✓ can handle ck on first line (149ms)

    ✓ can handle c2j on last line (55ms)

    ✓ can handle c2k on first line (59ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (45ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (42ms)

    ✓ Can handle 'daw' on word at beginning of file (173ms)

    ✓ Can handle 'daw' on word at beginning of line (63ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (38ms)

    ✓ Can handle 'daw' around word at end of line (39ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace (40ms)

    ✓ Can handle 'daW' on word with trailing spaces (39ms)

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (98ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (43ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces (48ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (60ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word (38ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line (51ms)

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (48ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (45ms)

    ✓ I should updated desiredColumn (38ms)

    ✓ leaving insert mode should update desired column when entered with a (98ms)

    ✓ leaving insert mode should update desired column when entered with i (62ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy' (53ms)

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position (43ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (38ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (81ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (38ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (75ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (38ms)

    ✓ Can handle ']p' after yy (60ms)

    ✓ Can handle ']p' after 'Nyy'

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (47ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (50ms)

    ✓ Can handle '[p' after yy

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible

    ✓ Can handle 'p' after y'a (49ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (48ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (82ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (59ms)

    ✓ gI works correctly (39ms)

    ✓ gi works correctly (72ms)

    ✓ `. works correctly (52ms)

    ✓ '. works correctly (41ms)

    ✓ g; works correctly (69ms)

    ✓ g, works correctly (78ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly (43ms)

    ✓ gq handles spaces after single line comments correctly (42ms)

    ✓ gq handles spaces before single line comments correctly

    ✓ gq handles tabs before single line comments correctly

    ✓ Can handle space (52ms)

    ✓ Can handle space

    ✓ Undo 1 (85ms)

    ✓ Undo 2 (66ms)

    ✓ Undo cursor (106ms)

    ✓ Undo cursor 2 (89ms)

    ✓ Undo cursor 3 (284ms)

    ✓ Undo with movement first (100ms)

    ✓ Can handle 'U' (103ms)

    ✓ Can handle 'U' for multiple changes (63ms)

    ✓ Can handle 'U' for new line below (62ms)

    ✓ Can handle 'U' for new line above (83ms)

    ✓ Can handle 'U' for consecutive changes only (94ms)

    ✓ Can handle 'u' to undo 'U'

    ✓ Can handle 'U' to undo 'U'

    ✓ Can handle 'u' after :s/abc/def (90ms)

    ✓ Redo (86ms)

    ✓ Redo (69ms)

    ✓ Redo (74ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (50ms)

    ✓ can handle s in visual mode (48ms)

    ✓ can handle p with selection (54ms)

    ✓ can handle P with selection (55ms)

    ✓ can handle p in visual to end of line (69ms)

    ✓ can repeat backspace twice (96ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word (56ms)

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (113ms)

    ✓ can ctrl-x on a negative number with word before and after  (38ms)

    ✓ can ctrl-a properly on multiple lines (54ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (78ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S (40ms)

    ✓ / does not affect mark (51ms)

    ✓ / can search with regex

    ✓ / can search with newline

    ✓ / can search through multiple newlines (70ms)

    ✓ / matches ^ per line (48ms)

    ✓ / matches $ per line (78ms)

    ✓ Can search for forward slash (38ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (40ms)

    ✓ /\C forces case sensitive search (47ms)

    ✓ <BS> deletes the last character in search in progress mode (38ms)

    ✓ <S-BS> deletes the last character in search in progress mode (42ms)

    ✓ <C-h> deletes the last character in search in progress mode

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (39ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag (39ms)

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags (45ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (44ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc (43ms)

    ✓ can handle 'cc' on empty line (58ms)

    ✓ cc copies linewise (53ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words (105ms)

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai

    ✓ Can do cii

    ✓ Can do caI (46ms)

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (51ms)

    ✓ '] go to the end of the previously operated or put text (159ms)

    ✓ `[ go to the start of the previously operated or put text (69ms)

    ✓ '[ go to the start of the previously operated or put text (80ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end (39ms)

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (198ms)

      ✓ gn selects the current word at |hello (183ms)

      ✓ gn selects the current word at h|ello (199ms)

      ✓ gn selects the current word at hel|lo (186ms)

      ✓ gn selects the current word at hell|o (157ms)

      ✓ gn selects the next word at hello| (197ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (74ms)

      ✓ dgn deletes the current word when cursor is at |hello (54ms)

      ✓ dgn deletes the current word when cursor is at h|ello (49ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (86ms)

      ✓ dgn deletes the current word when cursor is at hell|o (67ms)

      ✓ dgn deletes the next word when cursor is at hello| (118ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (64ms)

      ✓ cgn deletes the current word when cursor is at |hello (58ms)

      ✓ cgn deletes the current word when cursor is at h|ello (51ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (52ms)

      ✓ cgn deletes the current word when cursor is at hell|o (71ms)

      ✓ cgn deletes the next word when cursor is at hello| (81ms)

    can handle gN

      ✓ gN selects the previous match text (173ms)

      ✓ gN selects the current word at hell|o (204ms)

      ✓ gN selects the current word at hel|lo (178ms)

      ✓ gN selects the current word at h|ello (216ms)

      ✓ gN selects the current word at |hello (179ms)

      ✓ gN selects the previous word at | hello (197ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (89ms)

      ✓ dgN deletes the current word when cursor is at hell|o (86ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (77ms)

      ✓ dgN deletes the current word when cursor is at h|ello (77ms)

      ✓ dgN deletes the current word when cursor is at |hello (56ms)

      ✓ dgN deletes the previous word when cursor is at | hello (61ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (76ms)

      ✓ cgN deletes the current word when cursor is at hell|o (132ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (123ms)

      ✓ cgN deletes the current word when cursor is at h|ello (65ms)

      ✓ cgN deletes the current word when cursor is at |hello (85ms)

      ✓ cgN deletes the previous word when cursor is at | hello (124ms)

    marks

      ✓ capital marks can change the editors active document (117ms)

    ✓ Can handle R

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (51ms)

    ✓ Can do vwd multiple times (138ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (115ms)

    ✓ Can handle H key
TravisBuddy Request Identifier: c018f760-5849-11ea-b533-891a36a4ac0b

@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.12.4 build /home/travis/build/VSCodeVim/Vim
> gulp build

[04:56:57] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[04:56:57] Starting 'build'...
[04:56:57] Starting 'prettier'...
[04:56:57] Finished 'prettier' after 554 ms
[04:56:57] Starting 'tsc'...
[04:56:57] Starting 'tslint'...
[04:57:04] Finished 'tslint' after 7.28 s
[04:57:13] Finished 'tsc' after 16 s
[04:57:13] Starting 'commit-hash'...
[04:57:13] Finished 'commit-hash' after 30 ms
[04:57:13] Finished 'build' after 16 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T04:57:20.119Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses
    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (94ms)

    ✓ command <C-w> can remove word in search mode (41ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (58ms)

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (64ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (84ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (109ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (74ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command (49ms)

    ✓ add command over configuration.history (38ms)

    ✓ add command that exists in history (38ms)

    ✓ file system

    ✓ change configuration.history (66ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1268ms)

  command-line parser

    ✓ can parse empty string
    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar
  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (535ms)

    ✓ :smile editor contains smile text (535ms)

  Basic sort

    ✓ Sort whole file, asc (82ms)

    ✓ Sort whole file, asc, ignoreCase (69ms)

    ✓ Sort whole file, dsc (120ms)

    ✓ Sort whole file, dsc, ignoreCase (84ms)

    ✓ Sort range, asc (156ms)

    ✓ Sort range, asc, ignoreCase (152ms)

    ✓ Sort range, dsc (86ms)

    ✓ Sort range, dsc, ignoreCase (166ms)

    ✓ Sort whole file, asc, unique (100ms)

  Horizontal split

    ✓ :sp creates a second split (95ms)

    ✓ :split creates a second split (66ms)

    ✓ :new creates a second split (208ms)

  :close args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !
    ✓ throws if space before !
    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (38ms)

    ✓ Replace with flags AND count (117ms)

    ✓ Replace with `c` flag (45ms)

    ✓ Replace with `gc` flag (79ms)

    ✓ Replace across all lines (73ms)

    ✓ Replace on specific single line (80ms)

    ✓ Replace on current line using dot (72ms)

    ✓ Replace single relative line using dot and plus (65ms)

    ✓ Replace across specific line range (116ms)

    ✓ Replace across relative line range using dot, plus, and minus (111ms)

    ✓ Replace across relative line range using numLines+colon shorthand (78ms)

    ✓ Repeat replacement across relative line range (89ms)

    ✓ Replace with range AND count but no flags (66ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (79ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (74ms)

    ✓ Undocumented: trailing operators use 1 as RHS (77ms)

    ✓ Replace specific single equal lines (70ms)

    ✓ Replace current line with no active selection (55ms)

    ✓ Replace text in selection (86ms)

    ✓ Substitute support marks (81ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (55ms)

      ✓ Replace with `g` flag inverts global flag (45ms)

      ✓ Replace with `c` flag inverts global flag (68ms)

      ✓ Replace multiple lines (101ms)

      ✓ Replace across specific lines (53ms)

      ✓ Replace current line with no active selection (65ms)

      ✓ Replace text in selection (75ms)

      ✓ Substitute support marks (79ms)

      ✓ Substitute with escaped delimiter (71ms)
    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (197ms)

      ✓ Substitute with previous search using # (192ms)

      ✓ Substitute with previous search using / (221ms)

      ✓ Substitute with parameters should update search state (109ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (298ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (154ms)

      ✓ Substitute repeat previous should accept flags (161ms)

      ✓ Substitute with empty search string should use last searched pattern (224ms)

      ✓ Ampersand (&) should repeat the last substitution (66ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (61ms)

    ✓ tabe with current file path does nothing (45ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (50ms)

    ✓ command line file navigate tab completion (49ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (63ms)

    ✓ command line file tab completion with space in file path (164ms)

  Vertical split

    ✓ :vs creates a second split (79ms)

    ✓ :vsp creates a second split (72ms)

    ✓ :vsplit creates a second split (64ms)

    ✓ :vnew creates a second split (255ms)

    ✓ :vne creates a second split (194ms)

  Basic write-quit

    ✓ Run write and quit (55ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (67ms)

      ✓ Can complete lines in file with different indentation (46ms)

      ✓ Returns no completions for unmatched line (39ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (72ms)

    ✓ getMatchingRemap (70ms)

    ✓ jj -> <Esc> through modehandler (98ms)

    ✓ 0 -> :wq through modehandler (75ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (81ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (92ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (84ms)

    ✓ d -> black hole register delete in normal mode through modehandler (124ms)

    ✓ d -> black hole register delete in normal mode through modehandler (121ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (327ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator
    ✓ no remappings

    ✓ jj->esc
    ✓ remapping missing after and command

    ✓ remappings are de-duped
  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines
  Error

    ✓ error code has message
  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (72ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (72ms)

        ✓ Can track jumps for keys: /b<CR>n (45ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (86ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>% (40ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (56ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (41ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (58ms)

        ✓ Can enter number to jump back multiple times (39ms)

        ✓ Can track one-line `` jumps (149ms)

        ✓ Can track one-line double `` jumps (58ms)

        ✓ Can track one-line '' jumps (71ms)

        ✓ Can track one-line double '' jumps (65ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (63ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (77ms)

[main 2020-02-26T04:57:50.121Z] update#setState checking for updates

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (95ms)

[main 2020-02-26T04:57:50.186Z] update#setState idle

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (87ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (118ms)
      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (129ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (126ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (128ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (126ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (55ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (106ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (111ms)

    ✓ Can repeat last invoked macro (163ms)

    ✓ Can play back with count (433ms)

    ✓ Can play back with count, abort when a motion fails (287ms)

    ✓ Repeat change on contiguous lines (123ms)

    ✓ Append command to a macro (129ms)

    ✓ Can record Ctrl Keys and repeat (114ms)

    ✓ Can execute macros with dot commands properly (106ms)

    ✓ : (command) register can be used as a macro (78ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (64ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (68ms)

    ✓ <C-c> can exit insert (49ms)

    ✓ <Esc> can exit insert (41ms)

    ✓ Stay in insert when entering characters (72ms)

    ✓ Can handle 'O' (58ms)

    ✓ 'i' puts you in insert mode before the cursor (42ms)

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line (136ms)

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (53ms)

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters (47ms)

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (57ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines (42ms)

    ✓ Backspace works on end of whitespace only lines (41ms)

    ✓ Backspace works at beginning of file (102ms)

    ✓ Delete works in insert mode

    ✓ Delete works at line end

    ✓ Delete works at end of file

    ✓ Delete works with repeat (120ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (56ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (45ms)

    ✓ Can perform insert command prefixed with count (49ms)

    ✓ Can perform append command prefixed with count (53ms)

    ✓ Can perform insert at start of line command prefixed with count (49ms)

    ✓ Can perform append to end of line command prefixed with count (47ms)

    ✓ Can perform change char (s) command prefixed with count (73ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (84ms)

    ✓ Can handle 'O' with count (90ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (81ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1) (85ms)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line (40ms)

    ✓ Can handle dd

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d

    ✓ Can handle dd empty line (42ms)

    ✓ Can handle ddp (51ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (42ms)

    ✓ Can handle 'db' (38ms)

    ✓ Can handle 'db then 'db' again (44ms)

    ✓ Can handle 'dl' at end of line (55ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT' (45ms)

    ✓ Can handle 'd3' then <enter> (46ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (47ms)

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket (40ms)

    ✓ Can handle 'cw' (67ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w' (65ms)

    ✓ Can handle 'cw' without removing EOL (46ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (41ms)

    ✓ Can handle 'c]}' without deleting closing bracket

    ✓ Can handle 's' (125ms)

    ✓ Can handle 'yiw' with correct cursor ending position (84ms)

    ✓ Can handle 'ciw' (94ms)

    ✓ Can handle 'ciw' on blanks (53ms)

    ✓ Can handle 'caw' (56ms)

    ✓ Can handle 'caw' on first letter (64ms)

    ✓ Can handle 'caw' on blanks (52ms)

    ✓ Can handle 'caw' on blanks (43ms)

    ✓ Can handle 'ci(' on first parentheses (43ms)

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens (39ms)

    ✓ Can handle 'cib' on first parentheses (64ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)' (43ms)

    ✓ Can handle count prefixed 'ca)' (42ms)

    ✓ Can handle 'ca(' spanning multiple lines (44ms)

    ✓ Can handle 'cab' spanning multiple lines (49ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines (45ms)

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines (124ms)

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (38ms)

    ✓ Can handle 'ca]' on first bracket (41ms)

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (47ms)

    ✓ Can handle 'ci'' on closing quote (43ms)

    ✓ Can handle 'ci'' when string is ahead (40ms)

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word (48ms)

    ✓ Can handle 'ca"' starting on the opening quote (38ms)

    ✓ Can handle 'ci"' with escaped quotes (44ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (59ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences (49ms)

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (40ms)

    ✓ can handle cj (71ms)

    ✓ can handle ck (61ms)

    ✓ can handle c2j (70ms)

    ✓ can handle c2k (79ms)

    ✓ can handle cj on last line (214ms)

    ✓ can handle ck on first line (58ms)

    ✓ can handle c2j on last line (56ms)

    ✓ can handle c2k on first line (69ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces (39ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (39ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines (49ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (210ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (53ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace

    ✓ Can handle 'daw' around word at end of line (38ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (45ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces (54ms)

    ✓ Can handle 'daW' on word with leading spaces (42ms)

    ✓ Can handle 'daW' on word with numeric prefix (48ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (91ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (50ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (49ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (119ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (43ms)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (38ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (41ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (55ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces (44ms)

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines (39ms)

    ✓ Can handle 'diW' on beginning of word (38ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line (46ms)

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces (47ms)

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (55ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (73ms)

    ✓ A should update desiredColumn (95ms)

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (56ms)

    ✓ leaving insert mode should update desired column when entered with i (76ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (84ms)

    ✓ Can handle 'p' after 'yy' (189ms)

    ✓ Can handle 'P' after 'Nyy' (41ms)

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position (218ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (54ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (51ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (39ms)

    ✓ Can handle 'gP' after 'yy' (40ms)

    ✓ Can handle 'gP' after 'Nyy' (48ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (80ms)

    ✓ Can handle ']p' after yy (41ms)

    ✓ Can handle ']p' after 'Nyy' (47ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (49ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (53ms)

    ✓ Can handle '[p' after yy (51ms)

    ✓ Can handle '[p' after 'Nyy' (51ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (45ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (51ms)

    ✓ Can handle 'p' after y'a (51ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (62ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (70ms)

    ✓ Can repeat w

    ✓ Can repeat p (40ms)

    ✓ I works correctly (100ms)

    ✓ gI works correctly (48ms)

    ✓ gi works correctly (91ms)

    ✓ `. works correctly (68ms)

    ✓ '. works correctly (50ms)

    ✓ g; works correctly (73ms)

    ✓ g, works correctly (95ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly (41ms)

    ✓ gq handles spaces after single line comments correctly

    ✓ gq handles spaces before single line comments correctly (39ms)

    ✓ gq handles tabs before single line comments correctly (66ms)

    ✓ Can handle space

    ✓ Can handle space (44ms)

    ✓ Undo 1 (89ms)

    ✓ Undo 2 (75ms)

    ✓ Undo cursor (113ms)

    ✓ Undo cursor 2 (146ms)

    ✓ Undo cursor 3 (87ms)

    ✓ Undo with movement first (82ms)

    ✓ Can handle 'U' (374ms)

    ✓ Can handle 'U' for multiple changes (68ms)

    ✓ Can handle 'U' for new line below (63ms)

    ✓ Can handle 'U' for new line above (63ms)

    ✓ Can handle 'U' for consecutive changes only (123ms)

    ✓ Can handle 'u' to undo 'U' (54ms)

    ✓ Can handle 'U' to undo 'U' (51ms)

    ✓ Can handle 'u' after :s/abc/def (80ms)

    ✓ Redo (115ms)

    ✓ Redo (79ms)

    ✓ Redo (94ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle gUw (42ms)

    ✓ Can handle u over line breaks (42ms)

    ✓ can handle s in visual mode (50ms)

    ✓ can handle p with selection (61ms)

    ✓ can handle P with selection (61ms)

    ✓ can handle p in visual to end of line (125ms)

    ✓ can repeat backspace twice (63ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (60ms)

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines (52ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (82ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S (42ms)

    ✓ / does not affect mark (53ms)

    ✓ / can search with regex

    ✓ / can search with newline (53ms)

    ✓ / can search through multiple newlines (82ms)

    ✓ / matches ^ per line (47ms)

    ✓ / matches $ per line (45ms)

    ✓ Can search for forward slash (41ms)

    ✓ Can search backward for question mark (41ms)

    ✓ /\c forces case insensitive search (50ms)

    ✓ /\C forces case sensitive search

    ✓ <BS> deletes the last character in search in progress mode

    ✓ <S-BS> deletes the last character in search in progress mode (49ms)

    ✓ <C-h> deletes the last character in search in progress mode (48ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (38ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag (45ms)

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags (66ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (43ms)

    ✓ cc copies linewise (42ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (43ms)

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (55ms)

    ✓ '] go to the end of the previously operated or put text (116ms)

    ✓ `[ go to the start of the previously operated or put text (90ms)

    ✓ '[ go to the start of the previously operated or put text (139ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle (44ms)

    can handle gn

      ✓ gn selects the next match text (243ms)

      ✓ gn selects the current word at |hello (185ms)

      ✓ gn selects the current word at h|ello (188ms)

      ✓ gn selects the current word at hel|lo (186ms)

      ✓ gn selects the current word at hell|o (250ms)

      ✓ gn selects the next word at hello| (173ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (67ms)

      ✓ dgn deletes the current word when cursor is at |hello (86ms)

      ✓ dgn deletes the current word when cursor is at h|ello (81ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (88ms)

      ✓ dgn deletes the current word when cursor is at hell|o (68ms)

      ✓ dgn deletes the next word when cursor is at hello| (81ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (116ms)

      ✓ cgn deletes the current word when cursor is at |hello (55ms)

      ✓ cgn deletes the current word when cursor is at h|ello (72ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (67ms)

      ✓ cgn deletes the current word when cursor is at hell|o (81ms)

      ✓ cgn deletes the next word when cursor is at hello| (87ms)

    can handle gN

      ✓ gN selects the previous match text (265ms)

      ✓ gN selects the current word at hell|o (185ms)

      ✓ gN selects the current word at hel|lo (206ms)

      ✓ gN selects the current word at h|ello (204ms)

      ✓ gN selects the current word at |hello (212ms)

      ✓ gN selects the previous word at | hello (301ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (53ms)

      ✓ dgN deletes the current word when cursor is at hell|o (107ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (88ms)

      ✓ dgN deletes the current word when cursor is at h|ello (64ms)

      ✓ dgN deletes the current word when cursor is at |hello (64ms)

      ✓ dgN deletes the previous word when cursor is at | hello (58ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (53ms)

      ✓ cgN deletes the current word when cursor is at hell|o (86ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (100ms)

      ✓ cgN deletes the current word when cursor is at h|ello (84ms)

      ✓ cgN deletes the current word when cursor is at |hello (66ms)

      ✓ cgN deletes the previous word when cursor is at | hello (66ms)

    marks

      ✓ capital marks can change the editors active document (117ms)

      ✓ can jump to lowercase mark (120ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R

    ✓ Can handle R past current line (42ms)

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (81ms)

    ✓ Can handle R across lines and exit Replace Mode (67ms)

    ✓ Can handle R with {count} (92ms)

    ✓ Can handle backspace (50ms)

    ✓ Can handle backspace (68ms)

    ✓ Can handle backspace across lines (75ms)

    ✓ Can handle arrows (49ms)

    ✓ Can handle . (84ms)

    ✓ Can handle . across lines (162ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (96ms)

    ✓ Can handle wd (83ms)

    ✓ Can handle x (93ms)

    ✓ Can handle x across a selection (90ms)

    ✓ Can do vwd in middle of sentence (115ms)

    ✓ Can do vwd in middle of sentence (152ms)

    ✓ Can do vwd multiple times (179ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (131ms)

    ✓ Can handle H key

    ✓ Can handle backspace key

    ✓ handles case where we delete over a newline (196ms)

    ✓ handles change operator (92ms)

    ✓ Can do vat on multiple matching tags (48ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (72ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (46ms)

    ✓ Repeat-prefixed vat does not bleed below (79ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis (46ms)

    ✓ Can do vi) on multiple matching parens (62ms)

    ✓ Can do va) on a matching parenthesis (47ms)

    ✓ Can do va) on multiple matching parens (44ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (38ms)

    ✓ Repeat-prefixed va) does not bleed below (46ms)

    ✓ Can do va} on a matching bracket as first character (57ms)

    ✓ Can do va} on multiple matching brackets (206ms)

    ✓ Can do vi( on a matching bracket near first character (50ms)

    ✓ Can do vi{ on outer pair of nested braces (55ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (45ms)

    ✓ Can do va] on multiple matching brackets (69ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (63ms)

    ✓ Repeat-prefixed vaf does not bleed below (48ms)

    ✓ vaf only expands to enclosing pairs (52ms)

    ✓ Can use . to repeat indent in visual (51ms)

    ✓ Can do v_x to delete to first char (49ms)

    ✓ Can do vg_x to delete to last char with no EOL (45ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (53ms)

    ✓ Can do v$x to delete to last char including EOL

    ✓ Can do gv to reselect previous selection (51ms)

    Vim's EOL handling is weird

      ✓ delete through eol (83ms)

      ✓ join 2 lines by deleting through eol (126ms)

      ✓ d$ doesn't delete whole line (66ms)

      ✓ vd$ does delete whole line (83ms)

      ✓ Paste over selection copies the selection (63ms)

      ✓ Paste over selection copies the selection linewise (97ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (62ms)

      ✓ Can handle <down> key (39ms)

      ✓ Can handle <left> key (42ms)

      ✓ Can handle <right> key (153ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (45ms)

      ✓ Can handle 'gj' (59ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (45ms)

      ✓ Can handle 'vawd' on word with trailing spaces (65ms)

      ✓ Can handle 'vawd' on word with leading spaces (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix (44ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (102ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (91ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (49ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (68ms)

      ✓ Can handle 'vaWd' on word with leading spaces (45ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (97ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (44ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (43ms)

      ✓ Can handle 'vaWd' on word with leading spaces (48ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (85ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (75ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces

      ✓ Can handle 'vawd' on word with trailing spaces (46ms)

      ✓ Can handle 'vawd' on word with leading spaces (107ms)

      ✓ Can handle 'vawd' on word with numeric prefix (40ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (83ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (44ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (50ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (43ms)

      ✓ Can handle 'vaWd' on word with leading spaces (41ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (52ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (47ms)

      ✓ Can handle 'Y' in visual mode (102ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (48ms)

      ✓ Select sentence with leading spaces in visual mode (50ms)

      ✓ Select multiple sentences in visual mode (70ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (59ms)

      ✓ Select inner sentence with leading spaces in visual mode (44ms)

      ✓ Select spaces between sentences in visual mode (64ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (44ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (38ms)

      ✓ Can do vat on a matching tag (57ms)

    handles replace in visual mode

      ✓ Can do a single line replace (43ms)

      ✓ Can do a multi line replace (52ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (120ms)

      ✓ D deletes the current line (48ms)

    handles indent blocks in visual mode

      ✓ Can do vai (45ms)

      ✓ Can do vii (90ms)

      ✓ Doesn't naively select the next line (49ms)

      ✓ Searches backwards if cursor line is empty (52ms)

      ✓ Can do vaI (98ms)

    visualstar

      ✓ Works with * (52ms)

      ✓ Works with # (49ms)

    search works in visual mode

      ✓ Works with / (78ms)

      ✓ Works with ? (61ms)

      ✓ Selects correct range (202ms)

    X will delete linewise

      ✓ normal selection (47ms)

      ✓ normal selection (47ms)

    C will delete linewise

      ✓ normal selection (74ms)

      ✓ normal selection (42ms)

    R will delete linewise

      ✓ normal selection (51ms)

      ✓ normal selection (106ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (149ms)

      ✓ upward selection (71ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (50ms)

      ✓ multiline indent bottom up selection (42ms)

      ✓ repeat multiline indent top down selection (227ms)

      ✓ repeat multiline indent bottom up selection (69ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (48ms)

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (81ms)

      ✓ repeat multiline outdent bottom up selection (57ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (158ms)

    vi{ will go to end of second to last line

      ✓ select (80ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (380ms)

      ✓ gv selects the last pasted text (which is longer than original) (346ms)

      ✓ gv selects the last pasted text (multiline) (183ms)

    can handle gn

      ✓ gn selects the next match text (297ms)

      ✓ gn selects the current word at |hello (185ms)

      ✓ gn selects the current word at h|ello (207ms)

      ✓ gn selects the current word at hel|lo (235ms)

      ✓ gn selects the next word at hell|o (196ms)

      ✓ gn selects the next word at hello| (341ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (109ms)

      ✓ U/gU across a selection (64ms)

      ✓ U/gU across a selection (reverse) (61ms)

      ✓ u/gu on single character (95ms)

      ✓ u/gu across a selection (65ms)

      ✓ u/gu across a selection (reverse) (72ms)

  Mode Visual Block

    ✓ can be activated (42ms)

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D' (40ms)

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (119ms)

    ✓ o works in visual block mode (87ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (194ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (137ms)

    ✓ Can handle wd (112ms)

    ✓ Can handle x (94ms)

    ✓ Can handle x across a selection (81ms)

    ✓ Can do vwd in middle of sentence (190ms)

    ✓ Can do vwd in middle of sentence (99ms)

    ✓ Can do vwd multiple times (201ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (140ms)

    ✓ handles case where we delete over a newline (114ms)

    ✓ handles change operator (135ms)

    ✓ Vp updates register content (60ms)

    ✓ Vp does not append unnecessary newlines (first line) (47ms)

    ✓ Vp does not append unnecessary newlines (middle line) (49ms)

    ✓ Vp does not append unnecessary newlines (last line) (46ms)

    ✓ Exiting via <Esc> returns cursor to original column

    Vim's EOL handling is weird

      ✓ delete through eol (125ms)

      ✓ join 2 lines by deleting through eol (85ms)

      ✓ d$ doesn't delete whole line (86ms)

      ✓ vd$ does delete whole line (162ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key (96ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (46ms)

      ✓ Can handle 'gj' (75ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key (67ms)

      ✓ Can handle d key (52ms)

      ✓ Can handle d key (40ms)

      ✓ can handle 'c' (43ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (39ms)

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up (75ms)

    search works in visual line mode

      ✓ Works with / (51ms)

      ✓ Works with ? (50ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (168ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (51ms)

      ✓ linewise visual put works also in the end of document (53ms)

      ✓ gv selects the last pasted text (which is shorter than original) (368ms)

      ✓ gv selects the last pasted text (which is longer than original) (600ms)

      ✓ gv selects the last pasted text (multiline) (170ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly (65ms)

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste

    ✓ Can handle 'x' at end of line (52ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (104ms)

    ✓ Can handle 'cc' (45ms)

    ✓ Can handle 'Ncc' (351ms)

    ✓ Can handle 'yy' (125ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'DD' (42ms)

    ✓ Can handle 'C' (77ms)

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r' (124ms)

    ✓ Can handle 'r' after 'dd'

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
' (65ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (60ms)

    ✓ Can handle 'J' with empty last line (40ms)

    ✓ Can handle 'J's with multiple empty last lines (141ms)

    ✓ Can handle 'J' with leading white space on next line

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines (44ms)

    ✓ Can handle 'J' with ')' first character on next line

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (140ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (46ms)

    ✓ Can repeat '~' with dot (54ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (81ms)

    ✓ Can handle dot with I (153ms)

    ✓ Can repeat actions that require selections (77ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (62ms)

    ✓ Can repeat insert change and '<C-t>' (133ms)

    ✓ Can repeat change by `<C-a>` (304ms)

    ✓ Only one arrow key can be repeated in Insert Mode (75ms)

    ✓ Cached content change will be cleared by arrow keys (173ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning (63ms)

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning (58ms)

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive (40ms)

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>]) (53ms)

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{ (61ms)

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge' (63ms)

    ✓ Can handle 'gg' (51ms)

    ✓ Can handle 'gg' to first non blank char on random line (40ms)

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    38) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (57ms)

    ✓ Can handle $ with a count (110ms)

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count (50ms)

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab> (103ms)

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (64ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search (43ms)

    ✓ Can handle 'T' (44ms)

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word (60ms)

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (53ms)

    ✓ cancelled search reverts to previous search state (53ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (97ms)

    ✓ Search offsets: b2 goes 2 to the right (180ms)

    ✓ Search offsets: b+3 goes 3 to the right (156ms)

    ✓ Search offsets: e goes to the end (38ms)

    ✓ Search offsets: character offset goes across line boundaries (42ms)

    ✓ Search offsets: 2 goes 2 down (115ms)

    ✓ Search offsets: -2 goes 2 up (50ms)

    ✓ maintains column position correctly (397ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix (71ms)

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n (71ms)

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace (42ms)

    ✓ Can handle # on EOL

    ✓ Can handle g# (83ms)

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle | (38ms)

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (150ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix (40ms)

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    39) Can handle g_

    ✓ Can handle g_ with count prefix (39ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD
      ✓ first WORD should move to previous line, beginning of last WORD
      ✓ first WORD should move to previous line, stops on empty line
      ✓ first WORD should move to previous line, skips whitespace only line
    end of word right
      ✓ move to end of current word right
      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right
      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces

    sentence backward

      ✓ current sentence begin

      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line
      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line (52ms)

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line (81ms)

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (304ms)

      ✓ search wraps around the start of the file (40ms)

    wrapscan disabled

      ✓ search stops at the end of the file

      ✓ search stops at the start of the file (105ms)

  Multicursor

    ✓ can add multiple cursors below (105ms)

    ✓ can add multiple cursors above (126ms)

    ✓ dd works with multi-cursor (42ms)

    ✓ Vd works with multi-cursor (41ms)

    47) <C-v>d works with multi-cursor

    48) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    49) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (181ms)

    ✓ gcj comments in current and next line (103ms)

    ✓ block comment with motion (187ms)

    ✓ block comment in Visual Mode (220ms)

    ✓ comment in visual line mode (98ms)

    ✓ comment in visual block mode (180ms)

  format operator

    ✓ == formats current line (392ms)

    ✓ =$ formats entire line (304ms)

    ✓ =j formats two lines (116ms)

    ✓ 3=k formats three lines (162ms)

    50) =gg formats to top of file

    ✓ =G formats to bottom of file (90ms)

    ✓ =ip formats paragraph (143ms)

    ✓ format in visual mode (78ms)

  put operator

    ✓ basic put test (111ms)

    ✓ test yy end of line (71ms)

    ✓ test yy first line (102ms)

    ✓ test yy middle line (44ms)

    ✓ test yy with correct positon movement (60ms)

    ✓ test visual block single line yank p (54ms)

    ✓ test visual block single line yank P (61ms)

    ✓ test visual block single line delete p (64ms)

    ✓ test visual block single line delete P (81ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works (46ms)

    ✓ g? in visual line mode works (51ms)

    51) g? in visual block mode works

  shift operator

    ✓ basic shift left test (209ms)

    ✓ shift left goto end test (49ms)

    ✓ shift left goto line test

    ✓ shift right goto end test (45ms)

    ✓ shift right goto line test (105ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work (118ms)

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word (48ms)

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word (38ms)

      ✓ step to operator and then over (114ms)

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word (40ms)

      ✓ step from in whitespace to word (91ms)

      ✓ step in ALL_CAPS_WORD (50ms)

    handles d<leader>w

      ✓ delete from start of camelWord (48ms)

      ✓ delete from middle of camelWord (96ms)

      ✓ delete from start of CamelWord (48ms)

      ✓ delete two words from camelWord (45ms)

      ✓ delete from start of underscore_word (44ms)

      ✓ delete from middle of underscore_word (124ms)

      ✓ delete two words from camel_word (42ms)

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (39ms)

      ✓ delete two words from camelWord (46ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word (127ms)

      ✓ delete two words from camel_word (41ms)

    handles <leader>b

      ✓ back from middle of word (104ms)

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (55ms)

    ✓ Can handle 2s move (81ms)

    ✓ Can handle f move (69ms)

    ✓ Can handle 2f move (44ms)

    ✓ Can handle F move (97ms)

    ✓ Can handle 2F move (47ms)

    ✓ Can handle t move (46ms)

    ✓ Can handle bd-t move (51ms)

    ✓ Can handle 2t move (134ms)

    ✓ Can handle bd-t2 move (115ms)

    ✓ Can handle T move (46ms)

    ✓ Can handle 2T move (50ms)

    ✓ Can handle w move (87ms)

    ✓ Can handle bd-w move (47ms)

    ✓ Can handle b move (47ms)

    ✓ Can handle e move

    ✓ Can handle bd-e move (38ms)

    ✓ Can handle ge move (91ms)

    ✓ Can handle n-char move (56ms)

    ✓ Can handle j move (48ms)

    ✓ Can handle k move (45ms)

    ✓ Can handle bd-jk move (1) (46ms)

    ✓ Can handle bd-jk move (2) (123ms)

    ✓ Can handle lineforward move (1)

    ✓ Can handle lineforward move (2) (44ms)

    52) Can handle linebackward move (1)

    53) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (161ms)

    ✓ Can handle searching for carat (^) (145ms)

    ✓ Can handle searching for dot (.) (43ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (83ms)

    ✓ Replaces within inner Word (91ms)

    ✓ Replaces within '' (485ms)

    ✓ Replaces within '' including spaces (46ms)

    ✓ Replaces within () (65ms)

    ✓ Replaces within () including spaces (46ms)

    ✓ Replaces within a paragraph (90ms)

    ✓ Replaces using a specified register (76ms)

    ✓ Replaces within {} over multiple lines (90ms)

    ✓ Replaces a multiline register within {} over multiple lines (43ms)

    ✓ Replaces a multiline register within {} over multiple lines (48ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (132ms)

    ✓ grr replaces the entire line with the register (46ms)

    ✓ grr can replace multiple lines (46ms)

    ✓ Replaces in visual mode (55ms)

    ✓ Replaces in visual mode using a specified register (80ms)

    ✓ Replaces in visual line mode (64ms)

    ✓ grj is linewise (170ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion (42ms)

    ✓ Can handle <operator>z motion (48ms)

    ✓ Can handle <operator>Z motion (41ms)

    ✓ Can handle s; motion (41ms)

    ✓ Can handle s, motion

    ✓ Can handle S; motion

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion (138ms)

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (43ms)

    ✓ Can handle single letter <operator>Z motion

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion (64ms)

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion (72ms)

    ✓ Can handle multiline single char <number>s motion

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (176ms)

    ✓ 'ysiw(' surrounds word with space (118ms)

    ✓ 'ysw)' surrounds word without space (52ms)

    ✓ 'ysw(' surrounds word with space (54ms)

    ✓ 'ysaw)' surrounds word without space (88ms)

    ✓ 'ysaw(' surrounds word with space (215ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (97ms)

    ✓ 'ysiw<' surrounds word with tags (125ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (103ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (52ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (159ms)

    ✓ change surround (45ms)

    ✓ change surround with two pairs of quotes (47ms)

    ✓ change surround with two pairs of parens (93ms)

    ✓ change surround with alias (103ms)

    ✓ change surround to tags (118ms)

    ✓ delete surround (113ms)

    ✓ delete surround with quotes (54ms)

    ✓ delete surround with nested of quotes (67ms)

    ✓ delete surround with inconsistent quotes (83ms)

    ✓ delete surround with mixed quotes (109ms)

    ✓ delete surround with empty quotes cursor at start (47ms)

    ✓ delete surround with empty quotes cursor at end (46ms)

    ✓ don't delete surround if cursor is after closing match (567ms)

    ✓ delete surround if cursor is before opening match (96ms)

    ✓ delete surround with two pairs of parens (61ms)

    ✓ delete surround with alias (44ms)

    ✓ delete surround with tags (126ms)

    ✓ change surround brackets at end of line (57ms)

    ✓ changing brackets with surround works again (148ms)

    ✓ change surround with tags that contain an attribute and preserve them (61ms)

    ✓ change surround with tags that contain an attribute and remove them (57ms)

  register

    ✓ Can copy to a register (44ms)

    ✓ Can use two registers together (106ms)

    ✓ Can use black hole register (66ms)

    ✓ System clipboard works with chinese characters (160ms)

    ✓ Yank stores text in Register '0' (194ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (170ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (416ms)

    ✓ Register '1'-'9' stores delete content (339ms)

    ✓ "A appends linewise text to "a (304ms)

    ✓ "A appends character wise text to "a (236ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (214ms)

    ✓ Small deletion using Del is stored in small delete register (226ms)

    ✓ Small deletion using X is stored in small delete register (294ms)

    ✓ Search register (/) is set by forward search (297ms)

    ✓ Search register (/) is set by backward search (336ms)

    ✓ Search register (/) is set by star search (375ms)

    ✓ Command register (:) is set by command line (75ms)

    ✓ Read-only registers cannot be written to (265ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character> (55ms)

    ✓ Can repeat reversed F<character> (60ms)

    ✓ Can repeat t<character> (38ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (170ms)

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline (128ms)

      ✓ move one sentence backward - multiline - period (45ms)

      ✓ move one sentence backward - multiline - previous line (265ms)

      ✓ move one sentence backward - multiline - previous line - period (61ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar' (109ms)

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath
      ✓ can separate drive letter path on Windows
      ✓ can separate UNC path on Windows
      ✓ can separate relative path on Windows
      ✓ can separate absolute path on posix
      ✓ can separate relative path on posix
    resolveUri

      ✓ posix
      ✓ win32

  1291 passing (3m)

  4 pending

  53 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +31
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)


  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Wrong number of cursors
      + expected - actual

      -1
      +2
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  9) Mode Visual
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)


  16) Mode Visual Block
       Can handle c forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)


  17) Mode Visual Block
       Can handle c backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)


  18) Mode Visual Block
       Can handle C:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)


  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Wrong number of cursors
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's LINE position is wrong.
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -2
      +0
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +8
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #1's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)


  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #1's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)


  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #1's LINE position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)


  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  47) Multicursor
       <C-v>d works with multi-cursor:

      Missing '|' in test object's end.
      + expected - actual

      -false
      +true
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  48) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  49) Multicursor
       o works with multi-cursor:
     
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  50) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  51) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  52) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -6
      +3
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  53) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -8
      +6
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-8.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T04:57:20.119Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses
    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (94ms)

    ✓ command <C-w> can remove word in search mode (41ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (58ms)

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (64ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (84ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (109ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (74ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command (49ms)

    ✓ add command over configuration.history (38ms)

    ✓ add command that exists in history (38ms)

    ✓ file system

    ✓ change configuration.history (66ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1268ms)

  command-line parser

    ✓ can parse empty string
    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar
  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (535ms)

    ✓ :smile editor contains smile text (535ms)

  Basic sort

    ✓ Sort whole file, asc (82ms)

    ✓ Sort whole file, asc, ignoreCase (69ms)

    ✓ Sort whole file, dsc (120ms)

    ✓ Sort whole file, dsc, ignoreCase (84ms)

    ✓ Sort range, asc (156ms)

    ✓ Sort range, asc, ignoreCase (152ms)

    ✓ Sort range, dsc (86ms)

    ✓ Sort range, dsc, ignoreCase (166ms)

    ✓ Sort whole file, asc, unique (100ms)

  Horizontal split

    ✓ :sp creates a second split (95ms)

    ✓ :split creates a second split (66ms)

    ✓ :new creates a second split (208ms)

  :close args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !
    ✓ throws if space before !
    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (38ms)

    ✓ Replace with flags AND count (117ms)

    ✓ Replace with `c` flag (45ms)

    ✓ Replace with `gc` flag (79ms)

    ✓ Replace across all lines (73ms)

    ✓ Replace on specific single line (80ms)

    ✓ Replace on current line using dot (72ms)

    ✓ Replace single relative line using dot and plus (65ms)

    ✓ Replace across specific line range (116ms)

    ✓ Replace across relative line range using dot, plus, and minus (111ms)

    ✓ Replace across relative line range using numLines+colon shorthand (78ms)

    ✓ Repeat replacement across relative line range (89ms)

    ✓ Replace with range AND count but no flags (66ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (79ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (74ms)

    ✓ Undocumented: trailing operators use 1 as RHS (77ms)

    ✓ Replace specific single equal lines (70ms)

    ✓ Replace current line with no active selection (55ms)

    ✓ Replace text in selection (86ms)

    ✓ Substitute support marks (81ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (55ms)

      ✓ Replace with `g` flag inverts global flag (45ms)

      ✓ Replace with `c` flag inverts global flag (68ms)

      ✓ Replace multiple lines (101ms)

      ✓ Replace across specific lines (53ms)

      ✓ Replace current line with no active selection (65ms)

      ✓ Replace text in selection (75ms)

      ✓ Substitute support marks (79ms)

      ✓ Substitute with escaped delimiter (71ms)
    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (197ms)

      ✓ Substitute with previous search using # (192ms)

      ✓ Substitute with previous search using / (221ms)

      ✓ Substitute with parameters should update search state (109ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (298ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (154ms)

      ✓ Substitute repeat previous should accept flags (161ms)

      ✓ Substitute with empty search string should use last searched pattern (224ms)

      ✓ Ampersand (&) should repeat the last substitution (66ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (61ms)

    ✓ tabe with current file path does nothing (45ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (50ms)

    ✓ command line file navigate tab completion (49ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (63ms)

    ✓ command line file tab completion with space in file path (164ms)

  Vertical split

    ✓ :vs creates a second split (79ms)

    ✓ :vsp creates a second split (72ms)

    ✓ :vsplit creates a second split (64ms)

    ✓ :vnew creates a second split (255ms)

    ✓ :vne creates a second split (194ms)

  Basic write-quit

    ✓ Run write and quit (55ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (67ms)

      ✓ Can complete lines in file with different indentation (46ms)

      ✓ Returns no completions for unmatched line (39ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (72ms)

    ✓ getMatchingRemap (70ms)

    ✓ jj -> <Esc> through modehandler (98ms)

    ✓ 0 -> :wq through modehandler (75ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (81ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (92ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (84ms)

    ✓ d -> black hole register delete in normal mode through modehandler (124ms)

    ✓ d -> black hole register delete in normal mode through modehandler (121ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (327ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator
    ✓ no remappings

    ✓ jj->esc
    ✓ remapping missing after and command

    ✓ remappings are de-duped
  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines
  Error

    ✓ error code has message
  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (72ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (72ms)

        ✓ Can track jumps for keys: /b<CR>n (45ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (86ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>% (40ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (56ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (41ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (58ms)

        ✓ Can enter number to jump back multiple times (39ms)

        ✓ Can track one-line `` jumps (149ms)

        ✓ Can track one-line double `` jumps (58ms)

        ✓ Can track one-line '' jumps (71ms)

        ✓ Can track one-line double '' jumps (65ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (63ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (77ms)

[main 2020-02-26T04:57:50.121Z] update#setState checking for updates

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (95ms)

[main 2020-02-26T04:57:50.186Z] update#setState idle

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (87ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (118ms)
      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (129ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (126ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (128ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (126ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (55ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (106ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (111ms)

    ✓ Can repeat last invoked macro (163ms)

    ✓ Can play back with count (433ms)

    ✓ Can play back with count, abort when a motion fails (287ms)

    ✓ Repeat change on contiguous lines (123ms)

    ✓ Append command to a macro (129ms)

    ✓ Can record Ctrl Keys and repeat (114ms)

    ✓ Can execute macros with dot commands properly (106ms)

    ✓ : (command) register can be used as a macro (78ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (64ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (68ms)

    ✓ <C-c> can exit insert (49ms)

    ✓ <Esc> can exit insert (41ms)

    ✓ Stay in insert when entering characters (72ms)

    ✓ Can handle 'O' (58ms)

    ✓ 'i' puts you in insert mode before the cursor (42ms)

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line (136ms)

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (53ms)

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters (47ms)

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (57ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines (42ms)

    ✓ Backspace works on end of whitespace only lines (41ms)

    ✓ Backspace works at beginning of file (102ms)

    ✓ Delete works in insert mode

    ✓ Delete works at line end

    ✓ Delete works at end of file

    ✓ Delete works with repeat (120ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (56ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (45ms)

    ✓ Can perform insert command prefixed with count (49ms)

    ✓ Can perform append command prefixed with count (53ms)

    ✓ Can perform insert at start of line command prefixed with count (49ms)

    ✓ Can perform append to end of line command prefixed with count (47ms)

    ✓ Can perform change char (s) command prefixed with count (73ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (84ms)

    ✓ Can handle 'O' with count (90ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (81ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1) (85ms)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line (40ms)

    ✓ Can handle dd

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d

    ✓ Can handle dd empty line (42ms)

    ✓ Can handle ddp (51ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (42ms)

    ✓ Can handle 'db' (38ms)

    ✓ Can handle 'db then 'db' again (44ms)

    ✓ Can handle 'dl' at end of line (55ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT' (45ms)

    ✓ Can handle 'd3' then <enter> (46ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (47ms)

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket (40ms)

    ✓ Can handle 'cw' (67ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w' (65ms)

    ✓ Can handle 'cw' without removing EOL (46ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (41ms)

    ✓ Can handle 'c]}' without deleting closing bracket

    ✓ Can handle 's' (125ms)

    ✓ Can handle 'yiw' with correct cursor ending position (84ms)

    ✓ Can handle 'ciw' (94ms)

    ✓ Can handle 'ciw' on blanks (53ms)

    ✓ Can handle 'caw' (56ms)

    ✓ Can handle 'caw' on first letter (64ms)

    ✓ Can handle 'caw' on blanks (52ms)

    ✓ Can handle 'caw' on blanks (43ms)

    ✓ Can handle 'ci(' on first parentheses (43ms)

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens (39ms)

    ✓ Can handle 'cib' on first parentheses (64ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)' (43ms)

    ✓ Can handle count prefixed 'ca)' (42ms)

    ✓ Can handle 'ca(' spanning multiple lines (44ms)

    ✓ Can handle 'cab' spanning multiple lines (49ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines (45ms)

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines (124ms)

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (38ms)

    ✓ Can handle 'ca]' on first bracket (41ms)

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (47ms)

    ✓ Can handle 'ci'' on closing quote (43ms)

    ✓ Can handle 'ci'' when string is ahead (40ms)

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word (48ms)

    ✓ Can handle 'ca"' starting on the opening quote (38ms)

    ✓ Can handle 'ci"' with escaped quotes (44ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (59ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences (49ms)

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (40ms)

    ✓ can handle cj (71ms)

    ✓ can handle ck (61ms)

    ✓ can handle c2j (70ms)

    ✓ can handle c2k (79ms)

    ✓ can handle cj on last line (214ms)

    ✓ can handle ck on first line (58ms)

    ✓ can handle c2j on last line (56ms)

    ✓ can handle c2k on first line (69ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces (39ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (39ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines (49ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (210ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (53ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace

    ✓ Can handle 'daw' around word at end of line (38ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (45ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces (54ms)

    ✓ Can handle 'daW' on word with leading spaces (42ms)

    ✓ Can handle 'daW' on word with numeric prefix (48ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (91ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (50ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (49ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (119ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (43ms)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (38ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (41ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (55ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces (44ms)

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines (39ms)

    ✓ Can handle 'diW' on beginning of word (38ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line (46ms)

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces (47ms)

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (55ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (73ms)

    ✓ A should update desiredColumn (95ms)

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (56ms)

    ✓ leaving insert mode should update desired column when entered with i (76ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (84ms)

    ✓ Can handle 'p' after 'yy' (189ms)

    ✓ Can handle 'P' after 'Nyy' (41ms)

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position (218ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (54ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (51ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (39ms)

    ✓ Can handle 'gP' after 'yy' (40ms)

    ✓ Can handle 'gP' after 'Nyy' (48ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (80ms)

    ✓ Can handle ']p' after yy (41ms)

    ✓ Can handle ']p' after 'Nyy' (47ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (49ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (53ms)

    ✓ Can handle '[p' after yy (51ms)

    ✓ Can handle '[p' after 'Nyy' (51ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (45ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (51ms)

    ✓ Can handle 'p' after y'a (51ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (62ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (70ms)

    ✓ Can repeat w

    ✓ Can repeat p (40ms)

    ✓ I works correctly (100ms)

    ✓ gI works correctly (48ms)

    ✓ gi works correctly (91ms)

    ✓ `. works correctly (68ms)

    ✓ '. works correctly (50ms)

    ✓ g; works correctly (73ms)

    ✓ g, works correctly (95ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly (41ms)

    ✓ gq handles spaces after single line comments correctly

    ✓ gq handles spaces before single line comments correctly (39ms)

    ✓ gq handles tabs before single line comments correctly (66ms)

    ✓ Can handle space

    ✓ Can handle space (44ms)

    ✓ Undo 1 (89ms)

    ✓ Undo 2 (75ms)

    ✓ Undo cursor (113ms)

    ✓ Undo cursor 2 (146ms)

    ✓ Undo cursor 3 (87ms)

    ✓ Undo with movement first (82ms)

    ✓ Can handle 'U' (374ms)

    ✓ Can handle 'U' for multiple changes (68ms)

    ✓ Can handle 'U' for new line below (63ms)

    ✓ Can handle 'U' for new line above (63ms)

    ✓ Can handle 'U' for consecutive changes only (123ms)

    ✓ Can handle 'u' to undo 'U' (54ms)

    ✓ Can handle 'U' to undo 'U' (51ms)

    ✓ Can handle 'u' after :s/abc/def (80ms)

    ✓ Redo (115ms)

    ✓ Redo (79ms)

    ✓ Redo (94ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle gUw (42ms)

    ✓ Can handle u over line breaks (42ms)

    ✓ can handle s in visual mode (50ms)

    ✓ can handle p with selection (61ms)

    ✓ can handle P with selection (61ms)

    ✓ can handle p in visual to end of line (125ms)

    ✓ can repeat backspace twice (63ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (60ms)

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines (52ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (82ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S (42ms)

    ✓ / does not affect mark (53ms)

    ✓ / can search with regex

    ✓ / can search with newline (53ms)

    ✓ / can search through multiple newlines (82ms)

    ✓ / matches ^ per line (47ms)

    ✓ / matches $ per line (45ms)

    ✓ Can search for forward slash (41ms)

    ✓ Can search backward for question mark (41ms)

    ✓ /\c forces case insensitive search (50ms)

    ✓ /\C forces case sensitive search

    ✓ <BS> deletes the last character in search in progress mode

    ✓ <S-BS> deletes the last character in search in progress mode (49ms)

    ✓ <C-h> deletes the last character in search in progress mode (48ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (38ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag (45ms)

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags (66ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (43ms)

    ✓ cc copies linewise (42ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (43ms)

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (55ms)

    ✓ '] go to the end of the previously operated or put text (116ms)

    ✓ `[ go to the start of the previously operated or put text (90ms)

    ✓ '[ go to the start of the previously operated or put text (139ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle (44ms)

    can handle gn

      ✓ gn selects the next match text (243ms)

      ✓ gn selects the current word at |hello (185ms)

      ✓ gn selects the current word at h|ello (188ms)

      ✓ gn selects the current word at hel|lo (186ms)

      ✓ gn selects the current word at hell|o (250ms)

      ✓ gn selects the next word at hello| (173ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (67ms)

      ✓ dgn deletes the current word when cursor is at |hello (86ms)

      ✓ dgn deletes the current word when cursor is at h|ello (81ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (88ms)

      ✓ dgn deletes the current word when cursor is at hell|o (68ms)

      ✓ dgn deletes the next word when cursor is at hello| (81ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (116ms)

      ✓ cgn deletes the current word when cursor is at |hello (55ms)

      ✓ cgn deletes the current word when cursor is at h|ello (72ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (67ms)

      ✓ cgn deletes the current word when cursor is at hell|o (81ms)

      ✓ cgn deletes the next word when cursor is at hello| (87ms)

    can handle gN

      ✓ gN selects the previous match text (265ms)

      ✓ gN selects the current word at hell|o (185ms)

      ✓ gN selects the current word at hel|lo (206ms)

      ✓ gN selects the current word at h|ello (204ms)

      ✓ gN selects the current word at |hello (212ms)

      ✓ gN selects the previous word at | hello (301ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (53ms)

      ✓ dgN deletes the current word when cursor is at hell|o (107ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (88ms)

      ✓ dgN deletes the current word when cursor is at h|ello (64ms)

      ✓ dgN deletes the current word when cursor is at |hello (64ms)

      ✓ dgN deletes the previous word when cursor is at | hello (58ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (53ms)

      ✓ cgN deletes the current word when cursor is at hell|o (86ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (100ms)

      ✓ cgN deletes the current word when cursor is at h|ello (84ms)

      ✓ cgN deletes the current word when cursor is at |hello (66ms)

      ✓ cgN deletes the previous word when cursor is at | hello (66ms)

    marks

      ✓ capital marks can change the editors active document (117ms)

      ✓ can jump to lowercase mark (120ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R

    ✓ Can handle R past current line (42ms)

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (81ms)

    ✓ Can handle R across lines and exit Replace Mode (67ms)

    ✓ Can handle R with {count} (92ms)

    ✓ Can handle backspace (50ms)

    ✓ Can handle backspace (68ms)

    ✓ Can handle backspace across lines (75ms)

    ✓ Can handle arrows (49ms)

    ✓ Can handle . (84ms)

    ✓ Can handle . across lines (162ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (96ms)

    ✓ Can handle wd (83ms)

    ✓ Can handle x (93ms)

    ✓ Can handle x across a selection (90ms)

    ✓ Can do vwd in middle of sentence (115ms)

    ✓ Can do vwd in middle of sentence (152ms)

    ✓ Can do vwd multiple times (179ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (131ms)

    ✓ Can handle H key

    ✓ Can handle backspace key

    ✓ handles case where we delete over a newline (196ms)

    ✓ handles change operator (92ms)

    ✓ Can do vat on multiple matching tags (48ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (72ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (46ms)

    ✓ Repeat-prefixed vat does not bleed below (79ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis (46ms)

    ✓ Can do vi) on multiple matching parens (62ms)

    ✓ Can do va) on a matching parenthesis (47ms)

    ✓ Can do va) on multiple matching parens (44ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (38ms)

    ✓ Repeat-prefixed va) does not bleed below (46ms)

    ✓ Can do va} on a matching bracket as first character (57ms)

    ✓ Can do va} on multiple matching brackets (206ms)

    ✓ Can do vi( on a matching bracket near first character (50ms)

    ✓ Can do vi{ on outer pair of nested braces (55ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (45ms)

    ✓ Can do va] on multiple matching brackets (69ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (63ms)

    ✓ Repeat-prefixed vaf does not bleed below (48ms)

    ✓ vaf only expands to enclosing pairs (52ms)

    ✓ Can use . to repeat indent in visual (51ms)

    ✓ Can do v_x to delete to first char (49ms)

    ✓ Can do vg_x to delete to last char with no EOL (45ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (53ms)

    ✓ Can do v$x to delete to last char including EOL

    ✓ Can do gv to reselect previous selection (51ms)

    Vim's EOL handling is weird

      ✓ delete through eol (83ms)

      ✓ join 2 lines by deleting through eol (126ms)

      ✓ d$ doesn't delete whole line (66ms)

      ✓ vd$ does delete whole line (83ms)

      ✓ Paste over selection copies the selection (63ms)

      ✓ Paste over selection copies the selection linewise (97ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (62ms)

      ✓ Can handle <down> key (39ms)

      ✓ Can handle <left> key (42ms)

      ✓ Can handle <right> key (153ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (45ms)

      ✓ Can handle 'gj' (59ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (45ms)

      ✓ Can handle 'vawd' on word with trailing spaces (65ms)

      ✓ Can handle 'vawd' on word with leading spaces (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix (44ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (102ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (91ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (49ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (68ms)

      ✓ Can handle 'vaWd' on word with leading spaces (45ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (97ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (44ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (43ms)

      ✓ Can handle 'vaWd' on word with leading spaces (48ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (85ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (75ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces

      ✓ Can handle 'vawd' on word with trailing spaces (46ms)

      ✓ Can handle 'vawd' on word with leading spaces (107ms)

      ✓ Can handle 'vawd' on word with numeric prefix (40ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (83ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (44ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (50ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (43ms)

      ✓ Can handle 'vaWd' on word with leading spaces (41ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (52ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (47ms)

      ✓ Can handle 'Y' in visual mode (102ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (48ms)

      ✓ Select sentence with leading spaces in visual mode (50ms)

      ✓ Select multiple sentences in visual mode (70ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (59ms)

      ✓ Select inner sentence with leading spaces in visual mode (44ms)

      ✓ Select spaces between sentences in visual mode (64ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (44ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (38ms)

      ✓ Can do vat on a matching tag (57ms)

    handles replace in visual mode

      ✓ Can do a single line replace (43ms)

      ✓ Can do a multi line replace (52ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (120ms)

      ✓ D deletes the current line (48ms)

    handles indent blocks in visual mode

      ✓ Can do vai (45ms)

      ✓ Can do vii (90ms)

      ✓ Doesn't naively select the next line (49ms)

      ✓ Searches backwards if cursor line is empty (52ms)

      ✓ Can do vaI (98ms)

    visualstar

      ✓ Works with * (52ms)

      ✓ Works with # (49ms)

    search works in visual mode

      ✓ Works with / (78ms)

      ✓ Works with ? (61ms)

      ✓ Selects correct range (202ms)

    X will delete linewise

      ✓ normal selection (47ms)

      ✓ normal selection (47ms)

    C will delete linewise

      ✓ normal selection (74ms)

      ✓ normal selection (42ms)

    R will delete linewise

      ✓ normal selection (51ms)

      ✓ normal selection (106ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (149ms)

      ✓ upward selection (71ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (50ms)

      ✓ multiline indent bottom up selection (42ms)

      ✓ repeat multiline indent top down selection (227ms)

      ✓ repeat multiline indent bottom up selection (69ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (48ms)

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (81ms)

      ✓ repeat multiline outdent bottom up selection (57ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (158ms)

    vi{ will go to end of second to last line

      ✓ select (80ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (380ms)

      ✓ gv selects the last pasted text (which is longer than original) (346ms)

      ✓ gv selects the last pasted text (multiline) (183ms)

    can handle gn

      ✓ gn selects the next match text (297ms)

      ✓ gn selects the current word at |hello (185ms)

      ✓ gn selects the current word at h|ello (207ms)

      ✓ gn selects the current word at hel|lo (235ms)

      ✓ gn selects the next word at hell|o (196ms)

      ✓ gn selects the next word at hello| (341ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (109ms)

      ✓ U/gU across a selection (64ms)

      ✓ U/gU across a selection (reverse) (61ms)

      ✓ u/gu on single character (95ms)

      ✓ u/gu across a selection (65ms)

      ✓ u/gu across a selection (reverse) (72ms)

  Mode Visual Block

    ✓ can be activated (42ms)

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D' (40ms)

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (119ms)

    ✓ o works in visual block mode (87ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (194ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (137ms)

    ✓ Can handle wd (112ms)

    ✓ Can handle x (94ms)

    ✓ Can handle x across a selection (81ms)

    ✓ Can do vwd in middle of sentence (190ms)

    ✓ Can do vwd in middle of sentence (99ms)

    ✓ Can do vwd multiple times (201ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (140ms)

    ✓ handles case where we delete over a newline (114ms)

    ✓ handles change operator (135ms)

    ✓ Vp updates register content (60ms)

    ✓ Vp does not append unnecessary newlines (first line) (47ms)

    ✓ Vp does not append unnecessary newlines (middle line) (49ms)

    ✓ Vp does not append unnecessary newlines (last line) (46ms)

    ✓ Exiting via <Esc> returns cursor to original column

    Vim's EOL handling is weird

      ✓ delete through eol (125ms)

      ✓ join 2 lines by deleting through eol (85ms)

      ✓ d$ doesn't delete whole line (86ms)

      ✓ vd$ does delete whole line (162ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key (96ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (46ms)

      ✓ Can handle 'gj' (75ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key (67ms)

      ✓ Can handle d key (52ms)

      ✓ Can handle d key (40ms)

      ✓ can handle 'c' (43ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (39ms)

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up (75ms)

    search works in visual line mode

      ✓ Works with / (51ms)

      ✓ Works with ? (50ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (168ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (51ms)

      ✓ linewise visual put works also in the end of document (53ms)

      ✓ gv selects the last pasted text (which is shorter than original) (368ms)

      ✓ gv selects the last pasted text (which is longer than original) (600ms)

      ✓ gv selects the last pasted text (multiline) (170ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly (65ms)

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste

    ✓ Can handle 'x' at end of line (52ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (104ms)

    ✓ Can handle 'cc' (45ms)

    ✓ Can handle 'Ncc' (351ms)

    ✓ Can handle 'yy' (125ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'DD' (42ms)

    ✓ Can handle 'C' (77ms)

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r' (124ms)

    ✓ Can handle 'r' after 'dd'

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
' (65ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (60ms)

    ✓ Can handle 'J' with empty last line (40ms)

    ✓ Can handle 'J's with multiple empty last lines (141ms)

    ✓ Can handle 'J' with leading white space on next line

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines (44ms)

    ✓ Can handle 'J' with ')' first character on next line

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (140ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (46ms)

    ✓ Can repeat '~' with dot (54ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (81ms)

    ✓ Can handle dot with I (153ms)

    ✓ Can repeat actions that require selections (77ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (62ms)

    ✓ Can repeat insert change and '<C-t>' (133ms)

    ✓ Can repeat change by `<C-a>` (304ms)

    ✓ Only one arrow key can be repeated in Insert Mode (75ms)

    ✓ Cached content change will be cleared by arrow keys (173ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning (63ms)

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning (58ms)

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive (40ms)

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>]) (53ms)

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{ (61ms)

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge' (63ms)

    ✓ Can handle 'gg' (51ms)

    ✓ Can handle 'gg' to first non blank char on random line (40ms)

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    38) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (57ms)

    ✓ Can handle $ with a count (110ms)

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count (50ms)

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab> (103ms)

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (64ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search (43ms)

    ✓ Can handle 'T' (44ms)

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word (60ms)

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (53ms)

    ✓ cancelled search reverts to previous search state (53ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (97ms)

    ✓ Search offsets: b2 goes 2 to the right (180ms)

    ✓ Search offsets: b+3 goes 3 to the right (156ms)

    ✓ Search offsets: e goes to the end (38ms)

    ✓ Search offsets: character offset goes across line boundaries (42ms)

    ✓ Search offsets: 2 goes 2 down (115ms)

    ✓ Search offsets: -2 goes 2 up (50ms)

    ✓ maintains column position correctly (397ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix (71ms)

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n (71ms)

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace (42ms)

    ✓ Can handle # on EOL

    ✓ Can handle g# (83ms)

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle | (38ms)

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (150ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix (40ms)

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    39) Can handle g_

    ✓ Can handle g_ with count prefix (39ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD
      ✓ first WORD should move to previous line, beginning of last WORD
      ✓ first WORD should move to previous line, stops on empty line
      ✓ first WORD should move to previous line, skips whitespace only line
    end of word right
      ✓ move to end of current word right
      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right
      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces

    sentence backward

      ✓ current sentence begin

      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line
      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line (52ms)

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line (81ms)

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (304ms)

      ✓ search wraps around the start of the file (40ms)

    wrapscan disabled

      ✓ search stops at the end of the file

      ✓ search stops at the start of the file (105ms)

  Multicursor

    ✓ can add multiple cursors below (105ms)

    ✓ can add multiple cursors above (126ms)

    ✓ dd works with multi-cursor (42ms)

    ✓ Vd works with multi-cursor (41ms)

    47) <C-v>d works with multi-cursor

    48) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    49) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (181ms)

    ✓ gcj comments in current and next line (103ms)

    ✓ block comment with motion (187ms)

    ✓ block comment in Visual Mode (220ms)

    ✓ comment in visual line mode (98ms)

    ✓ comment in visual block mode (180ms)

  format operator

    ✓ == formats current line (392ms)

    ✓ =$ formats entire line (304ms)

    ✓ =j formats two lines (116ms)

    ✓ 3=k formats three lines (162ms)

    50) =gg formats to top of file

    ✓ =G formats to bottom of file (90ms)

    ✓ =ip formats paragraph (143ms)

    ✓ format in visual mode (78ms)

  put operator

    ✓ basic put test (111ms)

    ✓ test yy end of line (71ms)

    ✓ test yy first line (102ms)

    ✓ test yy middle line (44ms)

    ✓ test yy with correct positon movement (60ms)

    ✓ test visual block single line yank p (54ms)

    ✓ test visual block single line yank P (61ms)

    ✓ test visual block single line delete p (64ms)

    ✓ test visual block single line delete P (81ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works (46ms)

    ✓ g? in visual line mode works (51ms)

    51) g? in visual block mode works

  shift operator

    ✓ basic shift left test (209ms)

    ✓ shift left goto end test (49ms)

    ✓ shift left goto line test

    ✓ shift right goto end test (45ms)

    ✓ shift right goto line test (105ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work (118ms)

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word (48ms)

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word (38ms)

      ✓ step to operator and then over (114ms)

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word (40ms)

      ✓ step from in whitespace to word (91ms)

      ✓ step in ALL_CAPS_WORD (50ms)

    handles d<leader>w

      ✓ delete from start of camelWord (48ms)

      ✓ delete from middle of camelWord (96ms)

      ✓ delete from start of CamelWord (48ms)

      ✓ delete two words from camelWord (45ms)

      ✓ delete from start of underscore_word (44ms)

      ✓ delete from middle of underscore_word (124ms)

      ✓ delete two words from camel_word (42ms)

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (39ms)

      ✓ delete two words from camelWord (46ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word (127ms)

      ✓ delete two words from camel_word (41ms)

    handles <leader>b

      ✓ back from middle of word (104ms)

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (55ms)

    ✓ Can handle 2s move (81ms)

    ✓ Can handle f move (69ms)

    ✓ Can handle 2f move (44ms)

    ✓ Can handle F move (97ms)

    ✓ Can handle 2F move (47ms)

    ✓ Can handle t move (46ms)

    ✓ Can handle bd-t move (51ms)

    ✓ Can handle 2t move (134ms)

    ✓ Can handle bd-t2 move (115ms)

    ✓ Can handle T move (46ms)

    ✓ Can handle 2T move (50ms)

    ✓ Can handle w move (87ms)

    ✓ Can handle bd-w move (47ms)

    ✓ Can handle b move (47ms)

    ✓ Can handle e move

    ✓ Can handle bd-e move (38ms)

    ✓ Can handle ge move (91ms)

    ✓ Can handle n-char move (56ms)

    ✓ Can handle j move (48ms)

    ✓ Can handle k move (45ms)

    ✓ Can handle bd-jk move (1) (46ms)

    ✓ Can handle bd-jk move (2) (123ms)

    ✓ Can handle lineforward move (1)

    ✓ Can handle lineforward move (2) (44ms)

    52) Can handle linebackward move (1)

    53) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (161ms)

    ✓ Can handle searching for carat (^) (145ms)

    ✓ Can handle searching for dot (.) (43ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (83ms)

    ✓ Replaces within inner Word (91ms)

    ✓ Replaces within '' (485ms)

    ✓ Replaces within '' including spaces (46ms)

    ✓ Replaces within () (65ms)

    ✓ Replaces within () including spaces (46ms)

    ✓ Replaces within a paragraph (90ms)

    ✓ Replaces using a specified register (76ms)

    ✓ Replaces within {} over multiple lines (90ms)

    ✓ Replaces a multiline register within {} over multiple lines (43ms)

    ✓ Replaces a multiline register within {} over multiple lines (48ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (132ms)

    ✓ grr replaces the entire line with the register (46ms)

    ✓ grr can replace multiple lines (46ms)

    ✓ Replaces in visual mode (55ms)

    ✓ Replaces in visual mode using a specified register (80ms)

    ✓ Replaces in visual line mode (64ms)

    ✓ grj is linewise (170ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion (42ms)

    ✓ Can handle <operator>z motion (48ms)

    ✓ Can handle <operator>Z motion (41ms)

    ✓ Can handle s; motion (41ms)

    ✓ Can handle s, motion

    ✓ Can handle S; motion

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion (138ms)

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (43ms)

    ✓ Can handle single letter <operator>Z motion

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion (64ms)

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion (72ms)

    ✓ Can handle multiline single char <number>s motion

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (176ms)

    ✓ 'ysiw(' surrounds word with space (118ms)

    ✓ 'ysw)' surrounds word without space (52ms)

    ✓ 'ysw(' surrounds word with space (54ms)

    ✓ 'ysaw)' surrounds word without space (88ms)

    ✓ 'ysaw(' surrounds word with space (215ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (97ms)

    ✓ 'ysiw<' surrounds word with tags (125ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (103ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (52ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (159ms)

    ✓ change surround (45ms)

    ✓ change surround with two pairs of quotes (47ms)

    ✓ change surround with two pairs of parens (93ms)

    ✓ change surround with alias (103ms)

    ✓ change surround to tags (118ms)

    ✓ delete surround (113ms)

    ✓ delete surround with quotes (54ms)

    ✓ delete surround with nested of quotes (67ms)

    ✓ delete surround with inconsistent quotes (83ms)

    ✓ delete surround with mixed quotes (109ms)

    ✓ delete surround with empty quotes cursor at start (47ms)

    ✓ delete surround with empty quotes cursor at end (46ms)

    ✓ don't delete surround if cursor is after closing match (567ms)

    ✓ delete surround if cursor is before opening match (96ms)

    ✓ delete surround with two pairs of parens (61ms)

    ✓ delete surround with alias (44ms)

    ✓ delete surround with tags (126ms)

    ✓ change surround brackets at end of line (57ms)

    ✓ changing brackets with surround works again (148ms)

    ✓ change surround with tags that contain an attribute and preserve them (61ms)

    ✓ change surround with tags that contain an attribute and remove them (57ms)

  register

    ✓ Can copy to a register (44ms)

    ✓ Can use two registers together (106ms)

    ✓ Can use black hole register (66ms)

    ✓ System clipboard works with chinese characters (160ms)

    ✓ Yank stores text in Register '0' (194ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (170ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (416ms)

    ✓ Register '1'-'9' stores delete content (339ms)

    ✓ "A appends linewise text to "a (304ms)

    ✓ "A appends character wise text to "a (236ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (214ms)

    ✓ Small deletion using Del is stored in small delete register (226ms)

    ✓ Small deletion using X is stored in small delete register (294ms)

    ✓ Search register (/) is set by forward search (297ms)

    ✓ Search register (/) is set by backward search (336ms)

    ✓ Search register (/) is set by star search (375ms)

    ✓ Command register (:) is set by command line (75ms)

    ✓ Read-only registers cannot be written to (265ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character> (55ms)

    ✓ Can repeat reversed F<character> (60ms)

    ✓ Can repeat t<character> (38ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (170ms)

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline (128ms)

      ✓ move one sentence backward - multiline - period (45ms)

      ✓ move one sentence backward - multiline - previous line (265ms)

      ✓ move one sentence backward - multiline - previous line - period (61ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar' (109ms)

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath
      ✓ can separate drive letter path on Windows
      ✓ can separate UNC path on Windows
      ✓ can separate relative path on Windows
      ✓ can separate absolute path on posix
      ✓ can separate relative path on posix
    resolveUri

      ✓ posix
      ✓ win32

  1291 passing (3m)

  4 pending

  53 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +31
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)


  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Wrong number of cursors
      + expected - actual

      -1
      +2
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  9) Mode Visual
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)


  16) Mode Visual Block
       Can handle c forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)


  17) Mode Visual Block
       Can handle c backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)


  18) Mode Visual Block
       Can handle C:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)


  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Wrong number of cursors
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +2
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's LINE position is wrong.
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -2
      +0
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +8
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #1's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)


  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #1's LINE position is wrong.
      + expected - actual

      -0
      +1
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)


  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #1's LINE position is wrong.
      + expected - actual

      -1
      +3
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)


  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -0
      +26
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  47) Multicursor
       <C-v>d works with multi-cursor:

      Missing '|' in test object's end.
      + expected - actual

      -false
      +true
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  48) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  49) Multicursor
       o works with multi-cursor:
     
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  50) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  51) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  52) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -6
      +3
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  53) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's CHARACTER position is wrong.
      + expected - actual

      -8
      +6
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: ff833ef0-5854-11ea-b533-891a36a4ac0b

@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.12.4 build /home/travis/build/VSCodeVim/Vim
> gulp build

[05:52:19] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[05:52:19] Starting 'build'...
[05:52:19] Starting 'prettier'...
[05:52:20] Finished 'prettier' after 511 ms
[05:52:20] Starting 'tsc'...
[05:52:20] Starting 'tslint'...
[05:52:27] Finished 'tslint' after 6.81 s
[05:52:34] Finished 'tsc' after 14 s
[05:52:34] Starting 'commit-hash'...
[05:52:34] Finished 'commit-hash' after 26 ms
[05:52:34] Finished 'build' after 15 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T05:52:38.889Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (47ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (72ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (61ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (47ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search (48ms)

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (53ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1233ms)

  command-line parser

    ✓ can parse empty string
    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (531ms)

    ✓ :smile editor contains smile text (529ms)

  Basic sort

    ✓ Sort whole file, asc (94ms)

    ✓ Sort whole file, asc, ignoreCase (50ms)

    ✓ Sort whole file, dsc (59ms)

    ✓ Sort whole file, dsc, ignoreCase (64ms)

    ✓ Sort range, asc (103ms)

    ✓ Sort range, asc, ignoreCase (108ms)

    ✓ Sort range, dsc (86ms)

    ✓ Sort range, dsc, ignoreCase (71ms)

    ✓ Sort whole file, asc, unique (84ms)

  Horizontal split

    ✓ :sp creates a second split (121ms)

    ✓ :split creates a second split (61ms)

    ✓ :new creates a second split (249ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !
    ✓ throws if space before !
    ✓ ignores space after !
    ✓ throws if bad input
  :substitute args parser
    ✓ can parse pattern, replace, and flags
    ✓ can parse count
    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (39ms)

    ✓ Replace with flags AND count (86ms)

    ✓ Replace with `c` flag

    ✓ Replace with `gc` flag (66ms)

    ✓ Replace across all lines (71ms)

    ✓ Replace on specific single line (65ms)

    ✓ Replace on current line using dot (60ms)

    ✓ Replace single relative line using dot and plus (66ms)

    ✓ Replace across specific line range (74ms)

    ✓ Replace across relative line range using dot, plus, and minus (102ms)

    ✓ Replace across relative line range using numLines+colon shorthand (133ms)

    ✓ Repeat replacement across relative line range (77ms)

    ✓ Replace with range AND count but no flags (49ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (78ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (62ms)

    ✓ Undocumented: trailing operators use 1 as RHS (61ms)

    ✓ Replace specific single equal lines (47ms)

    ✓ Replace current line with no active selection (68ms)

    ✓ Replace text in selection (73ms)

    ✓ Substitute support marks (79ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line

      ✓ Replace with `g` flag inverts global flag (52ms)

      ✓ Replace with `c` flag inverts global flag (49ms)

      ✓ Replace multiple lines (46ms)

      ✓ Replace across specific lines (49ms)

      ✓ Replace current line with no active selection (49ms)

      ✓ Replace text in selection (70ms)

      ✓ Substitute support marks (215ms)

      ✓ Substitute with escaped delimiter

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (132ms)

      ✓ Substitute with previous search using # (112ms)

      ✓ Substitute with previous search using / (222ms)

      ✓ Substitute with parameters should update search state (81ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (205ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (100ms)

      ✓ Substitute repeat previous should accept flags (55ms)

      ✓ Substitute with empty search string should use last searched pattern (147ms)

      ✓ Ampersand (&) should repeat the last substitution (45ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (52ms)

    ✓ tabe with current file path does nothing (42ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path (38ms)

    ✓ command line file tab completion directory with / at the end (39ms)

    ✓ command line file navigate tab completion

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (71ms)

    ✓ command line file tab completion with space in file path (94ms)

  Vertical split

    ✓ :vs creates a second split (65ms)

    ✓ :vsp creates a second split (52ms)

    ✓ :vsplit creates a second split (54ms)

    ✓ :vnew creates a second split (191ms)

    ✓ :vne creates a second split (202ms)

  Basic write-quit

    ✓ Run write and quit (46ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (45ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (59ms)

    ✓ getMatchingRemap (58ms)

    ✓ jj -> <Esc> through modehandler (109ms)

    ✓ 0 -> :wq through modehandler (63ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (73ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (84ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (96ms)

    ✓ d -> black hole register delete in normal mode through modehandler (108ms)

    ✓ d -> black hole register delete in normal mode through modehandler (212ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (100ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error
    ✓ error code has message
  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark (38ms)

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim

      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG

        ✓ Can track jumps for keys: GggGgg (44ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: /b<CR>n

        ✓ Can track jumps for keys: G?b<CR>ggG (40ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (41ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>% (40ms)

        ✓ Can track jumps for keys: j%%<C-o>gg

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (43ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (59ms)

        ✓ Can enter number to jump back multiple times

        ✓ Can track one-line `` jumps (48ms)

        ✓ Can track one-line double `` jumps (49ms)

        ✓ Can track one-line '' jumps (55ms)

        ✓ Can track one-line double '' jumps (54ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (67ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (48ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (62ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (59ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (65ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (120ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (81ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (101ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (137ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR>

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (96ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (39ms)

  Record and execute a macro

    ✓ Can record and execute (99ms)

    ✓ Can repeat last invoked macro (160ms)

    ✓ Can play back with count (252ms)

    ✓ Can play back with count, abort when a motion fails (237ms)

    ✓ Repeat change on contiguous lines (124ms)

    ✓ Append command to a macro (108ms)

    ✓ Can record Ctrl Keys and repeat (86ms)

    ✓ Can execute macros with dot commands properly (76ms)

    ✓ : (command) register can be used as a macro (65ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (70ms)

    ✓ can handle key events

[main 2020-02-26T05:53:08.893Z] update#setState checking for updates

[main 2020-02-26T05:53:08.978Z] update#setState idle

    ✓ <Esc> should change cursor position (87ms)

    ✓ <C-c> can exit insert (49ms)

    ✓ <Esc> can exit insert

    ✓ Stay in insert when entering characters (76ms)

    ✓ Can handle 'O' (50ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace (46ms)

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line (44ms)

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (40ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode (53ms)

    ✓ Delete works at line end

    ✓ Delete works at end of file

    ✓ Delete works with repeat (83ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (54ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (43ms)

    ✓ Can perform insert command prefixed with count

    ✓ Can perform append command prefixed with count (42ms)

    ✓ Can perform insert at start of line command prefixed with count (43ms)

    ✓ Can perform append to end of line command prefixed with count

    ✓ Can perform change char (s) command prefixed with count (50ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (62ms)

    ✓ Can handle 'O' with count (66ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (47ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw (111ms)

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd (39ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d

    ✓ Can handle dd empty line (45ms)

    ✓ Can handle ddp

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again

    ✓ Can handle 'dl' at end of line (49ms)

    ✓ Can handle 'dF' (159ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket (38ms)

    ✓ Can handle 'cw' (45ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (43ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (90ms)

    ✓ Can handle 'ciw' on blanks (44ms)

    ✓ Can handle 'caw' (50ms)

    ✓ Can handle 'caw' on first letter

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'caw' on blanks (72ms)

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses (40ms)

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses (54ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)'

    ✓ Can handle count prefixed 'ca)' (53ms)

    ✓ Can handle 'ca(' spanning multiple lines

    ✓ Can handle 'cab' spanning multiple lines (44ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket (55ms)

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (38ms)

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash (46ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (77ms)

    ✓ can handle ck (42ms)

    ✓ can handle c2j (40ms)

    ✓ can handle c2k (46ms)

    ✓ can handle cj on last line (183ms)

    ✓ can handle ck on first line (44ms)

    ✓ can handle c2j on last line (39ms)

    ✓ can handle c2k on first line (38ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (42ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (57ms)

    ✓ Can handle 'daw' around word at end of line

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (45ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines

    ✓ Can handle 'daW' on beginning of word (223ms)

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces (38ms)

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line (157ms)

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (38ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (43ms)

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (65ms)

    ✓ leaving insert mode should update desired column when entered with i (56ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (42ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy' (41ms)

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy' (38ms)

    ✓ Can handle 'gp' after 'Nyy' (58ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (50ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy'

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (38ms)

    ✓ Can handle ']p' after yy (67ms)

    ✓ Can handle ']p' after 'Nyy'

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (71ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible

    ✓ Can handle '[p' after yy

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (51ms)

    ✓ Can handle 'p' after y'a (44ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (55ms)

    ✓ Can repeat w

    ✓ Can repeat p (44ms)

    ✓ I works correctly (54ms)

    ✓ gI works correctly (41ms)

    ✓ gi works correctly (73ms)

    ✓ `. works correctly

    ✓ '. works correctly (45ms)

    ✓ g; works correctly (58ms)

    ✓ g, works correctly (56ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly (54ms)

    ✓ gq handles spaces before single line comments correctly (50ms)

    ✓ gq handles tabs before single line comments correctly

    ✓ Can handle space (45ms)

    ✓ Can handle space

    ✓ Undo 1 (62ms)

    ✓ Undo 2 (62ms)

    ✓ Undo cursor (139ms)

    ✓ Undo cursor 2 (62ms)

    ✓ Undo cursor 3 (97ms)

    ✓ Undo with movement first (102ms)

    ✓ Can handle 'U' (83ms)

    ✓ Can handle 'U' for multiple changes (53ms)

    ✓ Can handle 'U' for new line below (42ms)

    ✓ Can handle 'U' for new line above (57ms)

    ✓ Can handle 'U' for consecutive changes only (69ms)

    ✓ Can handle 'u' to undo 'U' (49ms)

    ✓ Can handle 'U' to undo 'U'

    ✓ Can handle 'u' after :s/abc/def (58ms)

    ✓ Redo (89ms)

    ✓ Redo (58ms)

    ✓ Redo (58ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (43ms)

    ✓ can handle s in visual mode (38ms)

    ✓ can handle p with selection (87ms)

    ✓ can handle P with selection (53ms)

    ✓ can handle p in visual to end of line (53ms)

    ✓ can repeat backspace twice (102ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number (38ms)

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (41ms)

    ✓ can ctrl-a on a decimal (47ms)

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after  (47ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (64ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y (44ms)

    ✓ Can do S

    ✓ / does not affect mark (40ms)

    ✓ / can search with regex

    ✓ / can search with newline (95ms)

    ✓ / can search through multiple newlines (57ms)

    ✓ / matches ^ per line (38ms)

    ✓ / matches $ per line (47ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (39ms)

    ✓ /\C forces case sensitive search (39ms)

    ✓ <BS> deletes the last character in search in progress mode

    ✓ <S-BS> deletes the last character in search in progress mode

    ✓ <C-h> deletes the last character in search in progress mode (43ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (52ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags (39ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (85ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (44ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (46ms)

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (49ms)

    ✓ '] go to the end of the previously operated or put text (124ms)

    ✓ `[ go to the start of the previously operated or put text (43ms)

    ✓ '[ go to the start of the previously operated or put text (57ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (43ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (149ms)

      ✓ gn selects the current word at |hello (163ms)

      ✓ gn selects the current word at h|ello (207ms)

      ✓ gn selects the current word at hel|lo (166ms)

      ✓ gn selects the current word at hell|o (237ms)

      ✓ gn selects the next word at hello| (163ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (61ms)

      ✓ dgn deletes the current word when cursor is at |hello (64ms)

      ✓ dgn deletes the current word when cursor is at h|ello (46ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (60ms)

      ✓ dgn deletes the current word when cursor is at hell|o (46ms)

      ✓ dgn deletes the next word when cursor is at hello| (51ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (52ms)

      ✓ cgn deletes the current word when cursor is at |hello (52ms)

      ✓ cgn deletes the current word when cursor is at h|ello (57ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (48ms)

      ✓ cgn deletes the current word when cursor is at hell|o (42ms)

      ✓ cgn deletes the next word when cursor is at hello| (57ms)

    can handle gN

      ✓ gN selects the previous match text (152ms)

      ✓ gN selects the current word at hell|o (178ms)

      ✓ gN selects the current word at hel|lo (184ms)

      ✓ gN selects the current word at h|ello (155ms)

      ✓ gN selects the current word at |hello (424ms)

      ✓ gN selects the previous word at | hello (158ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (76ms)

      ✓ dgN deletes the current word when cursor is at hell|o (51ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (117ms)

      ✓ dgN deletes the current word when cursor is at h|ello (52ms)

      ✓ dgN deletes the current word when cursor is at |hello (56ms)

      ✓ dgN deletes the previous word when cursor is at | hello (54ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (53ms)

      ✓ cgN deletes the current word when cursor is at hell|o (63ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (87ms)

      ✓ cgN deletes the current word when cursor is at h|ello (58ms)

      ✓ cgN deletes the current word when cursor is at |hello (66ms)

      ✓ cgN deletes the previous word when cursor is at | hello (81ms)

    marks

      ✓ capital marks can change the editors active document (125ms)

      ✓ can jump to lowercase mark

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R

    ✓ Can handle R past current line (44ms)

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (40ms)

    ✓ Can handle R across lines and exit Replace Mode (61ms)

    ✓ Can handle R with {count} (62ms)

    ✓ Can handle backspace (39ms)

    ✓ Can handle backspace (48ms)

    ✓ Can handle backspace across lines (56ms)

    ✓ Can handle arrows

    ✓ Can handle . (91ms)

    ✓ Can handle . across lines (90ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (86ms)

    ✓ Can handle wd (86ms)

    ✓ Can handle x (65ms)

    ✓ Can handle x across a selection (98ms)

    ✓ Can do vwd in middle of sentence (88ms)

    ✓ Can do vwd in middle of sentence (89ms)

    ✓ Can do vwd multiple times (109ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (150ms)

    ✓ Can handle H key

    ✓ Can handle backspace key

    ✓ handles case where we delete over a newline (162ms)

    ✓ handles change operator (91ms)

    ✓ Can do vat on multiple matching tags (49ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (77ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (61ms)

    ✓ Repeat-prefixed vat does not bleed below

    ✓ Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis

    ✓ Can do vi) on multiple matching parens

    ✓ Can do va) on a matching parenthesis

    ✓ Can do va) on multiple matching parens

    ✓ Failed va) does not expand or move selection, remains in visual mode

    ✓ Repeat-prefixed va) does not bleed below (43ms)

    ✓ Can do va} on a matching bracket as first character

    ✓ Can do va} on multiple matching brackets

    ✓ Can do vi( on a matching bracket near first character

    ✓ Can do vi{ on outer pair of nested braces (47ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent

    ✓ Can do va] on multiple matching brackets (39ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (39ms)

    ✓ Repeat-prefixed vaf does not bleed below

    ✓ vaf only expands to enclosing pairs (47ms)

    ✓ Can use . to repeat indent in visual (56ms)

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL

    ✓ Can do v3g_x to delete to last char with no EOL with count

    ✓ Can do v$x to delete to last char including EOL

    ✓ Can do gv to reselect previous selection (42ms)

    Vim's EOL handling is weird

      ✓ delete through eol (77ms)

      ✓ join 2 lines by deleting through eol (72ms)

      ✓ d$ doesn't delete whole line (62ms)

      ✓ vd$ does delete whole line (50ms)

      ✓ Paste over selection copies the selection (49ms)

      ✓ Paste over selection copies the selection linewise (50ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key (51ms)

      ✓ Can handle <left> key

      ✓ Can handle <right> key

    Screen line motions in Visual Mode

      ✓ Can handle 'gk'

      ✓ Can handle 'gj'

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (44ms)

      ✓ Can handle 'vawd' on word with trailing spaces (62ms)

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (41ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (69ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (86ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (38ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (39ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces (42ms)

      ✓ Can handle 'vawd' on word with numeric prefix (39ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (63ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (77ms)

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (39ms)

      ✓ Can handle 'Y' in visual mode (39ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (39ms)

      ✓ Select sentence with leading spaces in visual mode (61ms)

      ✓ Select multiple sentences in visual mode

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (39ms)

      ✓ Select inner sentence with leading spaces in visual mode

      ✓ Select spaces between sentences in visual mode

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (43ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (45ms)

      ✓ Can do vat on a matching tag

    handles replace in visual mode

      ✓ Can do a single line replace (69ms)

      ✓ Can do a multi line replace (47ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (38ms)

      ✓ D deletes the current line

    handles indent blocks in visual mode

      ✓ Can do vai

      ✓ Can do vii (48ms)

      ✓ Doesn't naively select the next line

      ✓ Searches backwards if cursor line is empty (46ms)

      ✓ Can do vaI

    visualstar

      ✓ Works with * (39ms)

      ✓ Works with # (46ms)

    search works in visual mode

      ✓ Works with / (45ms)

      ✓ Works with ? (56ms)

      ✓ Selects correct range (82ms)

    X will delete linewise

      ✓ normal selection

      ✓ normal selection (73ms)

    C will delete linewise

      ✓ normal selection

      ✓ normal selection (82ms)

    R will delete linewise

      ✓ normal selection

      ✓ normal selection (38ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (54ms)

      ✓ upward selection (59ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (72ms)

      ✓ multiline indent bottom up selection (38ms)

      ✓ repeat multiline indent top down selection (65ms)

      ✓ repeat multiline indent bottom up selection (48ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (38ms)

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (62ms)

      ✓ repeat multiline outdent bottom up selection

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (88ms)

    vi{ will go to end of second to last line

      ✓ select (45ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (218ms)

      ✓ gv selects the last pasted text (which is longer than original) (225ms)

      ✓ gv selects the last pasted text (multiline) (141ms)

    can handle gn

      ✓ gn selects the next match text (247ms)

      ✓ gn selects the current word at |hello (158ms)

      ✓ gn selects the current word at h|ello (164ms)

      ✓ gn selects the current word at hel|lo (415ms)

      ✓ gn selects the next word at hell|o (132ms)

      ✓ gn selects the next word at hello| (188ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (47ms)

      ✓ U/gU across a selection (61ms)

      ✓ U/gU across a selection (reverse) (54ms)

      ✓ u/gu on single character (42ms)

      ✓ u/gu across a selection (101ms)

      ✓ u/gu across a selection (reverse) (52ms)

  Mode Visual Block

    ✓ can be activated

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D' (50ms)

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (68ms)

    ✓ o works in visual block mode (72ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (105ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (160ms)

    ✓ Can handle wd (78ms)

    ✓ Can handle x (100ms)

    ✓ Can handle x across a selection (66ms)

    ✓ Can do vwd in middle of sentence (101ms)

    ✓ Can do vwd in middle of sentence (72ms)

    ✓ Can do vwd multiple times (344ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (86ms)

    ✓ handles case where we delete over a newline (100ms)

    ✓ handles change operator (121ms)

    ✓ Vp updates register content

    ✓ Vp does not append unnecessary newlines (first line)

    ✓ Vp does not append unnecessary newlines (middle line)

    ✓ Vp does not append unnecessary newlines (last line) (57ms)

    ✓ Exiting via <Esc> returns cursor to original column

    Vim's EOL handling is weird

      ✓ delete through eol (53ms)

      ✓ join 2 lines by deleting through eol (63ms)

      ✓ d$ doesn't delete whole line (65ms)

      ✓ vd$ does delete whole line (56ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (76ms)

      ✓ Can handle 'gj'

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key

      ✓ Can handle d key (48ms)

      ✓ Can handle d key

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up

    search works in visual line mode

      ✓ Works with / (44ms)

      ✓ Works with ? (48ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (82ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position

      ✓ linewise visual put works also in the end of document (46ms)

      ✓ gv selects the last pasted text (which is shorter than original) (317ms)

      ✓ gv selects the last pasted text (which is longer than original) (249ms)

      ✓ gv selects the last pasted text (multiline) (126ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste

    ✓ Can handle 'x' at end of line (46ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line (40ms)

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (107ms)

    ✓ Can handle 'cc'

    ✓ Can handle 'Ncc' (53ms)

    ✓ Can handle 'yy'

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd'

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
' (43ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (44ms)

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (52ms)

    ✓ Can handle 'J' with leading white space on next line

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (66ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (116ms)

    ✓ Can repeat '~' with dot

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (61ms)

    ✓ Can handle dot with I (50ms)

    ✓ Can repeat actions that require selections (73ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (41ms)

    ✓ Can repeat insert change and '<C-t>' (41ms)

    ✓ Can repeat change by `<C-a>` (52ms)

    ✓ Only one arrow key can be repeated in Insert Mode (46ms)

    ✓ Cached content change will be cleared by arrow keys (64ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis (53ms)

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive (41ms)

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (73ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    38) Retain same column when moving up/down

    ✓ Can handle <enter> (76ms)

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count (49ms)

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (43ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (74ms)

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (70ms)

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (38ms)

    ✓ cancelled search reverts to previous search state (59ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing

    ✓ Search offsets: b2 goes 2 to the right (46ms)

    ✓ Search offsets: b+3 goes 3 to the right

    ✓ Search offsets: e goes to the end (122ms)

    ✓ Search offsets: character offset goes across line boundaries (42ms)

    ✓ Search offsets: 2 goes 2 down (53ms)

    ✓ Search offsets: -2 goes 2 up (40ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $ (131ms)

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0 (56ms)

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace (59ms)

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history (94ms)

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent (43ms)

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    39) Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin
    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    line up
      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    word right
      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces

      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word

      ✓ first word should move to previous line, stops on empty line

      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces

    sentence backward

      ✓ current sentence begin

      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (49ms)

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (103ms)

    wrapscan enabled

      ✓ search wraps around the end of the file

      ✓ search wraps around the start of the file (42ms)

    wrapscan disabled

      ✓ search stops at the end of the file (44ms)

      ✓ search stops at the start of the file (43ms)

  Multicursor

    ✓ can add multiple cursors below (51ms)

    ✓ can add multiple cursors above (155ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor

    47) <C-v>d works with multi-cursor

    48) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    49) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip
  comment operator

    ✓ gcc comments out current line (166ms)

    ✓ gcj comments in current and next line (62ms)

    ✓ block comment with motion (138ms)

    ✓ block comment in Visual Mode (90ms)

    ✓ comment in visual line mode (151ms)

    ✓ comment in visual block mode (199ms)

  format operator

    ✓ == formats current line (376ms)

    ✓ =$ formats entire line (206ms)

    ✓ =j formats two lines (57ms)

    ✓ 3=k formats three lines (70ms)

    50) =gg formats to top of file

    ✓ =G formats to bottom of file (84ms)

    ✓ =ip formats paragraph (132ms)

    ✓ format in visual mode (370ms)

  put operator

    ✓ basic put test (132ms)

    ✓ test yy end of line (46ms)

    ✓ test yy first line (55ms)

    ✓ test yy middle line

    ✓ test yy with correct positon movement

    ✓ test visual block single line yank p (83ms)

    ✓ test visual block single line yank P (40ms)

    ✓ test visual block single line delete p

    ✓ test visual block single line delete P

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (50ms)

    ✓ g? in visual mode works (63ms)

    ✓ g? in visual line mode works

    51) g? in visual block mode works

  shift operator

    ✓ basic shift left test

    ✓ shift left goto end test

    ✓ shift left goto line test

    ✓ shift right goto end test (86ms)

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word (65ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord (39ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word (83ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator (58ms)

  easymotion plugin

    ✓ Can handle s move

    ✓ Can handle 2s move (46ms)

    ✓ Can handle f move

    ✓ Can handle 2f move

    ✓ Can handle F move

    ✓ Can handle 2F move (46ms)

    ✓ Can handle t move (48ms)

    ✓ Can handle bd-t move (38ms)

    ✓ Can handle 2t move (157ms)

    ✓ Can handle bd-t2 move (109ms)

    ✓ Can handle T move (39ms)

    ✓ Can handle 2T move (62ms)

    ✓ Can handle w move

    ✓ Can handle bd-w move

    ✓ Can handle b move (79ms)

    ✓ Can handle e move (41ms)

    ✓ Can handle bd-e move (43ms)

    ✓ Can handle ge move

    ✓ Can handle n-char move

    ✓ Can handle j move

    ✓ Can handle k move (43ms)

    ✓ Can handle bd-jk move (1) (46ms)

    ✓ Can handle bd-jk move (2) (39ms)

    ✓ Can handle lineforward move (1) (42ms)

    ✓ Can handle lineforward move (2)

    52) Can handle linebackward move (1)

    53) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.) (88ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word

    ✓ Replaces within inner Word (44ms)

    ✓ Replaces within '' (54ms)

    ✓ Replaces within '' including spaces (38ms)

    ✓ Replaces within () (38ms)

    ✓ Replaces within () including spaces (45ms)

    ✓ Replaces within a paragraph (53ms)

    ✓ Replaces using a specified register (59ms)

    ✓ Replaces within {} over multiple lines (44ms)

    ✓ Replaces a multiline register within {} over multiple lines (47ms)

    ✓ Replaces a multiline register within {} over multiple lines

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement

    ✓ grr replaces the entire line with the register

    ✓ grr can replace multiple lines (43ms)

    ✓ Replaces in visual mode (107ms)

    ✓ Replaces in visual mode using a specified register (52ms)

    ✓ Replaces in visual line mode (77ms)

    ✓ grj is linewise (49ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion (43ms)

    ✓ Can handle <operator>z motion (38ms)

    ✓ Can handle <operator>Z motion (78ms)

    ✓ Can handle s; motion (46ms)

    ✓ Can handle s, motion

    ✓ Can handle S; motion

    ✓ Can handle S, motion (40ms)

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion (43ms)

    ✓ Can handle single letter <operator>z motion

    ✓ Can handle single letter <operator>Z motion

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion (67ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (38ms)

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (71ms)

    ✓ 'ysiw(' surrounds word with space (61ms)

    ✓ 'ysw)' surrounds word without space (38ms)

    ✓ 'ysw(' surrounds word with space (46ms)

    ✓ 'ysaw)' surrounds word without space (165ms)

    ✓ 'ysaw(' surrounds word with space (64ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (46ms)

    ✓ 'ysiw<' surrounds word with tags (54ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (41ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (50ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (43ms)

    ✓ change surround (46ms)

    ✓ change surround with two pairs of quotes (96ms)

    ✓ change surround with two pairs of parens (52ms)

    ✓ change surround with alias (61ms)

    ✓ change surround to tags (63ms)

    ✓ delete surround (54ms)

    ✓ delete surround with quotes (57ms)

    ✓ delete surround with nested of quotes (51ms)

    ✓ delete surround with inconsistent quotes (119ms)

    ✓ delete surround with mixed quotes

    ✓ delete surround with empty quotes cursor at start (456ms)

    ✓ delete surround with empty quotes cursor at end (47ms)

    ✓ don't delete surround if cursor is after closing match (80ms)

    ✓ delete surround if cursor is before opening match (48ms)

    ✓ delete surround with two pairs of parens (55ms)

    ✓ delete surround with alias (48ms)

    ✓ delete surround with tags

    ✓ change surround brackets at end of line (49ms)

    ✓ changing brackets with surround works again (81ms)

    ✓ change surround with tags that contain an attribute and preserve them (63ms)

    ✓ change surround with tags that contain an attribute and remove them (130ms)

  register

    ✓ Can copy to a register

    ✓ Can use two registers together (51ms)

    ✓ Can use black hole register (81ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (125ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (209ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (147ms)

    ✓ Register '1'-'9' stores delete content (146ms)

    ✓ "A appends linewise text to "a (173ms)

    ✓ "A appends character wise text to "a (133ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (97ms)

    ✓ Small deletion using Del is stored in small delete register (90ms)

    ✓ Small deletion using X is stored in small delete register (96ms)

    ✓ Search register (/) is set by forward search (227ms)

    ✓ Search register (/) is set by backward search (201ms)

    ✓ Search register (/) is set by star search (216ms)

    ✓ Command register (:) is set by command line (73ms)

    ✓ Read-only registers cannot be written to (147ms)

    clipboard

      ✓ Can access '*' (clipboard) register (40ms)

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character> (69ms)

    ✓ Can repeat t<character> (86ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward

      ✓ move one sentence backward single line - middle (105ms)

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line

      ✓ move one sentence backward - multiline - previous line - period (88ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1291 passing (3m)

  4 pending

  53 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)

  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  31
       ]
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)

  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Wrong number of cursors
      + expected - actual

      -1
      +2
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)

  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  9) Mode Visual
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)


  16) Mode Visual Block
       Can handle c forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)


  17) Mode Visual Block
       Can handle c backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)


  18) Mode Visual Block
       Can handle C:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)


  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Wrong number of cursors
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  2
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  2
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  1
      +  3
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       [
      -  2
      -  3
      +  1
      +  4
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  2
      +  0
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  8
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #1's position is wrong.
      + expected - actual

       [
      -  0
      -  3
      +  1
      +  2
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)


  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #1's position is wrong.
      + expected - actual

       [
      +  1
         0
      -  0
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)


  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #1's position is wrong.
      + expected - actual

       [
      -  1
      +  3
         0
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)


  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       [
         1
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  47) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  48) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  49) Multicursor
       o works with multi-cursor:
     
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  50) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  51) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  52) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  6
      +  3
       ]
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  53) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  8
      +  6
       ]
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-8.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T05:52:38.889Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (47ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (72ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (61ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (47ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search (48ms)

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (53ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1233ms)

  command-line parser

    ✓ can parse empty string
    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (531ms)

    ✓ :smile editor contains smile text (529ms)

  Basic sort

    ✓ Sort whole file, asc (94ms)

    ✓ Sort whole file, asc, ignoreCase (50ms)

    ✓ Sort whole file, dsc (59ms)

    ✓ Sort whole file, dsc, ignoreCase (64ms)

    ✓ Sort range, asc (103ms)

    ✓ Sort range, asc, ignoreCase (108ms)

    ✓ Sort range, dsc (86ms)

    ✓ Sort range, dsc, ignoreCase (71ms)

    ✓ Sort whole file, asc, unique (84ms)

  Horizontal split

    ✓ :sp creates a second split (121ms)

    ✓ :split creates a second split (61ms)

    ✓ :new creates a second split (249ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !
    ✓ throws if space before !
    ✓ ignores space after !
    ✓ throws if bad input
  :substitute args parser
    ✓ can parse pattern, replace, and flags
    ✓ can parse count
    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (39ms)

    ✓ Replace with flags AND count (86ms)

    ✓ Replace with `c` flag

    ✓ Replace with `gc` flag (66ms)

    ✓ Replace across all lines (71ms)

    ✓ Replace on specific single line (65ms)

    ✓ Replace on current line using dot (60ms)

    ✓ Replace single relative line using dot and plus (66ms)

    ✓ Replace across specific line range (74ms)

    ✓ Replace across relative line range using dot, plus, and minus (102ms)

    ✓ Replace across relative line range using numLines+colon shorthand (133ms)

    ✓ Repeat replacement across relative line range (77ms)

    ✓ Replace with range AND count but no flags (49ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (78ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (62ms)

    ✓ Undocumented: trailing operators use 1 as RHS (61ms)

    ✓ Replace specific single equal lines (47ms)

    ✓ Replace current line with no active selection (68ms)

    ✓ Replace text in selection (73ms)

    ✓ Substitute support marks (79ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line

      ✓ Replace with `g` flag inverts global flag (52ms)

      ✓ Replace with `c` flag inverts global flag (49ms)

      ✓ Replace multiple lines (46ms)

      ✓ Replace across specific lines (49ms)

      ✓ Replace current line with no active selection (49ms)

      ✓ Replace text in selection (70ms)

      ✓ Substitute support marks (215ms)

      ✓ Substitute with escaped delimiter

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (132ms)

      ✓ Substitute with previous search using # (112ms)

      ✓ Substitute with previous search using / (222ms)

      ✓ Substitute with parameters should update search state (81ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (205ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (100ms)

      ✓ Substitute repeat previous should accept flags (55ms)

      ✓ Substitute with empty search string should use last searched pattern (147ms)

      ✓ Ampersand (&) should repeat the last substitution (45ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (52ms)

    ✓ tabe with current file path does nothing (42ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path (38ms)

    ✓ command line file tab completion directory with / at the end (39ms)

    ✓ command line file navigate tab completion

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (71ms)

    ✓ command line file tab completion with space in file path (94ms)

  Vertical split

    ✓ :vs creates a second split (65ms)

    ✓ :vsp creates a second split (52ms)

    ✓ :vsplit creates a second split (54ms)

    ✓ :vnew creates a second split (191ms)

    ✓ :vne creates a second split (202ms)

  Basic write-quit

    ✓ Run write and quit (46ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (45ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (59ms)

    ✓ getMatchingRemap (58ms)

    ✓ jj -> <Esc> through modehandler (109ms)

    ✓ 0 -> :wq through modehandler (63ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (73ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (84ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (96ms)

    ✓ d -> black hole register delete in normal mode through modehandler (108ms)

    ✓ d -> black hole register delete in normal mode through modehandler (212ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (100ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error
    ✓ error code has message
  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark (38ms)

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim

      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG

        ✓ Can track jumps for keys: GggGgg (44ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: /b<CR>n

        ✓ Can track jumps for keys: G?b<CR>ggG (40ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (41ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>% (40ms)

        ✓ Can track jumps for keys: j%%<C-o>gg

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (43ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (59ms)

        ✓ Can enter number to jump back multiple times

        ✓ Can track one-line `` jumps (48ms)

        ✓ Can track one-line double `` jumps (49ms)

        ✓ Can track one-line '' jumps (55ms)

        ✓ Can track one-line double '' jumps (54ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (67ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (48ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (62ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (59ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (65ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (120ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (81ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (101ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (137ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR>

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (96ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (39ms)

  Record and execute a macro

    ✓ Can record and execute (99ms)

    ✓ Can repeat last invoked macro (160ms)

    ✓ Can play back with count (252ms)

    ✓ Can play back with count, abort when a motion fails (237ms)

    ✓ Repeat change on contiguous lines (124ms)

    ✓ Append command to a macro (108ms)

    ✓ Can record Ctrl Keys and repeat (86ms)

    ✓ Can execute macros with dot commands properly (76ms)

    ✓ : (command) register can be used as a macro (65ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (70ms)

    ✓ can handle key events

[main 2020-02-26T05:53:08.893Z] update#setState checking for updates

[main 2020-02-26T05:53:08.978Z] update#setState idle

    ✓ <Esc> should change cursor position (87ms)

    ✓ <C-c> can exit insert (49ms)

    ✓ <Esc> can exit insert

    ✓ Stay in insert when entering characters (76ms)

    ✓ Can handle 'O' (50ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace (46ms)

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line (44ms)

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (40ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode (53ms)

    ✓ Delete works at line end

    ✓ Delete works at end of file

    ✓ Delete works with repeat (83ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (54ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (43ms)

    ✓ Can perform insert command prefixed with count

    ✓ Can perform append command prefixed with count (42ms)

    ✓ Can perform insert at start of line command prefixed with count (43ms)

    ✓ Can perform append to end of line command prefixed with count

    ✓ Can perform change char (s) command prefixed with count (50ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (62ms)

    ✓ Can handle 'O' with count (66ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (47ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw (111ms)

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd (39ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d

    ✓ Can handle dd empty line (45ms)

    ✓ Can handle ddp

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again

    ✓ Can handle 'dl' at end of line (49ms)

    ✓ Can handle 'dF' (159ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket (38ms)

    ✓ Can handle 'cw' (45ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (43ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (90ms)

    ✓ Can handle 'ciw' on blanks (44ms)

    ✓ Can handle 'caw' (50ms)

    ✓ Can handle 'caw' on first letter

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'caw' on blanks (72ms)

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses (40ms)

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses (54ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)'

    ✓ Can handle count prefixed 'ca)' (53ms)

    ✓ Can handle 'ca(' spanning multiple lines

    ✓ Can handle 'cab' spanning multiple lines (44ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket (55ms)

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (38ms)

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash (46ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (77ms)

    ✓ can handle ck (42ms)

    ✓ can handle c2j (40ms)

    ✓ can handle c2k (46ms)

    ✓ can handle cj on last line (183ms)

    ✓ can handle ck on first line (44ms)

    ✓ can handle c2j on last line (39ms)

    ✓ can handle c2k on first line (38ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (42ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (57ms)

    ✓ Can handle 'daw' around word at end of line

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (45ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines

    ✓ Can handle 'daW' on beginning of word (223ms)

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces (38ms)

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line (157ms)

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (38ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (43ms)

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (65ms)

    ✓ leaving insert mode should update desired column when entered with i (56ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (42ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy' (41ms)

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy' (38ms)

    ✓ Can handle 'gp' after 'Nyy' (58ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (50ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy'

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (38ms)

    ✓ Can handle ']p' after yy (67ms)

    ✓ Can handle ']p' after 'Nyy'

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (71ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible

    ✓ Can handle '[p' after yy

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (51ms)

    ✓ Can handle 'p' after y'a (44ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (55ms)

    ✓ Can repeat w

    ✓ Can repeat p (44ms)

    ✓ I works correctly (54ms)

    ✓ gI works correctly (41ms)

    ✓ gi works correctly (73ms)

    ✓ `. works correctly

    ✓ '. works correctly (45ms)

    ✓ g; works correctly (58ms)

    ✓ g, works correctly (56ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly (54ms)

    ✓ gq handles spaces before single line comments correctly (50ms)

    ✓ gq handles tabs before single line comments correctly

    ✓ Can handle space (45ms)

    ✓ Can handle space

    ✓ Undo 1 (62ms)

    ✓ Undo 2 (62ms)

    ✓ Undo cursor (139ms)

    ✓ Undo cursor 2 (62ms)

    ✓ Undo cursor 3 (97ms)

    ✓ Undo with movement first (102ms)

    ✓ Can handle 'U' (83ms)

    ✓ Can handle 'U' for multiple changes (53ms)

    ✓ Can handle 'U' for new line below (42ms)

    ✓ Can handle 'U' for new line above (57ms)

    ✓ Can handle 'U' for consecutive changes only (69ms)

    ✓ Can handle 'u' to undo 'U' (49ms)

    ✓ Can handle 'U' to undo 'U'

    ✓ Can handle 'u' after :s/abc/def (58ms)

    ✓ Redo (89ms)

    ✓ Redo (58ms)

    ✓ Redo (58ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (43ms)

    ✓ can handle s in visual mode (38ms)

    ✓ can handle p with selection (87ms)

    ✓ can handle P with selection (53ms)

    ✓ can handle p in visual to end of line (53ms)

    ✓ can repeat backspace twice (102ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number (38ms)

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (41ms)

    ✓ can ctrl-a on a decimal (47ms)

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after  (47ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (64ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y (44ms)

    ✓ Can do S

    ✓ / does not affect mark (40ms)

    ✓ / can search with regex

    ✓ / can search with newline (95ms)

    ✓ / can search through multiple newlines (57ms)

    ✓ / matches ^ per line (38ms)

    ✓ / matches $ per line (47ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (39ms)

    ✓ /\C forces case sensitive search (39ms)

    ✓ <BS> deletes the last character in search in progress mode

    ✓ <S-BS> deletes the last character in search in progress mode

    ✓ <C-h> deletes the last character in search in progress mode (43ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (52ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags (39ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (85ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (44ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    2) Can 'D'elete the characters under the cursor until the end of the line

    3) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (46ms)

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (49ms)

    ✓ '] go to the end of the previously operated or put text (124ms)

    ✓ `[ go to the start of the previously operated or put text (43ms)

    ✓ '[ go to the start of the previously operated or put text (57ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (43ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (149ms)

      ✓ gn selects the current word at |hello (163ms)

      ✓ gn selects the current word at h|ello (207ms)

      ✓ gn selects the current word at hel|lo (166ms)

      ✓ gn selects the current word at hell|o (237ms)

      ✓ gn selects the next word at hello| (163ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (61ms)

      ✓ dgn deletes the current word when cursor is at |hello (64ms)

      ✓ dgn deletes the current word when cursor is at h|ello (46ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (60ms)

      ✓ dgn deletes the current word when cursor is at hell|o (46ms)

      ✓ dgn deletes the next word when cursor is at hello| (51ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (52ms)

      ✓ cgn deletes the current word when cursor is at |hello (52ms)

      ✓ cgn deletes the current word when cursor is at h|ello (57ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (48ms)

      ✓ cgn deletes the current word when cursor is at hell|o (42ms)

      ✓ cgn deletes the next word when cursor is at hello| (57ms)

    can handle gN

      ✓ gN selects the previous match text (152ms)

      ✓ gN selects the current word at hell|o (178ms)

      ✓ gN selects the current word at hel|lo (184ms)

      ✓ gN selects the current word at h|ello (155ms)

      ✓ gN selects the current word at |hello (424ms)

      ✓ gN selects the previous word at | hello (158ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (76ms)

      ✓ dgN deletes the current word when cursor is at hell|o (51ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (117ms)

      ✓ dgN deletes the current word when cursor is at h|ello (52ms)

      ✓ dgN deletes the current word when cursor is at |hello (56ms)

      ✓ dgN deletes the previous word when cursor is at | hello (54ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (53ms)

      ✓ cgN deletes the current word when cursor is at hell|o (63ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (87ms)

      ✓ cgN deletes the current word when cursor is at h|ello (58ms)

      ✓ cgN deletes the current word when cursor is at |hello (66ms)

      ✓ cgN deletes the previous word when cursor is at | hello (81ms)

    marks

      ✓ capital marks can change the editors active document (125ms)

      ✓ can jump to lowercase mark

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R

    ✓ Can handle R past current line (44ms)

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (40ms)

    ✓ Can handle R across lines and exit Replace Mode (61ms)

    ✓ Can handle R with {count} (62ms)

    ✓ Can handle backspace (39ms)

    ✓ Can handle backspace (48ms)

    ✓ Can handle backspace across lines (56ms)

    ✓ Can handle arrows

    ✓ Can handle . (91ms)

    ✓ Can handle . across lines (90ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (86ms)

    ✓ Can handle wd (86ms)

    ✓ Can handle x (65ms)

    ✓ Can handle x across a selection (98ms)

    ✓ Can do vwd in middle of sentence (88ms)

    ✓ Can do vwd in middle of sentence (89ms)

    ✓ Can do vwd multiple times (109ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (150ms)

    ✓ Can handle H key

    ✓ Can handle backspace key

    ✓ handles case where we delete over a newline (162ms)

    ✓ handles change operator (91ms)

    ✓ Can do vat on multiple matching tags (49ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (77ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (61ms)

    ✓ Repeat-prefixed vat does not bleed below

    ✓ Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis

    ✓ Can do vi) on multiple matching parens

    ✓ Can do va) on a matching parenthesis

    ✓ Can do va) on multiple matching parens

    ✓ Failed va) does not expand or move selection, remains in visual mode

    ✓ Repeat-prefixed va) does not bleed below (43ms)

    ✓ Can do va} on a matching bracket as first character

    ✓ Can do va} on multiple matching brackets

    ✓ Can do vi( on a matching bracket near first character

    ✓ Can do vi{ on outer pair of nested braces (47ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent

    ✓ Can do va] on multiple matching brackets (39ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (39ms)

    ✓ Repeat-prefixed vaf does not bleed below

    ✓ vaf only expands to enclosing pairs (47ms)

    ✓ Can use . to repeat indent in visual (56ms)

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL

    ✓ Can do v3g_x to delete to last char with no EOL with count

    ✓ Can do v$x to delete to last char including EOL

    ✓ Can do gv to reselect previous selection (42ms)

    Vim's EOL handling is weird

      ✓ delete through eol (77ms)

      ✓ join 2 lines by deleting through eol (72ms)

      ✓ d$ doesn't delete whole line (62ms)

      ✓ vd$ does delete whole line (50ms)

      ✓ Paste over selection copies the selection (49ms)

      ✓ Paste over selection copies the selection linewise (50ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key (51ms)

      ✓ Can handle <left> key

      ✓ Can handle <right> key

    Screen line motions in Visual Mode

      ✓ Can handle 'gk'

      ✓ Can handle 'gj'

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (44ms)

      ✓ Can handle 'vawd' on word with trailing spaces (62ms)

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (41ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (69ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (86ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (38ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (39ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces (42ms)

      ✓ Can handle 'vawd' on word with numeric prefix (39ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (63ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (77ms)

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (39ms)

      ✓ Can handle 'Y' in visual mode (39ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (39ms)

      ✓ Select sentence with leading spaces in visual mode (61ms)

      ✓ Select multiple sentences in visual mode

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (39ms)

      ✓ Select inner sentence with leading spaces in visual mode

      ✓ Select spaces between sentences in visual mode

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (43ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (45ms)

      ✓ Can do vat on a matching tag

    handles replace in visual mode

      ✓ Can do a single line replace (69ms)

      ✓ Can do a multi line replace (47ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (38ms)

      ✓ D deletes the current line

    handles indent blocks in visual mode

      ✓ Can do vai

      ✓ Can do vii (48ms)

      ✓ Doesn't naively select the next line

      ✓ Searches backwards if cursor line is empty (46ms)

      ✓ Can do vaI

    visualstar

      ✓ Works with * (39ms)

      ✓ Works with # (46ms)

    search works in visual mode

      ✓ Works with / (45ms)

      ✓ Works with ? (56ms)

      ✓ Selects correct range (82ms)

    X will delete linewise

      ✓ normal selection

      ✓ normal selection (73ms)

    C will delete linewise

      ✓ normal selection

      ✓ normal selection (82ms)

    R will delete linewise

      ✓ normal selection

      ✓ normal selection (38ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (54ms)

      ✓ upward selection (59ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (72ms)

      ✓ multiline indent bottom up selection (38ms)

      ✓ repeat multiline indent top down selection (65ms)

      ✓ repeat multiline indent bottom up selection (48ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (38ms)

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (62ms)

      ✓ repeat multiline outdent bottom up selection

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (88ms)

    vi{ will go to end of second to last line

      ✓ select (45ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (218ms)

      ✓ gv selects the last pasted text (which is longer than original) (225ms)

      ✓ gv selects the last pasted text (multiline) (141ms)

    can handle gn

      ✓ gn selects the next match text (247ms)

      ✓ gn selects the current word at |hello (158ms)

      ✓ gn selects the current word at h|ello (164ms)

      ✓ gn selects the current word at hel|lo (415ms)

      ✓ gn selects the next word at hell|o (132ms)

      ✓ gn selects the next word at hello| (188ms)

    can prepend text with I

      4) multiline insert from bottom up selection

      5) multiline insert from top down selection

      6) skips blank lines

    can append text with A

      7) multiline append from bottom up selection

      8) multiline append from top down selection

      9) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (47ms)

      ✓ U/gU across a selection (61ms)

      ✓ U/gU across a selection (reverse) (54ms)

      ✓ u/gu on single character (42ms)

      ✓ u/gu across a selection (101ms)

      ✓ u/gu across a selection (reverse) (52ms)

  Mode Visual Block

    ✓ can be activated

    10) Can handle A forward select

    11) Can handle A backwards select

    12) Can handle I forward select

    13) Can handle I backwards select

    14) Can handle I with empty lines on first character (inserts on empty line)

    15) Can handle I with empty lines on non-first character (does not insert on empty line)

    16) Can handle c forward select

    17) Can handle c backwards select

    18) Can handle C

    19) Can do a multi line replace

    ✓ Can handle 'D' (50ms)

    20) Can handle 'gj'

    21) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (68ms)

    ✓ o works in visual block mode (72ms)

    22) d deletes block

    23) x deletes block

    24) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (105ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (160ms)

    ✓ Can handle wd (78ms)

    ✓ Can handle x (100ms)

    ✓ Can handle x across a selection (66ms)

    ✓ Can do vwd in middle of sentence (101ms)

    ✓ Can do vwd in middle of sentence (72ms)

    ✓ Can do vwd multiple times (344ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (86ms)

    ✓ handles case where we delete over a newline (100ms)

    ✓ handles change operator (121ms)

    ✓ Vp updates register content

    ✓ Vp does not append unnecessary newlines (first line)

    ✓ Vp does not append unnecessary newlines (middle line)

    ✓ Vp does not append unnecessary newlines (last line) (57ms)

    ✓ Exiting via <Esc> returns cursor to original column

    Vim's EOL handling is weird

      ✓ delete through eol (53ms)

      ✓ join 2 lines by deleting through eol (63ms)

      ✓ d$ doesn't delete whole line (65ms)

      ✓ vd$ does delete whole line (56ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (76ms)

      ✓ Can handle 'gj'

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key

      ✓ Can handle d key (48ms)

      ✓ Can handle d key

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up

    search works in visual line mode

      ✓ Works with / (44ms)

      ✓ Works with ? (48ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (82ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position

      ✓ linewise visual put works also in the end of document (46ms)

      ✓ gv selects the last pasted text (which is shorter than original) (317ms)

      ✓ gv selects the last pasted text (which is longer than original) (249ms)

      ✓ gv selects the last pasted text (multiline) (126ms)

    can prepend text with I

      25) multiline insert from bottom up selection

      26) multiline insert from top down selection

      27) skips blank lines

    can append text with A

      28) multiline append from bottom up selection

      29) multiline append from top down selection

      30) skips blank lines

      ✓ updates desired column correctly

  Mode Normal

    31) Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste

    ✓ Can handle 'x' at end of line (46ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line (40ms)

    32) Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (107ms)

    ✓ Can handle 'cc'

    ✓ Can handle 'Ncc' (53ms)

    ✓ Can handle 'yy'

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd'

    33) Can handle 'r
'

    ✓ Can handle '<Count>r
' (43ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (44ms)

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (52ms)

    ✓ Can handle 'J' with leading white space on next line

    34) Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    35) Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (66ms)

    36) Can handle 'ge' in multiple lines case1

    37) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (116ms)

    ✓ Can repeat '~' with dot

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (61ms)

    ✓ Can handle dot with I (50ms)

    ✓ Can repeat actions that require selections (73ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (41ms)

    ✓ Can repeat insert change and '<C-t>' (41ms)

    ✓ Can repeat change by `<C-a>` (52ms)

    ✓ Only one arrow key can be repeated in Insert Mode (46ms)

    ✓ Cached content change will be cleared by arrow keys (64ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis (53ms)

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive (41ms)

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (73ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    38) Retain same column when moving up/down

    ✓ Can handle <enter> (76ms)

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count (49ms)

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (43ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (74ms)

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (70ms)

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (38ms)

    ✓ cancelled search reverts to previous search state (59ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing

    ✓ Search offsets: b2 goes 2 to the right (46ms)

    ✓ Search offsets: b+3 goes 3 to the right

    ✓ Search offsets: e goes to the end (122ms)

    ✓ Search offsets: character offset goes across line boundaries (42ms)

    ✓ Search offsets: 2 goes 2 down (53ms)

    ✓ Search offsets: -2 goes 2 up (40ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $ (131ms)

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0 (56ms)

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace (59ms)

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history (94ms)

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent (43ms)

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    39) Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    40) Can handle 'gk'

    41) Can handle 'gj'

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      42) Preserves desired cursor position when pressing zz

      43) Preserves desired cursor position when pressing zt

      44) Preserves desired cursor position when pressing zb

      45) Preserves desired cursor position when pressing <C-e>

      46) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin
    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    line up
      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    word right
      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces

      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word

      ✓ first word should move to previous line, stops on empty line

      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces

    sentence backward

      ✓ current sentence begin

      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (49ms)

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (103ms)

    wrapscan enabled

      ✓ search wraps around the end of the file

      ✓ search wraps around the start of the file (42ms)

    wrapscan disabled

      ✓ search stops at the end of the file (44ms)

      ✓ search stops at the start of the file (43ms)

  Multicursor

    ✓ can add multiple cursors below (51ms)

    ✓ can add multiple cursors above (155ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor

    47) <C-v>d works with multi-cursor

    48) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    49) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip
  comment operator

    ✓ gcc comments out current line (166ms)

    ✓ gcj comments in current and next line (62ms)

    ✓ block comment with motion (138ms)

    ✓ block comment in Visual Mode (90ms)

    ✓ comment in visual line mode (151ms)

    ✓ comment in visual block mode (199ms)

  format operator

    ✓ == formats current line (376ms)

    ✓ =$ formats entire line (206ms)

    ✓ =j formats two lines (57ms)

    ✓ 3=k formats three lines (70ms)

    50) =gg formats to top of file

    ✓ =G formats to bottom of file (84ms)

    ✓ =ip formats paragraph (132ms)

    ✓ format in visual mode (370ms)

  put operator

    ✓ basic put test (132ms)

    ✓ test yy end of line (46ms)

    ✓ test yy first line (55ms)

    ✓ test yy middle line

    ✓ test yy with correct positon movement

    ✓ test visual block single line yank p (83ms)

    ✓ test visual block single line yank P (40ms)

    ✓ test visual block single line delete p

    ✓ test visual block single line delete P

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (50ms)

    ✓ g? in visual mode works (63ms)

    ✓ g? in visual line mode works

    51) g? in visual block mode works

  shift operator

    ✓ basic shift left test

    ✓ shift left goto end test

    ✓ shift left goto line test

    ✓ shift right goto end test (86ms)

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word (65ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord (39ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word (83ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator (58ms)

  easymotion plugin

    ✓ Can handle s move

    ✓ Can handle 2s move (46ms)

    ✓ Can handle f move

    ✓ Can handle 2f move

    ✓ Can handle F move

    ✓ Can handle 2F move (46ms)

    ✓ Can handle t move (48ms)

    ✓ Can handle bd-t move (38ms)

    ✓ Can handle 2t move (157ms)

    ✓ Can handle bd-t2 move (109ms)

    ✓ Can handle T move (39ms)

    ✓ Can handle 2T move (62ms)

    ✓ Can handle w move

    ✓ Can handle bd-w move

    ✓ Can handle b move (79ms)

    ✓ Can handle e move (41ms)

    ✓ Can handle bd-e move (43ms)

    ✓ Can handle ge move

    ✓ Can handle n-char move

    ✓ Can handle j move

    ✓ Can handle k move (43ms)

    ✓ Can handle bd-jk move (1) (46ms)

    ✓ Can handle bd-jk move (2) (39ms)

    ✓ Can handle lineforward move (1) (42ms)

    ✓ Can handle lineforward move (2)

    52) Can handle linebackward move (1)

    53) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.) (88ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word

    ✓ Replaces within inner Word (44ms)

    ✓ Replaces within '' (54ms)

    ✓ Replaces within '' including spaces (38ms)

    ✓ Replaces within () (38ms)

    ✓ Replaces within () including spaces (45ms)

    ✓ Replaces within a paragraph (53ms)

    ✓ Replaces using a specified register (59ms)

    ✓ Replaces within {} over multiple lines (44ms)

    ✓ Replaces a multiline register within {} over multiple lines (47ms)

    ✓ Replaces a multiline register within {} over multiple lines

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement

    ✓ grr replaces the entire line with the register

    ✓ grr can replace multiple lines (43ms)

    ✓ Replaces in visual mode (107ms)

    ✓ Replaces in visual mode using a specified register (52ms)

    ✓ Replaces in visual line mode (77ms)

    ✓ grj is linewise (49ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion (43ms)

    ✓ Can handle <operator>z motion (38ms)

    ✓ Can handle <operator>Z motion (78ms)

    ✓ Can handle s; motion (46ms)

    ✓ Can handle s, motion

    ✓ Can handle S; motion

    ✓ Can handle S, motion (40ms)

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion (43ms)

    ✓ Can handle single letter <operator>z motion

    ✓ Can handle single letter <operator>Z motion

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion (67ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (38ms)

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (71ms)

    ✓ 'ysiw(' surrounds word with space (61ms)

    ✓ 'ysw)' surrounds word without space (38ms)

    ✓ 'ysw(' surrounds word with space (46ms)

    ✓ 'ysaw)' surrounds word without space (165ms)

    ✓ 'ysaw(' surrounds word with space (64ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (46ms)

    ✓ 'ysiw<' surrounds word with tags (54ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (41ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (50ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (43ms)

    ✓ change surround (46ms)

    ✓ change surround with two pairs of quotes (96ms)

    ✓ change surround with two pairs of parens (52ms)

    ✓ change surround with alias (61ms)

    ✓ change surround to tags (63ms)

    ✓ delete surround (54ms)

    ✓ delete surround with quotes (57ms)

    ✓ delete surround with nested of quotes (51ms)

    ✓ delete surround with inconsistent quotes (119ms)

    ✓ delete surround with mixed quotes

    ✓ delete surround with empty quotes cursor at start (456ms)

    ✓ delete surround with empty quotes cursor at end (47ms)

    ✓ don't delete surround if cursor is after closing match (80ms)

    ✓ delete surround if cursor is before opening match (48ms)

    ✓ delete surround with two pairs of parens (55ms)

    ✓ delete surround with alias (48ms)

    ✓ delete surround with tags

    ✓ change surround brackets at end of line (49ms)

    ✓ changing brackets with surround works again (81ms)

    ✓ change surround with tags that contain an attribute and preserve them (63ms)

    ✓ change surround with tags that contain an attribute and remove them (130ms)

  register

    ✓ Can copy to a register

    ✓ Can use two registers together (51ms)

    ✓ Can use black hole register (81ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (125ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (209ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (147ms)

    ✓ Register '1'-'9' stores delete content (146ms)

    ✓ "A appends linewise text to "a (173ms)

    ✓ "A appends character wise text to "a (133ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (97ms)

    ✓ Small deletion using Del is stored in small delete register (90ms)

    ✓ Small deletion using X is stored in small delete register (96ms)

    ✓ Search register (/) is set by forward search (227ms)

    ✓ Search register (/) is set by backward search (201ms)

    ✓ Search register (/) is set by star search (216ms)

    ✓ Command register (:) is set by command line (73ms)

    ✓ Read-only registers cannot be written to (147ms)

    clipboard

      ✓ Can access '*' (clipboard) register (40ms)

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character> (69ms)

    ✓ Can repeat t<character> (86ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward

      ✓ move one sentence backward single line - middle (105ms)

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line

      ✓ move one sentence backward - multiline - previous line - period (88ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1291 passing (3m)

  4 pending

  53 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)

  2) Mode Normal
       Can 'D'elete the characters under the cursor until the end of the line:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  31
       ]
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2076:3)

  3) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Wrong number of cursors
      + expected - actual

      -1
      +2
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)

  4) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  5) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  6) Mode Visual
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  7) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  8) Mode Visual
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  9) Mode Visual
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  10) Mode Visual Block
       Can handle A forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:32:3)


  11) Mode Visual Block
       Can handle A backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:39:3)


  12) Mode Visual Block
       Can handle I forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:46:3)


  13) Mode Visual Block
       Can handle I backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:53:3)


  14) Mode Visual Block
       Can handle I with empty lines on first character (inserts on empty line):

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:60:3)


  15) Mode Visual Block
       Can handle I with empty lines on non-first character (does not insert on empty line):

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:67:3)


  16) Mode Visual Block
       Can handle c forward select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:74:3)


  17) Mode Visual Block
       Can handle c backwards select:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:81:3)


  18) Mode Visual Block
       Can handle C:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:88:3)


  19) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  20) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  21) Mode Visual Block
       Properly add to end of lines j then $:

      Wrong number of cursors
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  22) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)


  23) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)


  24) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)


  25) Mode Visual Line
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:430:5)


  26) Mode Visual Line
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:437:5)


  27) Mode Visual Line
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:444:5)


  28) Mode Visual Line
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:453:5)


  29) Mode Visual Line
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:460:5)


  30) Mode Visual Line
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualLine.test.ts:467:5)


  31) Mode Normal
       Can handle 'x':

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  2
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:14:3)


  32) Mode Normal
       Can handle '<Del>':

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  2
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:58:3)


  33) Mode Normal
       Can handle 'r
':

      Content does not match; Expected=abc. Actual=.
      + expected - actual

      +abc
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:173:3)


  34) Mode Normal
       Can handle 'J' with only white space on next line:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  1
      +  3
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:223:3)


  35) Mode Normal
       Can handle 'J' with a following delete:

      Content does not match; Expected=onetwo. Actual=oe two.
      + expected - actual

      -oe two
      +onetwo
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:244:3)


  36) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       [
      -  2
      -  3
      +  1
      +  4
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  37) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  2
      +  0
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  38) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  8
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  39) Motions in Normal Mode
       Can handle g_:

      Cursor #1's position is wrong.
      + expected - actual

       [
      -  0
      -  3
      +  1
      +  2
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:737:3)


  40) Motions in Normal Mode
       Can handle 'gk':

      Cursor #1's position is wrong.
      + expected - actual

       [
      +  1
         0
      -  0
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:779:3)


  41) Motions in Normal Mode
       Can handle 'gj':

      Cursor #1's position is wrong.
      + expected - actual

       [
      -  1
      +  3
         0
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:786:3)


  42) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  43) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  44) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  45) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  46) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       [
         1
      -  0
      +  26
       ]
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  47) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  48) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  49) Multicursor
       o works with multi-cursor:
     
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  50) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  51) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  52) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  6
      +  3
       ]
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  53) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       [
         0
      -  8
      +  6
       ]
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: a1c61410-585c-11ea-b533-891a36a4ac0b

@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.12.4 build /home/travis/build/VSCodeVim/Vim
> gulp build

[06:31:18] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[06:31:18] Starting 'build'...
[06:31:18] Starting 'prettier'...
[06:31:19] Finished 'prettier' after 557 ms
[06:31:19] Starting 'tsc'...
[06:31:19] Starting 'tslint'...
[06:31:27] Finished 'tslint' after 7.63 s
[06:31:36] Finished 'tsc' after 17 s
[06:31:36] Starting 'commit-hash'...
[06:31:36] Finished 'commit-hash' after 27 ms
[06:31:36] Finished 'build' after 17 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T06:31:40.130Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative

    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (56ms)

    ✓ command <C-w> can remove word in search mode (39ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (70ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor (42ms)

    ✓ <C-u> deletes from cursor to first character (47ms)

    ✓ <C-b> puts cursor at start of command line (43ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (41ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (74ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (94ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (127ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (115ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search (50ms)

  HistoryFile

    ✓ add command (40ms)

    ✓ add empty command (40ms)

    ✓ add command over configuration.history (45ms)

    ✓ add command that exists in history (45ms)

    ✓ file system (40ms)

    ✓ change configuration.history (67ms)

  command-line lexer
    ✓ can lex empty string
    ✓ can lex comma

    ✓ can lex percent
    ✓ can lex dollar

    ✓ can lex dot
    ✓ can lex one number
    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1465ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar
  command line scanner
    ✓ ctor
    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (541ms)

    ✓ :smile editor contains smile text (538ms)

  Basic sort

    ✓ Sort whole file, asc (118ms)

    ✓ Sort whole file, asc, ignoreCase (93ms)

    ✓ Sort whole file, dsc (109ms)

    ✓ Sort whole file, dsc, ignoreCase (113ms)

    ✓ Sort range, asc (179ms)

    ✓ Sort range, asc, ignoreCase (156ms)

    ✓ Sort range, dsc (151ms)

    ✓ Sort range, dsc, ignoreCase (125ms)

    ✓ Sort whole file, asc, unique (157ms)

  Horizontal split

    ✓ :sp creates a second split (114ms)

    ✓ :split creates a second split (62ms)

    ✓ :new creates a second split (275ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name
      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (53ms)

    ✓ Replace with `g` flag (69ms)

    ✓ Replace with flags AND count (127ms)

    ✓ Replace with `c` flag (55ms)

    ✓ Replace with `gc` flag (83ms)

    ✓ Replace across all lines (80ms)

    ✓ Replace on specific single line (128ms)

    ✓ Replace on current line using dot (92ms)

    ✓ Replace single relative line using dot and plus (91ms)

    ✓ Replace across specific line range (126ms)

    ✓ Replace across relative line range using dot, plus, and minus (211ms)

    ✓ Replace across relative line range using numLines+colon shorthand (132ms)

    ✓ Repeat replacement across relative line range (150ms)

    ✓ Replace with range AND count but no flags (84ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (117ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (82ms)

    ✓ Undocumented: trailing operators use 1 as RHS (94ms)

    ✓ Replace specific single equal lines (108ms)

    ✓ Replace current line with no active selection (124ms)

    ✓ Replace text in selection (162ms)

    ✓ Substitute support marks (127ms)
    Effects of gdefault=true

      ✓ Replace all matches in the line (73ms)

      ✓ Replace with `g` flag inverts global flag (71ms)

      ✓ Replace with `c` flag inverts global flag (89ms)

      ✓ Replace multiple lines (107ms)

      ✓ Replace across specific lines (111ms)

      ✓ Replace current line with no active selection (105ms)

      ✓ Replace text in selection (129ms)

      ✓ Substitute support marks (196ms)

      ✓ Substitute with escaped delimiter (64ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (256ms)

      ✓ Substitute with previous search using # (241ms)

      ✓ Substitute with previous search using / (294ms)

      ✓ Substitute with parameters should update search state (132ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (353ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (169ms)

      ✓ Substitute repeat previous should accept flags (72ms)

      ✓ Substitute with empty search string should use last searched pattern (266ms)

      ✓ Ampersand (&) should repeat the last substitution (194ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (74ms)

    ✓ tabe with current file path does nothing (57ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (49ms)

    ✓ command line file navigate tab completion (65ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (92ms)

    ✓ command line file tab completion with space in file path (160ms)

  Vertical split

    ✓ :vs creates a second split (78ms)

    ✓ :vsp creates a second split (75ms)

    ✓ :vsplit creates a second split (63ms)

    ✓ :vnew creates a second split (331ms)

    ✓ :vne creates a second split (181ms)

  Basic write-quit

    ✓ Run write and quit (90ms)
  Provide line completions
    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (57ms)

      ✓ Can complete lines in file with different indentation (46ms)

      ✓ Returns no completions for unmatched line (73ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (75ms)

    ✓ getMatchingRemap (58ms)

    ✓ jj -> <Esc> through modehandler (101ms)

    ✓ 0 -> :wq through modehandler (99ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (102ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (80ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (90ms)

    ✓ d -> black hole register delete in normal mode through modehandler (144ms)

    ✓ d -> black hole register delete in normal mode through modehandler (128ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (166ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled
  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

[main 2020-02-26T06:32:10.133Z] update#setState checking for updates

[main 2020-02-26T06:32:10.200Z] update#setState idle

        ✓ Can track jumps for keys: Ggg (47ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggG (208ms)

        ✓ Can track jumps for keys: GggGgg (48ms)

        ✓ Can track jumps for keys: /b<CR>n (51ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (88ms)

        ✓ Can track jumps for keys: j%% (49ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (150ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (48ms)

        ✓ Can track jumps for keys: j%%<C-o>% (64ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (81ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (64ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (95ms)

        ✓ Can enter number to jump back multiple times (84ms)

        ✓ Can track one-line `` jumps (80ms)

        ✓ Can track one-line double `` jumps (85ms)

        ✓ Can track one-line '' jumps (90ms)

        ✓ Can track one-line double '' jumps (92ms)

        ✓ Can handle '' jumps with no previous jump (44ms)

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (78ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (81ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (114ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (97ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (103ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (146ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (171ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (185ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (161ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (63ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (148ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (55ms)

  Record and execute a macro

    ✓ Can record and execute (182ms)

    ✓ Can repeat last invoked macro (268ms)

    ✓ Can play back with count (462ms)

    ✓ Can play back with count, abort when a motion fails (463ms)

    ✓ Repeat change on contiguous lines (182ms)

    ✓ Append command to a macro (176ms)

    ✓ Can record Ctrl Keys and repeat (260ms)

    ✓ Can execute macros with dot commands properly (133ms)

    ✓ : (command) register can be used as a macro (107ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (92ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (49ms)

    ✓ <C-c> can exit insert (60ms)

    ✓ <Esc> can exit insert (49ms)

    ✓ Stay in insert when entering characters (131ms)

    ✓ Can handle 'O' (93ms)

    ✓ 'i' puts you in insert mode before the cursor (45ms)

    ✓ 'I' puts you in insert mode at start of line (74ms)

    ✓ 'a' puts you in insert mode after the cursor (43ms)

    ✓ 'A' appends to end of line (39ms)

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (48ms)

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (91ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines (47ms)

    ✓ Backspace works on end of whitespace only lines (44ms)

    ✓ Backspace works at beginning of file (45ms)

    ✓ Delete works in insert mode (46ms)

    ✓ Delete works at line end (39ms)

    ✓ Delete works at end of file (49ms)

    ✓ Delete works with repeat (183ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (144ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (57ms)

    ✓ Can perform insert command prefixed with count (57ms)

    ✓ Can perform append command prefixed with count (67ms)

    ✓ Can perform insert at start of line command prefixed with count (41ms)

    ✓ Can perform append to end of line command prefixed with count (66ms)

    ✓ Can perform change char (s) command prefixed with count (203ms)

    ✓ Can perform command prefixed with count with <C-[> (79ms)

    ✓ Can handle 'o' with count (131ms)

    ✓ Can handle 'O' with count (113ms)

    ✓ Can handle backspace at beginning of line with all spaces (48ms)

    ✓ Can handle digraph insert (119ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw (46ms)

    ✓ Can handle dw

    ✓ Can handle dw (43ms)

    ✓ Can handle dw across lines (1) (41ms)

    ✓ Can handle dw across lines (2) (51ms)

    ✓ Can handle dd last line (50ms)

    ✓ Can handle dd single line (50ms)

    ✓ Can handle dd

    ✓ Can handle 3dd (49ms)

    ✓ Can handle 3dd off end of document (58ms)

    ✓ Can handle d2d (68ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (59ms)

    ✓ Can handle 'de' (43ms)

    ✓ Can handle 'de' then 'de' again (79ms)

    ✓ Can handle 'db' (49ms)

    ✓ Can handle 'db then 'db' again (61ms)

    ✓ Can handle 'dl' at end of line (53ms)

    ✓ Can handle 'dF' (62ms)

    ✓ Can handle 'dT' (57ms)

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj' (45ms)

    ✓ Can handle 'dk' (39ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (43ms)

    ✓ Can handle 'd]}' without deleting closing bracket (39ms)

    ✓ Can handle 'cw' (115ms)

    ✓ Can handle 'cw' without deleting following white spaces (47ms)

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (53ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (38ms)

    ✓ Can handle 'c]}' without deleting closing bracket (61ms)

    ✓ Can handle 's' (71ms)

    ✓ Can handle 'yiw' with correct cursor ending position (62ms)

    ✓ Can handle 'ciw' (161ms)

    ✓ Can handle 'ciw' on blanks (102ms)

    ✓ Can handle 'caw' (85ms)

    ✓ Can handle 'caw' on first letter (74ms)

    ✓ Can handle 'caw' on blanks (70ms)

    ✓ Can handle 'caw' on blanks (92ms)

    ✓ Can handle 'ci(' on first parentheses (47ms)

    ✓ Can handle 'ci(' with nested parentheses (43ms)

    ✓ Can handle 'ci(' backwards through nested parens (62ms)

    ✓ Can handle 'cib' on first parentheses (73ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (78ms)

    ✓ Can handle count prefixed 'ci)' (45ms)

    ✓ Can handle count prefixed 'ca)' (114ms)

    ✓ Can handle 'ca(' spanning multiple lines (60ms)

    ✓ Can handle 'cab' spanning multiple lines (53ms)

    ✓ Can handle 'ci{' spanning multiple lines (194ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (45ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (40ms)

    ✓ Can handle 'ci(' on the closing bracket (47ms)

    ✓ Can handle 'ciB' spanning multiple lines (52ms)

    ✓ will fail when ca( with no () (38ms)

    ✓ will fail when ca{ with no {} (47ms)

    ✓ will fail when caB with no {} (41ms)

    ✓ Can handle 'ci[' spanning multiple lines (55ms)

    ✓ Can handle 'ci]' on first bracket (48ms)

    ✓ Can handle 'ca[' on first bracket (43ms)

    ✓ Can handle 'ca]' on first bracket (41ms)

    ✓ Can handle 'ci'' on first quote (47ms)

    ✓ Can handle 'ci'' inside quoted string (48ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead (62ms)

    ✓ Can handle 'ci"' on opening quote (56ms)

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word (41ms)

    ✓ Can handle 'ca"' starting on the opening quote (46ms)

    ✓ Can handle 'ci"' with escaped quotes (44ms)

    ✓ Can handle 'ci"' with a single escaped quote (42ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (79ms)

    ✓ Can handle 'ci"' with an escaped backslash (41ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (57ms)

    ✓ Can handle 'ca"' starting on the closing quote (43ms)

    ✓ Can handle 'ci"' with complex escape sequences (45ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (51ms)

    ✓ will fail when ca" ahead of quoted string (63ms)

    ✓ Can handle 'ca`' inside word (45ms)

    ✓ can handle cj (82ms)

    ✓ can handle ck (253ms)

    ✓ can handle c2j (90ms)

    ✓ can handle c2k (78ms)

    ✓ can handle cj on last line (73ms)

    ✓ can handle ck on first line (86ms)

    ✓ can handle c2j on last line (124ms)

    ✓ can handle c2k on first line (124ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces (51ms)

    ✓ Can handle 'daw' on word with numeric prefix (53ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (58ms)

    ✓ Can handle 'daw' on end of word (79ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (43ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (47ms)

    ✓ Can handle 'daw' on word at beginning of file (47ms)

    ✓ Can handle 'daw' on word at beginning of line (45ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (52ms)

    ✓ Can handle 'daw' around word at end of line (61ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace (58ms)

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces (49ms)

    ✓ Can handle 'daW' on word with numeric prefix (47ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (40ms)

    ✓ Can handle 'daW' on beginning of word (123ms)

    ✓ Can handle 'daW' on end of one line (46ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (45ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (55ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (163ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (46ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (46ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (42ms)

    ✓ Can handle 'diw' on word with cursor inside spaces (205ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (44ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines (51ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (59ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (62ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (39ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines (51ms)

    ✓ Can handle 'diW' on beginning of word (45ms)

    ✓ Can handle d} at beginning of line (43ms)

    ✓ Can handle y} at beginning of line (42ms)

    ✓ Can handle d} when not at beginning of line (46ms)

    ✓ Can handle } with operator and count, at beginning of line (66ms)

    ✓ Can handle } with operator and count, and not at beginning of line (41ms)

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces (55ms)

    ✓ Select inner sentence with leading spaces (80ms)

    ✓ Select spaces between sentences (74ms)

    ✓ Can handle 'df' (43ms)

    ✓ Can handle 'dt' (45ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (62ms)

    ✓ A should update desiredColumn (153ms)

    ✓ I should updated desiredColumn (47ms)

    ✓ leaving insert mode should update desired column when entered with a (86ms)

    ✓ leaving insert mode should update desired column when entered with i (115ms)

    ✓ Can handle 'yy' without changing cursor position (39ms)

    ✓ Can handle 'P' after 'yy' (60ms)

    ✓ Can handle 'p' after 'yy' (46ms)

    ✓ Can handle 'P' after 'Nyy' (51ms)

    ✓ Can handle 'p' after 'Nyy' (49ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (60ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (46ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (49ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (52ms)

    ✓ Can handle 'gP' after 'yy' (47ms)

    ✓ Can handle 'gP' after 'Nyy' (45ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (63ms)

    ✓ Can handle ']p' after yy (50ms)

    ✓ Can handle ']p' after 'Nyy' (86ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (47ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (83ms)

    ✓ Can handle '[p' after yy (48ms)

    ✓ Can handle '[p' after 'Nyy' (57ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (62ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (76ms)

    ✓ Can handle 'p' after y'a (65ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (52ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (59ms)

    ✓ Can handle pasting in visual mode over selection (303ms)

    ✓ Can repeat w

    ✓ Can repeat p (61ms)

    ✓ I works correctly (87ms)

    ✓ gI works correctly (71ms)

    ✓ gi works correctly (101ms)

    ✓ `. works correctly (62ms)

    ✓ '. works correctly (70ms)

    ✓ g; works correctly (92ms)

    ✓ g, works correctly (156ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly (62ms)

    ✓ gq handles spaces before single line comments correctly (49ms)

    ✓ gq handles tabs before single line comments correctly (80ms)

    ✓ Can handle space (39ms)

    ✓ Can handle space (71ms)

    ✓ Undo 1 (125ms)

    ✓ Undo 2 (106ms)

    ✓ Undo cursor (178ms)

    ✓ Undo cursor 2 (190ms)

    ✓ Undo cursor 3 (126ms)

    ✓ Undo with movement first (108ms)

    ✓ Can handle 'U' (55ms)

    ✓ Can handle 'U' for multiple changes (100ms)

    ✓ Can handle 'U' for new line below (82ms)

    ✓ Can handle 'U' for new line above (106ms)

    ✓ Can handle 'U' for consecutive changes only (165ms)

    ✓ Can handle 'u' to undo 'U' (65ms)

    ✓ Can handle 'U' to undo 'U' (121ms)

    ✓ Can handle 'u' after :s/abc/def (138ms)

    ✓ Redo (150ms)

    ✓ Redo (119ms)

    ✓ Redo (176ms)

    ✓ Can handle u

    ✓ Can handle guw (47ms)

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (90ms)

    ✓ can handle s in visual mode (66ms)

    ✓ can handle p with selection (70ms)

    ✓ can handle P with selection (74ms)

    ✓ can handle p in visual to end of line (133ms)

    ✓ can repeat backspace twice (102ms)

    ✓ can delete linewise with d2G (47ms)

    ✓ can delete with + motion and count (47ms)

    ✓ can delete with - motion and count (45ms)

    ✓ can dE correctly (64ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word (50ms)

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal (51ms)

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word (159ms)

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (85ms)

    ✓ can ctrl-x on a negative number with word before and after  (42ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S (44ms)

    ✓ / does not affect mark (130ms)

    ✓ / can search with regex (64ms)

    ✓ / can search with newline (63ms)

    ✓ / can search through multiple newlines (87ms)

    ✓ / matches ^ per line (42ms)

    ✓ / matches $ per line (77ms)

    ✓ Can search for forward slash (44ms)

    ✓ Can search backward for question mark (47ms)

    ✓ /\c forces case insensitive search (50ms)

    ✓ /\C forces case sensitive search (53ms)

    ✓ <BS> deletes the last character in search in progress mode (38ms)

    ✓ <S-BS> deletes the last character in search in progress mode (63ms)

    ✓ <C-h> deletes the last character in search in progress mode (53ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (38ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (41ms)

    ✓ Can do cit on a tag with an attribute tag (59ms)

    ✓ Can do cat on a matching tag (48ms)

    ✓ Can do cit on a multiline tag (49ms)

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags (47ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (41ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside (68ms)

    ✓ can do cit with self closing tags (174ms)

    ✓ Respects indentation with cc (58ms)

    ✓ Resets cursor to indent end with cc (56ms)

    ✓ can handle 'cc' on empty line (46ms)

    ✓ cc copies linewise (61ms)

    ✓ Indent current line with correct Vim Mode (50ms)

    ✓ Can handle <Esc> and do nothing (56ms)

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words (43ms)

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    2) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (42ms)

    ✓ Can do cii (43ms)

    ✓ Can do caI (59ms)

    ✓ Can do dai (84ms)

    ✓ Can do dii (41ms)

    ✓ Can do daI (47ms)

    ✓ `] go to the end of the previously operated or put text (123ms)

    ✓ '] go to the end of the previously operated or put text (73ms)

    ✓ `[ go to the start of the previously operated or put text (99ms)

    ✓ '[ go to the start of the previously operated or put text (122ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (81ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end (45ms)

    ✓ can handle <C-u> when first line is visible and starting column is in the middle (59ms)

    can handle gn

      ✓ gn selects the next match text (244ms)

      ✓ gn selects the current word at |hello (306ms)

      ✓ gn selects the current word at h|ello (262ms)

      ✓ gn selects the current word at hel|lo (333ms)

      ✓ gn selects the current word at hell|o (237ms)

      ✓ gn selects the next word at hello| (224ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (62ms)

      ✓ dgn deletes the current word when cursor is at |hello (69ms)

      ✓ dgn deletes the current word when cursor is at h|ello (96ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (90ms)

      ✓ dgn deletes the current word when cursor is at hell|o (118ms)

      ✓ dgn deletes the next word when cursor is at hello| (86ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (74ms)

      ✓ cgn deletes the current word when cursor is at |hello (258ms)

      ✓ cgn deletes the current word when cursor is at h|ello (80ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (99ms)

      ✓ cgn deletes the current word when cursor is at hell|o (68ms)

      ✓ cgn deletes the next word when cursor is at hello| (88ms)

    can handle gN

      ✓ gN selects the previous match text (315ms)

      ✓ gN selects the current word at hell|o (243ms)

      ✓ gN selects the current word at hel|lo (249ms)

      ✓ gN selects the current word at h|ello (289ms)

      ✓ gN selects the current word at |hello (412ms)

      ✓ gN selects the previous word at | hello (327ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (86ms)

      ✓ dgN deletes the current word when cursor is at hell|o (115ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (149ms)

      ✓ dgN deletes the current word when cursor is at h|ello (71ms)

      ✓ dgN deletes the current word when cursor is at |hello (123ms)

      ✓ dgN deletes the previous word when cursor is at | hello (88ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (103ms)

      ✓ cgN deletes the current word when cursor is at hell|o (85ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (115ms)

      ✓ cgN deletes the current word when cursor is at h|ello (90ms)

      ✓ cgN deletes the current word when cursor is at |hello (78ms)

      ✓ cgN deletes the previous word when cursor is at | hello (95ms)

    marks

      ✓ capital marks can change the editors active document (168ms)

      ✓ can jump to lowercase mark (40ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (40ms)

    ✓ Can handle R past current line (63ms)

    ✓ Can handle R and exit Replace Mode (85ms)

    ✓ Can handle R across lines (81ms)

    ✓ Can handle R across lines and exit Replace Mode (100ms)

    ✓ Can handle R with {count} (108ms)

    ✓ Can handle backspace (68ms)

    ✓ Can handle backspace (101ms)

    ✓ Can handle backspace across lines (126ms)

    ✓ Can handle arrows (60ms)

    ✓ Can handle . (96ms)

    ✓ Can handle . across lines (140ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (204ms)

    ✓ Can handle wd (114ms)

    ✓ Can handle x (101ms)

    ✓ Can handle x across a selection (167ms)

    ✓ Can do vwd in middle of sentence (178ms)

    ✓ Can do vwd in middle of sentence (135ms)

    ✓ Can do vwd multiple times (192ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (149ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (51ms)

    ✓ handles case where we delete over a newline (184ms)

    ✓ handles change operator (122ms)

    ✓ Can do vat on multiple matching tags (66ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (69ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (47ms)

    ✓ Repeat-prefixed vat does not bleed below (53ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (47ms)

    ✓ Can do vi) on a matching parenthesis (47ms)

    ✓ Can do vi) on multiple matching parens (45ms)

    ✓ Can do va) on a matching parenthesis (525ms)

    ✓ Can do va) on multiple matching parens (64ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (47ms)

    ✓ Repeat-prefixed va) does not bleed below (50ms)

    ✓ Can do va} on a matching bracket as first character (49ms)

    ✓ Can do va} on multiple matching brackets (77ms)

    ✓ Can do vi( on a matching bracket near first character (52ms)

    ✓ Can do vi{ on outer pair of nested braces (97ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (42ms)

    ✓ Can do va] on multiple matching brackets (58ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (66ms)

    ✓ Repeat-prefixed vaf does not bleed below (59ms)

    ✓ vaf only expands to enclosing pairs (43ms)

    ✓ Can use . to repeat indent in visual (76ms)

    ✓ Can do v_x to delete to first char (62ms)

    ✓ Can do vg_x to delete to last char with no EOL (75ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (73ms)

    ✓ Can do v$x to delete to last char including EOL (94ms)

    ✓ Can do gv to reselect previous selection (68ms)

    Vim's EOL handling is weird

      ✓ delete through eol (128ms)

      ✓ join 2 lines by deleting through eol (106ms)

      ✓ d$ doesn't delete whole line (82ms)

      ✓ vd$ does delete whole line (101ms)

      ✓ Paste over selection copies the selection (92ms)

      ✓ Paste over selection copies the selection linewise (86ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (57ms)

      ✓ Can handle <down> key (48ms)

      ✓ Can handle <left> key (67ms)

      ✓ Can handle <right> key (46ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (49ms)

      ✓ Can handle 'gj' (63ms)

      - Preserves cursor position when handling 'gk'
      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (61ms)

      ✓ Can handle 'vawd' on word with trailing spaces (147ms)

      ✓ Can handle 'vawd' on word with leading spaces (40ms)

      ✓ Can handle 'vawd' on word with numeric prefix (44ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (95ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (42ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (61ms)

      ✓ Can handle 'vaWd' on word with leading spaces (49ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (115ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (52ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (47ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (61ms)

      ✓ Can handle 'vaWd' on word with leading spaces (169ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (74ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (59ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (63ms)

      ✓ Can handle 'vawd' on word with trailing spaces (51ms)

      ✓ Can handle 'vawd' on word with leading spaces (100ms)

      ✓ Can handle 'vawd' on word with numeric prefix (48ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (42ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (67ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (46ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (90ms)

      ✓ Can handle 'vaWd' on word with leading spaces (51ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (65ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (61ms)

      ✓ Can handle 'Y' in visual mode (45ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (87ms)

      ✓ Select sentence with leading spaces in visual mode (48ms)

      ✓ Select multiple sentences in visual mode (56ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (60ms)

      ✓ Select inner sentence with leading spaces in visual mode (46ms)

      ✓ Select spaces between sentences in visual mode (45ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (105ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (42ms)

      ✓ Can do vat on a matching tag (58ms)

    handles replace in visual mode

      ✓ Can do a single line replace (48ms)

      ✓ Can do a multi line replace (68ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (50ms)

      ✓ D deletes the current line (108ms)

    handles indent blocks in visual mode

      ✓ Can do vai (65ms)

      ✓ Can do vii (240ms)

      ✓ Doesn't naively select the next line (47ms)

      ✓ Searches backwards if cursor line is empty (51ms)

      ✓ Can do vaI (44ms)

    visualstar

      ✓ Works with * (59ms)

      ✓ Works with # (52ms)

    search works in visual mode

      ✓ Works with / (154ms)

      ✓ Works with ? (77ms)

      ✓ Selects correct range (119ms)

    X will delete linewise

      ✓ normal selection (49ms)

      ✓ normal selection (43ms)

    C will delete linewise

      ✓ normal selection (73ms)

      ✓ normal selection (124ms)

    R will delete linewise

      ✓ normal selection (57ms)

      ✓ normal selection (54ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (83ms)

      ✓ upward selection (94ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (108ms)

      ✓ multiline indent bottom up selection (48ms)

      ✓ repeat multiline indent top down selection (78ms)

      ✓ repeat multiline indent bottom up selection (68ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (52ms)

      ✓ multiline outdent bottom up selection (69ms)

      ✓ repeat multiline outdent top down selection (75ms)

      ✓ repeat multiline outdent bottom up selection (68ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (152ms)

    vi{ will go to end of second to last line

      ✓ select (67ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode (46ms)

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (678ms)

      ✓ gv selects the last pasted text (which is longer than original) (629ms)

      ✓ gv selects the last pasted text (multiline) (259ms)

    can handle gn

      ✓ gn selects the next match text (387ms)

      ✓ gn selects the current word at |hello (214ms)

      ✓ gn selects the current word at h|ello (251ms)

      ✓ gn selects the current word at hel|lo (376ms)

      ✓ gn selects the next word at hell|o (220ms)

      ✓ gn selects the next word at hello| (240ms)

    can prepend text with I

      3) multiline insert from bottom up selection

      4) multiline insert from top down selection

      5) skips blank lines

    can append text with A

      6) multiline append from bottom up selection

      7) multiline append from top down selection

      8) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (68ms)

      ✓ U/gU across a selection (189ms)

      ✓ U/gU across a selection (reverse) (83ms)

      ✓ u/gu on single character (76ms)

      ✓ u/gu across a selection (92ms)

      ✓ u/gu across a selection (reverse) (173ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (74ms)

    ✓ Can handle A backwards select (104ms)

    ✓ Can handle I forward select (77ms)

    ✓ Can handle I backwards select (71ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (73ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (87ms)

    ✓ Can handle c forward select (75ms)

    ✓ Can handle c backwards select (79ms)

    ✓ Can handle C (163ms)

    9) Can do a multi line replace

    ✓ Can handle 'D' (56ms)

    10) Can handle 'gj'

    11) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (158ms)

    ✓ o works in visual block mode (93ms)

    12) d deletes block

    13) x deletes block

    14) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (218ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (227ms)

    ✓ Can handle wd (140ms)

    ✓ Can handle x (120ms)

    ✓ Can handle x across a selection (132ms)

    ✓ Can do vwd in middle of sentence (244ms)

    ✓ Can do vwd in middle of sentence (218ms)

    ✓ Can do vwd multiple times (247ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (213ms)

    ✓ handles case where we delete over a newline (210ms)

    ✓ handles change operator (228ms)

    ✓ Vp updates register content (70ms)

    ✓ Vp does not append unnecessary newlines (first line) (48ms)

    ✓ Vp does not append unnecessary newlines (middle line) (56ms)

    ✓ Vp does not append unnecessary newlines (last line) (77ms)

    ✓ Exiting via <Esc> returns cursor to original column (41ms)

    ✓ Exiting via `VV` returns cursor to original column (53ms)

    Vim's EOL handling is weird

      ✓ delete through eol (144ms)

      ✓ join 2 lines by deleting through eol (118ms)

      ✓ d$ doesn't delete whole line (134ms)

      ✓ vd$ does delete whole line (118ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (103ms)

      ✓ Can handle <down> key (65ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (53ms)

      ✓ Can handle 'gj' (72ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (226ms)

      ✓ Can handle d key (79ms)

      ✓ Can handle d key (61ms)

      ✓ Can handle d key (49ms)

      ✓ can handle 'c' (51ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (55ms)

      ✓ Can do a multi visual line replace (54ms)

      ✓ Can do a multi visual line replace from the bottom up (56ms)

    search works in visual line mode

      ✓ Works with / (87ms)

      ✓ Works with ? (92ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (209ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (64ms)

      ✓ linewise visual put works also in the end of document (67ms)

      ✓ gv selects the last pasted text (which is shorter than original) (611ms)

      ✓ gv selects the last pasted text (which is longer than original) (485ms)

      ✓ gv selects the last pasted text (multiline) (215ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (66ms)

      ✓ multiline insert from top down selection (56ms)

      ✓ skips blank lines (73ms)

    can append text with A

      ✓ multiline append from bottom up selection (53ms)

      ✓ multiline append from top down selection (56ms)

      ✓ skips blank lines (57ms)

      ✓ updates desired column correctly (64ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx' (38ms)

    ✓ Can handle 'Nx' and paste (80ms)

    ✓ Can handle 'x' at end of line (83ms)

    ✓ Can handle 'Ns' (61ms)

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>' (177ms)

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (41ms)

    ✓ Can handle '<Del>' at end of line (88ms)

    ✓ Can handle 'cc' (59ms)

    ✓ Can handle 'Ncc' (118ms)

    ✓ Can handle 'yy' (42ms)

    ✓ Can handle 'D' (111ms)

    ✓ Can handle 'D' on empty lines (67ms)

    ✓ Can handle 'DD' (49ms)

    ✓ Can handle 'C' (40ms)

    ✓ Can handle 'NC' (57ms)

    ✓ Can handle 'NC' and put (132ms)

    ✓ Can handle 'r' (50ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r' (42ms)

    ✓ Can handle 'r' after 'dd' (127ms)

    ✓ Can handle 'r
' (110ms)

    ✓ Can handle '<Count>r
' (43ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (47ms)

    ✓ Can handle 'J' with empty last line (48ms)

    ✓ Can handle 'J's with multiple empty last lines (77ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete (126ms)

    ✓ Can handle 'J' in Visual Line mode (44ms)

    ✓ Can handle 'gJ' once (41ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (39ms)

    ✓ Can handle '~' (270ms)

    ✓ Can handle 'g~{motion}' (114ms)

    ✓ Can handle '<BS>' in insert mode (45ms)

    ✓ Can handle undo with P (109ms)

    15) Can handle 'ge' in multiple lines case1

    16) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (79ms)

    ✓ Can repeat '~' with dot (40ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (94ms)

    ✓ Can handle dot with I (463ms)

    ✓ Can repeat actions that require selections (68ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (82ms)

    ✓ Can repeat insert change and '<C-t>' (71ms)

    ✓ Can repeat change by `<C-a>` (99ms)

    ✓ Only one arrow key can be repeated in Insert Mode (87ms)

    ✓ Cached content change will be cleared by arrow keys (104ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end (116ms)

    ✓ nested bracket and parenthesis beginning (66ms)

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after > (76ms)

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [( (76ms)

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ]) (79ms)

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive (40ms)

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive (42ms)

    ✓ Can handle ]} (279ms)

    ✓ Can handle nested ]} (45ms)

    ✓ Can handle <number>]} (38ms)

    ✓ Can handle ]} and character under cursor exclusive (61ms)

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (45ms)

    ✓ Can handle 'gg' to first non blank char on random line (122ms)

    ✓ Can handle 'gg' to first non blank char on first line (44ms)

    ✓ 'gg' obeys startofline

    17) Retain same column when moving up/down

    ✓ Can handle <enter> (44ms)

    ✓ $ always keeps cursor on EOL (38ms)

    ✓ Can handle $ with a count (92ms)

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f' (217ms)

    ✓ Can handle 'f' twice (75ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (100ms)

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (44ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice (91ms)

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (44ms)

    ✓ Can handle 'T' and find back search (99ms)

    ✓ Can run a forward search (57ms)

    ✓ Can run a forward and find next search (44ms)

    ✓ Can run a forward and find previous search from end of word (56ms)

    ✓ Can run a reverse search (69ms)

    ✓ Can run a reverse and find next search (206ms)

    ✓ cancelled search reverts to previous search state (123ms)

    ✓ Backspace on empty search cancels (57ms)

    ✓ Search offsets: b does nothing (55ms)

    ✓ Search offsets: b2 goes 2 to the right (49ms)

    ✓ Search offsets: b+3 goes 3 to the right (70ms)

    ✓ Search offsets: e goes to the end (49ms)

    ✓ Search offsets: character offset goes across line boundaries (59ms)

    ✓ Search offsets: 2 goes 2 down (70ms)

    ✓ Search offsets: -2 goes 2 up (83ms)

    ✓ maintains column position correctly (43ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg (41ms)

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g* (40ms)

    ✓ Can handle g*n

    ✓ Can handle * (79ms)

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle # (144ms)

    ✓ Can handle # already on the word (80ms)

    ✓ Can handle ##

    ✓ * adds to search history (42ms)

    ✓ # adds to search history (91ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle + (107ms)

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent (111ms)

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_ (101ms)

    ✓ Can handle g_ with count prefix (48ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key (48ms)

    ✓ Can handle 'gk'

    ✓ Can handle 'gj' (38ms)

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      18) Preserves desired cursor position when pressing zz

      19) Preserves desired cursor position when pressing zt

      20) Preserves desired cursor position when pressing zb

      21) Preserves desired cursor position when pressing <C-e>

      22) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line

      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)

    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line
      ✓ end of last word should move to next line skips whitespace only line
    end of WORD right
      ✓ move to end of current WORD right

      ✓ move to end of next WORD right
      ✓ end of last WORD should move to next line
      ✓ end of last WORD should move to next line skips empty line
      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces

    sentence backward

      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line (145ms)

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line (85ms)

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (59ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (62ms)

        ✓ l does not wrap to next line (134ms)

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (56ms)

      insert mode

        ✓ <left> does not wrap to previous line (66ms)

        ✓ <right> does not wrap to next line (57ms)

    wrapscan enabled

      ✓ search wraps around the end of the file (77ms)

      ✓ search wraps around the start of the file (49ms)

    wrapscan disabled

      ✓ search stops at the end of the file (40ms)

      ✓ search stops at the start of the file (80ms)

  Multicursor

    ✓ can add multiple cursors below (158ms)

    ✓ can add multiple cursors above (182ms)

    ✓ dd works with multi-cursor (70ms)

    ✓ Vd works with multi-cursor (40ms)

    23) <C-v>d works with multi-cursor

    24) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor (66ms)

    25) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip
    ✓ handles decimal round trip

    ✓ handles octal trip
  comment operator

    ✓ gcc comments out current line (243ms)

    ✓ gcj comments in current and next line (69ms)

    ✓ block comment with motion (484ms)

    ✓ block comment in Visual Mode (272ms)

    ✓ comment in visual line mode (392ms)

    ✓ comment in visual block mode (239ms)

  format operator

    ✓ == formats current line (449ms)

    ✓ =$ formats entire line (324ms)

    ✓ =j formats two lines (100ms)

    ✓ 3=k formats three lines (172ms)

    26) =gg formats to top of file

    ✓ =G formats to bottom of file (174ms)

    ✓ =ip formats paragraph (112ms)

    ✓ format in visual mode (76ms)

  put operator

    ✓ basic put test (43ms)

    ✓ test yy end of line (210ms)

    ✓ test yy first line (54ms)

    ✓ test yy middle line (45ms)

    ✓ test yy with correct positon movement (62ms)

    ✓ test visual block single line yank p (110ms)

    ✓ test visual block single line yank P (122ms)

    ✓ test visual block single line delete p (67ms)

    ✓ test visual block single line delete P (70ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (47ms)

    ✓ g? in visual mode works (252ms)

    ✓ g? in visual line mode works (134ms)

    27) g? in visual block mode works

  shift operator

    ✓ basic shift left test (42ms)

    ✓ shift left goto end test (80ms)

    ✓ shift left goto line test (106ms)

    ✓ shift right goto end test (45ms)

    ✓ shift right goto line test (43ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace (118ms)

      ✓ step to Camel word (45ms)

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word (96ms)

      ✓ step to operator word

      ✓ step from inside operator word (39ms)

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word (42ms)

      ✓ step from inside word to _word

      ✓ step form _word to number (106ms)

      ✓ step from nubmer word to _word (46ms)

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (44ms)

      ✓ delete from middle of camelWord (116ms)

      ✓ delete from start of CamelWord (46ms)

      ✓ delete two words from camelWord (40ms)

      ✓ delete from start of underscore_word (61ms)

      ✓ delete from middle of underscore_word (48ms)

      ✓ delete two words from camel_word (45ms)

    handles di<leader>w

      ✓ delete from start of camelWord (48ms)

      ✓ delete from middle of camelWord (126ms)

      ✓ delete from start of CamelWord (42ms)

      ✓ delete two words from camelWord (108ms)

      ✓ delete from start of underscore_word (155ms)

      ✓ delete from middle of underscore_word (64ms)

      ✓ delete two words from camel_word (38ms)

    handles <leader>b

      ✓ back from middle of word (46ms)

      ✓ back over whitespace to camelWord

      ✓ back twice over operator (67ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (75ms)

      ✓ twice to end of word over operator (44ms)

  easymotion plugin

    ✓ Can handle s move (174ms)

    ✓ Can handle 2s move (64ms)

    ✓ Can handle f move (115ms)

    ✓ Can handle 2f move (52ms)

    ✓ Can handle F move (45ms)

    ✓ Can handle 2F move (123ms)

    ✓ Can handle t move (67ms)

    ✓ Can handle bd-t move (61ms)

    ✓ Can handle 2t move (84ms)

    ✓ Can handle bd-t2 move (125ms)

    ✓ Can handle T move (93ms)

    ✓ Can handle 2T move (139ms)

    ✓ Can handle w move (56ms)

    ✓ Can handle bd-w move (49ms)

    ✓ Can handle b move

    ✓ Can handle e move (50ms)

    ✓ Can handle bd-e move (46ms)

    ✓ Can handle ge move (109ms)

    ✓ Can handle n-char move (84ms)

    ✓ Can handle j move (63ms)

    ✓ Can handle k move (58ms)

    ✓ Can handle bd-jk move (1) (57ms)

    ✓ Can handle bd-jk move (2) (58ms)

    ✓ Can handle lineforward move (1) (170ms)

    ✓ Can handle lineforward move (2) (40ms)

    28) Can handle linebackward move (1)

    29) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (46ms)

    ✓ Can handle searching for carat (^) (97ms)

    ✓ Can handle searching for dot (.) (49ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (75ms)

    ✓ Replaces within inner Word (52ms)

    ✓ Replaces within '' (118ms)

    ✓ Replaces within '' including spaces (82ms)

    ✓ Replaces within () (69ms)

    ✓ Replaces within () including spaces (113ms)

    ✓ Replaces within a paragraph (75ms)

    ✓ Replaces using a specified register (93ms)

    ✓ Replaces within {} over multiple lines (119ms)

    ✓ Replaces a multiline register within {} over multiple lines (94ms)

    ✓ Replaces a multiline register within {} over multiple lines (53ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (188ms)

    ✓ grr replaces the entire line with the register (63ms)

    ✓ grr can replace multiple lines (48ms)

    ✓ Replaces in visual mode (71ms)

    ✓ Replaces in visual mode using a specified register (179ms)

    ✓ Replaces in visual line mode (60ms)

    ✓ grj is linewise (80ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion (44ms)

    ✓ Can handle <operator>Z motion (46ms)

    ✓ Can handle s; motion (64ms)

    ✓ Can handle s, motion (98ms)

    ✓ Can handle S; motion (61ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (44ms)

    ✓ Can handle single letter <operator>Z motion (59ms)

    ✓ Can handle single letter s; motion (93ms)

    ✓ Can handle single letter s, motion (70ms)

    ✓ Can handle single letter S; motion (74ms)

    ✓ Can handle single letter S, motion (266ms)

    ✓ Can handle multiline single char <number>s motion (132ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (72ms)

    ✓ sneakReplacesF backward (42ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (202ms)

    ✓ 'ysiw(' surrounds word with space (112ms)

    ✓ 'ysw)' surrounds word without space (122ms)

    ✓ 'ysw(' surrounds word with space (103ms)

    ✓ 'ysaw)' surrounds word without space (116ms)

    ✓ 'ysaw(' surrounds word with space (115ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (99ms)

    ✓ 'ysiw<' surrounds word with tags (54ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (252ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (269ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (85ms)

    ✓ change surround (75ms)

    ✓ change surround with two pairs of quotes (107ms)

    ✓ change surround with two pairs of parens (143ms)

    ✓ change surround with alias (289ms)

    ✓ change surround to tags (114ms)

    ✓ delete surround (105ms)

    ✓ delete surround with quotes (47ms)

    ✓ delete surround with nested of quotes (94ms)

    ✓ delete surround with inconsistent quotes (47ms)

    ✓ delete surround with mixed quotes (95ms)

    ✓ delete surround with empty quotes cursor at start (688ms)

    ✓ delete surround with empty quotes cursor at end (79ms)

    ✓ don't delete surround if cursor is after closing match (41ms)

    ✓ delete surround if cursor is before opening match (46ms)

    ✓ delete surround with two pairs of parens (76ms)

    ✓ delete surround with alias (395ms)

    ✓ delete surround with tags (157ms)

    ✓ change surround brackets at end of line (94ms)

    ✓ changing brackets with surround works again (105ms)

    ✓ change surround with tags that contain an attribute and preserve them (83ms)

    ✓ change surround with tags that contain an attribute and remove them (133ms)

  register

    ✓ Can copy to a register (281ms)

    ✓ Can use two registers together (92ms)

    ✓ Can use black hole register (103ms)

    ✓ System clipboard works with chinese characters (52ms)

    ✓ Yank stores text in Register '0' (349ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (426ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (210ms)

    ✓ Register '1'-'9' stores delete content (341ms)

    ✓ "A appends linewise text to "a (305ms)

    ✓ "A appends character wise text to "a (485ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (282ms)

    ✓ Small deletion using Del is stored in small delete register (666ms)

    ✓ Small deletion using X is stored in small delete register (258ms)

    ✓ Search register (/) is set by forward search (421ms)

    ✓ Search register (/) is set by backward search (467ms)

    ✓ Search register (/) is set by star search (454ms)

    ✓ Command register (:) is set by command line (134ms)

    ✓ Read-only registers cannot be written to (254ms)

    clipboard

      ✓ Can access '*' (clipboard) register (58ms)

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (137ms)

    ✓ Can repeat N times reversed t<character> (46ms)

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward (56ms)

      ✓ move one sentence backward (45ms)

      ✓ move [count] sentences backward (80ms)

      ✓ move one sentence backward single line - middle (42ms)

      ✓ move one sentence backward no space (79ms)

      ✓ move one sentence backward no space - middle (115ms)

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period (38ms)

      ✓ move one sentence backward - multiline - previous line (65ms)

      ✓ move one sentence backward - multiline - previous line - period (408ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1316 passing (4m)

  4 pending
  29 failing
  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Wrong number of cursors
      + expected - actual

      -1
      +2
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  3) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  4) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  5) Mode Visual
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  6) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  7) Mode Visual
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  8) Mode Visual
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  9) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  10) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  11) Mode Visual Block
       Properly add to end of lines j then $:

      Wrong number of cursors
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  12) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)

  13) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)

  14) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)

  15) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)

  16) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  17) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  18) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)

  19) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  20) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  21) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  22) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  23) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  24) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  25) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  26) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  27) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  28) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  29) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-8.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T06:31:40.130Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative

    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (56ms)

    ✓ command <C-w> can remove word in search mode (39ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (70ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor (42ms)

    ✓ <C-u> deletes from cursor to first character (47ms)

    ✓ <C-b> puts cursor at start of command line (43ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (41ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (74ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (94ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (127ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (115ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search (50ms)

  HistoryFile

    ✓ add command (40ms)

    ✓ add empty command (40ms)

    ✓ add command over configuration.history (45ms)

    ✓ add command that exists in history (45ms)

    ✓ file system (40ms)

    ✓ change configuration.history (67ms)

  command-line lexer
    ✓ can lex empty string
    ✓ can lex comma

    ✓ can lex percent
    ✓ can lex dollar

    ✓ can lex dot
    ✓ can lex one number
    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1465ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar
  command line scanner
    ✓ ctor
    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (541ms)

    ✓ :smile editor contains smile text (538ms)

  Basic sort

    ✓ Sort whole file, asc (118ms)

    ✓ Sort whole file, asc, ignoreCase (93ms)

    ✓ Sort whole file, dsc (109ms)

    ✓ Sort whole file, dsc, ignoreCase (113ms)

    ✓ Sort range, asc (179ms)

    ✓ Sort range, asc, ignoreCase (156ms)

    ✓ Sort range, dsc (151ms)

    ✓ Sort range, dsc, ignoreCase (125ms)

    ✓ Sort whole file, asc, unique (157ms)

  Horizontal split

    ✓ :sp creates a second split (114ms)

    ✓ :split creates a second split (62ms)

    ✓ :new creates a second split (275ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name
      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (53ms)

    ✓ Replace with `g` flag (69ms)

    ✓ Replace with flags AND count (127ms)

    ✓ Replace with `c` flag (55ms)

    ✓ Replace with `gc` flag (83ms)

    ✓ Replace across all lines (80ms)

    ✓ Replace on specific single line (128ms)

    ✓ Replace on current line using dot (92ms)

    ✓ Replace single relative line using dot and plus (91ms)

    ✓ Replace across specific line range (126ms)

    ✓ Replace across relative line range using dot, plus, and minus (211ms)

    ✓ Replace across relative line range using numLines+colon shorthand (132ms)

    ✓ Repeat replacement across relative line range (150ms)

    ✓ Replace with range AND count but no flags (84ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (117ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (82ms)

    ✓ Undocumented: trailing operators use 1 as RHS (94ms)

    ✓ Replace specific single equal lines (108ms)

    ✓ Replace current line with no active selection (124ms)

    ✓ Replace text in selection (162ms)

    ✓ Substitute support marks (127ms)
    Effects of gdefault=true

      ✓ Replace all matches in the line (73ms)

      ✓ Replace with `g` flag inverts global flag (71ms)

      ✓ Replace with `c` flag inverts global flag (89ms)

      ✓ Replace multiple lines (107ms)

      ✓ Replace across specific lines (111ms)

      ✓ Replace current line with no active selection (105ms)

      ✓ Replace text in selection (129ms)

      ✓ Substitute support marks (196ms)

      ✓ Substitute with escaped delimiter (64ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (256ms)

      ✓ Substitute with previous search using # (241ms)

      ✓ Substitute with previous search using / (294ms)

      ✓ Substitute with parameters should update search state (132ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (353ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (169ms)

      ✓ Substitute repeat previous should accept flags (72ms)

      ✓ Substitute with empty search string should use last searched pattern (266ms)

      ✓ Ampersand (&) should repeat the last substitution (194ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (74ms)

    ✓ tabe with current file path does nothing (57ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (49ms)

    ✓ command line file navigate tab completion (65ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (92ms)

    ✓ command line file tab completion with space in file path (160ms)

  Vertical split

    ✓ :vs creates a second split (78ms)

    ✓ :vsp creates a second split (75ms)

    ✓ :vsplit creates a second split (63ms)

    ✓ :vnew creates a second split (331ms)

    ✓ :vne creates a second split (181ms)

  Basic write-quit

    ✓ Run write and quit (90ms)
  Provide line completions
    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (57ms)

      ✓ Can complete lines in file with different indentation (46ms)

      ✓ Returns no completions for unmatched line (73ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (75ms)

    ✓ getMatchingRemap (58ms)

    ✓ jj -> <Esc> through modehandler (101ms)

    ✓ 0 -> :wq through modehandler (99ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (102ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (80ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (90ms)

    ✓ d -> black hole register delete in normal mode through modehandler (144ms)

    ✓ d -> black hole register delete in normal mode through modehandler (128ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (166ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled
  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

[main 2020-02-26T06:32:10.133Z] update#setState checking for updates

[main 2020-02-26T06:32:10.200Z] update#setState idle

        ✓ Can track jumps for keys: Ggg (47ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggG (208ms)

        ✓ Can track jumps for keys: GggGgg (48ms)

        ✓ Can track jumps for keys: /b<CR>n (51ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (88ms)

        ✓ Can track jumps for keys: j%% (49ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (150ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (48ms)

        ✓ Can track jumps for keys: j%%<C-o>% (64ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (81ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (64ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (95ms)

        ✓ Can enter number to jump back multiple times (84ms)

        ✓ Can track one-line `` jumps (80ms)

        ✓ Can track one-line double `` jumps (85ms)

        ✓ Can track one-line '' jumps (90ms)

        ✓ Can track one-line double '' jumps (92ms)

        ✓ Can handle '' jumps with no previous jump (44ms)

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (78ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (81ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (114ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (97ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (103ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (146ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (171ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (185ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (161ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (63ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (148ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (55ms)

  Record and execute a macro

    ✓ Can record and execute (182ms)

    ✓ Can repeat last invoked macro (268ms)

    ✓ Can play back with count (462ms)

    ✓ Can play back with count, abort when a motion fails (463ms)

    ✓ Repeat change on contiguous lines (182ms)

    ✓ Append command to a macro (176ms)

    ✓ Can record Ctrl Keys and repeat (260ms)

    ✓ Can execute macros with dot commands properly (133ms)

    ✓ : (command) register can be used as a macro (107ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (92ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (49ms)

    ✓ <C-c> can exit insert (60ms)

    ✓ <Esc> can exit insert (49ms)

    ✓ Stay in insert when entering characters (131ms)

    ✓ Can handle 'O' (93ms)

    ✓ 'i' puts you in insert mode before the cursor (45ms)

    ✓ 'I' puts you in insert mode at start of line (74ms)

    ✓ 'a' puts you in insert mode after the cursor (43ms)

    ✓ 'A' appends to end of line (39ms)

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (48ms)

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (91ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines (47ms)

    ✓ Backspace works on end of whitespace only lines (44ms)

    ✓ Backspace works at beginning of file (45ms)

    ✓ Delete works in insert mode (46ms)

    ✓ Delete works at line end (39ms)

    ✓ Delete works at end of file (49ms)

    ✓ Delete works with repeat (183ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (144ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (57ms)

    ✓ Can perform insert command prefixed with count (57ms)

    ✓ Can perform append command prefixed with count (67ms)

    ✓ Can perform insert at start of line command prefixed with count (41ms)

    ✓ Can perform append to end of line command prefixed with count (66ms)

    ✓ Can perform change char (s) command prefixed with count (203ms)

    ✓ Can perform command prefixed with count with <C-[> (79ms)

    ✓ Can handle 'o' with count (131ms)

    ✓ Can handle 'O' with count (113ms)

    ✓ Can handle backspace at beginning of line with all spaces (48ms)

    ✓ Can handle digraph insert (119ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw (46ms)

    ✓ Can handle dw

    ✓ Can handle dw (43ms)

    ✓ Can handle dw across lines (1) (41ms)

    ✓ Can handle dw across lines (2) (51ms)

    ✓ Can handle dd last line (50ms)

    ✓ Can handle dd single line (50ms)

    ✓ Can handle dd

    ✓ Can handle 3dd (49ms)

    ✓ Can handle 3dd off end of document (58ms)

    ✓ Can handle d2d (68ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (59ms)

    ✓ Can handle 'de' (43ms)

    ✓ Can handle 'de' then 'de' again (79ms)

    ✓ Can handle 'db' (49ms)

    ✓ Can handle 'db then 'db' again (61ms)

    ✓ Can handle 'dl' at end of line (53ms)

    ✓ Can handle 'dF' (62ms)

    ✓ Can handle 'dT' (57ms)

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj' (45ms)

    ✓ Can handle 'dk' (39ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (43ms)

    ✓ Can handle 'd]}' without deleting closing bracket (39ms)

    ✓ Can handle 'cw' (115ms)

    ✓ Can handle 'cw' without deleting following white spaces (47ms)

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (53ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (38ms)

    ✓ Can handle 'c]}' without deleting closing bracket (61ms)

    ✓ Can handle 's' (71ms)

    ✓ Can handle 'yiw' with correct cursor ending position (62ms)

    ✓ Can handle 'ciw' (161ms)

    ✓ Can handle 'ciw' on blanks (102ms)

    ✓ Can handle 'caw' (85ms)

    ✓ Can handle 'caw' on first letter (74ms)

    ✓ Can handle 'caw' on blanks (70ms)

    ✓ Can handle 'caw' on blanks (92ms)

    ✓ Can handle 'ci(' on first parentheses (47ms)

    ✓ Can handle 'ci(' with nested parentheses (43ms)

    ✓ Can handle 'ci(' backwards through nested parens (62ms)

    ✓ Can handle 'cib' on first parentheses (73ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (78ms)

    ✓ Can handle count prefixed 'ci)' (45ms)

    ✓ Can handle count prefixed 'ca)' (114ms)

    ✓ Can handle 'ca(' spanning multiple lines (60ms)

    ✓ Can handle 'cab' spanning multiple lines (53ms)

    ✓ Can handle 'ci{' spanning multiple lines (194ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (45ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (40ms)

    ✓ Can handle 'ci(' on the closing bracket (47ms)

    ✓ Can handle 'ciB' spanning multiple lines (52ms)

    ✓ will fail when ca( with no () (38ms)

    ✓ will fail when ca{ with no {} (47ms)

    ✓ will fail when caB with no {} (41ms)

    ✓ Can handle 'ci[' spanning multiple lines (55ms)

    ✓ Can handle 'ci]' on first bracket (48ms)

    ✓ Can handle 'ca[' on first bracket (43ms)

    ✓ Can handle 'ca]' on first bracket (41ms)

    ✓ Can handle 'ci'' on first quote (47ms)

    ✓ Can handle 'ci'' inside quoted string (48ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead (62ms)

    ✓ Can handle 'ci"' on opening quote (56ms)

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word (41ms)

    ✓ Can handle 'ca"' starting on the opening quote (46ms)

    ✓ Can handle 'ci"' with escaped quotes (44ms)

    ✓ Can handle 'ci"' with a single escaped quote (42ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (79ms)

    ✓ Can handle 'ci"' with an escaped backslash (41ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (57ms)

    ✓ Can handle 'ca"' starting on the closing quote (43ms)

    ✓ Can handle 'ci"' with complex escape sequences (45ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (51ms)

    ✓ will fail when ca" ahead of quoted string (63ms)

    ✓ Can handle 'ca`' inside word (45ms)

    ✓ can handle cj (82ms)

    ✓ can handle ck (253ms)

    ✓ can handle c2j (90ms)

    ✓ can handle c2k (78ms)

    ✓ can handle cj on last line (73ms)

    ✓ can handle ck on first line (86ms)

    ✓ can handle c2j on last line (124ms)

    ✓ can handle c2k on first line (124ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces (51ms)

    ✓ Can handle 'daw' on word with numeric prefix (53ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (58ms)

    ✓ Can handle 'daw' on end of word (79ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (43ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (47ms)

    ✓ Can handle 'daw' on word at beginning of file (47ms)

    ✓ Can handle 'daw' on word at beginning of line (45ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (52ms)

    ✓ Can handle 'daw' around word at end of line (61ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace (58ms)

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces (49ms)

    ✓ Can handle 'daW' on word with numeric prefix (47ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (40ms)

    ✓ Can handle 'daW' on beginning of word (123ms)

    ✓ Can handle 'daW' on end of one line (46ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (45ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (55ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (163ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (46ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (46ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (42ms)

    ✓ Can handle 'diw' on word with cursor inside spaces (205ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (44ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines (51ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (59ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (62ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (39ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines (51ms)

    ✓ Can handle 'diW' on beginning of word (45ms)

    ✓ Can handle d} at beginning of line (43ms)

    ✓ Can handle y} at beginning of line (42ms)

    ✓ Can handle d} when not at beginning of line (46ms)

    ✓ Can handle } with operator and count, at beginning of line (66ms)

    ✓ Can handle } with operator and count, and not at beginning of line (41ms)

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces (55ms)

    ✓ Select inner sentence with leading spaces (80ms)

    ✓ Select spaces between sentences (74ms)

    ✓ Can handle 'df' (43ms)

    ✓ Can handle 'dt' (45ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (62ms)

    ✓ A should update desiredColumn (153ms)

    ✓ I should updated desiredColumn (47ms)

    ✓ leaving insert mode should update desired column when entered with a (86ms)

    ✓ leaving insert mode should update desired column when entered with i (115ms)

    ✓ Can handle 'yy' without changing cursor position (39ms)

    ✓ Can handle 'P' after 'yy' (60ms)

    ✓ Can handle 'p' after 'yy' (46ms)

    ✓ Can handle 'P' after 'Nyy' (51ms)

    ✓ Can handle 'p' after 'Nyy' (49ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (60ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (46ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (49ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (52ms)

    ✓ Can handle 'gP' after 'yy' (47ms)

    ✓ Can handle 'gP' after 'Nyy' (45ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (63ms)

    ✓ Can handle ']p' after yy (50ms)

    ✓ Can handle ']p' after 'Nyy' (86ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (47ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (83ms)

    ✓ Can handle '[p' after yy (48ms)

    ✓ Can handle '[p' after 'Nyy' (57ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (62ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (76ms)

    ✓ Can handle 'p' after y'a (65ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (52ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (59ms)

    ✓ Can handle pasting in visual mode over selection (303ms)

    ✓ Can repeat w

    ✓ Can repeat p (61ms)

    ✓ I works correctly (87ms)

    ✓ gI works correctly (71ms)

    ✓ gi works correctly (101ms)

    ✓ `. works correctly (62ms)

    ✓ '. works correctly (70ms)

    ✓ g; works correctly (92ms)

    ✓ g, works correctly (156ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly (62ms)

    ✓ gq handles spaces before single line comments correctly (49ms)

    ✓ gq handles tabs before single line comments correctly (80ms)

    ✓ Can handle space (39ms)

    ✓ Can handle space (71ms)

    ✓ Undo 1 (125ms)

    ✓ Undo 2 (106ms)

    ✓ Undo cursor (178ms)

    ✓ Undo cursor 2 (190ms)

    ✓ Undo cursor 3 (126ms)

    ✓ Undo with movement first (108ms)

    ✓ Can handle 'U' (55ms)

    ✓ Can handle 'U' for multiple changes (100ms)

    ✓ Can handle 'U' for new line below (82ms)

    ✓ Can handle 'U' for new line above (106ms)

    ✓ Can handle 'U' for consecutive changes only (165ms)

    ✓ Can handle 'u' to undo 'U' (65ms)

    ✓ Can handle 'U' to undo 'U' (121ms)

    ✓ Can handle 'u' after :s/abc/def (138ms)

    ✓ Redo (150ms)

    ✓ Redo (119ms)

    ✓ Redo (176ms)

    ✓ Can handle u

    ✓ Can handle guw (47ms)

    ✓ Can handle gUw

    ✓ Can handle u over line breaks (90ms)

    ✓ can handle s in visual mode (66ms)

    ✓ can handle p with selection (70ms)

    ✓ can handle P with selection (74ms)

    ✓ can handle p in visual to end of line (133ms)

    ✓ can repeat backspace twice (102ms)

    ✓ can delete linewise with d2G (47ms)

    ✓ can delete with + motion and count (47ms)

    ✓ can delete with - motion and count (45ms)

    ✓ can dE correctly (64ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word (50ms)

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal (51ms)

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word (159ms)

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (85ms)

    ✓ can ctrl-x on a negative number with word before and after  (42ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S (44ms)

    ✓ / does not affect mark (130ms)

    ✓ / can search with regex (64ms)

    ✓ / can search with newline (63ms)

    ✓ / can search through multiple newlines (87ms)

    ✓ / matches ^ per line (42ms)

    ✓ / matches $ per line (77ms)

    ✓ Can search for forward slash (44ms)

    ✓ Can search backward for question mark (47ms)

    ✓ /\c forces case insensitive search (50ms)

    ✓ /\C forces case sensitive search (53ms)

    ✓ <BS> deletes the last character in search in progress mode (38ms)

    ✓ <S-BS> deletes the last character in search in progress mode (63ms)

    ✓ <C-h> deletes the last character in search in progress mode (53ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (38ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (41ms)

    ✓ Can do cit on a tag with an attribute tag (59ms)

    ✓ Can do cat on a matching tag (48ms)

    ✓ Can do cit on a multiline tag (49ms)

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags (47ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (41ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside (68ms)

    ✓ can do cit with self closing tags (174ms)

    ✓ Respects indentation with cc (58ms)

    ✓ Resets cursor to indent end with cc (56ms)

    ✓ can handle 'cc' on empty line (46ms)

    ✓ cc copies linewise (61ms)

    ✓ Indent current line with correct Vim Mode (50ms)

    ✓ Can handle <Esc> and do nothing (56ms)

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words (43ms)

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    2) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (42ms)

    ✓ Can do cii (43ms)

    ✓ Can do caI (59ms)

    ✓ Can do dai (84ms)

    ✓ Can do dii (41ms)

    ✓ Can do daI (47ms)

    ✓ `] go to the end of the previously operated or put text (123ms)

    ✓ '] go to the end of the previously operated or put text (73ms)

    ✓ `[ go to the start of the previously operated or put text (99ms)

    ✓ '[ go to the start of the previously operated or put text (122ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (81ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end (45ms)

    ✓ can handle <C-u> when first line is visible and starting column is in the middle (59ms)

    can handle gn

      ✓ gn selects the next match text (244ms)

      ✓ gn selects the current word at |hello (306ms)

      ✓ gn selects the current word at h|ello (262ms)

      ✓ gn selects the current word at hel|lo (333ms)

      ✓ gn selects the current word at hell|o (237ms)

      ✓ gn selects the next word at hello| (224ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (62ms)

      ✓ dgn deletes the current word when cursor is at |hello (69ms)

      ✓ dgn deletes the current word when cursor is at h|ello (96ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (90ms)

      ✓ dgn deletes the current word when cursor is at hell|o (118ms)

      ✓ dgn deletes the next word when cursor is at hello| (86ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (74ms)

      ✓ cgn deletes the current word when cursor is at |hello (258ms)

      ✓ cgn deletes the current word when cursor is at h|ello (80ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (99ms)

      ✓ cgn deletes the current word when cursor is at hell|o (68ms)

      ✓ cgn deletes the next word when cursor is at hello| (88ms)

    can handle gN

      ✓ gN selects the previous match text (315ms)

      ✓ gN selects the current word at hell|o (243ms)

      ✓ gN selects the current word at hel|lo (249ms)

      ✓ gN selects the current word at h|ello (289ms)

      ✓ gN selects the current word at |hello (412ms)

      ✓ gN selects the previous word at | hello (327ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (86ms)

      ✓ dgN deletes the current word when cursor is at hell|o (115ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (149ms)

      ✓ dgN deletes the current word when cursor is at h|ello (71ms)

      ✓ dgN deletes the current word when cursor is at |hello (123ms)

      ✓ dgN deletes the previous word when cursor is at | hello (88ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (103ms)

      ✓ cgN deletes the current word when cursor is at hell|o (85ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (115ms)

      ✓ cgN deletes the current word when cursor is at h|ello (90ms)

      ✓ cgN deletes the current word when cursor is at |hello (78ms)

      ✓ cgN deletes the previous word when cursor is at | hello (95ms)

    marks

      ✓ capital marks can change the editors active document (168ms)

      ✓ can jump to lowercase mark (40ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (40ms)

    ✓ Can handle R past current line (63ms)

    ✓ Can handle R and exit Replace Mode (85ms)

    ✓ Can handle R across lines (81ms)

    ✓ Can handle R across lines and exit Replace Mode (100ms)

    ✓ Can handle R with {count} (108ms)

    ✓ Can handle backspace (68ms)

    ✓ Can handle backspace (101ms)

    ✓ Can handle backspace across lines (126ms)

    ✓ Can handle arrows (60ms)

    ✓ Can handle . (96ms)

    ✓ Can handle . across lines (140ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (204ms)

    ✓ Can handle wd (114ms)

    ✓ Can handle x (101ms)

    ✓ Can handle x across a selection (167ms)

    ✓ Can do vwd in middle of sentence (178ms)

    ✓ Can do vwd in middle of sentence (135ms)

    ✓ Can do vwd multiple times (192ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (149ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (51ms)

    ✓ handles case where we delete over a newline (184ms)

    ✓ handles change operator (122ms)

    ✓ Can do vat on multiple matching tags (66ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (69ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (47ms)

    ✓ Repeat-prefixed vat does not bleed below (53ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (47ms)

    ✓ Can do vi) on a matching parenthesis (47ms)

    ✓ Can do vi) on multiple matching parens (45ms)

    ✓ Can do va) on a matching parenthesis (525ms)

    ✓ Can do va) on multiple matching parens (64ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (47ms)

    ✓ Repeat-prefixed va) does not bleed below (50ms)

    ✓ Can do va} on a matching bracket as first character (49ms)

    ✓ Can do va} on multiple matching brackets (77ms)

    ✓ Can do vi( on a matching bracket near first character (52ms)

    ✓ Can do vi{ on outer pair of nested braces (97ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (42ms)

    ✓ Can do va] on multiple matching brackets (58ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (66ms)

    ✓ Repeat-prefixed vaf does not bleed below (59ms)

    ✓ vaf only expands to enclosing pairs (43ms)

    ✓ Can use . to repeat indent in visual (76ms)

    ✓ Can do v_x to delete to first char (62ms)

    ✓ Can do vg_x to delete to last char with no EOL (75ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (73ms)

    ✓ Can do v$x to delete to last char including EOL (94ms)

    ✓ Can do gv to reselect previous selection (68ms)

    Vim's EOL handling is weird

      ✓ delete through eol (128ms)

      ✓ join 2 lines by deleting through eol (106ms)

      ✓ d$ doesn't delete whole line (82ms)

      ✓ vd$ does delete whole line (101ms)

      ✓ Paste over selection copies the selection (92ms)

      ✓ Paste over selection copies the selection linewise (86ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (57ms)

      ✓ Can handle <down> key (48ms)

      ✓ Can handle <left> key (67ms)

      ✓ Can handle <right> key (46ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (49ms)

      ✓ Can handle 'gj' (63ms)

      - Preserves cursor position when handling 'gk'
      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (61ms)

      ✓ Can handle 'vawd' on word with trailing spaces (147ms)

      ✓ Can handle 'vawd' on word with leading spaces (40ms)

      ✓ Can handle 'vawd' on word with numeric prefix (44ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (95ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (42ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (61ms)

      ✓ Can handle 'vaWd' on word with leading spaces (49ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (115ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (52ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (47ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (61ms)

      ✓ Can handle 'vaWd' on word with leading spaces (169ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (74ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (59ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (63ms)

      ✓ Can handle 'vawd' on word with trailing spaces (51ms)

      ✓ Can handle 'vawd' on word with leading spaces (100ms)

      ✓ Can handle 'vawd' on word with numeric prefix (48ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (42ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (67ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (46ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (90ms)

      ✓ Can handle 'vaWd' on word with leading spaces (51ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (65ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (61ms)

      ✓ Can handle 'Y' in visual mode (45ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (87ms)

      ✓ Select sentence with leading spaces in visual mode (48ms)

      ✓ Select multiple sentences in visual mode (56ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (60ms)

      ✓ Select inner sentence with leading spaces in visual mode (46ms)

      ✓ Select spaces between sentences in visual mode (45ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (105ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (42ms)

      ✓ Can do vat on a matching tag (58ms)

    handles replace in visual mode

      ✓ Can do a single line replace (48ms)

      ✓ Can do a multi line replace (68ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (50ms)

      ✓ D deletes the current line (108ms)

    handles indent blocks in visual mode

      ✓ Can do vai (65ms)

      ✓ Can do vii (240ms)

      ✓ Doesn't naively select the next line (47ms)

      ✓ Searches backwards if cursor line is empty (51ms)

      ✓ Can do vaI (44ms)

    visualstar

      ✓ Works with * (59ms)

      ✓ Works with # (52ms)

    search works in visual mode

      ✓ Works with / (154ms)

      ✓ Works with ? (77ms)

      ✓ Selects correct range (119ms)

    X will delete linewise

      ✓ normal selection (49ms)

      ✓ normal selection (43ms)

    C will delete linewise

      ✓ normal selection (73ms)

      ✓ normal selection (124ms)

    R will delete linewise

      ✓ normal selection (57ms)

      ✓ normal selection (54ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (83ms)

      ✓ upward selection (94ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (108ms)

      ✓ multiline indent bottom up selection (48ms)

      ✓ repeat multiline indent top down selection (78ms)

      ✓ repeat multiline indent bottom up selection (68ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (52ms)

      ✓ multiline outdent bottom up selection (69ms)

      ✓ repeat multiline outdent top down selection (75ms)

      ✓ repeat multiline outdent bottom up selection (68ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (152ms)

    vi{ will go to end of second to last line

      ✓ select (67ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode (46ms)

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (678ms)

      ✓ gv selects the last pasted text (which is longer than original) (629ms)

      ✓ gv selects the last pasted text (multiline) (259ms)

    can handle gn

      ✓ gn selects the next match text (387ms)

      ✓ gn selects the current word at |hello (214ms)

      ✓ gn selects the current word at h|ello (251ms)

      ✓ gn selects the current word at hel|lo (376ms)

      ✓ gn selects the next word at hell|o (220ms)

      ✓ gn selects the next word at hello| (240ms)

    can prepend text with I

      3) multiline insert from bottom up selection

      4) multiline insert from top down selection

      5) skips blank lines

    can append text with A

      6) multiline append from bottom up selection

      7) multiline append from top down selection

      8) skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (68ms)

      ✓ U/gU across a selection (189ms)

      ✓ U/gU across a selection (reverse) (83ms)

      ✓ u/gu on single character (76ms)

      ✓ u/gu across a selection (92ms)

      ✓ u/gu across a selection (reverse) (173ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (74ms)

    ✓ Can handle A backwards select (104ms)

    ✓ Can handle I forward select (77ms)

    ✓ Can handle I backwards select (71ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (73ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (87ms)

    ✓ Can handle c forward select (75ms)

    ✓ Can handle c backwards select (79ms)

    ✓ Can handle C (163ms)

    9) Can do a multi line replace

    ✓ Can handle 'D' (56ms)

    10) Can handle 'gj'

    11) Properly add to end of lines j then $

    ✓ Properly add to end of lines $ then j (158ms)

    ✓ o works in visual block mode (93ms)

    12) d deletes block

    13) x deletes block

    14) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (218ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (227ms)

    ✓ Can handle wd (140ms)

    ✓ Can handle x (120ms)

    ✓ Can handle x across a selection (132ms)

    ✓ Can do vwd in middle of sentence (244ms)

    ✓ Can do vwd in middle of sentence (218ms)

    ✓ Can do vwd multiple times (247ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (213ms)

    ✓ handles case where we delete over a newline (210ms)

    ✓ handles change operator (228ms)

    ✓ Vp updates register content (70ms)

    ✓ Vp does not append unnecessary newlines (first line) (48ms)

    ✓ Vp does not append unnecessary newlines (middle line) (56ms)

    ✓ Vp does not append unnecessary newlines (last line) (77ms)

    ✓ Exiting via <Esc> returns cursor to original column (41ms)

    ✓ Exiting via `VV` returns cursor to original column (53ms)

    Vim's EOL handling is weird

      ✓ delete through eol (144ms)

      ✓ join 2 lines by deleting through eol (118ms)

      ✓ d$ doesn't delete whole line (134ms)

      ✓ vd$ does delete whole line (118ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (103ms)

      ✓ Can handle <down> key (65ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (53ms)

      ✓ Can handle 'gj' (72ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (226ms)

      ✓ Can handle d key (79ms)

      ✓ Can handle d key (61ms)

      ✓ Can handle d key (49ms)

      ✓ can handle 'c' (51ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (55ms)

      ✓ Can do a multi visual line replace (54ms)

      ✓ Can do a multi visual line replace from the bottom up (56ms)

    search works in visual line mode

      ✓ Works with / (87ms)

      ✓ Works with ? (92ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (209ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (64ms)

      ✓ linewise visual put works also in the end of document (67ms)

      ✓ gv selects the last pasted text (which is shorter than original) (611ms)

      ✓ gv selects the last pasted text (which is longer than original) (485ms)

      ✓ gv selects the last pasted text (multiline) (215ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (66ms)

      ✓ multiline insert from top down selection (56ms)

      ✓ skips blank lines (73ms)

    can append text with A

      ✓ multiline append from bottom up selection (53ms)

      ✓ multiline append from top down selection (56ms)

      ✓ skips blank lines (57ms)

      ✓ updates desired column correctly (64ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx' (38ms)

    ✓ Can handle 'Nx' and paste (80ms)

    ✓ Can handle 'x' at end of line (83ms)

    ✓ Can handle 'Ns' (61ms)

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>' (177ms)

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (41ms)

    ✓ Can handle '<Del>' at end of line (88ms)

    ✓ Can handle 'cc' (59ms)

    ✓ Can handle 'Ncc' (118ms)

    ✓ Can handle 'yy' (42ms)

    ✓ Can handle 'D' (111ms)

    ✓ Can handle 'D' on empty lines (67ms)

    ✓ Can handle 'DD' (49ms)

    ✓ Can handle 'C' (40ms)

    ✓ Can handle 'NC' (57ms)

    ✓ Can handle 'NC' and put (132ms)

    ✓ Can handle 'r' (50ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r' (42ms)

    ✓ Can handle 'r' after 'dd' (127ms)

    ✓ Can handle 'r
' (110ms)

    ✓ Can handle '<Count>r
' (43ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (47ms)

    ✓ Can handle 'J' with empty last line (48ms)

    ✓ Can handle 'J's with multiple empty last lines (77ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete (126ms)

    ✓ Can handle 'J' in Visual Line mode (44ms)

    ✓ Can handle 'gJ' once (41ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (39ms)

    ✓ Can handle '~' (270ms)

    ✓ Can handle 'g~{motion}' (114ms)

    ✓ Can handle '<BS>' in insert mode (45ms)

    ✓ Can handle undo with P (109ms)

    15) Can handle 'ge' in multiple lines case1

    16) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (79ms)

    ✓ Can repeat '~' with dot (40ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (94ms)

    ✓ Can handle dot with I (463ms)

    ✓ Can repeat actions that require selections (68ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (82ms)

    ✓ Can repeat insert change and '<C-t>' (71ms)

    ✓ Can repeat change by `<C-a>` (99ms)

    ✓ Only one arrow key can be repeated in Insert Mode (87ms)

    ✓ Cached content change will be cleared by arrow keys (104ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end (116ms)

    ✓ nested bracket and parenthesis beginning (66ms)

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after > (76ms)

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [( (76ms)

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ]) (79ms)

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive (40ms)

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive (42ms)

    ✓ Can handle ]} (279ms)

    ✓ Can handle nested ]} (45ms)

    ✓ Can handle <number>]} (38ms)

    ✓ Can handle ]} and character under cursor exclusive (61ms)

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (45ms)

    ✓ Can handle 'gg' to first non blank char on random line (122ms)

    ✓ Can handle 'gg' to first non blank char on first line (44ms)

    ✓ 'gg' obeys startofline

    17) Retain same column when moving up/down

    ✓ Can handle <enter> (44ms)

    ✓ $ always keeps cursor on EOL (38ms)

    ✓ Can handle $ with a count (92ms)

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f' (217ms)

    ✓ Can handle 'f' twice (75ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (100ms)

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (44ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice (91ms)

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (44ms)

    ✓ Can handle 'T' and find back search (99ms)

    ✓ Can run a forward search (57ms)

    ✓ Can run a forward and find next search (44ms)

    ✓ Can run a forward and find previous search from end of word (56ms)

    ✓ Can run a reverse search (69ms)

    ✓ Can run a reverse and find next search (206ms)

    ✓ cancelled search reverts to previous search state (123ms)

    ✓ Backspace on empty search cancels (57ms)

    ✓ Search offsets: b does nothing (55ms)

    ✓ Search offsets: b2 goes 2 to the right (49ms)

    ✓ Search offsets: b+3 goes 3 to the right (70ms)

    ✓ Search offsets: e goes to the end (49ms)

    ✓ Search offsets: character offset goes across line boundaries (59ms)

    ✓ Search offsets: 2 goes 2 down (70ms)

    ✓ Search offsets: -2 goes 2 up (83ms)

    ✓ maintains column position correctly (43ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg (41ms)

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g* (40ms)

    ✓ Can handle g*n

    ✓ Can handle * (79ms)

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle # (144ms)

    ✓ Can handle # already on the word (80ms)

    ✓ Can handle ##

    ✓ * adds to search history (42ms)

    ✓ # adds to search history (91ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle + (107ms)

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent (111ms)

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_ (101ms)

    ✓ Can handle g_ with count prefix (48ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key (48ms)

    ✓ Can handle 'gk'

    ✓ Can handle 'gj' (38ms)

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      18) Preserves desired cursor position when pressing zz

      19) Preserves desired cursor position when pressing zt

      20) Preserves desired cursor position when pressing zb

      21) Preserves desired cursor position when pressing <C-e>

      22) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line

      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)

    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line
      ✓ end of last word should move to next line skips whitespace only line
    end of WORD right
      ✓ move to end of current WORD right

      ✓ move to end of next WORD right
      ✓ end of last WORD should move to next line
      ✓ end of last WORD should move to next line skips empty line
      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces

    sentence backward

      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line (145ms)

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line (85ms)

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (59ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (62ms)

        ✓ l does not wrap to next line (134ms)

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (56ms)

      insert mode

        ✓ <left> does not wrap to previous line (66ms)

        ✓ <right> does not wrap to next line (57ms)

    wrapscan enabled

      ✓ search wraps around the end of the file (77ms)

      ✓ search wraps around the start of the file (49ms)

    wrapscan disabled

      ✓ search stops at the end of the file (40ms)

      ✓ search stops at the start of the file (80ms)

  Multicursor

    ✓ can add multiple cursors below (158ms)

    ✓ can add multiple cursors above (182ms)

    ✓ dd works with multi-cursor (70ms)

    ✓ Vd works with multi-cursor (40ms)

    23) <C-v>d works with multi-cursor

    24) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor (66ms)

    25) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip
    ✓ handles decimal round trip

    ✓ handles octal trip
  comment operator

    ✓ gcc comments out current line (243ms)

    ✓ gcj comments in current and next line (69ms)

    ✓ block comment with motion (484ms)

    ✓ block comment in Visual Mode (272ms)

    ✓ comment in visual line mode (392ms)

    ✓ comment in visual block mode (239ms)

  format operator

    ✓ == formats current line (449ms)

    ✓ =$ formats entire line (324ms)

    ✓ =j formats two lines (100ms)

    ✓ 3=k formats three lines (172ms)

    26) =gg formats to top of file

    ✓ =G formats to bottom of file (174ms)

    ✓ =ip formats paragraph (112ms)

    ✓ format in visual mode (76ms)

  put operator

    ✓ basic put test (43ms)

    ✓ test yy end of line (210ms)

    ✓ test yy first line (54ms)

    ✓ test yy middle line (45ms)

    ✓ test yy with correct positon movement (62ms)

    ✓ test visual block single line yank p (110ms)

    ✓ test visual block single line yank P (122ms)

    ✓ test visual block single line delete p (67ms)

    ✓ test visual block single line delete P (70ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (47ms)

    ✓ g? in visual mode works (252ms)

    ✓ g? in visual line mode works (134ms)

    27) g? in visual block mode works

  shift operator

    ✓ basic shift left test (42ms)

    ✓ shift left goto end test (80ms)

    ✓ shift left goto line test (106ms)

    ✓ shift right goto end test (45ms)

    ✓ shift right goto line test (43ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace (118ms)

      ✓ step to Camel word (45ms)

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word (96ms)

      ✓ step to operator word

      ✓ step from inside operator word (39ms)

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word (42ms)

      ✓ step from inside word to _word

      ✓ step form _word to number (106ms)

      ✓ step from nubmer word to _word (46ms)

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (44ms)

      ✓ delete from middle of camelWord (116ms)

      ✓ delete from start of CamelWord (46ms)

      ✓ delete two words from camelWord (40ms)

      ✓ delete from start of underscore_word (61ms)

      ✓ delete from middle of underscore_word (48ms)

      ✓ delete two words from camel_word (45ms)

    handles di<leader>w

      ✓ delete from start of camelWord (48ms)

      ✓ delete from middle of camelWord (126ms)

      ✓ delete from start of CamelWord (42ms)

      ✓ delete two words from camelWord (108ms)

      ✓ delete from start of underscore_word (155ms)

      ✓ delete from middle of underscore_word (64ms)

      ✓ delete two words from camel_word (38ms)

    handles <leader>b

      ✓ back from middle of word (46ms)

      ✓ back over whitespace to camelWord

      ✓ back twice over operator (67ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (75ms)

      ✓ twice to end of word over operator (44ms)

  easymotion plugin

    ✓ Can handle s move (174ms)

    ✓ Can handle 2s move (64ms)

    ✓ Can handle f move (115ms)

    ✓ Can handle 2f move (52ms)

    ✓ Can handle F move (45ms)

    ✓ Can handle 2F move (123ms)

    ✓ Can handle t move (67ms)

    ✓ Can handle bd-t move (61ms)

    ✓ Can handle 2t move (84ms)

    ✓ Can handle bd-t2 move (125ms)

    ✓ Can handle T move (93ms)

    ✓ Can handle 2T move (139ms)

    ✓ Can handle w move (56ms)

    ✓ Can handle bd-w move (49ms)

    ✓ Can handle b move

    ✓ Can handle e move (50ms)

    ✓ Can handle bd-e move (46ms)

    ✓ Can handle ge move (109ms)

    ✓ Can handle n-char move (84ms)

    ✓ Can handle j move (63ms)

    ✓ Can handle k move (58ms)

    ✓ Can handle bd-jk move (1) (57ms)

    ✓ Can handle bd-jk move (2) (58ms)

    ✓ Can handle lineforward move (1) (170ms)

    ✓ Can handle lineforward move (2) (40ms)

    28) Can handle linebackward move (1)

    29) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (46ms)

    ✓ Can handle searching for carat (^) (97ms)

    ✓ Can handle searching for dot (.) (49ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (75ms)

    ✓ Replaces within inner Word (52ms)

    ✓ Replaces within '' (118ms)

    ✓ Replaces within '' including spaces (82ms)

    ✓ Replaces within () (69ms)

    ✓ Replaces within () including spaces (113ms)

    ✓ Replaces within a paragraph (75ms)

    ✓ Replaces using a specified register (93ms)

    ✓ Replaces within {} over multiple lines (119ms)

    ✓ Replaces a multiline register within {} over multiple lines (94ms)

    ✓ Replaces a multiline register within {} over multiple lines (53ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (188ms)

    ✓ grr replaces the entire line with the register (63ms)

    ✓ grr can replace multiple lines (48ms)

    ✓ Replaces in visual mode (71ms)

    ✓ Replaces in visual mode using a specified register (179ms)

    ✓ Replaces in visual line mode (60ms)

    ✓ grj is linewise (80ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion (44ms)

    ✓ Can handle <operator>Z motion (46ms)

    ✓ Can handle s; motion (64ms)

    ✓ Can handle s, motion (98ms)

    ✓ Can handle S; motion (61ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (44ms)

    ✓ Can handle single letter <operator>Z motion (59ms)

    ✓ Can handle single letter s; motion (93ms)

    ✓ Can handle single letter s, motion (70ms)

    ✓ Can handle single letter S; motion (74ms)

    ✓ Can handle single letter S, motion (266ms)

    ✓ Can handle multiline single char <number>s motion (132ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (72ms)

    ✓ sneakReplacesF backward (42ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (202ms)

    ✓ 'ysiw(' surrounds word with space (112ms)

    ✓ 'ysw)' surrounds word without space (122ms)

    ✓ 'ysw(' surrounds word with space (103ms)

    ✓ 'ysaw)' surrounds word without space (116ms)

    ✓ 'ysaw(' surrounds word with space (115ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (99ms)

    ✓ 'ysiw<' surrounds word with tags (54ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (252ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (269ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (85ms)

    ✓ change surround (75ms)

    ✓ change surround with two pairs of quotes (107ms)

    ✓ change surround with two pairs of parens (143ms)

    ✓ change surround with alias (289ms)

    ✓ change surround to tags (114ms)

    ✓ delete surround (105ms)

    ✓ delete surround with quotes (47ms)

    ✓ delete surround with nested of quotes (94ms)

    ✓ delete surround with inconsistent quotes (47ms)

    ✓ delete surround with mixed quotes (95ms)

    ✓ delete surround with empty quotes cursor at start (688ms)

    ✓ delete surround with empty quotes cursor at end (79ms)

    ✓ don't delete surround if cursor is after closing match (41ms)

    ✓ delete surround if cursor is before opening match (46ms)

    ✓ delete surround with two pairs of parens (76ms)

    ✓ delete surround with alias (395ms)

    ✓ delete surround with tags (157ms)

    ✓ change surround brackets at end of line (94ms)

    ✓ changing brackets with surround works again (105ms)

    ✓ change surround with tags that contain an attribute and preserve them (83ms)

    ✓ change surround with tags that contain an attribute and remove them (133ms)

  register

    ✓ Can copy to a register (281ms)

    ✓ Can use two registers together (92ms)

    ✓ Can use black hole register (103ms)

    ✓ System clipboard works with chinese characters (52ms)

    ✓ Yank stores text in Register '0' (349ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (426ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (210ms)

    ✓ Register '1'-'9' stores delete content (341ms)

    ✓ "A appends linewise text to "a (305ms)

    ✓ "A appends character wise text to "a (485ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (282ms)

    ✓ Small deletion using Del is stored in small delete register (666ms)

    ✓ Small deletion using X is stored in small delete register (258ms)

    ✓ Search register (/) is set by forward search (421ms)

    ✓ Search register (/) is set by backward search (467ms)

    ✓ Search register (/) is set by star search (454ms)

    ✓ Command register (:) is set by command line (134ms)

    ✓ Read-only registers cannot be written to (254ms)

    clipboard

      ✓ Can access '*' (clipboard) register (58ms)

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (137ms)

    ✓ Can repeat N times reversed t<character> (46ms)

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward (56ms)

      ✓ move one sentence backward (45ms)

      ✓ move [count] sentences backward (80ms)

      ✓ move one sentence backward single line - middle (42ms)

      ✓ move one sentence backward no space (79ms)

      ✓ move one sentence backward no space - middle (115ms)

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period (38ms)

      ✓ move one sentence backward - multiline - previous line (65ms)

      ✓ move one sentence backward - multiline - previous line - period (408ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1316 passing (4m)

  4 pending
  29 failing
  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Wrong number of cursors
      + expected - actual

      -1
      +2
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)


  3) Mode Visual
       can prepend text with I
         multiline insert from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1337:5)


  4) Mode Visual
       can prepend text with I
         multiline insert from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1344:5)


  5) Mode Visual
       can prepend text with I
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1351:5)


  6) Mode Visual
       can append text with A
         multiline append from bottom up selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1360:5)


  7) Mode Visual
       can append text with A
         multiline append from top down selection:

      Wrong number of cursors
      + expected - actual

      -3
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1367:5)


  8) Mode Visual
       can append text with A
         skips blank lines:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/mode/modeVisual.test.ts:1374:5)


  9) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:95:3)


  10) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:110:3)


  11) Mode Visual Block
       Properly add to end of lines j then $:

      Wrong number of cursors
      + expected - actual

      -5
      +1
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:143:3)


  12) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:164:3)

  13) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:171:3)

  14) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:178:3)

  15) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)

  16) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  17) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  18) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)

  19) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  20) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  21) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  22) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  23) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  24) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  25) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  26) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  27) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  28) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  29) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: 4289ae20-5862-11ea-b533-891a36a4ac0b

@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.12.4 build /home/travis/build/VSCodeVim/Vim
> gulp build

[06:47:25] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[06:47:25] Starting 'build'...
[06:47:25] Starting 'prettier'...
[06:47:26] Finished 'prettier' after 863 ms
[06:47:26] Starting 'tsc'...
[06:47:26] Starting 'tslint'...
[06:47:32] Finished 'tslint' after 6.73 s
[06:47:40] Finished 'tsc' after 14 s
[06:47:40] Starting 'commit-hash'...
[06:47:40] Finished 'commit-hash' after 27 ms
[06:47:40] Finished 'build' after 15 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T06:47:44.602Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative

    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (42ms)

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (39ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (58ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (73ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (66ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (46ms)

  cursor location

    ✓ cursor location in command line (40ms)

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (50ms)

  command-line lexer

    ✓ can lex empty string
    ✓ can lex comma
    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number
    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1277ms)

  command-line parser

    ✓ can parse empty string
    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (526ms)

    ✓ :smile editor contains smile text (526ms)

  Basic sort

    ✓ Sort whole file, asc (70ms)

    ✓ Sort whole file, asc, ignoreCase (47ms)

    ✓ Sort whole file, dsc (83ms)

    ✓ Sort whole file, dsc, ignoreCase (54ms)

    ✓ Sort range, asc (87ms)

    ✓ Sort range, asc, ignoreCase (89ms)

    ✓ Sort range, dsc (102ms)

    ✓ Sort range, dsc, ignoreCase (104ms)

    ✓ Sort whole file, asc, unique (89ms)

  Horizontal split

    ✓ :sp creates a second split (68ms)

    ✓ :split creates a second split (97ms)

    ✓ :new creates a second split (303ms)

  :close args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (52ms)

    ✓ Replace with flags AND count (101ms)

    ✓ Replace with `c` flag (41ms)

    ✓ Replace with `gc` flag (49ms)

    ✓ Replace across all lines (47ms)

    ✓ Replace on specific single line (66ms)

    ✓ Replace on current line using dot (67ms)

    ✓ Replace single relative line using dot and plus (62ms)

    ✓ Replace across specific line range (56ms)

    ✓ Replace across relative line range using dot, plus, and minus (71ms)

    ✓ Replace across relative line range using numLines+colon shorthand (64ms)

    ✓ Repeat replacement across relative line range (69ms)

    ✓ Replace with range AND count but no flags (50ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (51ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (80ms)

    ✓ Undocumented: trailing operators use 1 as RHS (50ms)

    ✓ Replace specific single equal lines (40ms)

    ✓ Replace current line with no active selection (49ms)

    ✓ Replace text in selection (99ms)

    ✓ Substitute support marks (78ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (49ms)

      ✓ Replace with `g` flag inverts global flag (42ms)

      ✓ Replace with `c` flag inverts global flag (64ms)

      ✓ Replace multiple lines (74ms)

      ✓ Replace across specific lines (51ms)

      ✓ Replace current line with no active selection (51ms)

      ✓ Replace text in selection (77ms)

      ✓ Substitute support marks (127ms)

      ✓ Substitute with escaped delimiter (43ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (134ms)

      ✓ Substitute with previous search using # (117ms)

      ✓ Substitute with previous search using / (127ms)

      ✓ Substitute with parameters should update search state (67ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (252ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (136ms)

      ✓ Substitute repeat previous should accept flags (144ms)

      ✓ Substitute with empty search string should use last searched pattern (247ms)

      ✓ Ampersand (&) should repeat the last substitution (45ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (50ms)

    ✓ tabe with current file path does nothing

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (41ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (50ms)

    ✓ command line file tab completion with space in file path (109ms)

  Vertical split

    ✓ :vs creates a second split (62ms)

    ✓ :vsp creates a second split (54ms)

    ✓ :vsplit creates a second split (62ms)

    ✓ :vnew creates a second split (235ms)

    ✓ :vne creates a second split (128ms)

  Basic write-quit

    ✓ Run write and quit (38ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (132ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (58ms)

    ✓ getMatchingRemap (62ms)

    ✓ jj -> <Esc> through modehandler (80ms)

    ✓ 0 -> :wq through modehandler (77ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (84ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (54ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (69ms)

    ✓ d -> black hole register delete in normal mode through modehandler (109ms)

    ✓ d -> black hole register delete in normal mode through modehandler (103ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (129ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator
    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines
  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (114ms)

        ✓ Can track jumps for keys: /b<CR>n (40ms)

        ✓ Can track jumps for keys: G?b<CR>ggG

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>% (53ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (43ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (50ms)

        ✓ Can enter number to jump back multiple times (44ms)

        ✓ Can track one-line `` jumps (43ms)

        ✓ Can track one-line double `` jumps (131ms)

        ✓ Can track one-line '' jumps (54ms)

        ✓ Can track one-line double '' jumps (65ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (54ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (56ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (61ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (78ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (89ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (93ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (112ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (121ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (94ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (52ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (86ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (81ms)

    ✓ Can repeat last invoked macro (129ms)

    ✓ Can play back with count (246ms)

    ✓ Can play back with count, abort when a motion fails (204ms)

    ✓ Repeat change on contiguous lines (91ms)

    ✓ Append command to a macro (195ms)

    ✓ Can record Ctrl Keys and repeat (124ms)

    ✓ Can execute macros with dot commands properly (87ms)

    ✓ : (command) register can be used as a macro (73ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

[main 2020-02-26T06:48:14.605Z] update#setState checking for updates

    ✓ can be activated (67ms)

[main 2020-02-26T06:48:14.687Z] update#setState idle

    ✓ can handle key events

    ✓ <Esc> should change cursor position

    ✓ <C-c> can exit insert (41ms)

    ✓ <Esc> can exit insert

    ✓ Stay in insert when entering characters (96ms)

    ✓ Can handle 'O'

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word (44ms)

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (64ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines (42ms)

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode

    ✓ Delete works at line end

    ✓ Delete works at end of file

    ✓ Delete works with repeat (101ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (69ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (51ms)

    ✓ Can perform insert command prefixed with count (48ms)

    ✓ Can perform append command prefixed with count

    ✓ Can perform insert at start of line command prefixed with count

    ✓ Can perform append to end of line command prefixed with count

    ✓ Can perform change char (s) command prefixed with count (48ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (85ms)

    ✓ Can handle 'O' with count (85ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (51ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2) (47ms)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd (53ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (42ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again

    ✓ Can handle 'dl' at end of line (41ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket (44ms)

    ✓ Can handle 'cw' (49ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket (42ms)

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (80ms)

    ✓ Can handle 'ciw' on blanks (47ms)

    ✓ Can handle 'caw' (45ms)

    ✓ Can handle 'caw' on first letter

    ✓ Can handle 'caw' on blanks (42ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses (50ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)'

    ✓ Can handle count prefixed 'ca)'

    ✓ Can handle 'ca(' spanning multiple lines

    ✓ Can handle 'cab' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no () (77ms)

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (48ms)

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (48ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote (38ms)

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (53ms)

    ✓ Can handle 'ci"' with a single escaped quote (38ms)

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash (40ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (40ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences (175ms)

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (55ms)

    ✓ can handle ck (46ms)

    ✓ can handle c2j (51ms)

    ✓ can handle c2k (42ms)

    ✓ can handle cj on last line (49ms)

    ✓ can handle ck on first line (70ms)

    ✓ can handle c2j on last line (53ms)

    ✓ can handle c2k on first line (52ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (40ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (51ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (43ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace

    ✓ Can handle 'daw' around word at end of line

    ✓ Can handle 'daW' on big word with cursor inside spaces (46ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (38ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (81ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line (54ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (42ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (40ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces (58ms)

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (38ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle d} at beginning of line (45ms)

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line (40ms)

    ✓ Select sentence with trailing spaces (48ms)

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces (44ms)

    ✓ Select spaces between sentences (50ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (75ms)

    ✓ leaving insert mode should update desired column when entered with i (232ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy' (47ms)

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position (52ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (46ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (52ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (38ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines

    ✓ Can handle ']p' after yy (59ms)

    ✓ Can handle ']p' after 'Nyy' (43ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (45ms)

    ✓ Can handle '[p' after yy (45ms)

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (47ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (40ms)

    ✓ Can handle 'p' after y'a

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (85ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (56ms)

    ✓ gI works correctly (40ms)

    ✓ gi works correctly (93ms)

    ✓ `. works correctly (39ms)

    ✓ '. works correctly (49ms)

    ✓ g; works correctly (66ms)

    ✓ g, works correctly (84ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly

    ✓ gq handles spaces before single line comments correctly (44ms)

    ✓ gq handles tabs before single line comments correctly (38ms)

    ✓ Can handle space

    ✓ Can handle space

    ✓ Undo 1 (253ms)

    ✓ Undo 2 (80ms)

    ✓ Undo cursor (131ms)

    ✓ Undo cursor 2 (81ms)

    ✓ Undo cursor 3 (93ms)

    ✓ Undo with movement first (80ms)

    ✓ Can handle 'U' (51ms)

    ✓ Can handle 'U' for multiple changes (52ms)

    ✓ Can handle 'U' for new line below (110ms)

    ✓ Can handle 'U' for new line above (63ms)

    ✓ Can handle 'U' for consecutive changes only (70ms)

    ✓ Can handle 'u' to undo 'U' (43ms)

    ✓ Can handle 'U' to undo 'U' (41ms)

    ✓ Can handle 'u' after :s/abc/def (81ms)

    ✓ Redo (67ms)

    ✓ Redo (57ms)

    ✓ Redo (145ms)

    ✓ Can handle u (42ms)

    ✓ Can handle guw

    ✓ Can handle gUw (39ms)

    ✓ Can handle u over line breaks

    ✓ can handle s in visual mode (42ms)

    ✓ can handle p with selection (43ms)

    ✓ can handle P with selection (51ms)

    ✓ can handle p in visual to end of line (61ms)

    ✓ can repeat backspace twice (64ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count (42ms)

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word (41ms)

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word (39ms)

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (40ms)

    ✓ can ctrl-a on a decimal (44ms)

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word (52ms)

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (98ms)

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (175ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S

    ✓ / does not affect mark (43ms)

    ✓ / can search with regex (47ms)

    ✓ / can search with newline (49ms)

    ✓ / can search through multiple newlines (66ms)

    ✓ / matches ^ per line

    ✓ / matches $ per line

    ✓ Can search for forward slash (52ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (47ms)

    ✓ /\C forces case sensitive search

    ✓ <BS> deletes the last character in search in progress mode (68ms)

    ✓ <S-BS> deletes the last character in search in progress mode (38ms)

    ✓ <C-h> deletes the last character in search in progress mode

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag (38ms)

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (41ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside (72ms)

    ✓ can do cit with self closing tags (42ms)

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (46ms)

    ✓ cc copies linewise (39ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words (48ms)

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    2) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent (48ms)

    ✓ Can do cai

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai (38ms)

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (50ms)

    ✓ '] go to the end of the previously operated or put text (118ms)

    ✓ `[ go to the start of the previously operated or put text (63ms)

    ✓ '[ go to the start of the previously operated or put text (62ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (188ms)

      ✓ gn selects the current word at |hello (168ms)

      ✓ gn selects the current word at h|ello (166ms)

      ✓ gn selects the current word at hel|lo (375ms)

      ✓ gn selects the current word at hell|o (150ms)

      ✓ gn selects the next word at hello| (166ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (125ms)

      ✓ dgn deletes the current word when cursor is at |hello (82ms)

      ✓ dgn deletes the current word when cursor is at h|ello (55ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (45ms)

      ✓ dgn deletes the current word when cursor is at hell|o (86ms)

      ✓ dgn deletes the next word when cursor is at hello| (75ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (70ms)

      ✓ cgn deletes the current word when cursor is at |hello (40ms)

      ✓ cgn deletes the current word when cursor is at h|ello (77ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (52ms)

      ✓ cgn deletes the current word when cursor is at hell|o (47ms)

      ✓ cgn deletes the next word when cursor is at hello| (67ms)

    can handle gN

      ✓ gN selects the previous match text (227ms)

      ✓ gN selects the current word at hell|o (182ms)

      ✓ gN selects the current word at hel|lo (209ms)

      ✓ gN selects the current word at h|ello (190ms)

      ✓ gN selects the current word at |hello (230ms)

      ✓ gN selects the previous word at | hello (189ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (64ms)

      ✓ dgN deletes the current word when cursor is at hell|o (57ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (65ms)

      ✓ dgN deletes the current word when cursor is at h|ello (72ms)

      ✓ dgN deletes the current word when cursor is at |hello (65ms)

      ✓ dgN deletes the previous word when cursor is at | hello (68ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (57ms)

      ✓ cgN deletes the current word when cursor is at hell|o (69ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (64ms)

      ✓ cgN deletes the current word when cursor is at h|ello (112ms)

      ✓ cgN deletes the current word when cursor is at |hello (88ms)

      ✓ cgN deletes the previous word when cursor is at | hello (115ms)

    marks

      ✓ capital marks can change the editors active document (112ms)

      ✓ can jump to lowercase mark (52ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode (59ms)

    ✓ Can handle R

    ✓ Can handle R past current line (81ms)

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (56ms)

    ✓ Can handle R across lines and exit Replace Mode (63ms)

    ✓ Can handle R with {count} (59ms)

    ✓ Can handle backspace (44ms)

    ✓ Can handle backspace (46ms)

    ✓ Can handle backspace across lines (57ms)

    ✓ Can handle arrows (41ms)

    ✓ Can handle . (68ms)

    ✓ Can handle . across lines (85ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (118ms)

    ✓ Can handle wd (81ms)

    ✓ Can handle x (64ms)

    ✓ Can handle x across a selection (125ms)

    ✓ Can do vwd in middle of sentence (109ms)

    ✓ Can do vwd in middle of sentence (87ms)

    ✓ Can do vwd multiple times (142ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (102ms)

    ✓ Can handle H key (55ms)

    ✓ Can handle backspace key

    ✓ handles case where we delete over a newline (141ms)

    ✓ handles change operator (259ms)

    ✓ Can do vat on multiple matching tags (43ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (55ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (46ms)

    ✓ Repeat-prefixed vat does not bleed below (55ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis

    ✓ Can do vi) on multiple matching parens (70ms)

    ✓ Can do va) on a matching parenthesis (87ms)

    ✓ Can do va) on multiple matching parens (42ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode

    ✓ Repeat-prefixed va) does not bleed below (44ms)

    ✓ Can do va} on a matching bracket as first character (77ms)

    ✓ Can do va} on multiple matching brackets (44ms)

    ✓ Can do vi( on a matching bracket near first character

    ✓ Can do vi{ on outer pair of nested braces

    ✓ Can do vi{ on braces indented by 1 and preserve indent (38ms)

    ✓ Can do va] on multiple matching brackets (39ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (44ms)

    ✓ Repeat-prefixed vaf does not bleed below (63ms)

    ✓ vaf only expands to enclosing pairs

    ✓ Can use . to repeat indent in visual

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL (76ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (48ms)

    ✓ Can do v$x to delete to last char including EOL

    ✓ Can do gv to reselect previous selection (49ms)

    Vim's EOL handling is weird

      ✓ delete through eol (108ms)

      ✓ join 2 lines by deleting through eol (72ms)

      ✓ d$ doesn't delete whole line (49ms)

      ✓ vd$ does delete whole line (62ms)

      ✓ Paste over selection copies the selection (39ms)

      ✓ Paste over selection copies the selection linewise (46ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

      ✓ Can handle <left> key (79ms)

      ✓ Can handle <right> key (116ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk'

      ✓ Can handle 'gj'

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (50ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces (42ms)

      ✓ Can handle 'vawd' on word with numeric prefix (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (81ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (53ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (40ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (51ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (44ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (43ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (38ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (48ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (84ms)

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (41ms)

      ✓ Can handle 'Y' in visual mode (44ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (46ms)

      ✓ Select sentence with leading spaces in visual mode

      ✓ Select multiple sentences in visual mode (62ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode

      ✓ Select inner sentence with leading spaces in visual mode (43ms)

      ✓ Select spaces between sentences in visual mode (41ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (140ms)

      ✓ Can do vat on a matching tag

    handles replace in visual mode

      ✓ Can do a single line replace (61ms)

      ✓ Can do a multi line replace (45ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines

      ✓ D deletes the current line

    handles indent blocks in visual mode

      ✓ Can do vai (227ms)

      ✓ Can do vii (59ms)

      ✓ Doesn't naively select the next line

      ✓ Searches backwards if cursor line is empty (82ms)

      ✓ Can do vaI

    visualstar

      ✓ Works with * (41ms)

      ✓ Works with # (42ms)

    search works in visual mode

      ✓ Works with / (54ms)

      ✓ Works with ? (51ms)

      ✓ Selects correct range (135ms)

    X will delete linewise

      ✓ normal selection (72ms)

      ✓ normal selection (39ms)

    C will delete linewise

      ✓ normal selection

      ✓ normal selection

    R will delete linewise

      ✓ normal selection (43ms)

      ✓ normal selection (55ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (80ms)

      ✓ upward selection (89ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection

      ✓ multiline indent bottom up selection

      ✓ repeat multiline indent top down selection (58ms)

      ✓ repeat multiline indent bottom up selection (50ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (64ms)

      ✓ multiline outdent bottom up selection (52ms)

      ✓ repeat multiline outdent top down selection (56ms)

      ✓ repeat multiline outdent bottom up selection (46ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (178ms)

    vi{ will go to end of second to last line

      ✓ select (49ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode (64ms)

      ✓ Vv will transit to visual (char) mode (51ms)

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (338ms)

      ✓ gv selects the last pasted text (which is longer than original) (271ms)

      ✓ gv selects the last pasted text (multiline) (168ms)

    can handle gn

      ✓ gn selects the next match text (226ms)

      ✓ gn selects the current word at |hello (129ms)

      ✓ gn selects the current word at h|ello (183ms)

      ✓ gn selects the current word at hel|lo (201ms)

      ✓ gn selects the next word at hell|o (144ms)

      ✓ gn selects the next word at hello| (148ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection

      ✓ multiline insert from top down selection

      ✓ skips blank lines

    can append text with A

      ✓ multiline append from bottom up selection (46ms)

      ✓ multiline append from top down selection (38ms)

      ✓ skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (52ms)

      ✓ U/gU across a selection (65ms)

      ✓ U/gU across a selection (reverse) (66ms)

      ✓ u/gu on single character (45ms)

      ✓ u/gu across a selection (96ms)

      ✓ u/gu across a selection (reverse) (56ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (62ms)

    ✓ Can handle A backwards select (53ms)

    ✓ Can handle I forward select (115ms)

    ✓ Can handle I backwards select

    ✓ Can handle I with empty lines on first character (inserts on empty line) (107ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (58ms)

    ✓ Can handle c forward select (50ms)

    ✓ Can handle c backwards select (83ms)

    ✓ Can handle C (97ms)

    3) Can do a multi line replace

    ✓ Can handle 'D' (53ms)

    4) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (46ms)

    5) Properly add to end of lines $ then j

    ✓ o works in visual block mode

    6) d deletes block

    7) x deletes block

    8) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (127ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (404ms)

    ✓ Can handle wd (132ms)

    ✓ Can handle x (58ms)

    ✓ Can handle x across a selection (103ms)

    ✓ Can do vwd in middle of sentence (229ms)

    ✓ Can do vwd in middle of sentence (96ms)

    ✓ Can do vwd multiple times (119ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (143ms)

    ✓ handles case where we delete over a newline (119ms)

    ✓ handles change operator (78ms)

    ✓ Vp updates register content (127ms)

    ✓ Vp does not append unnecessary newlines (first line)

    ✓ Vp does not append unnecessary newlines (middle line) (63ms)

    ✓ Vp does not append unnecessary newlines (last line) (46ms)

    ✓ Exiting via <Esc> returns cursor to original column

    ✓ Exiting via `VV` returns cursor to original column (44ms)

    Vim's EOL handling is weird

      ✓ delete through eol (110ms)

      ✓ join 2 lines by deleting through eol (124ms)

      ✓ d$ doesn't delete whole line (46ms)

      ✓ vd$ does delete whole line (147ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key (45ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (42ms)

      ✓ Can handle 'gj' (71ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key

      ✓ Can handle d key

      ✓ Can handle d key (102ms)

      ✓ can handle 'c' (73ms)

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up (45ms)

    search works in visual line mode

      ✓ Works with / (94ms)

      ✓ Works with ? (64ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (94ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (64ms)

      ✓ linewise visual put works also in the end of document (42ms)

      ✓ gv selects the last pasted text (which is shorter than original) (291ms)

      ✓ gv selects the last pasted text (which is longer than original) (293ms)

      ✓ gv selects the last pasted text (multiline) (158ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (53ms)

      ✓ multiline insert from top down selection

      ✓ skips blank lines (46ms)

    can append text with A

      ✓ multiline append from bottom up selection

      ✓ multiline append from top down selection

      ✓ skips blank lines

      ✓ updates desired column correctly (48ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (125ms)

    ✓ Can handle 'x' at end of line (48ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>' (105ms)

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (93ms)

    ✓ Can handle '<Del>' at end of line (118ms)

    ✓ Can handle 'cc' (77ms)

    ✓ Can handle 'Ncc' (86ms)

    ✓ Can handle 'yy' (62ms)

    ✓ Can handle 'D' (51ms)

    ✓ Can handle 'D' on empty lines (350ms)

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put (51ms)

    ✓ Can handle 'r' (55ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r' (179ms)

    ✓ Can handle 'r' after 'dd'

    ✓ Can handle 'r
'

    ✓ Can handle '<Count>r
' (66ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line (45ms)

    ✓ Can handle 'J's with multiple empty last lines (50ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~' (40ms)

    ✓ Can handle 'g~{motion}' (45ms)

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (61ms)

    9) Can handle 'ge' in multiple lines case1

    10) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (132ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J' (50ms)

    ✓ Can handle dot with A (123ms)

    ✓ Can handle dot with I (102ms)

    ✓ Can repeat actions that require selections

  Repeat content change

    ✓ Can repeat '<C-t>' (50ms)

    ✓ Can repeat insert change and '<C-t>' (99ms)

    ✓ Can repeat change by `<C-a>` (136ms)

    ✓ Only one arrow key can be repeated in Insert Mode (52ms)

    ✓ Cached content change will be cleared by arrow keys (51ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after " (70ms)

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{ (75ms)

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]} (70ms)

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (85ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    11) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (370ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (45ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a reverse search (47ms)

    ✓ Can run a reverse and find next search

    ✓ cancelled search reverts to previous search state (50ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (38ms)

    ✓ Search offsets: b2 goes 2 to the right (52ms)

    ✓ Search offsets: b+3 goes 3 to the right (43ms)

    ✓ Search offsets: e goes to the end (103ms)

    ✓ Search offsets: character offset goes across line boundaries (49ms)

    ✓ Search offsets: 2 goes 2 down (44ms)

    ✓ Search offsets: -2 goes 2 up (59ms)

    ✓ maintains column position correctly (69ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix (57ms)

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat (60ms)

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle * (83ms)

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n (60ms)

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history (40ms)

    ✓ # adds to search history (63ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (60ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix (67ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key (104ms)

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      12) Preserves desired cursor position when pressing zz

      13) Preserves desired cursor position when pressing zt

      14) Preserves desired cursor position when pressing zb

      15) Preserves desired cursor position when pressing <C-e>

      16) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down
    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin
    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line
    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (52ms)

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (42ms)

      ✓ search wraps around the start of the file (50ms)

    wrapscan disabled

      ✓ search stops at the end of the file (41ms)

      ✓ search stops at the start of the file (39ms)

  Multicursor

    ✓ can add multiple cursors below (63ms)

    ✓ can add multiple cursors above (163ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor

    17) <C-v>d works with multi-cursor

    18) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    19) o works with multi-cursor

  numeric string

    ✓ fails on non-string
    ✓ handles hex round trip
    ✓ handles decimal round trip
    ✓ handles octal trip
  comment operator

    ✓ gcc comments out current line (111ms)

    ✓ gcj comments in current and next line (91ms)

    ✓ block comment with motion (165ms)

    ✓ block comment in Visual Mode (178ms)

    ✓ comment in visual line mode (327ms)

    ✓ comment in visual block mode (203ms)

  format operator

    ✓ == formats current line (400ms)

    ✓ =$ formats entire line (190ms)

    ✓ =j formats two lines (202ms)

    ✓ 3=k formats three lines (83ms)

    20) =gg formats to top of file

    ✓ =G formats to bottom of file (165ms)

    ✓ =ip formats paragraph (94ms)

    ✓ format in visual mode (84ms)

  put operator

    ✓ basic put test (147ms)

    ✓ test yy end of line (58ms)

    ✓ test yy first line (38ms)

    ✓ test yy middle line

    ✓ test yy with correct positon movement (55ms)

    ✓ test visual block single line yank p (48ms)

    ✓ test visual block single line yank P (52ms)

    ✓ test visual block single line delete p (56ms)

    ✓ test visual block single line delete P (116ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (48ms)

    ✓ g? in visual mode works

    ✓ g? in visual line mode works

    21) g? in visual block mode works

  shift operator

    ✓ basic shift left test (46ms)

    ✓ shift left goto end test (42ms)

    ✓ shift left goto line test

    ✓ shift right goto end test

    ✓ shift right goto line test (42ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work (90ms)

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (211ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (64ms)

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (97ms)

      ✓ delete two words from camelWord (89ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles <leader>b

      ✓ back from middle of word (383ms)

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word (78ms)

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (45ms)

    ✓ Can handle 2s move

    ✓ Can handle f move

    ✓ Can handle 2f move (46ms)

    ✓ Can handle F move (80ms)

    ✓ Can handle 2F move (49ms)

    ✓ Can handle t move

    ✓ Can handle bd-t move (45ms)

    ✓ Can handle 2t move (81ms)

    ✓ Can handle bd-t2 move (129ms)

    ✓ Can handle T move

    ✓ Can handle 2T move (78ms)

    ✓ Can handle w move (43ms)

    ✓ Can handle bd-w move (64ms)

    ✓ Can handle b move (39ms)

    ✓ Can handle e move (41ms)

    ✓ Can handle bd-e move (41ms)

    ✓ Can handle ge move

    ✓ Can handle n-char move (44ms)

    ✓ Can handle j move

    ✓ Can handle k move

    ✓ Can handle bd-jk move (1) (66ms)

    ✓ Can handle bd-jk move (2) (49ms)

    ✓ Can handle lineforward move (1)

    ✓ Can handle lineforward move (2)

    22) Can handle linebackward move (1)

    23) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (39ms)

    ✓ Replaces within inner Word (43ms)

    ✓ Replaces within '' (51ms)

    ✓ Replaces within '' including spaces (40ms)

    ✓ Replaces within () (51ms)

    ✓ Replaces within () including spaces (49ms)

    ✓ Replaces within a paragraph (52ms)

    ✓ Replaces using a specified register (46ms)

    ✓ Replaces within {} over multiple lines (88ms)

    ✓ Replaces a multiline register within {} over multiple lines (65ms)

    ✓ Replaces a multiline register within {} over multiple lines (38ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (47ms)

    ✓ grr replaces the entire line with the register (46ms)

    ✓ grr can replace multiple lines (41ms)

    ✓ Replaces in visual mode (51ms)

    ✓ Replaces in visual mode using a specified register (143ms)

    ✓ Replaces in visual line mode (46ms)

    ✓ grj is linewise (45ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion

    ✓ Can handle s; motion

    ✓ Can handle s, motion

    ✓ Can handle S; motion (39ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion

    ✓ Can handle single letter <operator>Z motion (44ms)

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion (43ms)

    ✓ Can handle multiline single char <number>s motion

  sneakReplacesF

    ✓ sneakReplacesF forward (40ms)

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (68ms)

    ✓ 'ysiw(' surrounds word with space (49ms)

    ✓ 'ysw)' surrounds word without space (69ms)

    ✓ 'ysw(' surrounds word with space (77ms)

    ✓ 'ysaw)' surrounds word without space (80ms)

    ✓ 'ysaw(' surrounds word with space (80ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (63ms)

    ✓ 'ysiw<' surrounds word with tags (49ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (50ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (72ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (69ms)

    ✓ change surround (47ms)

    ✓ change surround with two pairs of quotes (42ms)

    ✓ change surround with two pairs of parens (56ms)

    ✓ change surround with alias (107ms)

    ✓ change surround to tags (104ms)

    ✓ delete surround (55ms)

    ✓ delete surround with quotes (51ms)

    ✓ delete surround with nested of quotes (54ms)

    ✓ delete surround with inconsistent quotes (68ms)

    ✓ delete surround with mixed quotes (47ms)

    ✓ delete surround with empty quotes cursor at start

    ✓ delete surround with empty quotes cursor at end (58ms)

    ✓ don't delete surround if cursor is after closing match (42ms)

    ✓ delete surround if cursor is before opening match (54ms)

    ✓ delete surround with two pairs of parens (63ms)

    ✓ delete surround with alias (48ms)

    ✓ delete surround with tags (47ms)

    ✓ change surround brackets at end of line (64ms)

    ✓ changing brackets with surround works again (66ms)

    ✓ change surround with tags that contain an attribute and preserve them (132ms)

    ✓ change surround with tags that contain an attribute and remove them (45ms)

  register

    ✓ Can copy to a register (50ms)

    ✓ Can use two registers together (42ms)

    ✓ Can use black hole register (154ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (134ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (112ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (372ms)

    ✓ Register '1'-'9' stores delete content (216ms)

    ✓ "A appends linewise text to "a (161ms)

    ✓ "A appends character wise text to "a (232ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (116ms)

    ✓ Small deletion using Del is stored in small delete register (109ms)

    ✓ Small deletion using X is stored in small delete register (168ms)

    ✓ Search register (/) is set by forward search (212ms)

    ✓ Search register (/) is set by backward search (197ms)

    ✓ Search register (/) is set by star search (131ms)

    ✓ Command register (:) is set by command line (134ms)

    ✓ Read-only registers cannot be written to (252ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (39ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward (38ms)

      ✓ move one sentence backward

      ✓ move [count] sentences backward

      ✓ move one sentence backward single line - middle (40ms)

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period (42ms)

      ✓ move one sentence backward - multiline - previous line (39ms)

      ✓ move one sentence backward - multiline - previous line - period (44ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix
    resolveUri
      ✓ posix
      ✓ win32
  1322 passing (3m)
  4 pending
  23 failing
  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)

  2) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Wrong number of cursors
      + expected - actual

      -1
      +2
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)

  3) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)

  4) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)

  5) Mode Visual Block
       Properly add to end of lines $ then j:

      Wrong number of cursors
      + expected - actual

      -1
      +5
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:151:3)

  6) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)

  7) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  8) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)

  9) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)

  10) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  11) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)

  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)

  15) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)

  16) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)

  17) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  18) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  19) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  20) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)

  21) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  22) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  23) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-8.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T06:47:44.602Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative

    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (42ms)

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (39ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (58ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (73ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (66ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (46ms)

  cursor location

    ✓ cursor location in command line (40ms)

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (50ms)

  command-line lexer

    ✓ can lex empty string
    ✓ can lex comma
    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number
    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1277ms)

  command-line parser

    ✓ can parse empty string
    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (526ms)

    ✓ :smile editor contains smile text (526ms)

  Basic sort

    ✓ Sort whole file, asc (70ms)

    ✓ Sort whole file, asc, ignoreCase (47ms)

    ✓ Sort whole file, dsc (83ms)

    ✓ Sort whole file, dsc, ignoreCase (54ms)

    ✓ Sort range, asc (87ms)

    ✓ Sort range, asc, ignoreCase (89ms)

    ✓ Sort range, dsc (102ms)

    ✓ Sort range, dsc, ignoreCase (104ms)

    ✓ Sort whole file, asc, unique (89ms)

  Horizontal split

    ✓ :sp creates a second split (68ms)

    ✓ :split creates a second split (97ms)

    ✓ :new creates a second split (303ms)

  :close args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (52ms)

    ✓ Replace with flags AND count (101ms)

    ✓ Replace with `c` flag (41ms)

    ✓ Replace with `gc` flag (49ms)

    ✓ Replace across all lines (47ms)

    ✓ Replace on specific single line (66ms)

    ✓ Replace on current line using dot (67ms)

    ✓ Replace single relative line using dot and plus (62ms)

    ✓ Replace across specific line range (56ms)

    ✓ Replace across relative line range using dot, plus, and minus (71ms)

    ✓ Replace across relative line range using numLines+colon shorthand (64ms)

    ✓ Repeat replacement across relative line range (69ms)

    ✓ Replace with range AND count but no flags (50ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (51ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (80ms)

    ✓ Undocumented: trailing operators use 1 as RHS (50ms)

    ✓ Replace specific single equal lines (40ms)

    ✓ Replace current line with no active selection (49ms)

    ✓ Replace text in selection (99ms)

    ✓ Substitute support marks (78ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (49ms)

      ✓ Replace with `g` flag inverts global flag (42ms)

      ✓ Replace with `c` flag inverts global flag (64ms)

      ✓ Replace multiple lines (74ms)

      ✓ Replace across specific lines (51ms)

      ✓ Replace current line with no active selection (51ms)

      ✓ Replace text in selection (77ms)

      ✓ Substitute support marks (127ms)

      ✓ Substitute with escaped delimiter (43ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (134ms)

      ✓ Substitute with previous search using # (117ms)

      ✓ Substitute with previous search using / (127ms)

      ✓ Substitute with parameters should update search state (67ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (252ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (136ms)

      ✓ Substitute repeat previous should accept flags (144ms)

      ✓ Substitute with empty search string should use last searched pattern (247ms)

      ✓ Ampersand (&) should repeat the last substitution (45ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (50ms)

    ✓ tabe with current file path does nothing

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (41ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (50ms)

    ✓ command line file tab completion with space in file path (109ms)

  Vertical split

    ✓ :vs creates a second split (62ms)

    ✓ :vsp creates a second split (54ms)

    ✓ :vsplit creates a second split (62ms)

    ✓ :vnew creates a second split (235ms)

    ✓ :vne creates a second split (128ms)

  Basic write-quit

    ✓ Run write and quit (38ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (132ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (58ms)

    ✓ getMatchingRemap (62ms)

    ✓ jj -> <Esc> through modehandler (80ms)

    ✓ 0 -> :wq through modehandler (77ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (84ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (54ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (69ms)

    ✓ d -> black hole register delete in normal mode through modehandler (109ms)

    ✓ d -> black hole register delete in normal mode through modehandler (103ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (129ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator
    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines
  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (114ms)

        ✓ Can track jumps for keys: /b<CR>n (40ms)

        ✓ Can track jumps for keys: G?b<CR>ggG

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>% (53ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (43ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (50ms)

        ✓ Can enter number to jump back multiple times (44ms)

        ✓ Can track one-line `` jumps (43ms)

        ✓ Can track one-line double `` jumps (131ms)

        ✓ Can track one-line '' jumps (54ms)

        ✓ Can track one-line double '' jumps (65ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (54ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (56ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (61ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (78ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (89ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (93ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (112ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (121ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (94ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (52ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (86ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (81ms)

    ✓ Can repeat last invoked macro (129ms)

    ✓ Can play back with count (246ms)

    ✓ Can play back with count, abort when a motion fails (204ms)

    ✓ Repeat change on contiguous lines (91ms)

    ✓ Append command to a macro (195ms)

    ✓ Can record Ctrl Keys and repeat (124ms)

    ✓ Can execute macros with dot commands properly (87ms)

    ✓ : (command) register can be used as a macro (73ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

[main 2020-02-26T06:48:14.605Z] update#setState checking for updates

    ✓ can be activated (67ms)

[main 2020-02-26T06:48:14.687Z] update#setState idle

    ✓ can handle key events

    ✓ <Esc> should change cursor position

    ✓ <C-c> can exit insert (41ms)

    ✓ <Esc> can exit insert

    ✓ Stay in insert when entering characters (96ms)

    ✓ Can handle 'O'

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word (44ms)

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (64ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines (42ms)

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode

    ✓ Delete works at line end

    ✓ Delete works at end of file

    ✓ Delete works with repeat (101ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (69ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (51ms)

    ✓ Can perform insert command prefixed with count (48ms)

    ✓ Can perform append command prefixed with count

    ✓ Can perform insert at start of line command prefixed with count

    ✓ Can perform append to end of line command prefixed with count

    ✓ Can perform change char (s) command prefixed with count (48ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (85ms)

    ✓ Can handle 'O' with count (85ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (51ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2) (47ms)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd (53ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (42ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again

    ✓ Can handle 'dl' at end of line (41ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket (44ms)

    ✓ Can handle 'cw' (49ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket (42ms)

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (80ms)

    ✓ Can handle 'ciw' on blanks (47ms)

    ✓ Can handle 'caw' (45ms)

    ✓ Can handle 'caw' on first letter

    ✓ Can handle 'caw' on blanks (42ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses (50ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)'

    ✓ Can handle count prefixed 'ca)'

    ✓ Can handle 'ca(' spanning multiple lines

    ✓ Can handle 'cab' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no () (77ms)

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket (48ms)

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (48ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote (38ms)

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (53ms)

    ✓ Can handle 'ci"' with a single escaped quote (38ms)

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash (40ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (40ms)

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences (175ms)

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (55ms)

    ✓ can handle ck (46ms)

    ✓ can handle c2j (51ms)

    ✓ can handle c2k (42ms)

    ✓ can handle cj on last line (49ms)

    ✓ can handle ck on first line (70ms)

    ✓ can handle c2j on last line (53ms)

    ✓ can handle c2k on first line (52ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (40ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (51ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (43ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace

    ✓ Can handle 'daw' around word at end of line

    ✓ Can handle 'daW' on big word with cursor inside spaces (46ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (38ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (81ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line (54ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (42ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (40ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces (58ms)

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (38ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle d} at beginning of line (45ms)

    ✓ Can handle y} at beginning of line

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line (40ms)

    ✓ Select sentence with trailing spaces (48ms)

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces (44ms)

    ✓ Select spaces between sentences (50ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (75ms)

    ✓ leaving insert mode should update desired column when entered with i (232ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy' (47ms)

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position (52ms)

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (46ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (52ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (38ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines

    ✓ Can handle ']p' after yy (59ms)

    ✓ Can handle ']p' after 'Nyy' (43ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (45ms)

    ✓ Can handle '[p' after yy (45ms)

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (47ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (40ms)

    ✓ Can handle 'p' after y'a

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (85ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (56ms)

    ✓ gI works correctly (40ms)

    ✓ gi works correctly (93ms)

    ✓ `. works correctly (39ms)

    ✓ '. works correctly (49ms)

    ✓ g; works correctly (66ms)

    ✓ g, works correctly (84ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly

    ✓ gq handles spaces before single line comments correctly (44ms)

    ✓ gq handles tabs before single line comments correctly (38ms)

    ✓ Can handle space

    ✓ Can handle space

    ✓ Undo 1 (253ms)

    ✓ Undo 2 (80ms)

    ✓ Undo cursor (131ms)

    ✓ Undo cursor 2 (81ms)

    ✓ Undo cursor 3 (93ms)

    ✓ Undo with movement first (80ms)

    ✓ Can handle 'U' (51ms)

    ✓ Can handle 'U' for multiple changes (52ms)

    ✓ Can handle 'U' for new line below (110ms)

    ✓ Can handle 'U' for new line above (63ms)

    ✓ Can handle 'U' for consecutive changes only (70ms)

    ✓ Can handle 'u' to undo 'U' (43ms)

    ✓ Can handle 'U' to undo 'U' (41ms)

    ✓ Can handle 'u' after :s/abc/def (81ms)

    ✓ Redo (67ms)

    ✓ Redo (57ms)

    ✓ Redo (145ms)

    ✓ Can handle u (42ms)

    ✓ Can handle guw

    ✓ Can handle gUw (39ms)

    ✓ Can handle u over line breaks

    ✓ can handle s in visual mode (42ms)

    ✓ can handle p with selection (43ms)

    ✓ can handle P with selection (51ms)

    ✓ can handle p in visual to end of line (61ms)

    ✓ can repeat backspace twice (64ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count (42ms)

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word (41ms)

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word (39ms)

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (40ms)

    ✓ can ctrl-a on a decimal (44ms)

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word (52ms)

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (98ms)

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (175ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S

    ✓ / does not affect mark (43ms)

    ✓ / can search with regex (47ms)

    ✓ / can search with newline (49ms)

    ✓ / can search through multiple newlines (66ms)

    ✓ / matches ^ per line

    ✓ / matches $ per line

    ✓ Can search for forward slash (52ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (47ms)

    ✓ /\C forces case sensitive search

    ✓ <BS> deletes the last character in search in progress mode (68ms)

    ✓ <S-BS> deletes the last character in search in progress mode (38ms)

    ✓ <C-h> deletes the last character in search in progress mode

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag (38ms)

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (41ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside (72ms)

    ✓ can do cit with self closing tags (42ms)

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (46ms)

    ✓ cc copies linewise (39ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words (48ms)

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    2) Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent (48ms)

    ✓ Can do cai

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai (38ms)

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (50ms)

    ✓ '] go to the end of the previously operated or put text (118ms)

    ✓ `[ go to the start of the previously operated or put text (63ms)

    ✓ '[ go to the start of the previously operated or put text (62ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (188ms)

      ✓ gn selects the current word at |hello (168ms)

      ✓ gn selects the current word at h|ello (166ms)

      ✓ gn selects the current word at hel|lo (375ms)

      ✓ gn selects the current word at hell|o (150ms)

      ✓ gn selects the next word at hello| (166ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (125ms)

      ✓ dgn deletes the current word when cursor is at |hello (82ms)

      ✓ dgn deletes the current word when cursor is at h|ello (55ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (45ms)

      ✓ dgn deletes the current word when cursor is at hell|o (86ms)

      ✓ dgn deletes the next word when cursor is at hello| (75ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (70ms)

      ✓ cgn deletes the current word when cursor is at |hello (40ms)

      ✓ cgn deletes the current word when cursor is at h|ello (77ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (52ms)

      ✓ cgn deletes the current word when cursor is at hell|o (47ms)

      ✓ cgn deletes the next word when cursor is at hello| (67ms)

    can handle gN

      ✓ gN selects the previous match text (227ms)

      ✓ gN selects the current word at hell|o (182ms)

      ✓ gN selects the current word at hel|lo (209ms)

      ✓ gN selects the current word at h|ello (190ms)

      ✓ gN selects the current word at |hello (230ms)

      ✓ gN selects the previous word at | hello (189ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (64ms)

      ✓ dgN deletes the current word when cursor is at hell|o (57ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (65ms)

      ✓ dgN deletes the current word when cursor is at h|ello (72ms)

      ✓ dgN deletes the current word when cursor is at |hello (65ms)

      ✓ dgN deletes the previous word when cursor is at | hello (68ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (57ms)

      ✓ cgN deletes the current word when cursor is at hell|o (69ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (64ms)

      ✓ cgN deletes the current word when cursor is at h|ello (112ms)

      ✓ cgN deletes the current word when cursor is at |hello (88ms)

      ✓ cgN deletes the previous word when cursor is at | hello (115ms)

    marks

      ✓ capital marks can change the editors active document (112ms)

      ✓ can jump to lowercase mark (52ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode (59ms)

    ✓ Can handle R

    ✓ Can handle R past current line (81ms)

    ✓ Can handle R and exit Replace Mode

    ✓ Can handle R across lines (56ms)

    ✓ Can handle R across lines and exit Replace Mode (63ms)

    ✓ Can handle R with {count} (59ms)

    ✓ Can handle backspace (44ms)

    ✓ Can handle backspace (46ms)

    ✓ Can handle backspace across lines (57ms)

    ✓ Can handle arrows (41ms)

    ✓ Can handle . (68ms)

    ✓ Can handle . across lines (85ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (118ms)

    ✓ Can handle wd (81ms)

    ✓ Can handle x (64ms)

    ✓ Can handle x across a selection (125ms)

    ✓ Can do vwd in middle of sentence (109ms)

    ✓ Can do vwd in middle of sentence (87ms)

    ✓ Can do vwd multiple times (142ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (102ms)

    ✓ Can handle H key (55ms)

    ✓ Can handle backspace key

    ✓ handles case where we delete over a newline (141ms)

    ✓ handles change operator (259ms)

    ✓ Can do vat on multiple matching tags (43ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (55ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (46ms)

    ✓ Repeat-prefixed vat does not bleed below (55ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis

    ✓ Can do vi) on multiple matching parens (70ms)

    ✓ Can do va) on a matching parenthesis (87ms)

    ✓ Can do va) on multiple matching parens (42ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode

    ✓ Repeat-prefixed va) does not bleed below (44ms)

    ✓ Can do va} on a matching bracket as first character (77ms)

    ✓ Can do va} on multiple matching brackets (44ms)

    ✓ Can do vi( on a matching bracket near first character

    ✓ Can do vi{ on outer pair of nested braces

    ✓ Can do vi{ on braces indented by 1 and preserve indent (38ms)

    ✓ Can do va] on multiple matching brackets (39ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (44ms)

    ✓ Repeat-prefixed vaf does not bleed below (63ms)

    ✓ vaf only expands to enclosing pairs

    ✓ Can use . to repeat indent in visual

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL (76ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (48ms)

    ✓ Can do v$x to delete to last char including EOL

    ✓ Can do gv to reselect previous selection (49ms)

    Vim's EOL handling is weird

      ✓ delete through eol (108ms)

      ✓ join 2 lines by deleting through eol (72ms)

      ✓ d$ doesn't delete whole line (49ms)

      ✓ vd$ does delete whole line (62ms)

      ✓ Paste over selection copies the selection (39ms)

      ✓ Paste over selection copies the selection linewise (46ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

      ✓ Can handle <left> key (79ms)

      ✓ Can handle <right> key (116ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk'

      ✓ Can handle 'gj'

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (50ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces (42ms)

      ✓ Can handle 'vawd' on word with numeric prefix (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (81ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (53ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (40ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (51ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (44ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (43ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (38ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (48ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (84ms)

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (41ms)

      ✓ Can handle 'Y' in visual mode (44ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (46ms)

      ✓ Select sentence with leading spaces in visual mode

      ✓ Select multiple sentences in visual mode (62ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode

      ✓ Select inner sentence with leading spaces in visual mode (43ms)

      ✓ Select spaces between sentences in visual mode (41ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (140ms)

      ✓ Can do vat on a matching tag

    handles replace in visual mode

      ✓ Can do a single line replace (61ms)

      ✓ Can do a multi line replace (45ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines

      ✓ D deletes the current line

    handles indent blocks in visual mode

      ✓ Can do vai (227ms)

      ✓ Can do vii (59ms)

      ✓ Doesn't naively select the next line

      ✓ Searches backwards if cursor line is empty (82ms)

      ✓ Can do vaI

    visualstar

      ✓ Works with * (41ms)

      ✓ Works with # (42ms)

    search works in visual mode

      ✓ Works with / (54ms)

      ✓ Works with ? (51ms)

      ✓ Selects correct range (135ms)

    X will delete linewise

      ✓ normal selection (72ms)

      ✓ normal selection (39ms)

    C will delete linewise

      ✓ normal selection

      ✓ normal selection

    R will delete linewise

      ✓ normal selection (43ms)

      ✓ normal selection (55ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (80ms)

      ✓ upward selection (89ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection

      ✓ multiline indent bottom up selection

      ✓ repeat multiline indent top down selection (58ms)

      ✓ repeat multiline indent bottom up selection (50ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (64ms)

      ✓ multiline outdent bottom up selection (52ms)

      ✓ repeat multiline outdent top down selection (56ms)

      ✓ repeat multiline outdent bottom up selection (46ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (178ms)

    vi{ will go to end of second to last line

      ✓ select (49ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode (64ms)

      ✓ Vv will transit to visual (char) mode (51ms)

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (338ms)

      ✓ gv selects the last pasted text (which is longer than original) (271ms)

      ✓ gv selects the last pasted text (multiline) (168ms)

    can handle gn

      ✓ gn selects the next match text (226ms)

      ✓ gn selects the current word at |hello (129ms)

      ✓ gn selects the current word at h|ello (183ms)

      ✓ gn selects the current word at hel|lo (201ms)

      ✓ gn selects the next word at hell|o (144ms)

      ✓ gn selects the next word at hello| (148ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection

      ✓ multiline insert from top down selection

      ✓ skips blank lines

    can append text with A

      ✓ multiline append from bottom up selection (46ms)

      ✓ multiline append from top down selection (38ms)

      ✓ skips blank lines

    Can handle u/gu, U/gU

      ✓ U/gU on single character (52ms)

      ✓ U/gU across a selection (65ms)

      ✓ U/gU across a selection (reverse) (66ms)

      ✓ u/gu on single character (45ms)

      ✓ u/gu across a selection (96ms)

      ✓ u/gu across a selection (reverse) (56ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (62ms)

    ✓ Can handle A backwards select (53ms)

    ✓ Can handle I forward select (115ms)

    ✓ Can handle I backwards select

    ✓ Can handle I with empty lines on first character (inserts on empty line) (107ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (58ms)

    ✓ Can handle c forward select (50ms)

    ✓ Can handle c backwards select (83ms)

    ✓ Can handle C (97ms)

    3) Can do a multi line replace

    ✓ Can handle 'D' (53ms)

    4) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (46ms)

    5) Properly add to end of lines $ then j

    ✓ o works in visual block mode

    6) d deletes block

    7) x deletes block

    8) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (127ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (404ms)

    ✓ Can handle wd (132ms)

    ✓ Can handle x (58ms)

    ✓ Can handle x across a selection (103ms)

    ✓ Can do vwd in middle of sentence (229ms)

    ✓ Can do vwd in middle of sentence (96ms)

    ✓ Can do vwd multiple times (119ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (143ms)

    ✓ handles case where we delete over a newline (119ms)

    ✓ handles change operator (78ms)

    ✓ Vp updates register content (127ms)

    ✓ Vp does not append unnecessary newlines (first line)

    ✓ Vp does not append unnecessary newlines (middle line) (63ms)

    ✓ Vp does not append unnecessary newlines (last line) (46ms)

    ✓ Exiting via <Esc> returns cursor to original column

    ✓ Exiting via `VV` returns cursor to original column (44ms)

    Vim's EOL handling is weird

      ✓ delete through eol (110ms)

      ✓ join 2 lines by deleting through eol (124ms)

      ✓ d$ doesn't delete whole line (46ms)

      ✓ vd$ does delete whole line (147ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key (45ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (42ms)

      ✓ Can handle 'gj' (71ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key

      ✓ Can handle d key

      ✓ Can handle d key (102ms)

      ✓ can handle 'c' (73ms)

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up (45ms)

    search works in visual line mode

      ✓ Works with / (94ms)

      ✓ Works with ? (64ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (94ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (64ms)

      ✓ linewise visual put works also in the end of document (42ms)

      ✓ gv selects the last pasted text (which is shorter than original) (291ms)

      ✓ gv selects the last pasted text (which is longer than original) (293ms)

      ✓ gv selects the last pasted text (multiline) (158ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (53ms)

      ✓ multiline insert from top down selection

      ✓ skips blank lines (46ms)

    can append text with A

      ✓ multiline append from bottom up selection

      ✓ multiline append from top down selection

      ✓ skips blank lines

      ✓ updates desired column correctly (48ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (125ms)

    ✓ Can handle 'x' at end of line (48ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>' (105ms)

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (93ms)

    ✓ Can handle '<Del>' at end of line (118ms)

    ✓ Can handle 'cc' (77ms)

    ✓ Can handle 'Ncc' (86ms)

    ✓ Can handle 'yy' (62ms)

    ✓ Can handle 'D' (51ms)

    ✓ Can handle 'D' on empty lines (350ms)

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put (51ms)

    ✓ Can handle 'r' (55ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r' (179ms)

    ✓ Can handle 'r' after 'dd'

    ✓ Can handle 'r
'

    ✓ Can handle '<Count>r
' (66ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line (45ms)

    ✓ Can handle 'J's with multiple empty last lines (50ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~' (40ms)

    ✓ Can handle 'g~{motion}' (45ms)

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (61ms)

    9) Can handle 'ge' in multiple lines case1

    10) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (132ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J' (50ms)

    ✓ Can handle dot with A (123ms)

    ✓ Can handle dot with I (102ms)

    ✓ Can repeat actions that require selections

  Repeat content change

    ✓ Can repeat '<C-t>' (50ms)

    ✓ Can repeat insert change and '<C-t>' (99ms)

    ✓ Can repeat change by `<C-a>` (136ms)

    ✓ Only one arrow key can be repeated in Insert Mode (52ms)

    ✓ Cached content change will be cleared by arrow keys (51ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after " (70ms)

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{ (75ms)

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]} (70ms)

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (85ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    11) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (370ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (45ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a reverse search (47ms)

    ✓ Can run a reverse and find next search

    ✓ cancelled search reverts to previous search state (50ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (38ms)

    ✓ Search offsets: b2 goes 2 to the right (52ms)

    ✓ Search offsets: b+3 goes 3 to the right (43ms)

    ✓ Search offsets: e goes to the end (103ms)

    ✓ Search offsets: character offset goes across line boundaries (49ms)

    ✓ Search offsets: 2 goes 2 down (44ms)

    ✓ Search offsets: -2 goes 2 up (59ms)

    ✓ maintains column position correctly (69ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix (57ms)

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat (60ms)

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle * (83ms)

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n (60ms)

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history (40ms)

    ✓ # adds to search history (63ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (60ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix (67ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key (104ms)

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      12) Preserves desired cursor position when pressing zz

      13) Preserves desired cursor position when pressing zt

      14) Preserves desired cursor position when pressing zb

      15) Preserves desired cursor position when pressing <C-e>

      16) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down
    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin
    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line
    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (52ms)

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (42ms)

      ✓ search wraps around the start of the file (50ms)

    wrapscan disabled

      ✓ search stops at the end of the file (41ms)

      ✓ search stops at the start of the file (39ms)

  Multicursor

    ✓ can add multiple cursors below (63ms)

    ✓ can add multiple cursors above (163ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor

    17) <C-v>d works with multi-cursor

    18) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    19) o works with multi-cursor

  numeric string

    ✓ fails on non-string
    ✓ handles hex round trip
    ✓ handles decimal round trip
    ✓ handles octal trip
  comment operator

    ✓ gcc comments out current line (111ms)

    ✓ gcj comments in current and next line (91ms)

    ✓ block comment with motion (165ms)

    ✓ block comment in Visual Mode (178ms)

    ✓ comment in visual line mode (327ms)

    ✓ comment in visual block mode (203ms)

  format operator

    ✓ == formats current line (400ms)

    ✓ =$ formats entire line (190ms)

    ✓ =j formats two lines (202ms)

    ✓ 3=k formats three lines (83ms)

    20) =gg formats to top of file

    ✓ =G formats to bottom of file (165ms)

    ✓ =ip formats paragraph (94ms)

    ✓ format in visual mode (84ms)

  put operator

    ✓ basic put test (147ms)

    ✓ test yy end of line (58ms)

    ✓ test yy first line (38ms)

    ✓ test yy middle line

    ✓ test yy with correct positon movement (55ms)

    ✓ test visual block single line yank p (48ms)

    ✓ test visual block single line yank P (52ms)

    ✓ test visual block single line delete p (56ms)

    ✓ test visual block single line delete P (116ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (48ms)

    ✓ g? in visual mode works

    ✓ g? in visual line mode works

    21) g? in visual block mode works

  shift operator

    ✓ basic shift left test (46ms)

    ✓ shift left goto end test (42ms)

    ✓ shift left goto line test

    ✓ shift right goto end test

    ✓ shift right goto line test (42ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work (90ms)

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (211ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (64ms)

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (97ms)

      ✓ delete two words from camelWord (89ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles <leader>b

      ✓ back from middle of word (383ms)

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word (78ms)

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (45ms)

    ✓ Can handle 2s move

    ✓ Can handle f move

    ✓ Can handle 2f move (46ms)

    ✓ Can handle F move (80ms)

    ✓ Can handle 2F move (49ms)

    ✓ Can handle t move

    ✓ Can handle bd-t move (45ms)

    ✓ Can handle 2t move (81ms)

    ✓ Can handle bd-t2 move (129ms)

    ✓ Can handle T move

    ✓ Can handle 2T move (78ms)

    ✓ Can handle w move (43ms)

    ✓ Can handle bd-w move (64ms)

    ✓ Can handle b move (39ms)

    ✓ Can handle e move (41ms)

    ✓ Can handle bd-e move (41ms)

    ✓ Can handle ge move

    ✓ Can handle n-char move (44ms)

    ✓ Can handle j move

    ✓ Can handle k move

    ✓ Can handle bd-jk move (1) (66ms)

    ✓ Can handle bd-jk move (2) (49ms)

    ✓ Can handle lineforward move (1)

    ✓ Can handle lineforward move (2)

    22) Can handle linebackward move (1)

    23) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (39ms)

    ✓ Replaces within inner Word (43ms)

    ✓ Replaces within '' (51ms)

    ✓ Replaces within '' including spaces (40ms)

    ✓ Replaces within () (51ms)

    ✓ Replaces within () including spaces (49ms)

    ✓ Replaces within a paragraph (52ms)

    ✓ Replaces using a specified register (46ms)

    ✓ Replaces within {} over multiple lines (88ms)

    ✓ Replaces a multiline register within {} over multiple lines (65ms)

    ✓ Replaces a multiline register within {} over multiple lines (38ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (47ms)

    ✓ grr replaces the entire line with the register (46ms)

    ✓ grr can replace multiple lines (41ms)

    ✓ Replaces in visual mode (51ms)

    ✓ Replaces in visual mode using a specified register (143ms)

    ✓ Replaces in visual line mode (46ms)

    ✓ grj is linewise (45ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion

    ✓ Can handle s; motion

    ✓ Can handle s, motion

    ✓ Can handle S; motion (39ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion

    ✓ Can handle single letter <operator>Z motion (44ms)

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion (43ms)

    ✓ Can handle multiline single char <number>s motion

  sneakReplacesF

    ✓ sneakReplacesF forward (40ms)

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (68ms)

    ✓ 'ysiw(' surrounds word with space (49ms)

    ✓ 'ysw)' surrounds word without space (69ms)

    ✓ 'ysw(' surrounds word with space (77ms)

    ✓ 'ysaw)' surrounds word without space (80ms)

    ✓ 'ysaw(' surrounds word with space (80ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (63ms)

    ✓ 'ysiw<' surrounds word with tags (49ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (50ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (72ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (69ms)

    ✓ change surround (47ms)

    ✓ change surround with two pairs of quotes (42ms)

    ✓ change surround with two pairs of parens (56ms)

    ✓ change surround with alias (107ms)

    ✓ change surround to tags (104ms)

    ✓ delete surround (55ms)

    ✓ delete surround with quotes (51ms)

    ✓ delete surround with nested of quotes (54ms)

    ✓ delete surround with inconsistent quotes (68ms)

    ✓ delete surround with mixed quotes (47ms)

    ✓ delete surround with empty quotes cursor at start

    ✓ delete surround with empty quotes cursor at end (58ms)

    ✓ don't delete surround if cursor is after closing match (42ms)

    ✓ delete surround if cursor is before opening match (54ms)

    ✓ delete surround with two pairs of parens (63ms)

    ✓ delete surround with alias (48ms)

    ✓ delete surround with tags (47ms)

    ✓ change surround brackets at end of line (64ms)

    ✓ changing brackets with surround works again (66ms)

    ✓ change surround with tags that contain an attribute and preserve them (132ms)

    ✓ change surround with tags that contain an attribute and remove them (45ms)

  register

    ✓ Can copy to a register (50ms)

    ✓ Can use two registers together (42ms)

    ✓ Can use black hole register (154ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (134ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (112ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (372ms)

    ✓ Register '1'-'9' stores delete content (216ms)

    ✓ "A appends linewise text to "a (161ms)

    ✓ "A appends character wise text to "a (232ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (116ms)

    ✓ Small deletion using Del is stored in small delete register (109ms)

    ✓ Small deletion using X is stored in small delete register (168ms)

    ✓ Search register (/) is set by forward search (212ms)

    ✓ Search register (/) is set by backward search (197ms)

    ✓ Search register (/) is set by star search (131ms)

    ✓ Command register (:) is set by command line (134ms)

    ✓ Read-only registers cannot be written to (252ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (39ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward (38ms)

      ✓ move one sentence backward

      ✓ move [count] sentences backward

      ✓ move one sentence backward single line - middle (40ms)

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period (42ms)

      ✓ move one sentence backward - multiline - previous line (39ms)

      ✓ move one sentence backward - multiline - previous line - period (44ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix
    resolveUri
      ✓ posix
      ✓ win32
  1322 passing (3m)
  4 pending
  23 failing
  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)

  2) Mode Normal
       Can 'D'elete the characters under multiple cursors until the end of the line:

      Wrong number of cursors
      + expected - actual

      -1
      +2
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:2083:3)

  3) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)

  4) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)

  5) Mode Visual Block
       Properly add to end of lines $ then j:

      Wrong number of cursors
      + expected - actual

      -1
      +5
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:151:3)

  6) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)

  7) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  8) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)

  9) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)

  10) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  11) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)

  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)

  15) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)

  16) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)

  17) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  18) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  19) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  20) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)

  21) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  22) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  23) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: 5a241730-5864-11ea-b533-891a36a4ac0b

@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 8

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.12.4 build /home/travis/build/VSCodeVim/Vim
> gulp build

[07:53:42] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[07:53:42] Starting 'build'...
[07:53:42] Starting 'prettier'...
[07:53:42] Finished 'prettier' after 824 ms
[07:53:42] Starting 'tsc'...
[07:53:42] Starting 'tslint'...
[07:53:50] Finished 'tslint' after 7.32 s
[07:53:58] Finished 'tsc' after 16 s
[07:53:58] Starting 'commit-hash'...
[07:53:58] Finished 'commit-hash' after 26 ms
[07:53:58] Finished 'build' after 17 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T07:54:02.708Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (44ms)

    ✓ command <C-w> can remove word in search mode (39ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (40ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor (48ms)

    ✓ <C-u> deletes from cursor to first character (57ms)

    ✓ <C-b> puts cursor at start of command line (40ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (55ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (74ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (101ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (136ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (85ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (68ms)

  command-line lexer

    ✓ can lex empty string
    ✓ can lex comma

    ✓ can lex percent
    ✓ can lex dollar
    ✓ can lex dot
    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1447ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar
  command line scanner
    ✓ ctor
    ✓ can detect EOF with empty input
    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (542ms)

    ✓ :smile editor contains smile text (535ms)

  Basic sort

    ✓ Sort whole file, asc (143ms)

    ✓ Sort whole file, asc, ignoreCase (92ms)

    ✓ Sort whole file, dsc (113ms)

    ✓ Sort whole file, dsc, ignoreCase (120ms)

    ✓ Sort range, asc (206ms)

    ✓ Sort range, asc, ignoreCase (141ms)

    ✓ Sort range, dsc (128ms)

    ✓ Sort range, dsc, ignoreCase (116ms)

    ✓ Sort whole file, asc, unique (129ms)

  Horizontal split

    ✓ :sp creates a second split (169ms)

    ✓ :split creates a second split (72ms)

    ✓ :new creates a second split (269ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !
    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (100ms)

    ✓ Replace with `g` flag (48ms)

    ✓ Replace with flags AND count (97ms)

    ✓ Replace with `c` flag (84ms)

    ✓ Replace with `gc` flag (84ms)

    ✓ Replace across all lines (109ms)

    ✓ Replace on specific single line (90ms)

    ✓ Replace on current line using dot (89ms)

    ✓ Replace single relative line using dot and plus (158ms)

    ✓ Replace across specific line range (100ms)

    ✓ Replace across relative line range using dot, plus, and minus (131ms)

    ✓ Replace across relative line range using numLines+colon shorthand (105ms)

    ✓ Repeat replacement across relative line range (103ms)

    ✓ Replace with range AND count but no flags (91ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (96ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (72ms)

    ✓ Undocumented: trailing operators use 1 as RHS (79ms)

    ✓ Replace specific single equal lines (78ms)

    ✓ Replace current line with no active selection (79ms)

    ✓ Replace text in selection (87ms)

    ✓ Substitute support marks (100ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (55ms)

      ✓ Replace with `g` flag inverts global flag (44ms)

      ✓ Replace with `c` flag inverts global flag (84ms)

      ✓ Replace multiple lines (103ms)

      ✓ Replace across specific lines (90ms)

      ✓ Replace current line with no active selection (69ms)

      ✓ Replace text in selection (82ms)

      ✓ Substitute support marks (96ms)

      ✓ Substitute with escaped delimiter (51ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (201ms)

      ✓ Substitute with previous search using # (189ms)

      ✓ Substitute with previous search using / (237ms)

      ✓ Substitute with parameters should update search state (117ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (282ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (136ms)

      ✓ Substitute repeat previous should accept flags (88ms)

      ✓ Substitute with empty search string should use last searched pattern (296ms)

      ✓ Ampersand (&) should repeat the last substitution (56ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (64ms)

    ✓ tabe with current file path does nothing (52ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (55ms)

    ✓ command line file navigate tab completion (45ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (64ms)

    ✓ command line file tab completion with space in file path (136ms)

  Vertical split

    ✓ :vs creates a second split (70ms)

    ✓ :vsp creates a second split (66ms)

    ✓ :vsplit creates a second split (63ms)

    ✓ :vnew creates a second split (313ms)

    ✓ :vne creates a second split (248ms)

  Basic write-quit

    ✓ Run write and quit (143ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (49ms)

      ✓ Can complete lines in file with different indentation (40ms)

      ✓ Returns no completions for unmatched line (43ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (95ms)

    ✓ getMatchingRemap (90ms)

    ✓ jj -> <Esc> through modehandler (92ms)

    ✓ 0 -> :wq through modehandler (90ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (100ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (69ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (99ms)

    ✓ d -> black hole register delete in normal mode through modehandler (148ms)

    ✓ d -> black hole register delete in normal mode through modehandler (150ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (147ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: Ggg (115ms)

        ✓ Can track jumps for keys: GggG (44ms)

        ✓ Can track jumps for keys: GggGgg (59ms)

        ✓ Can track jumps for keys: /b<CR>n (49ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (58ms)

        ✓ Can track jumps for keys: j%% (41ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (38ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (38ms)

        ✓ Can track jumps for keys: j%%<C-o>% (45ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (52ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (55ms)

[main 2020-02-26T07:54:32.710Z] update#setState checking for updates

[main 2020-02-26T07:54:32.771Z] update#setState idle

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (83ms)

        ✓ Can enter number to jump back multiple times (82ms)

        ✓ Can track one-line `` jumps (54ms)

        ✓ Can track one-line double `` jumps (95ms)

        ✓ Can track one-line '' jumps (80ms)

        ✓ Can track one-line double '' jumps (84ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (96ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (78ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (131ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (124ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (128ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (177ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (148ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (137ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (184ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (50ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (130ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (136ms)

    ✓ Can repeat last invoked macro (246ms)

    ✓ Can play back with count (415ms)

    ✓ Can play back with count, abort when a motion fails (442ms)

    ✓ Repeat change on contiguous lines (150ms)

    ✓ Append command to a macro (166ms)

    ✓ Can record Ctrl Keys and repeat (186ms)

    ✓ Can execute macros with dot commands properly (130ms)

    ✓ : (command) register can be used as a macro (105ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate (50ms)

    ✓ get

  Mode Insert

    ✓ can be activated (87ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (64ms)

    ✓ <C-c> can exit insert (55ms)

    ✓ <Esc> can exit insert (59ms)

    ✓ Stay in insert when entering characters (66ms)

    ✓ Can handle 'O' (47ms)

    ✓ 'i' puts you in insert mode before the cursor (73ms)

    ✓ 'I' puts you in insert mode at start of line (44ms)

    ✓ 'a' puts you in insert mode after the cursor (43ms)

    ✓ 'A' appends to end of line (99ms)

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (47ms)

    ✓ <C-u> deletes to start of line (125ms)

    ✓ Can handle <C-u> on leading characters (48ms)

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (87ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (39ms)

    ✓ Backspace works on whitespace only lines (47ms)

    ✓ Backspace works on end of whitespace only lines (63ms)

    ✓ Backspace works at beginning of file (43ms)

    ✓ Delete works in insert mode (49ms)

    ✓ Delete works at line end (166ms)

    ✓ Delete works at end of file (64ms)

    ✓ Delete works with repeat (163ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (82ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (54ms)

    ✓ Can perform insert command prefixed with count (56ms)

    ✓ Can perform append command prefixed with count (65ms)

    ✓ Can perform insert at start of line command prefixed with count (128ms)

    ✓ Can perform append to end of line command prefixed with count (39ms)

    ✓ Can perform change char (s) command prefixed with count (103ms)

    ✓ Can perform command prefixed with count with <C-[> (48ms)

    ✓ Can handle 'o' with count (113ms)

    ✓ Can handle 'O' with count (93ms)

    ✓ Can handle backspace at beginning of line with all spaces (48ms)

    ✓ Can handle digraph insert (80ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1) (41ms)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line (47ms)

    ✓ Can handle dd single line

    ✓ Can handle dd (41ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (47ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (45ms)

    ✓ Can handle 'de' (41ms)

    ✓ Can handle 'de' then 'de' again (51ms)

    ✓ Can handle 'db' (38ms)

    ✓ Can handle 'db then 'db' again (53ms)

    ✓ Can handle 'dl' at end of line (66ms)

    ✓ Can handle 'dF' (47ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (41ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (50ms)

    ✓ Can handle 'd]}' without deleting closing bracket (152ms)

    ✓ Can handle 'cw' (55ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w' (51ms)

    ✓ Can handle 'cw' without removing EOL (49ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (47ms)

    ✓ Can handle 'c]}' without deleting closing bracket (38ms)

    ✓ Can handle 's' (45ms)

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (76ms)

    ✓ Can handle 'ciw' on blanks (97ms)

    ✓ Can handle 'caw' (69ms)

    ✓ Can handle 'caw' on first letter (51ms)

    ✓ Can handle 'caw' on blanks (84ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'ci(' on first parentheses (40ms)

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses (51ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (42ms)

    ✓ Can handle count prefixed 'ci)' (76ms)

    ✓ Can handle count prefixed 'ca)' (43ms)

    ✓ Can handle 'ca(' spanning multiple lines (38ms)

    ✓ Can handle 'cab' spanning multiple lines (47ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (38ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (40ms)

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket (50ms)

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket (44ms)

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (86ms)

    ✓ Can handle 'ci'' on closing quote (180ms)

    ✓ Can handle 'ci'' when string is ahead (50ms)

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word (46ms)

    ✓ Can handle 'ca"' starting on the opening quote (40ms)

    ✓ Can handle 'ci"' with escaped quotes (38ms)

    ✓ Can handle 'ci"' with a single escaped quote (48ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (44ms)

    ✓ Can handle 'ci"' with an escaped backslash (39ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (42ms)

    ✓ Can handle 'ca"' starting on the closing quote (41ms)

    ✓ Can handle 'ci"' with complex escape sequences (47ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (48ms)

    ✓ will fail when ca" ahead of quoted string (38ms)

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (63ms)

    ✓ can handle ck (90ms)

    ✓ can handle c2j (99ms)

    ✓ can handle c2k (64ms)

    ✓ can handle cj on last line (101ms)

    ✓ can handle ck on first line (66ms)

    ✓ can handle c2j on last line (98ms)

    ✓ can handle c2k on first line (81ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces (38ms)

    ✓ Can handle 'daw' on word with leading spaces (53ms)

    ✓ Can handle 'daw' on word with numeric prefix (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (41ms)

    ✓ Can handle 'daw' on end of word (52ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (47ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (46ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line (58ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (40ms)

    ✓ Can handle 'daw' around word at end of line (47ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (46ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces (48ms)

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (45ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (80ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line (45ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (71ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (86ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (49ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (65ms)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word (40ms)

    ✓ Can handle 'diw' on word with numeric prefix (49ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line (61ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (50ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (79ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (144ms)

    ✓ Can handle 'diW' on word with trailing spaces (48ms)

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines (42ms)

    ✓ Can handle 'diW' on beginning of word (54ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (58ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces (52ms)

    ✓ Select sentence with leading spaces (49ms)

    ✓ Select inner sentence with trailing spaces (80ms)

    ✓ Select inner sentence with leading spaces (50ms)

    ✓ Select spaces between sentences (63ms)

    ✓ Can handle 'df' (52ms)

    ✓ Can handle 'dt' (62ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (126ms)

    ✓ I should updated desiredColumn (38ms)

    ✓ leaving insert mode should update desired column when entered with a (66ms)

    ✓ leaving insert mode should update desired column when entered with i (118ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy' (45ms)

    ✓ Can handle 'P' after 'Nyy' (55ms)

    ✓ Can handle 'p' after 'Nyy' (42ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (53ms)

    ✓ Can handle 'gp' after 'yy' (47ms)

    ✓ Can handle 'gp' after 'Nyy' (48ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (59ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (42ms)

    ✓ Can handle 'gP' after 'yy' (64ms)

    ✓ Can handle 'gP' after 'Nyy' (51ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (41ms)

    ✓ Can handle ']p' after yy (43ms)

    ✓ Can handle ']p' after 'Nyy' (53ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (50ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (66ms)

    ✓ Can handle '[p' after yy (55ms)

    ✓ Can handle '[p' after 'Nyy' (54ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (60ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (53ms)

    ✓ Can handle 'p' after y'a (54ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (155ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (70ms)

    ✓ gI works correctly (68ms)

    ✓ gi works correctly (93ms)

    ✓ `. works correctly (69ms)

    ✓ '. works correctly (53ms)

    ✓ g; works correctly (78ms)

    ✓ g, works correctly (121ms)

    ✓ g_ works correctly (51ms)

    ✓ 3g_ works correctly (221ms)

    ✓ gq handles spaces after single line comments correctly (53ms)

    ✓ gq handles spaces before single line comments correctly (78ms)

    ✓ gq handles tabs before single line comments correctly (49ms)

    ✓ Can handle space (45ms)

    ✓ Can handle space (48ms)

    ✓ Undo 1 (98ms)

    ✓ Undo 2 (84ms)

    ✓ Undo cursor (109ms)

    ✓ Undo cursor 2 (141ms)

    ✓ Undo cursor 3 (148ms)

    ✓ Undo with movement first (91ms)

    ✓ Can handle 'U' (64ms)

    ✓ Can handle 'U' for multiple changes (129ms)

    ✓ Can handle 'U' for new line below (82ms)

    ✓ Can handle 'U' for new line above (86ms)

    ✓ Can handle 'U' for consecutive changes only (128ms)

    ✓ Can handle 'u' to undo 'U' (61ms)

    ✓ Can handle 'U' to undo 'U' (53ms)

    ✓ Can handle 'u' after :s/abc/def (89ms)

    ✓ Redo (101ms)

    ✓ Redo (153ms)

    ✓ Redo (157ms)

    ✓ Can handle u (56ms)

    ✓ Can handle guw

    ✓ Can handle gUw (41ms)

    ✓ Can handle u over line breaks (38ms)

    ✓ can handle s in visual mode (65ms)

    ✓ can handle p with selection (76ms)

    ✓ can handle P with selection (68ms)

    ✓ can handle p in visual to end of line (101ms)

    ✓ can repeat backspace twice (71ms)

    ✓ can delete linewise with d2G (49ms)

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count (135ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word (38ms)

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (51ms)

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number (46ms)

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (73ms)

    ✓ can ctrl-x on a negative number with word before and after  (39ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S

    ✓ / does not affect mark (55ms)

    ✓ / can search with regex (74ms)

    ✓ / can search with newline (53ms)

    ✓ / can search through multiple newlines (70ms)

    ✓ / matches ^ per line (75ms)

    ✓ / matches $ per line (49ms)

    ✓ Can search for forward slash (43ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (51ms)

    ✓ /\C forces case sensitive search (85ms)

    ✓ <BS> deletes the last character in search in progress mode (50ms)

    ✓ <S-BS> deletes the last character in search in progress mode (55ms)

    ✓ <C-h> deletes the last character in search in progress mode (38ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (46ms)

    ✓ Ignores cit on a non-matching tag (38ms)

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag (46ms)

    ✓ Can do cit on a multiline tag with nested tags (48ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (56ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside (188ms)

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc (56ms)

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (39ms)

    ✓ cc copies linewise (59ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words (51ms)

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line (40ms)

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (68ms)

    ✓ Can do cii (50ms)

    ✓ Can do caI (46ms)

    ✓ Can do dai

    ✓ Can do dii (49ms)

    ✓ Can do daI (50ms)

    ✓ `] go to the end of the previously operated or put text (81ms)

    ✓ '] go to the end of the previously operated or put text (135ms)

    ✓ `[ go to the start of the previously operated or put text (91ms)

    ✓ '[ go to the start of the previously operated or put text (80ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (62ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (252ms)

      ✓ gn selects the current word at |hello (203ms)

      ✓ gn selects the current word at h|ello (229ms)

      ✓ gn selects the current word at hel|lo (230ms)

      ✓ gn selects the current word at hell|o (271ms)

      ✓ gn selects the next word at hello| (242ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (68ms)

      ✓ dgn deletes the current word when cursor is at |hello (61ms)

      ✓ dgn deletes the current word when cursor is at h|ello (94ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (61ms)

      ✓ dgn deletes the current word when cursor is at hell|o (81ms)

      ✓ dgn deletes the next word when cursor is at hello| (78ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (132ms)

      ✓ cgn deletes the current word when cursor is at |hello (68ms)

      ✓ cgn deletes the current word when cursor is at h|ello (79ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (84ms)

      ✓ cgn deletes the current word when cursor is at hell|o (67ms)

      ✓ cgn deletes the next word when cursor is at hello| (78ms)

    can handle gN

      ✓ gN selects the previous match text (237ms)

      ✓ gN selects the current word at hell|o (431ms)

      ✓ gN selects the current word at hel|lo (210ms)

      ✓ gN selects the current word at h|ello (328ms)

      ✓ gN selects the current word at |hello (235ms)

      ✓ gN selects the previous word at | hello (232ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (62ms)

      ✓ dgN deletes the current word when cursor is at hell|o (68ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (82ms)

      ✓ dgN deletes the current word when cursor is at h|ello (86ms)

      ✓ dgN deletes the current word when cursor is at |hello (95ms)

      ✓ dgN deletes the previous word when cursor is at | hello (318ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (82ms)

      ✓ cgN deletes the current word when cursor is at hell|o (80ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (82ms)

      ✓ cgN deletes the current word when cursor is at h|ello (125ms)

      ✓ cgN deletes the current word when cursor is at |hello (91ms)

      ✓ cgN deletes the previous word when cursor is at | hello (88ms)

    marks

      ✓ capital marks can change the editors active document (120ms)

      ✓ can jump to lowercase mark (46ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (42ms)

    ✓ Can handle R past current line (75ms)

    ✓ Can handle R and exit Replace Mode (53ms)

    ✓ Can handle R across lines (75ms)

    ✓ Can handle R across lines and exit Replace Mode (94ms)

    ✓ Can handle R with {count} (69ms)

    ✓ Can handle backspace (49ms)

    ✓ Can handle backspace (76ms)

    ✓ Can handle backspace across lines (143ms)

    ✓ Can handle arrows (54ms)

    ✓ Can handle . (96ms)

    ✓ Can handle . across lines (140ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (190ms)

    ✓ Can handle wd (93ms)

    ✓ Can handle x (154ms)

    ✓ Can handle x across a selection (132ms)

    ✓ Can do vwd in middle of sentence (140ms)

    ✓ Can do vwd in middle of sentence (162ms)

    ✓ Can do vwd multiple times (150ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (153ms)

    ✓ Can handle H key (49ms)

    ✓ Can handle backspace key (46ms)

    ✓ handles case where we delete over a newline (200ms)

    ✓ handles change operator (123ms)

    ✓ Can do vat on multiple matching tags (63ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (60ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (42ms)

    ✓ Repeat-prefixed vat does not bleed below (54ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (47ms)

    ✓ Can do vi) on a matching parenthesis (59ms)

    ✓ Can do vi) on multiple matching parens (53ms)

    ✓ Can do va) on a matching parenthesis (42ms)

    ✓ Can do va) on multiple matching parens (44ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (66ms)

    ✓ Repeat-prefixed va) does not bleed below (51ms)

    ✓ Can do va} on a matching bracket as first character (47ms)

    ✓ Can do va} on multiple matching brackets (51ms)

    ✓ Can do vi( on a matching bracket near first character (46ms)

    ✓ Can do vi{ on outer pair of nested braces (54ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (46ms)

    ✓ Can do va] on multiple matching brackets (63ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (55ms)

    ✓ Repeat-prefixed vaf does not bleed below (53ms)

    ✓ vaf only expands to enclosing pairs

    ✓ Can use . to repeat indent in visual (54ms)

    ✓ Can do v_x to delete to first char (44ms)

    ✓ Can do vg_x to delete to last char with no EOL (54ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (51ms)

    ✓ Can do v$x to delete to last char including EOL (59ms)

    ✓ Can do gv to reselect previous selection (64ms)

    Vim's EOL handling is weird

      ✓ delete through eol (102ms)

      ✓ join 2 lines by deleting through eol (375ms)

      ✓ d$ doesn't delete whole line (121ms)

      ✓ vd$ does delete whole line (76ms)

      ✓ Paste over selection copies the selection (66ms)

      ✓ Paste over selection copies the selection linewise (112ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (46ms)

      ✓ Can handle <down> key (42ms)

      ✓ Can handle <left> key (41ms)

      ✓ Can handle <right> key (78ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (52ms)

      ✓ Can handle 'gj' (48ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (120ms)

      ✓ Can handle 'vawd' on word with trailing spaces (82ms)

      ✓ Can handle 'vawd' on word with leading spaces (57ms)

      ✓ Can handle 'vawd' on word with numeric prefix (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (51ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (47ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (75ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (48ms)

      ✓ Can handle 'vaWd' on word with leading spaces (62ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (48ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (46ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (42ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (48ms)

      ✓ Can handle 'vaWd' on word with leading spaces (65ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (41ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (63ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (60ms)

      ✓ Can handle 'vawd' on word with trailing spaces (62ms)

      ✓ Can handle 'vawd' on word with leading spaces (46ms)

      ✓ Can handle 'vawd' on word with numeric prefix (85ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (52ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (62ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (47ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (58ms)

      ✓ Can handle 'vaWd' on word with leading spaces (46ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (45ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (113ms)

      ✓ Can handle 'Y' in visual mode (47ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (48ms)

      ✓ Select sentence with leading spaces in visual mode (47ms)

      ✓ Select multiple sentences in visual mode (48ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (52ms)

      ✓ Select inner sentence with leading spaces in visual mode (50ms)

      ✓ Select spaces between sentences in visual mode (48ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (124ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (60ms)

      ✓ Can do vat on a matching tag (45ms)

    handles replace in visual mode

      ✓ Can do a single line replace (73ms)

      ✓ Can do a multi line replace (63ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (47ms)

      ✓ D deletes the current line (46ms)

    handles indent blocks in visual mode

      ✓ Can do vai (59ms)

      ✓ Can do vii (86ms)

      ✓ Doesn't naively select the next line (45ms)

      ✓ Searches backwards if cursor line is empty (51ms)

      ✓ Can do vaI (47ms)

    visualstar

      ✓ Works with * (114ms)

      ✓ Works with # (66ms)

    search works in visual mode

      ✓ Works with / (55ms)

      ✓ Works with ? (70ms)

      ✓ Selects correct range (136ms)

    X will delete linewise

      ✓ normal selection (46ms)

      ✓ normal selection (47ms)

    C will delete linewise

      ✓ normal selection (48ms)

      ✓ normal selection (98ms)

    R will delete linewise

      ✓ normal selection (60ms)

      ✓ normal selection (72ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (100ms)

      ✓ upward selection (84ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (96ms)

      ✓ multiline indent bottom up selection (49ms)

      ✓ repeat multiline indent top down selection (58ms)

      ✓ repeat multiline indent bottom up selection (79ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (65ms)

      ✓ multiline outdent bottom up selection (69ms)

      ✓ repeat multiline outdent top down selection (68ms)

      ✓ repeat multiline outdent bottom up selection (75ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (175ms)

    vi{ will go to end of second to last line

      ✓ select (87ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (455ms)

      ✓ gv selects the last pasted text (which is longer than original) (402ms)

      ✓ gv selects the last pasted text (multiline) (212ms)

    can handle gn

      ✓ gn selects the next match text (526ms)

      ✓ gn selects the current word at |hello (324ms)

      ✓ gn selects the current word at h|ello (333ms)

      ✓ gn selects the current word at hel|lo (263ms)

      ✓ gn selects the next word at hell|o (252ms)

      ✓ gn selects the next word at hello| (342ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (58ms)

      ✓ multiline insert from top down selection (79ms)

      ✓ skips blank lines (51ms)

    can append text with A

      ✓ multiline append from bottom up selection (70ms)

      ✓ multiline append from top down selection (121ms)

      ✓ skips blank lines (53ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (67ms)

      ✓ U/gU across a selection (98ms)

      ✓ U/gU across a selection (reverse) (107ms)

      ✓ u/gu on single character (100ms)

      ✓ u/gu across a selection (121ms)

      ✓ u/gu across a selection (reverse) (307ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (76ms)

    ✓ Can handle A backwards select (407ms)

    ✓ Can handle I forward select (73ms)

    ✓ Can handle I backwards select (137ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (91ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (79ms)

    ✓ Can handle c forward select (62ms)

    ✓ Can handle c backwards select (86ms)

    ✓ Can handle C (82ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (247ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (60ms)

    ✓ Properly add to end of lines $ then j (100ms)

    ✓ o works in visual block mode (49ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (182ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (261ms)

    ✓ Can handle wd (102ms)

    ✓ Can handle x (222ms)

    ✓ Can handle x across a selection (169ms)

    ✓ Can do vwd in middle of sentence (194ms)

    ✓ Can do vwd in middle of sentence (123ms)

    ✓ Can do vwd multiple times (286ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (124ms)

    ✓ handles case where we delete over a newline (178ms)

    ✓ handles change operator (169ms)

    ✓ Vp updates register content (67ms)

    ✓ Vp does not append unnecessary newlines (first line) (53ms)

    ✓ Vp does not append unnecessary newlines (middle line) (53ms)

    ✓ Vp does not append unnecessary newlines (last line) (69ms)

    ✓ Exiting via <Esc> returns cursor to original column

    ✓ Exiting via `VV` returns cursor to original column (126ms)

    Vim's EOL handling is weird

      ✓ delete through eol (178ms)

      ✓ join 2 lines by deleting through eol (99ms)

      ✓ d$ doesn't delete whole line (84ms)

      ✓ vd$ does delete whole line (70ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (42ms)

      ✓ Can handle <down> key (63ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (51ms)

      ✓ Can handle 'gj' (51ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (96ms)

      ✓ Can handle d key (63ms)

      ✓ Can handle d key (41ms)

      ✓ Can handle d key (42ms)

      ✓ can handle 'c' (72ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (55ms)

      ✓ Can do a multi visual line replace (44ms)

      ✓ Can do a multi visual line replace from the bottom up (45ms)

    search works in visual line mode

      ✓ Works with / (66ms)

      ✓ Works with ? (117ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (178ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (53ms)

      ✓ linewise visual put works also in the end of document (46ms)

      ✓ gv selects the last pasted text (which is shorter than original) (421ms)

      ✓ gv selects the last pasted text (which is longer than original) (369ms)

      ✓ gv selects the last pasted text (multiline) (231ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (42ms)

      ✓ multiline insert from top down selection (58ms)

      ✓ skips blank lines (42ms)

    can append text with A

      ✓ multiline append from bottom up selection (46ms)

      ✓ multiline append from top down selection

      ✓ skips blank lines (43ms)

      ✓ updates desired column correctly (48ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx' (57ms)

    ✓ Can handle 'Nx' and paste (63ms)

    ✓ Can handle 'x' at end of line (88ms)

    ✓ Can handle 'Ns' (242ms)

    ✓ Can handle 'Ns' at end of line (77ms)

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (86ms)

    ✓ Can handle '<Del>' at end of line (106ms)

    ✓ Can handle 'cc' (120ms)

    ✓ Can handle 'Ncc' (351ms)

    ✓ Can handle 'yy' (103ms)

    ✓ Can handle 'D' (63ms)

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'DD' (84ms)

    ✓ Can handle 'C' (40ms)

    ✓ Can handle 'NC' (47ms)

    ✓ Can handle 'NC' and put (83ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (72ms)

    ✓ Can handle 'r
' (45ms)

    ✓ Can handle '<Count>r
' (38ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (66ms)

    ✓ Can handle 'J' with empty last line (45ms)

    ✓ Can handle 'J's with multiple empty last lines (79ms)

    ✓ Can handle 'J' with leading white space on next line (153ms)

    ✓ Can handle 'J' with only white space on next line (60ms)

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line (45ms)

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode (43ms)

    ✓ Can handle 'gJ' once (80ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}' (106ms)

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (78ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (76ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (77ms)

    ✓ Can handle dot with I (93ms)

    ✓ Can repeat actions that require selections (55ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (66ms)

    ✓ Can repeat insert change and '<C-t>' (107ms)

    ✓ Can repeat change by `<C-a>` (110ms)

    ✓ Only one arrow key can be repeated in Insert Mode (72ms)

    ✓ Cached content change will be cleared by arrow keys (71ms)

  Matching Bracket (%)

    ✓ before opening parenthesis (39ms)

    ✓ inside parenthesis

    ✓ nested parenthesis beginning (52ms)

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning (132ms)

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after " (79ms)

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[( (66ms)

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ]) (86ms)

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{ (82ms)

    ✓ Can handle nested [{ (70ms)

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive (41ms)

    ✓ Can handle ]}

    ✓ Can handle nested ]} (59ms)

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg'

    ✓ Can handle 'gg' to first non blank char on random line (43ms)

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter> (38ms)

    ✓ $ always keeps cursor on EOL (68ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f' (46ms)

    ✓ Can handle 'f' twice (85ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (42ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search (45ms)

    ✓ Can handle 'f' and multiple back searches (52ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (68ms)

    ✓ Can handle 'T' and find back search (116ms)

    ✓ Can run a forward search (50ms)

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a reverse search (103ms)

    ✓ Can run a reverse and find next search (38ms)

    ✓ cancelled search reverts to previous search state (66ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (108ms)

    ✓ Search offsets: b2 goes 2 to the right (56ms)

    ✓ Search offsets: b+3 goes 3 to the right (45ms)

    ✓ Search offsets: e goes to the end (43ms)

    ✓ Search offsets: character offset goes across line boundaries (48ms)

    ✓ Search offsets: 2 goes 2 down (94ms)

    ✓ Search offsets: -2 goes 2 up (66ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix (71ms)

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix (39ms)

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g* (85ms)

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n (93ms)

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ## (259ms)

    ✓ * adds to search history (61ms)

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent (307ms)

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent (73ms)

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_ (45ms)

    ✓ Can handle g_ with count prefix (77ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk' (102ms)

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down
    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin
    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    line up
      ✓ should move cursor one line up
      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    word right

      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line
    WORD left
      ✓ move cursor WORD left across spaces
      ✓ move cursor WORD left within WORD
      ✓ first WORD should move to previous line, beginning of last WORD
      ✓ first WORD should move to previous line, stops on empty line
      ✓ first WORD should move to previous line, skips whitespace only line
    end of word right
      ✓ move to end of current word right
      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down
      ✓ move down normally
      ✓ move down longer paragraph
      ✓ move down starting inside empty line
      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (77ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (60ms)

      ✓ search wraps around the start of the file (60ms)

    wrapscan disabled

      ✓ search stops at the end of the file (51ms)

      ✓ search stops at the start of the file (55ms)

  Multicursor

    ✓ can add multiple cursors below (113ms)

    ✓ can add multiple cursors above (110ms)

    ✓ dd works with multi-cursor (42ms)

    ✓ Vd works with multi-cursor (58ms)

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip
    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (155ms)

    ✓ gcj comments in current and next line (245ms)

    ✓ block comment with motion (165ms)

    ✓ block comment in Visual Mode (197ms)

    ✓ comment in visual line mode (226ms)

    ✓ comment in visual block mode (160ms)

  format operator

    ✓ == formats current line (413ms)

    ✓ =$ formats entire line (210ms)

    ✓ =j formats two lines (448ms)

    ✓ 3=k formats three lines (110ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (142ms)

    ✓ =ip formats paragraph (106ms)

    ✓ format in visual mode (154ms)

  put operator

    ✓ basic put test (49ms)

    ✓ test yy end of line (91ms)

    ✓ test yy first line (39ms)

    ✓ test yy middle line

    ✓ test yy with correct positon movement (60ms)

    ✓ test visual block single line yank p (45ms)

    ✓ test visual block single line yank P (48ms)

    ✓ test visual block single line delete p (194ms)

    ✓ test visual block single line delete P (66ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works (53ms)

    ✓ g? in visual line mode works (50ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test (146ms)

    ✓ shift left goto end test (42ms)

    ✓ shift left goto line test (48ms)

    ✓ shift right goto end test

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace (110ms)

      ✓ step to Camel word (39ms)

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word (61ms)

      ✓ step from inside operator word (60ms)

      ✓ step to operator and then over (70ms)

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word (40ms)

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word (59ms)

      ✓ step in ALL_CAPS_WORD (65ms)

    handles d<leader>w

      ✓ delete from start of camelWord (57ms)

      ✓ delete from middle of camelWord (105ms)

      ✓ delete from start of CamelWord (158ms)

      ✓ delete two words from camelWord (90ms)

      ✓ delete from start of underscore_word (96ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord (46ms)

      ✓ delete from start of CamelWord (46ms)

      ✓ delete two words from camelWord (170ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word (46ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (71ms)

      ✓ twice to end of word over operator (43ms)

  easymotion plugin

    ✓ Can handle s move (52ms)

    ✓ Can handle 2s move (73ms)

    ✓ Can handle f move (38ms)

    ✓ Can handle 2f move (55ms)

    ✓ Can handle F move

    ✓ Can handle 2F move

    ✓ Can handle t move (119ms)

    ✓ Can handle bd-t move (48ms)

    ✓ Can handle 2t move (114ms)

    ✓ Can handle bd-t2 move (68ms)

    ✓ Can handle T move

    ✓ Can handle 2T move (38ms)

    ✓ Can handle w move (48ms)

    ✓ Can handle bd-w move (65ms)

    ✓ Can handle b move (121ms)

    ✓ Can handle e move (72ms)

    ✓ Can handle bd-e move (42ms)

    ✓ Can handle ge move (40ms)

    ✓ Can handle n-char move (49ms)

    ✓ Can handle j move (168ms)

    ✓ Can handle k move (98ms)

    ✓ Can handle bd-jk move (1) (55ms)

    ✓ Can handle bd-jk move (2) (40ms)

    ✓ Can handle lineforward move (1) (43ms)

    ✓ Can handle lineforward move (2)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (38ms)

    ✓ Can handle searching for carat (^) (48ms)

    ✓ Can handle searching for dot (.)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (82ms)

    ✓ Replaces within inner Word (200ms)

    ✓ Replaces within '' (79ms)

    ✓ Replaces within '' including spaces (50ms)

    ✓ Replaces within () (56ms)

    ✓ Replaces within () including spaces (98ms)

    ✓ Replaces within a paragraph (55ms)

    ✓ Replaces using a specified register (43ms)

    ✓ Replaces within {} over multiple lines (44ms)

    ✓ Replaces a multiline register within {} over multiple lines (43ms)

    ✓ Replaces a multiline register within {} over multiple lines (45ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (531ms)

    ✓ grr replaces the entire line with the register (49ms)

    ✓ grr can replace multiple lines (44ms)

    ✓ Replaces in visual mode (66ms)

    ✓ Replaces in visual mode using a specified register (71ms)

    ✓ Replaces in visual line mode (113ms)

    ✓ grj is linewise (69ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion (38ms)

    ✓ Can handle <operator>z motion (187ms)

    ✓ Can handle <operator>Z motion (127ms)

    ✓ Can handle s; motion

    ✓ Can handle s, motion (41ms)

    ✓ Can handle S; motion (63ms)

    ✓ Can handle S, motion (109ms)

    ✓ Can handle single letter s motion (65ms)

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (81ms)

    ✓ Can handle single letter <operator>Z motion (49ms)

    ✓ Can handle single letter s; motion (46ms)

    ✓ Can handle single letter s, motion (62ms)

    ✓ Can handle single letter S; motion (39ms)

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward (39ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (134ms)

    ✓ 'ysiw(' surrounds word with space (92ms)

    ✓ 'ysw)' surrounds word without space (108ms)

    ✓ 'ysw(' surrounds word with space (104ms)

    ✓ 'ysaw)' surrounds word without space (125ms)

    ✓ 'ysaw(' surrounds word with space (88ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (115ms)

    ✓ 'ysiw<' surrounds word with tags (164ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (189ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (84ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (85ms)

    ✓ change surround (54ms)

    ✓ change surround with two pairs of quotes (86ms)

    ✓ change surround with two pairs of parens (393ms)

    ✓ change surround with alias (144ms)

    ✓ change surround to tags (147ms)

    ✓ delete surround (80ms)

    ✓ delete surround with quotes (45ms)

    ✓ delete surround with nested of quotes (90ms)

    ✓ delete surround with inconsistent quotes (46ms)

    ✓ delete surround with mixed quotes (184ms)

    ✓ delete surround with empty quotes cursor at start (50ms)

    ✓ delete surround with empty quotes cursor at end (82ms)

    ✓ don't delete surround if cursor is after closing match (50ms)

    ✓ delete surround if cursor is before opening match (154ms)

    ✓ delete surround with two pairs of parens (97ms)

    ✓ delete surround with alias (42ms)

    ✓ delete surround with tags (181ms)

    ✓ change surround brackets at end of line (51ms)

    ✓ changing brackets with surround works again (53ms)

    ✓ change surround with tags that contain an attribute and preserve them (104ms)

    ✓ change surround with tags that contain an attribute and remove them (63ms)

  register

    ✓ Can copy to a register (84ms)

    ✓ Can use two registers together (165ms)

    ✓ Can use black hole register (53ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (238ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (221ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (261ms)

    ✓ Register '1'-'9' stores delete content (291ms)

    ✓ "A appends linewise text to "a (458ms)

    ✓ "A appends character wise text to "a (236ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (177ms)

    ✓ Small deletion using Del is stored in small delete register (252ms)

    ✓ Small deletion using X is stored in small delete register (165ms)

    ✓ Search register (/) is set by forward search (834ms)

    ✓ Search register (/) is set by backward search (361ms)

    ✓ Search register (/) is set by star search (754ms)

    ✓ Command register (:) is set by command line (125ms)

    ✓ Read-only registers cannot be written to (254ms)

    clipboard

      ✓ Can access '*' (clipboard) register (46ms)

      ✓ Can access '+' (clipboard) register (44ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (43ms)

    ✓ Can repeat N times reversed t<character> (72ms)

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward (91ms)

      ✓ move [count] sentences backward (119ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (63ms)

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline (67ms)

      ✓ move one sentence backward - multiline - period (77ms)

      ✓ move one sentence backward - multiline - previous line (93ms)

      ✓ move one sentence backward - multiline - previous line - period (43ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1324 passing (4m)

  4 pending
  21 failing
  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)

  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-8.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.12.4 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.42.1 into .vscode-test/vscode-1.42.1.
Downloading VS Code from: https://update.code.visualstudio.com/1.42.1/linux-x64/stable
Downloaded VS Code 1.42.1
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.42.1/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-02-26T07:54:02.708Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive
    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (44ms)

    ✓ command <C-w> can remove word in search mode (39ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (40ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor (48ms)

    ✓ <C-u> deletes from cursor to first character (57ms)

    ✓ <C-b> puts cursor at start of command line (40ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (55ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (74ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (101ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (136ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (85ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (68ms)

  command-line lexer

    ✓ can lex empty string
    ✓ can lex comma

    ✓ can lex percent
    ✓ can lex dollar
    ✓ can lex dot
    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1447ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar
  command line scanner
    ✓ ctor
    ✓ can detect EOF with empty input
    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (542ms)

    ✓ :smile editor contains smile text (535ms)

  Basic sort

    ✓ Sort whole file, asc (143ms)

    ✓ Sort whole file, asc, ignoreCase (92ms)

    ✓ Sort whole file, dsc (113ms)

    ✓ Sort whole file, dsc, ignoreCase (120ms)

    ✓ Sort range, asc (206ms)

    ✓ Sort range, asc, ignoreCase (141ms)

    ✓ Sort range, dsc (128ms)

    ✓ Sort range, dsc, ignoreCase (116ms)

    ✓ Sort whole file, asc, unique (129ms)

  Horizontal split

    ✓ :sp creates a second split (169ms)

    ✓ :split creates a second split (72ms)

    ✓ :new creates a second split (269ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !
    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (100ms)

    ✓ Replace with `g` flag (48ms)

    ✓ Replace with flags AND count (97ms)

    ✓ Replace with `c` flag (84ms)

    ✓ Replace with `gc` flag (84ms)

    ✓ Replace across all lines (109ms)

    ✓ Replace on specific single line (90ms)

    ✓ Replace on current line using dot (89ms)

    ✓ Replace single relative line using dot and plus (158ms)

    ✓ Replace across specific line range (100ms)

    ✓ Replace across relative line range using dot, plus, and minus (131ms)

    ✓ Replace across relative line range using numLines+colon shorthand (105ms)

    ✓ Repeat replacement across relative line range (103ms)

    ✓ Replace with range AND count but no flags (91ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (96ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (72ms)

    ✓ Undocumented: trailing operators use 1 as RHS (79ms)

    ✓ Replace specific single equal lines (78ms)

    ✓ Replace current line with no active selection (79ms)

    ✓ Replace text in selection (87ms)

    ✓ Substitute support marks (100ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (55ms)

      ✓ Replace with `g` flag inverts global flag (44ms)

      ✓ Replace with `c` flag inverts global flag (84ms)

      ✓ Replace multiple lines (103ms)

      ✓ Replace across specific lines (90ms)

      ✓ Replace current line with no active selection (69ms)

      ✓ Replace text in selection (82ms)

      ✓ Substitute support marks (96ms)

      ✓ Substitute with escaped delimiter (51ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (201ms)

      ✓ Substitute with previous search using # (189ms)

      ✓ Substitute with previous search using / (237ms)

      ✓ Substitute with parameters should update search state (117ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (282ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (136ms)

      ✓ Substitute repeat previous should accept flags (88ms)

      ✓ Substitute with empty search string should use last searched pattern (296ms)

      ✓ Ampersand (&) should repeat the last substitution (56ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (64ms)

    ✓ tabe with current file path does nothing (52ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (55ms)

    ✓ command line file navigate tab completion (45ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (64ms)

    ✓ command line file tab completion with space in file path (136ms)

  Vertical split

    ✓ :vs creates a second split (70ms)

    ✓ :vsp creates a second split (66ms)

    ✓ :vsplit creates a second split (63ms)

    ✓ :vnew creates a second split (313ms)

    ✓ :vne creates a second split (248ms)

  Basic write-quit

    ✓ Run write and quit (143ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (49ms)

      ✓ Can complete lines in file with different indentation (40ms)

      ✓ Returns no completions for unmatched line (43ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (95ms)

    ✓ getMatchingRemap (90ms)

    ✓ jj -> <Esc> through modehandler (92ms)

    ✓ 0 -> :wq through modehandler (90ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (100ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (69ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (99ms)

    ✓ d -> black hole register delete in normal mode through modehandler (148ms)

    ✓ d -> black hole register delete in normal mode through modehandler (150ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (147ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:11:64)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:580:40)
    at VimrcImpl.<anonymous> (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:4:12)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/out/src/configuration/vimrc.js:28:16)
    at /home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11
    at Generator.next (<anonymous>)
    at /home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:8:71
    at new Promise (<anonymous>)
    at __awaiter (/home/travis/build/VSCodeVim/Vim/out/test/configuration/vimrc.test.js:4:12)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:18:60)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: Ggg (115ms)

        ✓ Can track jumps for keys: GggG (44ms)

        ✓ Can track jumps for keys: GggGgg (59ms)

        ✓ Can track jumps for keys: /b<CR>n (49ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (58ms)

        ✓ Can track jumps for keys: j%% (41ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (38ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (38ms)

        ✓ Can track jumps for keys: j%%<C-o>% (45ms)

        ✓ Can track jumps for keys: j%%<C-o>gg (52ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (55ms)

[main 2020-02-26T07:54:32.710Z] update#setState checking for updates

[main 2020-02-26T07:54:32.771Z] update#setState idle

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (83ms)

        ✓ Can enter number to jump back multiple times (82ms)

        ✓ Can track one-line `` jumps (54ms)

        ✓ Can track one-line double `` jumps (95ms)

        ✓ Can track one-line '' jumps (80ms)

        ✓ Can track one-line double '' jumps (84ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (96ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (78ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (131ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (124ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (128ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (177ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (148ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (137ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (184ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (50ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (130ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (136ms)

    ✓ Can repeat last invoked macro (246ms)

    ✓ Can play back with count (415ms)

    ✓ Can play back with count, abort when a motion fails (442ms)

    ✓ Repeat change on contiguous lines (150ms)

    ✓ Append command to a macro (166ms)

    ✓ Can record Ctrl Keys and repeat (186ms)

    ✓ Can execute macros with dot commands properly (130ms)

    ✓ : (command) register can be used as a macro (105ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate (50ms)

    ✓ get

  Mode Insert

    ✓ can be activated (87ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (64ms)

    ✓ <C-c> can exit insert (55ms)

    ✓ <Esc> can exit insert (59ms)

    ✓ Stay in insert when entering characters (66ms)

    ✓ Can handle 'O' (47ms)

    ✓ 'i' puts you in insert mode before the cursor (73ms)

    ✓ 'I' puts you in insert mode at start of line (44ms)

    ✓ 'a' puts you in insert mode after the cursor (43ms)

    ✓ 'A' appends to end of line (99ms)

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (47ms)

    ✓ <C-u> deletes to start of line (125ms)

    ✓ Can handle <C-u> on leading characters (48ms)

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (87ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (39ms)

    ✓ Backspace works on whitespace only lines (47ms)

    ✓ Backspace works on end of whitespace only lines (63ms)

    ✓ Backspace works at beginning of file (43ms)

    ✓ Delete works in insert mode (49ms)

    ✓ Delete works at line end (166ms)

    ✓ Delete works at end of file (64ms)

    ✓ Delete works with repeat (163ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (82ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (54ms)

    ✓ Can perform insert command prefixed with count (56ms)

    ✓ Can perform append command prefixed with count (65ms)

    ✓ Can perform insert at start of line command prefixed with count (128ms)

    ✓ Can perform append to end of line command prefixed with count (39ms)

    ✓ Can perform change char (s) command prefixed with count (103ms)

    ✓ Can perform command prefixed with count with <C-[> (48ms)

    ✓ Can handle 'o' with count (113ms)

    ✓ Can handle 'O' with count (93ms)

    ✓ Can handle backspace at beginning of line with all spaces (48ms)

    ✓ Can handle digraph insert (80ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1) (41ms)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line (47ms)

    ✓ Can handle dd single line

    ✓ Can handle dd (41ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (47ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (45ms)

    ✓ Can handle 'de' (41ms)

    ✓ Can handle 'de' then 'de' again (51ms)

    ✓ Can handle 'db' (38ms)

    ✓ Can handle 'db then 'db' again (53ms)

    ✓ Can handle 'dl' at end of line (66ms)

    ✓ Can handle 'dF' (47ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (41ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (50ms)

    ✓ Can handle 'd]}' without deleting closing bracket (152ms)

    ✓ Can handle 'cw' (55ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w' (51ms)

    ✓ Can handle 'cw' without removing EOL (49ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (47ms)

    ✓ Can handle 'c]}' without deleting closing bracket (38ms)

    ✓ Can handle 's' (45ms)

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (76ms)

    ✓ Can handle 'ciw' on blanks (97ms)

    ✓ Can handle 'caw' (69ms)

    ✓ Can handle 'caw' on first letter (51ms)

    ✓ Can handle 'caw' on blanks (84ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'ci(' on first parentheses (40ms)

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses (51ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (42ms)

    ✓ Can handle count prefixed 'ci)' (76ms)

    ✓ Can handle count prefixed 'ca)' (43ms)

    ✓ Can handle 'ca(' spanning multiple lines (38ms)

    ✓ Can handle 'cab' spanning multiple lines (47ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (38ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (40ms)

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket (50ms)

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket (44ms)

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (86ms)

    ✓ Can handle 'ci'' on closing quote (180ms)

    ✓ Can handle 'ci'' when string is ahead (50ms)

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word (46ms)

    ✓ Can handle 'ca"' starting on the opening quote (40ms)

    ✓ Can handle 'ci"' with escaped quotes (38ms)

    ✓ Can handle 'ci"' with a single escaped quote (48ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (44ms)

    ✓ Can handle 'ci"' with an escaped backslash (39ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (42ms)

    ✓ Can handle 'ca"' starting on the closing quote (41ms)

    ✓ Can handle 'ci"' with complex escape sequences (47ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (48ms)

    ✓ will fail when ca" ahead of quoted string (38ms)

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (63ms)

    ✓ can handle ck (90ms)

    ✓ can handle c2j (99ms)

    ✓ can handle c2k (64ms)

    ✓ can handle cj on last line (101ms)

    ✓ can handle ck on first line (66ms)

    ✓ can handle c2j on last line (98ms)

    ✓ can handle c2k on first line (81ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces (38ms)

    ✓ Can handle 'daw' on word with leading spaces (53ms)

    ✓ Can handle 'daw' on word with numeric prefix (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (41ms)

    ✓ Can handle 'daw' on end of word (52ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (47ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (46ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line (58ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (40ms)

    ✓ Can handle 'daw' around word at end of line (47ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (46ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces (48ms)

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (45ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (80ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line (45ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (71ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (86ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (49ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (65ms)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word (40ms)

    ✓ Can handle 'diw' on word with numeric prefix (49ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line (61ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (50ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (79ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (144ms)

    ✓ Can handle 'diW' on word with trailing spaces (48ms)

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines (42ms)

    ✓ Can handle 'diW' on beginning of word (54ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (58ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces (52ms)

    ✓ Select sentence with leading spaces (49ms)

    ✓ Select inner sentence with trailing spaces (80ms)

    ✓ Select inner sentence with leading spaces (50ms)

    ✓ Select spaces between sentences (63ms)

    ✓ Can handle 'df' (52ms)

    ✓ Can handle 'dt' (62ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (126ms)

    ✓ I should updated desiredColumn (38ms)

    ✓ leaving insert mode should update desired column when entered with a (66ms)

    ✓ leaving insert mode should update desired column when entered with i (118ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy' (45ms)

    ✓ Can handle 'P' after 'Nyy' (55ms)

    ✓ Can handle 'p' after 'Nyy' (42ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (53ms)

    ✓ Can handle 'gp' after 'yy' (47ms)

    ✓ Can handle 'gp' after 'Nyy' (48ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (59ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (42ms)

    ✓ Can handle 'gP' after 'yy' (64ms)

    ✓ Can handle 'gP' after 'Nyy' (51ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (41ms)

    ✓ Can handle ']p' after yy (43ms)

    ✓ Can handle ']p' after 'Nyy' (53ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (50ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (66ms)

    ✓ Can handle '[p' after yy (55ms)

    ✓ Can handle '[p' after 'Nyy' (54ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (60ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (53ms)

    ✓ Can handle 'p' after y'a (54ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (155ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (70ms)

    ✓ gI works correctly (68ms)

    ✓ gi works correctly (93ms)

    ✓ `. works correctly (69ms)

    ✓ '. works correctly (53ms)

    ✓ g; works correctly (78ms)

    ✓ g, works correctly (121ms)

    ✓ g_ works correctly (51ms)

    ✓ 3g_ works correctly (221ms)

    ✓ gq handles spaces after single line comments correctly (53ms)

    ✓ gq handles spaces before single line comments correctly (78ms)

    ✓ gq handles tabs before single line comments correctly (49ms)

    ✓ Can handle space (45ms)

    ✓ Can handle space (48ms)

    ✓ Undo 1 (98ms)

    ✓ Undo 2 (84ms)

    ✓ Undo cursor (109ms)

    ✓ Undo cursor 2 (141ms)

    ✓ Undo cursor 3 (148ms)

    ✓ Undo with movement first (91ms)

    ✓ Can handle 'U' (64ms)

    ✓ Can handle 'U' for multiple changes (129ms)

    ✓ Can handle 'U' for new line below (82ms)

    ✓ Can handle 'U' for new line above (86ms)

    ✓ Can handle 'U' for consecutive changes only (128ms)

    ✓ Can handle 'u' to undo 'U' (61ms)

    ✓ Can handle 'U' to undo 'U' (53ms)

    ✓ Can handle 'u' after :s/abc/def (89ms)

    ✓ Redo (101ms)

    ✓ Redo (153ms)

    ✓ Redo (157ms)

    ✓ Can handle u (56ms)

    ✓ Can handle guw

    ✓ Can handle gUw (41ms)

    ✓ Can handle u over line breaks (38ms)

    ✓ can handle s in visual mode (65ms)

    ✓ can handle p with selection (76ms)

    ✓ can handle P with selection (68ms)

    ✓ can handle p in visual to end of line (101ms)

    ✓ can repeat backspace twice (71ms)

    ✓ can delete linewise with d2G (49ms)

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count (135ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word (38ms)

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix (51ms)

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number (46ms)

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (73ms)

    ✓ can ctrl-x on a negative number with word before and after  (39ms)

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ Can do S

    ✓ / does not affect mark (55ms)

    ✓ / can search with regex (74ms)

    ✓ / can search with newline (53ms)

    ✓ / can search through multiple newlines (70ms)

    ✓ / matches ^ per line (75ms)

    ✓ / matches $ per line (49ms)

    ✓ Can search for forward slash (43ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (51ms)

    ✓ /\C forces case sensitive search (85ms)

    ✓ <BS> deletes the last character in search in progress mode (50ms)

    ✓ <S-BS> deletes the last character in search in progress mode (55ms)

    ✓ <C-h> deletes the last character in search in progress mode (38ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (46ms)

    ✓ Ignores cit on a non-matching tag (38ms)

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag (46ms)

    ✓ Can do cit on a multiline tag with nested tags (48ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (56ms)

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside (188ms)

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc (56ms)

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (39ms)

    ✓ cc copies linewise (59ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words (51ms)

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line (40ms)

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (68ms)

    ✓ Can do cii (50ms)

    ✓ Can do caI (46ms)

    ✓ Can do dai

    ✓ Can do dii (49ms)

    ✓ Can do daI (50ms)

    ✓ `] go to the end of the previously operated or put text (81ms)

    ✓ '] go to the end of the previously operated or put text (135ms)

    ✓ `[ go to the start of the previously operated or put text (91ms)

    ✓ '[ go to the start of the previously operated or put text (80ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (62ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (252ms)

      ✓ gn selects the current word at |hello (203ms)

      ✓ gn selects the current word at h|ello (229ms)

      ✓ gn selects the current word at hel|lo (230ms)

      ✓ gn selects the current word at hell|o (271ms)

      ✓ gn selects the next word at hello| (242ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (68ms)

      ✓ dgn deletes the current word when cursor is at |hello (61ms)

      ✓ dgn deletes the current word when cursor is at h|ello (94ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (61ms)

      ✓ dgn deletes the current word when cursor is at hell|o (81ms)

      ✓ dgn deletes the next word when cursor is at hello| (78ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (132ms)

      ✓ cgn deletes the current word when cursor is at |hello (68ms)

      ✓ cgn deletes the current word when cursor is at h|ello (79ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (84ms)

      ✓ cgn deletes the current word when cursor is at hell|o (67ms)

      ✓ cgn deletes the next word when cursor is at hello| (78ms)

    can handle gN

      ✓ gN selects the previous match text (237ms)

      ✓ gN selects the current word at hell|o (431ms)

      ✓ gN selects the current word at hel|lo (210ms)

      ✓ gN selects the current word at h|ello (328ms)

      ✓ gN selects the current word at |hello (235ms)

      ✓ gN selects the previous word at | hello (232ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (62ms)

      ✓ dgN deletes the current word when cursor is at hell|o (68ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (82ms)

      ✓ dgN deletes the current word when cursor is at h|ello (86ms)

      ✓ dgN deletes the current word when cursor is at |hello (95ms)

      ✓ dgN deletes the previous word when cursor is at | hello (318ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (82ms)

      ✓ cgN deletes the current word when cursor is at hell|o (80ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (82ms)

      ✓ cgN deletes the current word when cursor is at h|ello (125ms)

      ✓ cgN deletes the current word when cursor is at |hello (91ms)

      ✓ cgN deletes the previous word when cursor is at | hello (88ms)

    marks

      ✓ capital marks can change the editors active document (120ms)

      ✓ can jump to lowercase mark (46ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (42ms)

    ✓ Can handle R past current line (75ms)

    ✓ Can handle R and exit Replace Mode (53ms)

    ✓ Can handle R across lines (75ms)

    ✓ Can handle R across lines and exit Replace Mode (94ms)

    ✓ Can handle R with {count} (69ms)

    ✓ Can handle backspace (49ms)

    ✓ Can handle backspace (76ms)

    ✓ Can handle backspace across lines (143ms)

    ✓ Can handle arrows (54ms)

    ✓ Can handle . (96ms)

    ✓ Can handle . across lines (140ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (190ms)

    ✓ Can handle wd (93ms)

    ✓ Can handle x (154ms)

    ✓ Can handle x across a selection (132ms)

    ✓ Can do vwd in middle of sentence (140ms)

    ✓ Can do vwd in middle of sentence (162ms)

    ✓ Can do vwd multiple times (150ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (153ms)

    ✓ Can handle H key (49ms)

    ✓ Can handle backspace key (46ms)

    ✓ handles case where we delete over a newline (200ms)

    ✓ handles change operator (123ms)

    ✓ Can do vat on multiple matching tags (63ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (60ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (42ms)

    ✓ Repeat-prefixed vat does not bleed below (54ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (47ms)

    ✓ Can do vi) on a matching parenthesis (59ms)

    ✓ Can do vi) on multiple matching parens (53ms)

    ✓ Can do va) on a matching parenthesis (42ms)

    ✓ Can do va) on multiple matching parens (44ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (66ms)

    ✓ Repeat-prefixed va) does not bleed below (51ms)

    ✓ Can do va} on a matching bracket as first character (47ms)

    ✓ Can do va} on multiple matching brackets (51ms)

    ✓ Can do vi( on a matching bracket near first character (46ms)

    ✓ Can do vi{ on outer pair of nested braces (54ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (46ms)

    ✓ Can do va] on multiple matching brackets (63ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (55ms)

    ✓ Repeat-prefixed vaf does not bleed below (53ms)

    ✓ vaf only expands to enclosing pairs

    ✓ Can use . to repeat indent in visual (54ms)

    ✓ Can do v_x to delete to first char (44ms)

    ✓ Can do vg_x to delete to last char with no EOL (54ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (51ms)

    ✓ Can do v$x to delete to last char including EOL (59ms)

    ✓ Can do gv to reselect previous selection (64ms)

    Vim's EOL handling is weird

      ✓ delete through eol (102ms)

      ✓ join 2 lines by deleting through eol (375ms)

      ✓ d$ doesn't delete whole line (121ms)

      ✓ vd$ does delete whole line (76ms)

      ✓ Paste over selection copies the selection (66ms)

      ✓ Paste over selection copies the selection linewise (112ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (46ms)

      ✓ Can handle <down> key (42ms)

      ✓ Can handle <left> key (41ms)

      ✓ Can handle <right> key (78ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (52ms)

      ✓ Can handle 'gj' (48ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (120ms)

      ✓ Can handle 'vawd' on word with trailing spaces (82ms)

      ✓ Can handle 'vawd' on word with leading spaces (57ms)

      ✓ Can handle 'vawd' on word with numeric prefix (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (51ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (47ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (75ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (48ms)

      ✓ Can handle 'vaWd' on word with leading spaces (62ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (48ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (46ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (42ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (48ms)

      ✓ Can handle 'vaWd' on word with leading spaces (65ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (41ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (63ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (60ms)

      ✓ Can handle 'vawd' on word with trailing spaces (62ms)

      ✓ Can handle 'vawd' on word with leading spaces (46ms)

      ✓ Can handle 'vawd' on word with numeric prefix (85ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (52ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (62ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (47ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (58ms)

      ✓ Can handle 'vaWd' on word with leading spaces (46ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (45ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (113ms)

      ✓ Can handle 'Y' in visual mode (47ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (48ms)

      ✓ Select sentence with leading spaces in visual mode (47ms)

      ✓ Select multiple sentences in visual mode (48ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (52ms)

      ✓ Select inner sentence with leading spaces in visual mode (50ms)

      ✓ Select spaces between sentences in visual mode (48ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (124ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (60ms)

      ✓ Can do vat on a matching tag (45ms)

    handles replace in visual mode

      ✓ Can do a single line replace (73ms)

      ✓ Can do a multi line replace (63ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (47ms)

      ✓ D deletes the current line (46ms)

    handles indent blocks in visual mode

      ✓ Can do vai (59ms)

      ✓ Can do vii (86ms)

      ✓ Doesn't naively select the next line (45ms)

      ✓ Searches backwards if cursor line is empty (51ms)

      ✓ Can do vaI (47ms)

    visualstar

      ✓ Works with * (114ms)

      ✓ Works with # (66ms)

    search works in visual mode

      ✓ Works with / (55ms)

      ✓ Works with ? (70ms)

      ✓ Selects correct range (136ms)

    X will delete linewise

      ✓ normal selection (46ms)

      ✓ normal selection (47ms)

    C will delete linewise

      ✓ normal selection (48ms)

      ✓ normal selection (98ms)

    R will delete linewise

      ✓ normal selection (60ms)

      ✓ normal selection (72ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (100ms)

      ✓ upward selection (84ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (96ms)

      ✓ multiline indent bottom up selection (49ms)

      ✓ repeat multiline indent top down selection (58ms)

      ✓ repeat multiline indent bottom up selection (79ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (65ms)

      ✓ multiline outdent bottom up selection (69ms)

      ✓ repeat multiline outdent top down selection (68ms)

      ✓ repeat multiline outdent bottom up selection (75ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (175ms)

    vi{ will go to end of second to last line

      ✓ select (87ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (455ms)

      ✓ gv selects the last pasted text (which is longer than original) (402ms)

      ✓ gv selects the last pasted text (multiline) (212ms)

    can handle gn

      ✓ gn selects the next match text (526ms)

      ✓ gn selects the current word at |hello (324ms)

      ✓ gn selects the current word at h|ello (333ms)

      ✓ gn selects the current word at hel|lo (263ms)

      ✓ gn selects the next word at hell|o (252ms)

      ✓ gn selects the next word at hello| (342ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (58ms)

      ✓ multiline insert from top down selection (79ms)

      ✓ skips blank lines (51ms)

    can append text with A

      ✓ multiline append from bottom up selection (70ms)

      ✓ multiline append from top down selection (121ms)

      ✓ skips blank lines (53ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (67ms)

      ✓ U/gU across a selection (98ms)

      ✓ U/gU across a selection (reverse) (107ms)

      ✓ u/gu on single character (100ms)

      ✓ u/gu across a selection (121ms)

      ✓ u/gu across a selection (reverse) (307ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (76ms)

    ✓ Can handle A backwards select (407ms)

    ✓ Can handle I forward select (73ms)

    ✓ Can handle I backwards select (137ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (91ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (79ms)

    ✓ Can handle c forward select (62ms)

    ✓ Can handle c backwards select (86ms)

    ✓ Can handle C (82ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (247ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (60ms)

    ✓ Properly add to end of lines $ then j (100ms)

    ✓ o works in visual block mode (49ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (182ms)

  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (261ms)

    ✓ Can handle wd (102ms)

    ✓ Can handle x (222ms)

    ✓ Can handle x across a selection (169ms)

    ✓ Can do vwd in middle of sentence (194ms)

    ✓ Can do vwd in middle of sentence (123ms)

    ✓ Can do vwd multiple times (286ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (124ms)

    ✓ handles case where we delete over a newline (178ms)

    ✓ handles change operator (169ms)

    ✓ Vp updates register content (67ms)

    ✓ Vp does not append unnecessary newlines (first line) (53ms)

    ✓ Vp does not append unnecessary newlines (middle line) (53ms)

    ✓ Vp does not append unnecessary newlines (last line) (69ms)

    ✓ Exiting via <Esc> returns cursor to original column

    ✓ Exiting via `VV` returns cursor to original column (126ms)

    Vim's EOL handling is weird

      ✓ delete through eol (178ms)

      ✓ join 2 lines by deleting through eol (99ms)

      ✓ d$ doesn't delete whole line (84ms)

      ✓ vd$ does delete whole line (70ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (42ms)

      ✓ Can handle <down> key (63ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (51ms)

      ✓ Can handle 'gj' (51ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (96ms)

      ✓ Can handle d key (63ms)

      ✓ Can handle d key (41ms)

      ✓ Can handle d key (42ms)

      ✓ can handle 'c' (72ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (55ms)

      ✓ Can do a multi visual line replace (44ms)

      ✓ Can do a multi visual line replace from the bottom up (45ms)

    search works in visual line mode

      ✓ Works with / (66ms)

      ✓ Works with ? (117ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (178ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (53ms)

      ✓ linewise visual put works also in the end of document (46ms)

      ✓ gv selects the last pasted text (which is shorter than original) (421ms)

      ✓ gv selects the last pasted text (which is longer than original) (369ms)

      ✓ gv selects the last pasted text (multiline) (231ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (42ms)

      ✓ multiline insert from top down selection (58ms)

      ✓ skips blank lines (42ms)

    can append text with A

      ✓ multiline append from bottom up selection (46ms)

      ✓ multiline append from top down selection

      ✓ skips blank lines (43ms)

      ✓ updates desired column correctly (48ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx' (57ms)

    ✓ Can handle 'Nx' and paste (63ms)

    ✓ Can handle 'x' at end of line (88ms)

    ✓ Can handle 'Ns' (242ms)

    ✓ Can handle 'Ns' at end of line (77ms)

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (86ms)

    ✓ Can handle '<Del>' at end of line (106ms)

    ✓ Can handle 'cc' (120ms)

    ✓ Can handle 'Ncc' (351ms)

    ✓ Can handle 'yy' (103ms)

    ✓ Can handle 'D' (63ms)

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'DD' (84ms)

    ✓ Can handle 'C' (40ms)

    ✓ Can handle 'NC' (47ms)

    ✓ Can handle 'NC' and put (83ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (72ms)

    ✓ Can handle 'r
' (45ms)

    ✓ Can handle '<Count>r
' (38ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (66ms)

    ✓ Can handle 'J' with empty last line (45ms)

    ✓ Can handle 'J's with multiple empty last lines (79ms)

    ✓ Can handle 'J' with leading white space on next line (153ms)

    ✓ Can handle 'J' with only white space on next line (60ms)

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line (45ms)

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' in Visual Line mode (43ms)

    ✓ Can handle 'gJ' once (80ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}' (106ms)

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (78ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (76ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (77ms)

    ✓ Can handle dot with I (93ms)

    ✓ Can repeat actions that require selections (55ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (66ms)

    ✓ Can repeat insert change and '<C-t>' (107ms)

    ✓ Can repeat change by `<C-a>` (110ms)

    ✓ Only one arrow key can be repeated in Insert Mode (72ms)

    ✓ Cached content change will be cleared by arrow keys (71ms)

  Matching Bracket (%)

    ✓ before opening parenthesis (39ms)

    ✓ inside parenthesis

    ✓ nested parenthesis beginning (52ms)

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning (132ms)

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after " (79ms)

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[( (66ms)

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ]) (86ms)

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{ (82ms)

    ✓ Can handle nested [{ (70ms)

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive (41ms)

    ✓ Can handle ]}

    ✓ Can handle nested ]} (59ms)

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg'

    ✓ Can handle 'gg' to first non blank char on random line (43ms)

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter> (38ms)

    ✓ $ always keeps cursor on EOL (68ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f' (46ms)

    ✓ Can handle 'f' twice (85ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (42ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search (45ms)

    ✓ Can handle 'f' and multiple back searches (52ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (68ms)

    ✓ Can handle 'T' and find back search (116ms)

    ✓ Can run a forward search (50ms)

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a reverse search (103ms)

    ✓ Can run a reverse and find next search (38ms)

    ✓ cancelled search reverts to previous search state (66ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (108ms)

    ✓ Search offsets: b2 goes 2 to the right (56ms)

    ✓ Search offsets: b+3 goes 3 to the right (45ms)

    ✓ Search offsets: e goes to the end (43ms)

    ✓ Search offsets: character offset goes across line boundaries (48ms)

    ✓ Search offsets: 2 goes 2 down (94ms)

    ✓ Search offsets: -2 goes 2 up (66ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix (71ms)

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix (39ms)

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g* (85ms)

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n (93ms)

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ## (259ms)

    ✓ * adds to search history (61ms)

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent (307ms)

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent (73ms)

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_ (45ms)

    ✓ Can handle g_ with count prefix (77ms)

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk' (102ms)

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down
    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin
    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    line up
      ✓ should move cursor one line up
      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    word right

      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line
    WORD left
      ✓ move cursor WORD left across spaces
      ✓ move cursor WORD left within WORD
      ✓ first WORD should move to previous line, beginning of last WORD
      ✓ first WORD should move to previous line, stops on empty line
      ✓ first WORD should move to previous line, skips whitespace only line
    end of word right
      ✓ move to end of current word right
      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down
      ✓ move down normally
      ✓ move down longer paragraph
      ✓ move down starting inside empty line
      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping
    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line (77ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (60ms)

      ✓ search wraps around the start of the file (60ms)

    wrapscan disabled

      ✓ search stops at the end of the file (51ms)

      ✓ search stops at the start of the file (55ms)

  Multicursor

    ✓ can add multiple cursors below (113ms)

    ✓ can add multiple cursors above (110ms)

    ✓ dd works with multi-cursor (42ms)

    ✓ Vd works with multi-cursor (58ms)

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip
    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (155ms)

    ✓ gcj comments in current and next line (245ms)

    ✓ block comment with motion (165ms)

    ✓ block comment in Visual Mode (197ms)

    ✓ comment in visual line mode (226ms)

    ✓ comment in visual block mode (160ms)

  format operator

    ✓ == formats current line (413ms)

    ✓ =$ formats entire line (210ms)

    ✓ =j formats two lines (448ms)

    ✓ 3=k formats three lines (110ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (142ms)

    ✓ =ip formats paragraph (106ms)

    ✓ format in visual mode (154ms)

  put operator

    ✓ basic put test (49ms)

    ✓ test yy end of line (91ms)

    ✓ test yy first line (39ms)

    ✓ test yy middle line

    ✓ test yy with correct positon movement (60ms)

    ✓ test visual block single line yank p (45ms)

    ✓ test visual block single line yank P (48ms)

    ✓ test visual block single line delete p (194ms)

    ✓ test visual block single line delete P (66ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works (53ms)

    ✓ g? in visual line mode works (50ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test (146ms)

    ✓ shift left goto end test (42ms)

    ✓ shift left goto line test (48ms)

    ✓ shift right goto end test

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace (110ms)

      ✓ step to Camel word (39ms)

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word (61ms)

      ✓ step from inside operator word (60ms)

      ✓ step to operator and then over (70ms)

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word (40ms)

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word (59ms)

      ✓ step in ALL_CAPS_WORD (65ms)

    handles d<leader>w

      ✓ delete from start of camelWord (57ms)

      ✓ delete from middle of camelWord (105ms)

      ✓ delete from start of CamelWord (158ms)

      ✓ delete two words from camelWord (90ms)

      ✓ delete from start of underscore_word (96ms)

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord (46ms)

      ✓ delete from start of CamelWord (46ms)

      ✓ delete two words from camelWord (170ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word (46ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (71ms)

      ✓ twice to end of word over operator (43ms)

  easymotion plugin

    ✓ Can handle s move (52ms)

    ✓ Can handle 2s move (73ms)

    ✓ Can handle f move (38ms)

    ✓ Can handle 2f move (55ms)

    ✓ Can handle F move

    ✓ Can handle 2F move

    ✓ Can handle t move (119ms)

    ✓ Can handle bd-t move (48ms)

    ✓ Can handle 2t move (114ms)

    ✓ Can handle bd-t2 move (68ms)

    ✓ Can handle T move

    ✓ Can handle 2T move (38ms)

    ✓ Can handle w move (48ms)

    ✓ Can handle bd-w move (65ms)

    ✓ Can handle b move (121ms)

    ✓ Can handle e move (72ms)

    ✓ Can handle bd-e move (42ms)

    ✓ Can handle ge move (40ms)

    ✓ Can handle n-char move (49ms)

    ✓ Can handle j move (168ms)

    ✓ Can handle k move (98ms)

    ✓ Can handle bd-jk move (1) (55ms)

    ✓ Can handle bd-jk move (2) (40ms)

    ✓ Can handle lineforward move (1) (43ms)

    ✓ Can handle lineforward move (2)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (38ms)

    ✓ Can handle searching for carat (^) (48ms)

    ✓ Can handle searching for dot (.)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (82ms)

    ✓ Replaces within inner Word (200ms)

    ✓ Replaces within '' (79ms)

    ✓ Replaces within '' including spaces (50ms)

    ✓ Replaces within () (56ms)

    ✓ Replaces within () including spaces (98ms)

    ✓ Replaces within a paragraph (55ms)

    ✓ Replaces using a specified register (43ms)

    ✓ Replaces within {} over multiple lines (44ms)

    ✓ Replaces a multiline register within {} over multiple lines (43ms)

    ✓ Replaces a multiline register within {} over multiple lines (45ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (531ms)

    ✓ grr replaces the entire line with the register (49ms)

    ✓ grr can replace multiple lines (44ms)

    ✓ Replaces in visual mode (66ms)

    ✓ Replaces in visual mode using a specified register (71ms)

    ✓ Replaces in visual line mode (113ms)

    ✓ grj is linewise (69ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion (38ms)

    ✓ Can handle <operator>z motion (187ms)

    ✓ Can handle <operator>Z motion (127ms)

    ✓ Can handle s; motion

    ✓ Can handle s, motion (41ms)

    ✓ Can handle S; motion (63ms)

    ✓ Can handle S, motion (109ms)

    ✓ Can handle single letter s motion (65ms)

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (81ms)

    ✓ Can handle single letter <operator>Z motion (49ms)

    ✓ Can handle single letter s; motion (46ms)

    ✓ Can handle single letter s, motion (62ms)

    ✓ Can handle single letter S; motion (39ms)

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward (39ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (134ms)

    ✓ 'ysiw(' surrounds word with space (92ms)

    ✓ 'ysw)' surrounds word without space (108ms)

    ✓ 'ysw(' surrounds word with space (104ms)

    ✓ 'ysaw)' surrounds word without space (125ms)

    ✓ 'ysaw(' surrounds word with space (88ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (115ms)

    ✓ 'ysiw<' surrounds word with tags (164ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (189ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (84ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (85ms)

    ✓ change surround (54ms)

    ✓ change surround with two pairs of quotes (86ms)

    ✓ change surround with two pairs of parens (393ms)

    ✓ change surround with alias (144ms)

    ✓ change surround to tags (147ms)

    ✓ delete surround (80ms)

    ✓ delete surround with quotes (45ms)

    ✓ delete surround with nested of quotes (90ms)

    ✓ delete surround with inconsistent quotes (46ms)

    ✓ delete surround with mixed quotes (184ms)

    ✓ delete surround with empty quotes cursor at start (50ms)

    ✓ delete surround with empty quotes cursor at end (82ms)

    ✓ don't delete surround if cursor is after closing match (50ms)

    ✓ delete surround if cursor is before opening match (154ms)

    ✓ delete surround with two pairs of parens (97ms)

    ✓ delete surround with alias (42ms)

    ✓ delete surround with tags (181ms)

    ✓ change surround brackets at end of line (51ms)

    ✓ changing brackets with surround works again (53ms)

    ✓ change surround with tags that contain an attribute and preserve them (104ms)

    ✓ change surround with tags that contain an attribute and remove them (63ms)

  register

    ✓ Can copy to a register (84ms)

    ✓ Can use two registers together (165ms)

    ✓ Can use black hole register (53ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (238ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (221ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (261ms)

    ✓ Register '1'-'9' stores delete content (291ms)

    ✓ "A appends linewise text to "a (458ms)

    ✓ "A appends character wise text to "a (236ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (177ms)

    ✓ Small deletion using Del is stored in small delete register (252ms)

    ✓ Small deletion using X is stored in small delete register (165ms)

    ✓ Search register (/) is set by forward search (834ms)

    ✓ Search register (/) is set by backward search (361ms)

    ✓ Search register (/) is set by star search (754ms)

    ✓ Command register (:) is set by command line (125ms)

    ✓ Read-only registers cannot be written to (254ms)

    clipboard

      ✓ Can access '*' (clipboard) register (46ms)

      ✓ Can access '+' (clipboard) register (44ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (43ms)

    ✓ Can repeat N times reversed t<character> (72ms)

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward (91ms)

      ✓ move [count] sentences backward (119ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (63ms)

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline (67ms)

      ✓ move one sentence backward - multiline - period (77ms)

      ✓ move one sentence backward - multiline - previous line (93ms)

      ✓ move one sentence backward - multiline - previous line - period (43ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1324 passing (4m)

  4 pending
  21 failing
  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1731:3)


  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)

  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:300:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:307:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:808:5)


  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:815:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:822:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:829:5)


  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:836:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:76:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:84:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:100:3)


  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: b4eef460-586d-11ea-b533-891a36a4ac0b

@J-Fields J-Fields modified the milestones: v1.13.0, 1.14.0 Mar 24, 2020
J-Fields added a commit that referenced this pull request Mar 24, 2020
This needs tests, but I'm foregoing them until a framework for easily testing multi-cursor behavior is available (see #4583)
Fixes #3968
J-Fields added a commit that referenced this pull request Mar 24, 2020
This needs tests, but I'm foregoing them until a framework for easily testing multi-cursor behavior is available (see #4583)
Fixes #3968
J-Fields added a commit that referenced this pull request Mar 25, 2020
…or visual(line) mode

Once again, tests will come once the framework supports it ergonomically (#4583)
Fixes #4202
@J-Fields J-Fields force-pushed the multicursor-tests branch from 6b89704 to 2b70db9 Compare April 26, 2020 23:42
@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 12

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.13.1 build /home/travis/build/VSCodeVim/Vim
> gulp build

[23:44:23] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[23:44:23] Starting 'build'...
[23:44:23] Starting 'prettier'...
[23:44:24] Finished 'prettier' after 875 ms
[23:44:24] Starting 'tsc'...
[23:44:24] Starting 'tslint'...
[23:44:31] Finished 'tslint' after 7.33 s
[23:44:40] Finished 'tsc' after 16 s
[23:44:40] Starting 'commit-hash'...
[23:44:40] Finished 'commit-hash' after 38 ms
[23:44:40] Finished 'build' after 17 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-26T23:44:47.924Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6317) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6317) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (109ms)

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (40ms)

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (44ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (53ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (91ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (101ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (66ms)

    ✓ <C-p> go to previous search string

  cursor location

    ✓ cursor location in command line (39ms)

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (62ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma
    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args
    ✓ can lex left and right line refs
  :only command

    ✓ Run :only (1323ms)

  command-line parser
    ✓ can parse empty string
    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (537ms)

    ✓ :smile editor contains smile text (530ms)

  Basic sort

    ✓ Sort whole file, asc (93ms)

    ✓ Sort whole file, asc, ignoreCase (89ms)

    ✓ Sort whole file, dsc (113ms)

    ✓ Sort whole file, dsc, ignoreCase (80ms)

    ✓ Sort range, asc (104ms)

    ✓ Sort range, asc, ignoreCase (137ms)

    ✓ Sort range, dsc (119ms)

    ✓ Sort range, dsc, ignoreCase (104ms)

    ✓ Sort whole file, asc, unique (138ms)

  Horizontal split

    ✓ :sp creates a second split (103ms)

    ✓ :split creates a second split (142ms)

    ✓ :new creates a second split (231ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !
    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (47ms)

    ✓ Replace with flags AND count (69ms)

    ✓ Replace with `c` flag (65ms)

    ✓ Replace with `gc` flag (65ms)

    ✓ Replace across all lines (58ms)

    ✓ Replace on specific single line (81ms)

    ✓ Replace on current line using dot (70ms)

    ✓ Replace single relative line using dot and plus (69ms)

    ✓ Replace across specific line range (113ms)

    ✓ Replace across relative line range using dot, plus, and minus (101ms)

    ✓ Replace across relative line range using numLines+colon shorthand (93ms)

    ✓ Repeat replacement across relative line range (90ms)

    ✓ Replace with range AND count but no flags (67ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (78ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (73ms)

    ✓ Undocumented: trailing operators use 1 as RHS (61ms)

    ✓ Replace specific single equal lines (66ms)

    ✓ Replace current line with no active selection (69ms)

    ✓ Replace text in selection (112ms)

    ✓ Substitute support marks (94ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (49ms)

      ✓ Replace with `g` flag inverts global flag (49ms)

      ✓ Replace with `c` flag inverts global flag (69ms)

      ✓ Replace multiple lines (69ms)

      ✓ Replace across specific lines (79ms)

      ✓ Replace current line with no active selection (107ms)

      ✓ Replace text in selection (77ms)

      ✓ Substitute support marks (178ms)

      ✓ Substitute with escaped delimiter (42ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (164ms)

      ✓ Substitute with previous search using # (159ms)

      ✓ Substitute with previous search using / (168ms)

      ✓ Substitute with parameters should update search state (98ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (256ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (139ms)

      ✓ Substitute repeat previous should accept flags (63ms)

      ✓ Substitute with empty search string should use last searched pattern (198ms)

      ✓ Ampersand (&) should repeat the last substitution (60ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (59ms)

    ✓ tabe with current file path does nothing (51ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (58ms)

    ✓ command line file tab completion with space in file path (167ms)

  Vertical split

    ✓ :vs creates a second split (64ms)

    ✓ :vsp creates a second split (163ms)

    ✓ :vsplit creates a second split (87ms)

    ✓ :vnew creates a second split (205ms)

    ✓ :vne creates a second split (189ms)

  Basic write-quit

    ✓ Run write and quit (59ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (38ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (58ms)

    ✓ getMatchingRemap (59ms)

    ✓ jj -> <Esc> through modehandler (107ms)

    ✓ 0 -> :wq through modehandler (111ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (94ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (91ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (87ms)

    ✓ d -> black hole register delete in normal mode through modehandler (145ms)

    ✓ d -> black hole register delete in normal mode through modehandler (113ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (217ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled
  Remapping Validator
    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim

      Can track basic jumps

        ✓ Can track jumps for keys: Ggg (39ms)

        ✓ Can track jumps for keys: GggG (38ms)

        ✓ Can track jumps for keys: GggGgg (39ms)

        ✓ Can track jumps for keys: /b<CR>n (38ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: G?b<CR>ggG (54ms)

        ✓ Can track jumps for keys: j%% (41ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>%

        ✓ Can track jumps for keys: j%%<C-o>gg (44ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (51ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (56ms)

        ✓ Can enter number to jump back multiple times (43ms)

        ✓ Can track one-line `` jumps (50ms)

        ✓ Can track one-line double `` jumps (66ms)

        ✓ Can track one-line '' jumps (64ms)

        ✓ Can track one-line double '' jumps (172ms)

        ✓ Can handle '' jumps with no previous jump (45ms)

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (68ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (60ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (71ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (64ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (159ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (98ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (111ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (115ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (149ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (51ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (103ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

[main 2020-04-26T23:45:17.928Z] update#setState checking for updates

[main 2020-04-26T23:45:17.981Z] update#setState idle

    ✓ Can record and execute (121ms)

    ✓ Can repeat last invoked macro (179ms)

    ✓ Can play back with count (287ms)

    ✓ Can play back with count, abort when a motion fails (293ms)

    ✓ Repeat change on contiguous lines (144ms)

    ✓ Append command to a macro (138ms)

    ✓ Can record Ctrl Keys and repeat (133ms)

    ✓ Can execute macros with dot commands properly (245ms)

    ✓ : (command) register can be used as a macro (78ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (71ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position

    ✓ <C-c> can exit insert (45ms)

    ✓ <Esc> can exit insert (49ms)

    ✓ Stay in insert when entering characters (60ms)

    ✓ Can handle 'O' (41ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line (42ms)

    ✓ 'a' puts you in insert mode after the cursor (53ms)

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters (45ms)

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (77ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (39ms)

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode (50ms)

    ✓ Delete works at line end

    ✓ Delete works at end of file (39ms)

    ✓ Delete works with repeat (106ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (76ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (39ms)

    ✓ Can perform insert command prefixed with count (40ms)

    ✓ Can perform append command prefixed with count (40ms)

    ✓ Can perform insert at start of line command prefixed with count (154ms)

    ✓ Can perform append to end of line command prefixed with count (65ms)

    ✓ Can perform change char (s) command prefixed with count (90ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (99ms)

    ✓ Can handle 'O' with count (92ms)

    ✓ Can handle backspace at beginning of line with all spaces (44ms)

    ✓ Can handle digraph insert (63ms)

    ✓ Can handle custom digraph insert (54ms)

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd (43ms)

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d

    ✓ Can handle dd empty line

    ✓ Can handle ddp

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (46ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (92ms)

    ✓ Can handle 'dl' at end of line (49ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (47ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (54ms)

    ✓ Can handle 'd]}' without deleting closing bracket (39ms)

    ✓ Can handle 'd/' (65ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (42ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (51ms)

    ✓ Can handle 'cw' (42ms)

    ✓ Can handle 'cw' without deleting following white spaces (42ms)

    ✓ Can handle 'c2w' (41ms)

    ✓ Can handle 'cw' without removing EOL (56ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket (40ms)

    ✓ Can handle 's' (66ms)

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (50ms)

    ✓ Can handle 'ciw' on blanks (52ms)

    ✓ Can handle 'caw' (56ms)

    ✓ Can handle 'caw' on first letter (51ms)

    ✓ Can handle 'caw' on blanks (61ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'cae'

    ✓ Can handle 'cae' with caret at document's top

    ✓ Can handle 'cae' with caret at document's end

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'cie' with leading space

    ✓ Can handle 'cie' with trailing space

    ✓ Can handle 'cie' with both leading and trailing space

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (58ms)

    ✓ Can handle count prefixed 'ci)' (50ms)

    ✓ Can handle count prefixed 'ca)' (59ms)

    ✓ Can handle 'ca(' spanning multiple lines (47ms)

    ✓ Can handle 'cab' spanning multiple lines (118ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (60ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines (43ms)

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket (43ms)

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (48ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (44ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote

    ✓ Can handle 'ca"' starting on the closing quote (45ms)

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"' (50ms)

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (39ms)

    ✓ can handle cj (45ms)

    ✓ can handle ck (66ms)

    ✓ can handle c2j (55ms)

    ✓ can handle c2k (70ms)

    ✓ can handle cj on last line (65ms)

    ✓ can handle ck on first line (42ms)

    ✓ can handle c2j on last line (65ms)

    ✓ can handle c2k on first line (58ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (43ms)

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (47ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace

    ✓ Can handle 'daw' on word at beginning of file (48ms)

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (42ms)

    ✓ Can handle 'daw' around word at end of line

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces (48ms)

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines (44ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (40ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (39ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines (40ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces (57ms)

    ✓ Can handle 'diW' on word with leading spaces (44ms)

    ✓ Can handle 'diW' on word with numeric prefix (50ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle 'dae' (48ms)

    ✓ Can handle 'dae' with caret at document's top

    ✓ Can handle 'dae' with caret at document's end

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space

    ✓ Can handle 'die' with trailing space

    ✓ Can handle 'die' with both leading and trailing space

    ✓ Can handle 'die' on blank content

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (74ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line (44ms)

    ✓ Can handle } with operator and count, and not at beginning of line (43ms)

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces (39ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (41ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt' (78ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (111ms)

    ✓ A should update desiredColumn

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (69ms)

    ✓ leaving insert mode should update desired column when entered with i (63ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (46ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy' (38ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (41ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (49ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (42ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (42ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (45ms)

    ✓ Can handle ']p' after yy (66ms)

    ✓ Can handle ']p' after 'Nyy' (45ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (46ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (40ms)

    ✓ Can handle '[p' after yy (49ms)

    ✓ Can handle '[p' after 'Nyy' (46ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (38ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (54ms)

    ✓ Can handle 'p' after y'a (41ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (55ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (41ms)

    ✓ Can handle pasting in visual mode over selection (96ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (62ms)

    ✓ gI works correctly (39ms)

    ✓ gi works correctly (73ms)

    ✓ `. works correctly (62ms)

    ✓ '. works correctly (52ms)

    ✓ g; works correctly (58ms)

    ✓ g, works correctly (69ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly

    ✓ gq handles spaces before single line comments correctly

    ✓ gq handles tabs before single line comments correctly (46ms)

    ✓ Can handle space

    ✓ Can handle space (42ms)

    ✓ Undo 1 (100ms)

    ✓ Undo 2 (82ms)

    ✓ Undo cursor (90ms)

    ✓ Undo cursor 2 (87ms)

    ✓ Undo cursor 3 (101ms)

    ✓ Undo with movement first (79ms)

    ✓ Can handle 'U'

    ✓ Can handle 'U' for multiple changes (58ms)

    ✓ Can handle 'U' for new line below (65ms)

    ✓ Can handle 'U' for new line above (76ms)

    ✓ Can handle 'U' for consecutive changes only (98ms)

    ✓ Can handle 'u' to undo 'U' (46ms)

    ✓ Can handle 'U' to undo 'U' (58ms)

    ✓ Can handle 'u' after :s/abc/def (72ms)

    ✓ Redo (86ms)

    ✓ Redo (84ms)

    ✓ Redo (91ms)

    ✓ Can handle u (39ms)

    ✓ Can handle guw

    ✓ Can handle guae (78ms)

    ✓ Can handle guie

    ✓ Can handle gUw

    ✓ Can handle gUae

    ✓ Can handle gUie (39ms)

    ✓ Can handle u over line breaks (50ms)

    ✓ can handle s in visual mode (56ms)

    ✓ can handle p with selection (47ms)

    ✓ can handle P with selection (42ms)

    ✓ can handle p in visual to end of line (85ms)

    ✓ can repeat backspace twice (142ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count (47ms)

    ✓ can delete with - motion and count (55ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word (41ms)

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number (83ms)

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number) (43ms)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y

    ✓ can do [count]Y if count is larger than EOF (49ms)

    ✓ Can do S

    ✓ / does not affect mark (48ms)

    ✓ / can search with regex (38ms)

    ✓ / can search with newline

    ✓ / can search through multiple newlines (47ms)

    ✓ / matches ^ per line (44ms)

    ✓ / matches $ per line (41ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (43ms)

    ✓ /\C forces case sensitive search (50ms)

    ✓ <BS> deletes the last character in search in progress mode (57ms)

    ✓ <S-BS> deletes the last character in search in progress mode (50ms)

    ✓ <C-h> deletes the last character in search in progress mode

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (39ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags (38ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (40ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (39ms)

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc (38ms)

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (40ms)

    ✓ Indent current line with correct Vim Mode (71ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line (73ms)

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (48ms)

    ✓ Can do cii (49ms)

    ✓ Can do caI

    ✓ Can do dai (41ms)

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (57ms)

    ✓ '] go to the end of the previously operated or put text (54ms)

    ✓ `[ go to the start of the previously operated or put text (54ms)

    ✓ '[ go to the start of the previously operated or put text (56ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (187ms)

      ✓ gn selects the current word at |hello (162ms)

      ✓ gn selects the current word at h|ello (224ms)

      ✓ gn selects the current word at hel|lo (197ms)

      ✓ gn selects the current word at hell|o (196ms)

      ✓ gn selects the next word at hello| (179ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (293ms)

      ✓ dgn deletes the current word when cursor is at |hello (63ms)

      ✓ dgn deletes the current word when cursor is at h|ello (56ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (55ms)

      ✓ dgn deletes the current word when cursor is at hell|o (52ms)

      ✓ dgn deletes the next word when cursor is at hello| (72ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (54ms)

      ✓ cgn deletes the current word when cursor is at |hello (62ms)

      ✓ cgn deletes the current word when cursor is at h|ello (64ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (54ms)

      ✓ cgn deletes the current word when cursor is at hell|o (64ms)

      ✓ cgn deletes the next word when cursor is at hello| (70ms)

    can handle gN

      ✓ gN selects the previous match text (185ms)

      ✓ gN selects the current word at hell|o (198ms)

      ✓ gN selects the current word at hel|lo (243ms)

      ✓ gN selects the current word at h|ello (204ms)

      ✓ gN selects the current word at |hello (198ms)

      ✓ gN selects the previous word at | hello (202ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (48ms)

      ✓ dgN deletes the current word when cursor is at hell|o (66ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (68ms)

      ✓ dgN deletes the current word when cursor is at h|ello (59ms)

      ✓ dgN deletes the current word when cursor is at |hello (70ms)

      ✓ dgN deletes the previous word when cursor is at | hello (69ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (59ms)

      ✓ cgN deletes the current word when cursor is at hell|o (68ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (68ms)

      ✓ cgN deletes the current word when cursor is at h|ello (88ms)

      ✓ cgN deletes the current word when cursor is at |hello (63ms)

      ✓ cgN deletes the previous word when cursor is at | hello (66ms)

    marks

      ✓ capital marks can change the editors active document (106ms)

      ✓ can jump to lowercase mark

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode (45ms)

    ✓ Can activate with R from Normal mode

    ✓ Can handle R

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode (115ms)

    ✓ Can handle R across lines (53ms)

    ✓ Can handle R across lines and exit Replace Mode (75ms)

    ✓ Can handle R with {count} (55ms)

    ✓ Can handle backspace (52ms)

    ✓ Can handle backspace (47ms)

    ✓ Can handle backspace across lines (74ms)

    ✓ Can handle arrows (51ms)

    ✓ Can handle . (68ms)

    ✓ Can handle . across lines (113ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (130ms)

    ✓ Can handle wd (108ms)

    ✓ Can handle x (94ms)

    ✓ Can handle x across a selection (72ms)

    ✓ Can do vwd in middle of sentence (112ms)

    ✓ Can do vwd in middle of sentence (128ms)

    ✓ Can do vwd multiple times (168ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (112ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (51ms)

    ✓ handles case where we delete over a newline (136ms)

    ✓ handles change operator (113ms)

    ✓ Can do vat on multiple matching tags (51ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (61ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (45ms)

    ✓ Repeat-prefixed vat does not bleed below (44ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (43ms)

    ✓ Can do vi) on a matching parenthesis (38ms)

    ✓ Can do vi) on multiple matching parens (57ms)

    ✓ Can do va) on a matching parenthesis (47ms)

    ✓ Can do va) on multiple matching parens (46ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (50ms)

    ✓ Repeat-prefixed va) does not bleed below (42ms)

    ✓ Can do va} on a matching bracket as first character

    ✓ Can do va} on multiple matching brackets (50ms)

    ✓ Can do vi( on a matching bracket near first character (39ms)

    ✓ Can do vi{ on outer pair of nested braces (40ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (47ms)

    ✓ Can do va] on multiple matching brackets (47ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (50ms)

    ✓ Repeat-prefixed vaf does not bleed below (41ms)

    ✓ vaf only expands to enclosing pairs

    ✓ Can use . to repeat indent in visual (284ms)

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL (39ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (46ms)

    ✓ Can do v$x to delete to last char including EOL

    ✓ Can do gv to reselect previous selection (54ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (52ms)

    Vim's EOL handling is weird

      ✓ delete through eol (62ms)

      ✓ join 2 lines by deleting through eol (70ms)

      ✓ d$ doesn't delete whole line (65ms)

      ✓ vd$ does delete whole line (66ms)

      ✓ Paste over selection copies the selection (45ms)

      ✓ Paste over selection copies the selection linewise (67ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (41ms)

      ✓ Can handle <down> key

      ✓ Can handle <left> key (48ms)

      ✓ Can handle <right> key (53ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (130ms)

      ✓ Can handle 'gj' (44ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (40ms)

      ✓ Can handle 'vawd' on word with trailing spaces (44ms)

      ✓ Can handle 'vawd' on word with leading spaces (54ms)

      ✓ Can handle 'vawd' on word with numeric prefix (39ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (47ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (50ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (51ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (43ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (38ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (43ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (53ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (48ms)

      ✓ Can handle 'vawd' on word with trailing spaces (44ms)

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (49ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (46ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (44ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (48ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (38ms)

      ✓ Can handle 'vaWd' on word with leading spaces (57ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (38ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (46ms)

      ✓ Can handle 'Y' in visual mode (54ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (40ms)

      ✓ Select sentence with leading spaces in visual mode (45ms)

      ✓ Select multiple sentences in visual mode (56ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (47ms)

      ✓ Select inner sentence with leading spaces in visual mode (41ms)

      ✓ Select spaces between sentences in visual mode

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (45ms)

      ✓ Can do vat on a matching tag (48ms)

    handles replace in visual mode

      ✓ Can do a single line replace (59ms)

      ✓ Can do a multi line replace (45ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (49ms)

      ✓ D deletes the current line (46ms)

    handles indent blocks in visual mode

      ✓ Can do vai (106ms)

      ✓ Can do vii (46ms)

      ✓ Doesn't naively select the next line (45ms)

      ✓ Searches backwards if cursor line is empty (46ms)

      ✓ Can do vaI (40ms)

    visualstar

      ✓ Works with *

      ✓ Works with # (39ms)

    search works in visual mode

      ✓ Works with / (50ms)

      ✓ Works with ? (47ms)

      ✓ Selects correct range (91ms)

    X will delete linewise

      ✓ normal selection

      ✓ normal selection

    C will delete linewise

      ✓ normal selection (54ms)

      ✓ normal selection

    R will delete linewise

      ✓ normal selection

      ✓ normal selection (38ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (78ms)

      ✓ upward selection (156ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (44ms)

      ✓ multiline indent bottom up selection (54ms)

      ✓ repeat multiline indent top down selection (62ms)

      ✓ repeat multiline indent bottom up selection (51ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (44ms)

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (65ms)

      ✓ repeat multiline outdent bottom up selection (60ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (93ms)

    vi{ will go to end of second to last line

      ✓ select (305ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (304ms)

      ✓ gv selects the last pasted text (which is longer than original) (381ms)

      ✓ gv selects the last pasted text (multiline) (179ms)

    can handle gn

      ✓ gn selects the next match text (156ms)

      ✓ gn selects the current word at |hello (205ms)

      ✓ gn selects the current word at h|ello (192ms)

      ✓ gn selects the current word at hel|lo (210ms)

      ✓ gn selects the next word at hell|o (167ms)

      ✓ gn selects the next word at hello| (186ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (43ms)

      ✓ multiline insert from top down selection (44ms)

      ✓ skips blank lines (45ms)

    can append text with A

      ✓ multiline append from bottom up selection (46ms)

      ✓ multiline append from top down selection (48ms)

      ✓ skips blank lines (38ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (47ms)

      ✓ U/gU across a selection (147ms)

      ✓ U/gU across a selection (reverse) (65ms)

      ✓ u/gu on single character (52ms)

      ✓ u/gu across a selection (101ms)

      ✓ u/gu across a selection (reverse) (71ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (123ms)

      ✓ ~/g~ across a selection (63ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (64ms)

    ✓ Can handle A backwards select (53ms)

    ✓ Can handle I forward select (65ms)

    ✓ Can handle I backwards select (50ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (50ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (56ms)

    ✓ Can handle c forward select (56ms)

    ✓ Can handle c backwards select (52ms)

    ✓ Can handle C (68ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (44ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (46ms)

    ✓ Properly add to end of lines $ then j (71ms)

    ✓ o works in visual block mode (52ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    ✓ Select register using " works in visual block mode (66ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (45ms)

    ✓ Can handle 'J' when the visual block spans multiple lines

    ✓ Can handle 'J' when start position of the visual block is below the stop (39ms)

    ✓ Can handle ~/g~ in visual block mode (81ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (149ms)

  Mode Visual Line

    ✓ can be activated

    ✓ <count>V selects <count> lines (188ms)

    ✓ Can handle w (117ms)

    ✓ Can handle wd (138ms)

    ✓ Can handle x (88ms)

    ✓ Can handle x across a selection (84ms)

    ✓ Can do vwd in middle of sentence (111ms)

    ✓ Can do vwd in middle of sentence (100ms)

    ✓ Can do vwd multiple times (146ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (116ms)

    ✓ handles case where we delete over a newline (137ms)

    ✓ handles change operator (123ms)

    ✓ Vp updates register content (67ms)

    ✓ Vp does not append unnecessary newlines (first line) (47ms)

    ✓ Vp does not append unnecessary newlines (middle line)

    ✓ Vp does not append unnecessary newlines (last line)

    ✓ Exiting via <Esc> returns cursor to original column

    ✓ Exiting via `VV` returns cursor to original column (38ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (44ms)

    Vim's EOL handling is weird

      ✓ delete through eol (94ms)

      ✓ join 2 lines by deleting through eol (384ms)

      ✓ d$ doesn't delete whole line (79ms)

      ✓ vd$ does delete whole line (111ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (45ms)

      ✓ Can handle 'gj' (48ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (54ms)

      ✓ Can handle d key (52ms)

      ✓ Can handle d key (50ms)

      ✓ Can handle d key (50ms)

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up (48ms)

    search works in visual line mode

      ✓ Works with / (62ms)

      ✓ Works with ? (61ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (134ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (46ms)

      ✓ linewise visual put works also in the end of document (44ms)

      ✓ gv selects the last pasted text (which is shorter than original) (288ms)

      ✓ gv selects the last pasted text (which is longer than original) (251ms)

      ✓ gv selects the last pasted text (multiline) (132ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (65ms)

      ✓ multiline insert from top down selection

      ✓ skips blank lines

    can append text with A

      ✓ multiline append from bottom up selection (45ms)

      ✓ multiline append from top down selection (46ms)

      ✓ skips blank lines (40ms)

      ✓ updates desired column correctly (48ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (67ms)

      ✓ ~/g~ on multiple lines (67ms)

  Mode Normal

    ✓ Can handle 'x' (190ms)

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (43ms)

    ✓ Can handle 'x' at end of line (62ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (65ms)

    ✓ Can handle 'cc' (40ms)

    ✓ Can handle 'Ncc' (52ms)

    ✓ Can handle 'yy' (41ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows

    ✓ Can handle 'D' with count when end position is on blank line (39ms)

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (43ms)

    ✓ Can handle 'r
'

    ✓ Can handle '<Count>r
'

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (42ms)

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (56ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF

    ✓ Can handle 'J' in Visual Line mode (44ms)

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~'

    ✓ Can handle '<BS>' in insert mode (44ms)

    ✓ Can handle undo with P (65ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (38ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (71ms)

    ✓ Can handle dot with I (72ms)

    ✓ Can repeat actions that require selections (62ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (57ms)

    ✓ Can repeat insert change and '<C-t>' (69ms)

    ✓ Can repeat change by `<C-a>` (87ms)

    ✓ Only one arrow key can be repeated in Insert Mode (60ms)

    ✓ Cached content change will be cleared by arrow keys (261ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg'

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (364ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches

    ✓ Can handle 't'

    ✓ Can handle 't' twice (40ms)

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search (60ms)

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a forward search with count 1 (41ms)

    ✓ Can run a forward search with count 3

    ✓ Can run a forward search with count exceeding max number of matches

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (271ms)

    ✓ Can run a reverse search with count 1 (49ms)

    ✓ Can run a reverse search with count 3

    ✓ Can run a reverse search with count exceeding max number of matches

    ✓ cancelled search reverts to previous search state (50ms)

    ✓ Backspace on empty search cancels (41ms)

    ✓ Search offsets: b does nothing

    ✓ Search offsets: b2 goes 2 to the right (41ms)

    ✓ Search offsets: b+3 goes 3 to the right (41ms)

    ✓ Search offsets: e goes to the end

    ✓ Search offsets: character offset goes across line boundaries (45ms)

    ✓ Search offsets: 2 goes 2 down (49ms)

    ✓ Search offsets: -2 goes 2 up (51ms)

    ✓ maintains column position correctly (38ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg (42ms)

    ✓ Can handle gg with number prefix (42ms)

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (38ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix (40ms)

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin
    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    line up
      ✓ should move cursor one line up
      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    word right

      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line

      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)

    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word

      ✓ first word should move to previous line, stops on empty line

      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right
      ✓ move to end of next word right
      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right
      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line (44ms)

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (38ms)

      ✓ search wraps around the start of the file

    wrapscan disabled

      ✓ search stops at the end of the file (49ms)

      ✓ search stops at the start of the file (43ms)

  Multicursor

    ✓ can add multiple cursors below (69ms)

    ✓ can add multiple cursors above (86ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (214ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (259ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (237ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (230ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string
    ✓ handles hex round trip
    ✓ handles decimal round trip

    ✓ handles octal trip
  comment operator

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (222ms)

    ✓ gcj comments in current and next line (84ms)

    ✓ block comment with motion (120ms)

    ✓ block comment in Visual Mode (191ms)

    ✓ comment in visual line mode (312ms)

    ✓ comment in visual block mode (208ms)

  format operator

    ✓ == formats current line (238ms)

    ✓ =$ formats entire line (143ms)

    ✓ =j formats two lines (730ms)

    ✓ 3=k formats three lines (142ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (123ms)

    ✓ =ip formats paragraph (94ms)

    ✓ format in visual mode (149ms)

  put operator

    ✓ basic put test (42ms)

    ✓ test yy end of line (40ms)

    ✓ test yy first line (55ms)

    ✓ test yy middle line (43ms)

    ✓ test yy with correct positon movement (80ms)

    ✓ test visual block single line yank p (66ms)

    ✓ test visual block single line yank P (61ms)

    ✓ test visual block single line delete p (45ms)

    ✓ test visual block single line delete P (43ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works

    ✓ g? in visual line mode works (48ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test (181ms)

    ✓ shift left goto end test

    ✓ shift left goto line test

    ✓ shift right goto end test

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number (40ms)

      ✓ step from nubmer word to _word (45ms)

      ✓ step from in whitespace to word (48ms)

      ✓ step in ALL_CAPS_WORD (56ms)

    handles d<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word (40ms)

      ✓ delete from middle of underscore_word (46ms)

      ✓ delete two words from camel_word (44ms)

    handles di<leader>w

      ✓ delete from start of camelWord (38ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (42ms)

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator (43ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (43ms)

    ✓ Can handle 2s move (48ms)

    ✓ Can handle f move (42ms)

    ✓ Can handle 2f move

    ✓ Can handle F move (50ms)

    ✓ Can handle 2F move (50ms)

    ✓ Can handle t move

    ✓ Can handle bd-t move (52ms)

    ✓ Can handle 2t move (45ms)

    ✓ Can handle bd-t2 move (58ms)

    ✓ Can handle T move

    ✓ Can handle 2T move (60ms)

    ✓ Can handle w move (46ms)

    ✓ Can handle bd-w move (42ms)

    ✓ Can handle b move

    ✓ Can handle e move

    ✓ Can handle bd-e move (60ms)

    ✓ Can handle ge move

    ✓ Can handle n-char move (137ms)

    ✓ Can handle j move (43ms)

    ✓ Can handle k move (39ms)

    ✓ Can handle bd-jk move (1) (56ms)

    ✓ Can handle bd-jk move (2) (49ms)

    ✓ Can handle lineforward move (1)

    ✓ Can handle lineforward move (2)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (39ms)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.) (40ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (53ms)

    ✓ Replaces within inner Word (54ms)

    ✓ Replaces within '' (66ms)

    ✓ Replaces within '' including spaces (75ms)

    ✓ Replaces within () (48ms)

    ✓ Replaces within () including spaces (51ms)

    ✓ Replaces within a paragraph (57ms)

    ✓ Replaces using a specified register (65ms)

    ✓ Replaces within {} over multiple lines (46ms)

    ✓ Replaces a multiline register within {} over multiple lines (53ms)

    ✓ Replaces a multiline register within {} over multiple lines (58ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (52ms)

    ✓ grr replaces the entire line with the register (50ms)

    ✓ grr can replace multiple lines (40ms)

    ✓ Replaces in visual mode (68ms)

    ✓ Replaces in visual mode using a specified register (60ms)

    ✓ Replaces in visual line mode (59ms)

    ✓ grj is linewise (38ms)

  sneak plugin

    ✓ Can handle s motion (40ms)

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion (43ms)

    ✓ Can handle s; motion (47ms)

    ✓ Can handle s, motion (141ms)

    ✓ Can handle S; motion (46ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (43ms)

    ✓ Can handle single letter <operator>Z motion

    ✓ Can handle single letter s; motion (41ms)

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward

    ✓ Can go back using <C-o> when repeating forward movement

    ✓ Can go back using <C-o> when repeating backward movement

  sneakReplacesF

    ✓ sneakReplacesF forward (42ms)

    ✓ sneakReplacesF backward (132ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (128ms)

    ✓ 'ysiw(' surrounds word with space (178ms)

    ✓ 'ysw)' surrounds word without space (86ms)

    ✓ 'ysw(' surrounds word with space (75ms)

    ✓ 'ysaw)' surrounds word without space (48ms)

    ✓ 'ysaw(' surrounds word with space (53ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (66ms)

    ✓ 'ysiw<' surrounds word with tags (63ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (66ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (49ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (83ms)

    ✓ change surround (66ms)

    ✓ change surround with two pairs of quotes (61ms)

    ✓ change surround with two pairs of parens (71ms)

    ✓ change surround with alias (61ms)

    ✓ change surround to tags (81ms)

    ✓ delete surround (73ms)

    ✓ delete surround with quotes (105ms)

    ✓ delete surround with nested of quotes (47ms)

    ✓ delete surround with inconsistent quotes (72ms)

    ✓ delete surround with mixed quotes (232ms)

    ✓ delete surround with empty quotes cursor at start (50ms)

    ✓ delete surround with empty quotes cursor at end (67ms)

    ✓ don't delete surround if cursor is after closing match (42ms)

    ✓ delete surround if cursor is before opening match (48ms)

    ✓ delete surround with two pairs of parens (48ms)

    ✓ delete surround with alias (98ms)

    ✓ delete surround with tags (61ms)

    ✓ change surround brackets at end of line (104ms)

    ✓ changing brackets with surround works again (59ms)

    ✓ change surround with tags that contain an attribute and preserve them (91ms)

    ✓ change surround with tags that contain an attribute and remove them (107ms)

  register

    ✓ Can copy to a register (41ms)

    ✓ Can use two registers together (80ms)

    ✓ Can use black hole register (78ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (177ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (178ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (209ms)

    ✓ Register '1'-'9' stores delete content (207ms)

    ✓ "A appends linewise text to "a (179ms)

    ✓ "A appends character wise text to "a (209ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (169ms)

    ✓ Small deletion using Del is stored in small delete register (221ms)

    ✓ Small deletion using X is stored in small delete register (126ms)

    ✓ Search register (/) is set by forward search (257ms)

    ✓ Search register (/) is set by backward search (238ms)

    ✓ Search register (/) is set by star search (212ms)

    ✓ Command register (:) is set by command line (118ms)

    ✓ Read-only registers cannot be written to (115ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character>

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward (91ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (39ms)

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period (47ms)

      ✓ move one sentence backward - multiline - previous line

      ✓ move one sentence backward - multiline - previous line - period

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path
    separatePath
      ✓ can separate drive letter path on Windows
      ✓ can separate UNC path on Windows
      ✓ can separate relative path on Windows
      ✓ can separate absolute path on posix
      ✓ can separate relative path on posix
    resolveUri
      ✓ posix

      ✓ win32

  1383 passing (3m)
  4 pending

  21 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1942:3)


  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)

  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:356:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:850:5)


  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:857:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)


  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:162:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:178:3)


  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-12.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-26T23:44:47.924Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6317) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6317) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (109ms)

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (40ms)

    ✓ <C-b> puts cursor at start of command line

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (44ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (53ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (91ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (101ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (66ms)

    ✓ <C-p> go to previous search string

  cursor location

    ✓ cursor location in command line (39ms)

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system

    ✓ change configuration.history (62ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma
    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args
    ✓ can lex left and right line refs
  :only command

    ✓ Run :only (1323ms)

  command-line parser
    ✓ can parse empty string
    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (537ms)

    ✓ :smile editor contains smile text (530ms)

  Basic sort

    ✓ Sort whole file, asc (93ms)

    ✓ Sort whole file, asc, ignoreCase (89ms)

    ✓ Sort whole file, dsc (113ms)

    ✓ Sort whole file, dsc, ignoreCase (80ms)

    ✓ Sort range, asc (104ms)

    ✓ Sort range, asc, ignoreCase (137ms)

    ✓ Sort range, dsc (119ms)

    ✓ Sort range, dsc, ignoreCase (104ms)

    ✓ Sort whole file, asc, unique (138ms)

  Horizontal split

    ✓ :sp creates a second split (103ms)

    ✓ :split creates a second split (142ms)

    ✓ :new creates a second split (231ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !
    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once

    ✓ Replace with `g` flag (47ms)

    ✓ Replace with flags AND count (69ms)

    ✓ Replace with `c` flag (65ms)

    ✓ Replace with `gc` flag (65ms)

    ✓ Replace across all lines (58ms)

    ✓ Replace on specific single line (81ms)

    ✓ Replace on current line using dot (70ms)

    ✓ Replace single relative line using dot and plus (69ms)

    ✓ Replace across specific line range (113ms)

    ✓ Replace across relative line range using dot, plus, and minus (101ms)

    ✓ Replace across relative line range using numLines+colon shorthand (93ms)

    ✓ Repeat replacement across relative line range (90ms)

    ✓ Replace with range AND count but no flags (67ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (78ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (73ms)

    ✓ Undocumented: trailing operators use 1 as RHS (61ms)

    ✓ Replace specific single equal lines (66ms)

    ✓ Replace current line with no active selection (69ms)

    ✓ Replace text in selection (112ms)

    ✓ Substitute support marks (94ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (49ms)

      ✓ Replace with `g` flag inverts global flag (49ms)

      ✓ Replace with `c` flag inverts global flag (69ms)

      ✓ Replace multiple lines (69ms)

      ✓ Replace across specific lines (79ms)

      ✓ Replace current line with no active selection (107ms)

      ✓ Replace text in selection (77ms)

      ✓ Substitute support marks (178ms)

      ✓ Substitute with escaped delimiter (42ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (164ms)

      ✓ Substitute with previous search using # (159ms)

      ✓ Substitute with previous search using / (168ms)

      ✓ Substitute with parameters should update search state (98ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (256ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (139ms)

      ✓ Substitute repeat previous should accept flags (63ms)

      ✓ Substitute with empty search string should use last searched pattern (198ms)

      ✓ Ampersand (&) should repeat the last substitution (60ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (59ms)

    ✓ tabe with current file path does nothing (51ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (58ms)

    ✓ command line file tab completion with space in file path (167ms)

  Vertical split

    ✓ :vs creates a second split (64ms)

    ✓ :vsp creates a second split (163ms)

    ✓ :vsplit creates a second split (87ms)

    ✓ :vnew creates a second split (205ms)

    ✓ :vne creates a second split (189ms)

  Basic write-quit

    ✓ Run write and quit (59ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (38ms)

      ✓ Can complete lines in file with different indentation

      ✓ Returns no completions for unmatched line

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (58ms)

    ✓ getMatchingRemap (59ms)

    ✓ jj -> <Esc> through modehandler (107ms)

    ✓ 0 -> :wq through modehandler (111ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (94ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (91ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (87ms)

    ✓ d -> black hole register delete in normal mode through modehandler (145ms)

    ✓ d -> black hole register delete in normal mode through modehandler (113ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (217ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled
  Remapping Validator
    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim

      Can track basic jumps

        ✓ Can track jumps for keys: Ggg (39ms)

        ✓ Can track jumps for keys: GggG (38ms)

        ✓ Can track jumps for keys: GggGgg (39ms)

        ✓ Can track jumps for keys: /b<CR>n (38ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read
stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: G?b<CR>ggG (54ms)

        ✓ Can track jumps for keys: j%% (41ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>%

        ✓ Can track jumps for keys: j%%<C-o>gg (44ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (51ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (56ms)

        ✓ Can enter number to jump back multiple times (43ms)

        ✓ Can track one-line `` jumps (50ms)

        ✓ Can track one-line double `` jumps (66ms)

        ✓ Can track one-line '' jumps (64ms)

        ✓ Can track one-line double '' jumps (172ms)

        ✓ Can handle '' jumps with no previous jump (45ms)

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (68ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (60ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (71ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (64ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (159ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (98ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (111ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (115ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (149ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (51ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (103ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

[main 2020-04-26T23:45:17.928Z] update#setState checking for updates

[main 2020-04-26T23:45:17.981Z] update#setState idle

    ✓ Can record and execute (121ms)

    ✓ Can repeat last invoked macro (179ms)

    ✓ Can play back with count (287ms)

    ✓ Can play back with count, abort when a motion fails (293ms)

    ✓ Repeat change on contiguous lines (144ms)

    ✓ Append command to a macro (138ms)

    ✓ Can record Ctrl Keys and repeat (133ms)

    ✓ Can execute macros with dot commands properly (245ms)

    ✓ : (command) register can be used as a macro (78ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (71ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position

    ✓ <C-c> can exit insert (45ms)

    ✓ <Esc> can exit insert (49ms)

    ✓ Stay in insert when entering characters (60ms)

    ✓ Can handle 'O' (41ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line (42ms)

    ✓ 'a' puts you in insert mode after the cursor (53ms)

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters (45ms)

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (77ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (39ms)

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode (50ms)

    ✓ Delete works at line end

    ✓ Delete works at end of file (39ms)

    ✓ Delete works with repeat (106ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (76ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (39ms)

    ✓ Can perform insert command prefixed with count (40ms)

    ✓ Can perform append command prefixed with count (40ms)

    ✓ Can perform insert at start of line command prefixed with count (154ms)

    ✓ Can perform append to end of line command prefixed with count (65ms)

    ✓ Can perform change char (s) command prefixed with count (90ms)

    ✓ Can perform command prefixed with count with <C-[>

    ✓ Can handle 'o' with count (99ms)

    ✓ Can handle 'O' with count (92ms)

    ✓ Can handle backspace at beginning of line with all spaces (44ms)

    ✓ Can handle digraph insert (63ms)

    ✓ Can handle custom digraph insert (54ms)

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd (43ms)

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d

    ✓ Can handle dd empty line

    ✓ Can handle ddp

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again (46ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (92ms)

    ✓ Can handle 'dl' at end of line (49ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (47ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (54ms)

    ✓ Can handle 'd]}' without deleting closing bracket (39ms)

    ✓ Can handle 'd/' (65ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (42ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (51ms)

    ✓ Can handle 'cw' (42ms)

    ✓ Can handle 'cw' without deleting following white spaces (42ms)

    ✓ Can handle 'c2w' (41ms)

    ✓ Can handle 'cw' without removing EOL (56ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket (40ms)

    ✓ Can handle 's' (66ms)

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (50ms)

    ✓ Can handle 'ciw' on blanks (52ms)

    ✓ Can handle 'caw' (56ms)

    ✓ Can handle 'caw' on first letter (51ms)

    ✓ Can handle 'caw' on blanks (61ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'cae'

    ✓ Can handle 'cae' with caret at document's top

    ✓ Can handle 'cae' with caret at document's end

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'cie' with leading space

    ✓ Can handle 'cie' with trailing space

    ✓ Can handle 'cie' with both leading and trailing space

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (58ms)

    ✓ Can handle count prefixed 'ci)' (50ms)

    ✓ Can handle count prefixed 'ca)' (59ms)

    ✓ Can handle 'ca(' spanning multiple lines (47ms)

    ✓ Can handle 'cab' spanning multiple lines (118ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (60ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines (43ms)

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket (43ms)

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (48ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes (44ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote

    ✓ Can handle 'ca"' starting on the closing quote (45ms)

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"' (50ms)

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (39ms)

    ✓ can handle cj (45ms)

    ✓ can handle ck (66ms)

    ✓ can handle c2j (55ms)

    ✓ can handle c2k (70ms)

    ✓ can handle cj on last line (65ms)

    ✓ can handle ck on first line (42ms)

    ✓ can handle c2j on last line (65ms)

    ✓ can handle c2k on first line (58ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (43ms)

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (47ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace

    ✓ Can handle 'daw' on word at beginning of file (48ms)

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (42ms)

    ✓ Can handle 'daw' around word at end of line

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces (48ms)

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines (44ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (40ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (39ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines (40ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces (57ms)

    ✓ Can handle 'diW' on word with leading spaces (44ms)

    ✓ Can handle 'diW' on word with numeric prefix (50ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle 'dae' (48ms)

    ✓ Can handle 'dae' with caret at document's top

    ✓ Can handle 'dae' with caret at document's end

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space

    ✓ Can handle 'die' with trailing space

    ✓ Can handle 'die' with both leading and trailing space

    ✓ Can handle 'die' on blank content

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (74ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line (44ms)

    ✓ Can handle } with operator and count, and not at beginning of line (43ms)

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces (39ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (41ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt' (78ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (111ms)

    ✓ A should update desiredColumn

    ✓ I should updated desiredColumn

    ✓ leaving insert mode should update desired column when entered with a (69ms)

    ✓ leaving insert mode should update desired column when entered with i (63ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (46ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy' (38ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (41ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (49ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (42ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (42ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (45ms)

    ✓ Can handle ']p' after yy (66ms)

    ✓ Can handle ']p' after 'Nyy' (45ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (46ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (40ms)

    ✓ Can handle '[p' after yy (49ms)

    ✓ Can handle '[p' after 'Nyy' (46ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (38ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (54ms)

    ✓ Can handle 'p' after y'a (41ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (55ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (41ms)

    ✓ Can handle pasting in visual mode over selection (96ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (62ms)

    ✓ gI works correctly (39ms)

    ✓ gi works correctly (73ms)

    ✓ `. works correctly (62ms)

    ✓ '. works correctly (52ms)

    ✓ g; works correctly (58ms)

    ✓ g, works correctly (69ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly

    ✓ gq handles spaces before single line comments correctly

    ✓ gq handles tabs before single line comments correctly (46ms)

    ✓ Can handle space

    ✓ Can handle space (42ms)

    ✓ Undo 1 (100ms)

    ✓ Undo 2 (82ms)

    ✓ Undo cursor (90ms)

    ✓ Undo cursor 2 (87ms)

    ✓ Undo cursor 3 (101ms)

    ✓ Undo with movement first (79ms)

    ✓ Can handle 'U'

    ✓ Can handle 'U' for multiple changes (58ms)

    ✓ Can handle 'U' for new line below (65ms)

    ✓ Can handle 'U' for new line above (76ms)

    ✓ Can handle 'U' for consecutive changes only (98ms)

    ✓ Can handle 'u' to undo 'U' (46ms)

    ✓ Can handle 'U' to undo 'U' (58ms)

    ✓ Can handle 'u' after :s/abc/def (72ms)

    ✓ Redo (86ms)

    ✓ Redo (84ms)

    ✓ Redo (91ms)

    ✓ Can handle u (39ms)

    ✓ Can handle guw

    ✓ Can handle guae (78ms)

    ✓ Can handle guie

    ✓ Can handle gUw

    ✓ Can handle gUae

    ✓ Can handle gUie (39ms)

    ✓ Can handle u over line breaks (50ms)

    ✓ can handle s in visual mode (56ms)

    ✓ can handle p with selection (47ms)

    ✓ can handle P with selection (42ms)

    ✓ can handle p in visual to end of line (85ms)

    ✓ can repeat backspace twice (142ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count (47ms)

    ✓ can delete with - motion and count (55ms)

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word (41ms)

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number (83ms)

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number) (43ms)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y

    ✓ can do [count]Y if count is larger than EOF (49ms)

    ✓ Can do S

    ✓ / does not affect mark (48ms)

    ✓ / can search with regex (38ms)

    ✓ / can search with newline

    ✓ / can search through multiple newlines (47ms)

    ✓ / matches ^ per line (44ms)

    ✓ / matches $ per line (41ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (43ms)

    ✓ /\C forces case sensitive search (50ms)

    ✓ <BS> deletes the last character in search in progress mode (57ms)

    ✓ <S-BS> deletes the last character in search in progress mode (50ms)

    ✓ <C-h> deletes the last character in search in progress mode

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (39ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags (38ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (40ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (39ms)

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc (38ms)

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (40ms)

    ✓ Indent current line with correct Vim Mode (71ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line (73ms)

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (48ms)

    ✓ Can do cii (49ms)

    ✓ Can do caI

    ✓ Can do dai (41ms)

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (57ms)

    ✓ '] go to the end of the previously operated or put text (54ms)

    ✓ `[ go to the start of the previously operated or put text (54ms)

    ✓ '[ go to the start of the previously operated or put text (56ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (187ms)

      ✓ gn selects the current word at |hello (162ms)

      ✓ gn selects the current word at h|ello (224ms)

      ✓ gn selects the current word at hel|lo (197ms)

      ✓ gn selects the current word at hell|o (196ms)

      ✓ gn selects the next word at hello| (179ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (293ms)

      ✓ dgn deletes the current word when cursor is at |hello (63ms)

      ✓ dgn deletes the current word when cursor is at h|ello (56ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (55ms)

      ✓ dgn deletes the current word when cursor is at hell|o (52ms)

      ✓ dgn deletes the next word when cursor is at hello| (72ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (54ms)

      ✓ cgn deletes the current word when cursor is at |hello (62ms)

      ✓ cgn deletes the current word when cursor is at h|ello (64ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (54ms)

      ✓ cgn deletes the current word when cursor is at hell|o (64ms)

      ✓ cgn deletes the next word when cursor is at hello| (70ms)

    can handle gN

      ✓ gN selects the previous match text (185ms)

      ✓ gN selects the current word at hell|o (198ms)

      ✓ gN selects the current word at hel|lo (243ms)

      ✓ gN selects the current word at h|ello (204ms)

      ✓ gN selects the current word at |hello (198ms)

      ✓ gN selects the previous word at | hello (202ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (48ms)

      ✓ dgN deletes the current word when cursor is at hell|o (66ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (68ms)

      ✓ dgN deletes the current word when cursor is at h|ello (59ms)

      ✓ dgN deletes the current word when cursor is at |hello (70ms)

      ✓ dgN deletes the previous word when cursor is at | hello (69ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (59ms)

      ✓ cgN deletes the current word when cursor is at hell|o (68ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (68ms)

      ✓ cgN deletes the current word when cursor is at h|ello (88ms)

      ✓ cgN deletes the current word when cursor is at |hello (63ms)

      ✓ cgN deletes the previous word when cursor is at | hello (66ms)

    marks

      ✓ capital marks can change the editors active document (106ms)

      ✓ can jump to lowercase mark

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode (45ms)

    ✓ Can activate with R from Normal mode

    ✓ Can handle R

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode (115ms)

    ✓ Can handle R across lines (53ms)

    ✓ Can handle R across lines and exit Replace Mode (75ms)

    ✓ Can handle R with {count} (55ms)

    ✓ Can handle backspace (52ms)

    ✓ Can handle backspace (47ms)

    ✓ Can handle backspace across lines (74ms)

    ✓ Can handle arrows (51ms)

    ✓ Can handle . (68ms)

    ✓ Can handle . across lines (113ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (130ms)

    ✓ Can handle wd (108ms)

    ✓ Can handle x (94ms)

    ✓ Can handle x across a selection (72ms)

    ✓ Can do vwd in middle of sentence (112ms)

    ✓ Can do vwd in middle of sentence (128ms)

    ✓ Can do vwd multiple times (168ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (112ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (51ms)

    ✓ handles case where we delete over a newline (136ms)

    ✓ handles change operator (113ms)

    ✓ Can do vat on multiple matching tags (51ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (61ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (45ms)

    ✓ Repeat-prefixed vat does not bleed below (44ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (43ms)

    ✓ Can do vi) on a matching parenthesis (38ms)

    ✓ Can do vi) on multiple matching parens (57ms)

    ✓ Can do va) on a matching parenthesis (47ms)

    ✓ Can do va) on multiple matching parens (46ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (50ms)

    ✓ Repeat-prefixed va) does not bleed below (42ms)

    ✓ Can do va} on a matching bracket as first character

    ✓ Can do va} on multiple matching brackets (50ms)

    ✓ Can do vi( on a matching bracket near first character (39ms)

    ✓ Can do vi{ on outer pair of nested braces (40ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (47ms)

    ✓ Can do va] on multiple matching brackets (47ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (50ms)

    ✓ Repeat-prefixed vaf does not bleed below (41ms)

    ✓ vaf only expands to enclosing pairs

    ✓ Can use . to repeat indent in visual (284ms)

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL (39ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (46ms)

    ✓ Can do v$x to delete to last char including EOL

    ✓ Can do gv to reselect previous selection (54ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (52ms)

    Vim's EOL handling is weird

      ✓ delete through eol (62ms)

      ✓ join 2 lines by deleting through eol (70ms)

      ✓ d$ doesn't delete whole line (65ms)

      ✓ vd$ does delete whole line (66ms)

      ✓ Paste over selection copies the selection (45ms)

      ✓ Paste over selection copies the selection linewise (67ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (41ms)

      ✓ Can handle <down> key

      ✓ Can handle <left> key (48ms)

      ✓ Can handle <right> key (53ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (130ms)

      ✓ Can handle 'gj' (44ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (40ms)

      ✓ Can handle 'vawd' on word with trailing spaces (44ms)

      ✓ Can handle 'vawd' on word with leading spaces (54ms)

      ✓ Can handle 'vawd' on word with numeric prefix (39ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (47ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (50ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (51ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (43ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (38ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (43ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (53ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (48ms)

      ✓ Can handle 'vawd' on word with trailing spaces (44ms)

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (49ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (46ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (44ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (48ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (38ms)

      ✓ Can handle 'vaWd' on word with leading spaces (57ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (38ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (46ms)

      ✓ Can handle 'Y' in visual mode (54ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (40ms)

      ✓ Select sentence with leading spaces in visual mode (45ms)

      ✓ Select multiple sentences in visual mode (56ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (47ms)

      ✓ Select inner sentence with leading spaces in visual mode (41ms)

      ✓ Select spaces between sentences in visual mode

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (45ms)

      ✓ Can do vat on a matching tag (48ms)

    handles replace in visual mode

      ✓ Can do a single line replace (59ms)

      ✓ Can do a multi line replace (45ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (49ms)

      ✓ D deletes the current line (46ms)

    handles indent blocks in visual mode

      ✓ Can do vai (106ms)

      ✓ Can do vii (46ms)

      ✓ Doesn't naively select the next line (45ms)

      ✓ Searches backwards if cursor line is empty (46ms)

      ✓ Can do vaI (40ms)

    visualstar

      ✓ Works with *

      ✓ Works with # (39ms)

    search works in visual mode

      ✓ Works with / (50ms)

      ✓ Works with ? (47ms)

      ✓ Selects correct range (91ms)

    X will delete linewise

      ✓ normal selection

      ✓ normal selection

    C will delete linewise

      ✓ normal selection (54ms)

      ✓ normal selection

    R will delete linewise

      ✓ normal selection

      ✓ normal selection (38ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (78ms)

      ✓ upward selection (156ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (44ms)

      ✓ multiline indent bottom up selection (54ms)

      ✓ repeat multiline indent top down selection (62ms)

      ✓ repeat multiline indent bottom up selection (51ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (44ms)

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (65ms)

      ✓ repeat multiline outdent bottom up selection (60ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (93ms)

    vi{ will go to end of second to last line

      ✓ select (305ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (304ms)

      ✓ gv selects the last pasted text (which is longer than original) (381ms)

      ✓ gv selects the last pasted text (multiline) (179ms)

    can handle gn

      ✓ gn selects the next match text (156ms)

      ✓ gn selects the current word at |hello (205ms)

      ✓ gn selects the current word at h|ello (192ms)

      ✓ gn selects the current word at hel|lo (210ms)

      ✓ gn selects the next word at hell|o (167ms)

      ✓ gn selects the next word at hello| (186ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (43ms)

      ✓ multiline insert from top down selection (44ms)

      ✓ skips blank lines (45ms)

    can append text with A

      ✓ multiline append from bottom up selection (46ms)

      ✓ multiline append from top down selection (48ms)

      ✓ skips blank lines (38ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (47ms)

      ✓ U/gU across a selection (147ms)

      ✓ U/gU across a selection (reverse) (65ms)

      ✓ u/gu on single character (52ms)

      ✓ u/gu across a selection (101ms)

      ✓ u/gu across a selection (reverse) (71ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (123ms)

      ✓ ~/g~ across a selection (63ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (64ms)

    ✓ Can handle A backwards select (53ms)

    ✓ Can handle I forward select (65ms)

    ✓ Can handle I backwards select (50ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (50ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (56ms)

    ✓ Can handle c forward select (56ms)

    ✓ Can handle c backwards select (52ms)

    ✓ Can handle C (68ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (44ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (46ms)

    ✓ Properly add to end of lines $ then j (71ms)

    ✓ o works in visual block mode (52ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    ✓ Select register using " works in visual block mode (66ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (45ms)

    ✓ Can handle 'J' when the visual block spans multiple lines

    ✓ Can handle 'J' when start position of the visual block is below the stop (39ms)

    ✓ Can handle ~/g~ in visual block mode (81ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (149ms)

  Mode Visual Line

    ✓ can be activated

    ✓ <count>V selects <count> lines (188ms)

    ✓ Can handle w (117ms)

    ✓ Can handle wd (138ms)

    ✓ Can handle x (88ms)

    ✓ Can handle x across a selection (84ms)

    ✓ Can do vwd in middle of sentence (111ms)

    ✓ Can do vwd in middle of sentence (100ms)

    ✓ Can do vwd multiple times (146ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (116ms)

    ✓ handles case where we delete over a newline (137ms)

    ✓ handles change operator (123ms)

    ✓ Vp updates register content (67ms)

    ✓ Vp does not append unnecessary newlines (first line) (47ms)

    ✓ Vp does not append unnecessary newlines (middle line)

    ✓ Vp does not append unnecessary newlines (last line)

    ✓ Exiting via <Esc> returns cursor to original column

    ✓ Exiting via `VV` returns cursor to original column (38ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (44ms)

    Vim's EOL handling is weird

      ✓ delete through eol (94ms)

      ✓ join 2 lines by deleting through eol (384ms)

      ✓ d$ doesn't delete whole line (79ms)

      ✓ vd$ does delete whole line (111ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (45ms)

      ✓ Can handle 'gj' (48ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (54ms)

      ✓ Can handle d key (52ms)

      ✓ Can handle d key (50ms)

      ✓ Can handle d key (50ms)

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up (48ms)

    search works in visual line mode

      ✓ Works with / (62ms)

      ✓ Works with ? (61ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (134ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (46ms)

      ✓ linewise visual put works also in the end of document (44ms)

      ✓ gv selects the last pasted text (which is shorter than original) (288ms)

      ✓ gv selects the last pasted text (which is longer than original) (251ms)

      ✓ gv selects the last pasted text (multiline) (132ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (65ms)

      ✓ multiline insert from top down selection

      ✓ skips blank lines

    can append text with A

      ✓ multiline append from bottom up selection (45ms)

      ✓ multiline append from top down selection (46ms)

      ✓ skips blank lines (40ms)

      ✓ updates desired column correctly (48ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (67ms)

      ✓ ~/g~ on multiple lines (67ms)

  Mode Normal

    ✓ Can handle 'x' (190ms)

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (43ms)

    ✓ Can handle 'x' at end of line (62ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (65ms)

    ✓ Can handle 'cc' (40ms)

    ✓ Can handle 'Ncc' (52ms)

    ✓ Can handle 'yy' (41ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows

    ✓ Can handle 'D' with count when end position is on blank line (39ms)

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (43ms)

    ✓ Can handle 'r
'

    ✓ Can handle '<Count>r
'

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (42ms)

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (56ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF

    ✓ Can handle 'J' in Visual Line mode (44ms)

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~'

    ✓ Can handle '<BS>' in insert mode (44ms)

    ✓ Can handle undo with P (65ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (38ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (71ms)

    ✓ Can handle dot with I (72ms)

    ✓ Can repeat actions that require selections (62ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (57ms)

    ✓ Can repeat insert change and '<C-t>' (69ms)

    ✓ Can repeat change by `<C-a>` (87ms)

    ✓ Only one arrow key can be repeated in Insert Mode (60ms)

    ✓ Cached content change will be cleared by arrow keys (261ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg'

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (364ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches

    ✓ Can handle 't'

    ✓ Can handle 't' twice (40ms)

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search (60ms)

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a forward search with count 1 (41ms)

    ✓ Can run a forward search with count 3

    ✓ Can run a forward search with count exceeding max number of matches

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (271ms)

    ✓ Can run a reverse search with count 1 (49ms)

    ✓ Can run a reverse search with count 3

    ✓ Can run a reverse search with count exceeding max number of matches

    ✓ cancelled search reverts to previous search state (50ms)

    ✓ Backspace on empty search cancels (41ms)

    ✓ Search offsets: b does nothing

    ✓ Search offsets: b2 goes 2 to the right (41ms)

    ✓ Search offsets: b+3 goes 3 to the right (41ms)

    ✓ Search offsets: e goes to the end

    ✓ Search offsets: character offset goes across line boundaries (45ms)

    ✓ Search offsets: 2 goes 2 down (49ms)

    ✓ Search offsets: -2 goes 2 up (51ms)

    ✓ maintains column position correctly (38ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg (42ms)

    ✓ Can handle gg with number prefix (42ms)

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle - (38ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix (40ms)

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location
    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin
    ✓ document end
    ✓ line begin cursor on first non-blank character
    ✓ last line begin cursor on first non-blank character
    line up
      ✓ should move cursor one line up
      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    word right

      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line

      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)

    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word

      ✓ first word should move to previous line, stops on empty line

      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right
      ✓ move to end of next word right
      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right
      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line (44ms)

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (38ms)

      ✓ search wraps around the start of the file

    wrapscan disabled

      ✓ search stops at the end of the file (49ms)

      ✓ search stops at the start of the file (43ms)

  Multicursor

    ✓ can add multiple cursors below (69ms)

    ✓ can add multiple cursors above (86ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (214ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (259ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (237ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (230ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string
    ✓ handles hex round trip
    ✓ handles decimal round trip

    ✓ handles octal trip
  comment operator

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5763) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (222ms)

    ✓ gcj comments in current and next line (84ms)

    ✓ block comment with motion (120ms)

    ✓ block comment in Visual Mode (191ms)

    ✓ comment in visual line mode (312ms)

    ✓ comment in visual block mode (208ms)

  format operator

    ✓ == formats current line (238ms)

    ✓ =$ formats entire line (143ms)

    ✓ =j formats two lines (730ms)

    ✓ 3=k formats three lines (142ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (123ms)

    ✓ =ip formats paragraph (94ms)

    ✓ format in visual mode (149ms)

  put operator

    ✓ basic put test (42ms)

    ✓ test yy end of line (40ms)

    ✓ test yy first line (55ms)

    ✓ test yy middle line (43ms)

    ✓ test yy with correct positon movement (80ms)

    ✓ test visual block single line yank p (66ms)

    ✓ test visual block single line yank P (61ms)

    ✓ test visual block single line delete p (45ms)

    ✓ test visual block single line delete P (43ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works

    ✓ g? in visual line mode works (48ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test (181ms)

    ✓ shift left goto end test

    ✓ shift left goto line test

    ✓ shift right goto end test

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number (40ms)

      ✓ step from nubmer word to _word (45ms)

      ✓ step from in whitespace to word (48ms)

      ✓ step in ALL_CAPS_WORD (56ms)

    handles d<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word (40ms)

      ✓ delete from middle of underscore_word (46ms)

      ✓ delete two words from camel_word (44ms)

    handles di<leader>w

      ✓ delete from start of camelWord (38ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (42ms)

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator (43ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (43ms)

    ✓ Can handle 2s move (48ms)

    ✓ Can handle f move (42ms)

    ✓ Can handle 2f move

    ✓ Can handle F move (50ms)

    ✓ Can handle 2F move (50ms)

    ✓ Can handle t move

    ✓ Can handle bd-t move (52ms)

    ✓ Can handle 2t move (45ms)

    ✓ Can handle bd-t2 move (58ms)

    ✓ Can handle T move

    ✓ Can handle 2T move (60ms)

    ✓ Can handle w move (46ms)

    ✓ Can handle bd-w move (42ms)

    ✓ Can handle b move

    ✓ Can handle e move

    ✓ Can handle bd-e move (60ms)

    ✓ Can handle ge move

    ✓ Can handle n-char move (137ms)

    ✓ Can handle j move (43ms)

    ✓ Can handle k move (39ms)

    ✓ Can handle bd-jk move (1) (56ms)

    ✓ Can handle bd-jk move (2) (49ms)

    ✓ Can handle lineforward move (1)

    ✓ Can handle lineforward move (2)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (39ms)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.) (40ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (53ms)

    ✓ Replaces within inner Word (54ms)

    ✓ Replaces within '' (66ms)

    ✓ Replaces within '' including spaces (75ms)

    ✓ Replaces within () (48ms)

    ✓ Replaces within () including spaces (51ms)

    ✓ Replaces within a paragraph (57ms)

    ✓ Replaces using a specified register (65ms)

    ✓ Replaces within {} over multiple lines (46ms)

    ✓ Replaces a multiline register within {} over multiple lines (53ms)

    ✓ Replaces a multiline register within {} over multiple lines (58ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (52ms)

    ✓ grr replaces the entire line with the register (50ms)

    ✓ grr can replace multiple lines (40ms)

    ✓ Replaces in visual mode (68ms)

    ✓ Replaces in visual mode using a specified register (60ms)

    ✓ Replaces in visual line mode (59ms)

    ✓ grj is linewise (38ms)

  sneak plugin

    ✓ Can handle s motion (40ms)

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion (43ms)

    ✓ Can handle s; motion (47ms)

    ✓ Can handle s, motion (141ms)

    ✓ Can handle S; motion (46ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (43ms)

    ✓ Can handle single letter <operator>Z motion

    ✓ Can handle single letter s; motion (41ms)

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward

    ✓ Can go back using <C-o> when repeating forward movement

    ✓ Can go back using <C-o> when repeating backward movement

  sneakReplacesF

    ✓ sneakReplacesF forward (42ms)

    ✓ sneakReplacesF backward (132ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (128ms)

    ✓ 'ysiw(' surrounds word with space (178ms)

    ✓ 'ysw)' surrounds word without space (86ms)

    ✓ 'ysw(' surrounds word with space (75ms)

    ✓ 'ysaw)' surrounds word without space (48ms)

    ✓ 'ysaw(' surrounds word with space (53ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (66ms)

    ✓ 'ysiw<' surrounds word with tags (63ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (66ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (49ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (83ms)

    ✓ change surround (66ms)

    ✓ change surround with two pairs of quotes (61ms)

    ✓ change surround with two pairs of parens (71ms)

    ✓ change surround with alias (61ms)

    ✓ change surround to tags (81ms)

    ✓ delete surround (73ms)

    ✓ delete surround with quotes (105ms)

    ✓ delete surround with nested of quotes (47ms)

    ✓ delete surround with inconsistent quotes (72ms)

    ✓ delete surround with mixed quotes (232ms)

    ✓ delete surround with empty quotes cursor at start (50ms)

    ✓ delete surround with empty quotes cursor at end (67ms)

    ✓ don't delete surround if cursor is after closing match (42ms)

    ✓ delete surround if cursor is before opening match (48ms)

    ✓ delete surround with two pairs of parens (48ms)

    ✓ delete surround with alias (98ms)

    ✓ delete surround with tags (61ms)

    ✓ change surround brackets at end of line (104ms)

    ✓ changing brackets with surround works again (59ms)

    ✓ change surround with tags that contain an attribute and preserve them (91ms)

    ✓ change surround with tags that contain an attribute and remove them (107ms)

  register

    ✓ Can copy to a register (41ms)

    ✓ Can use two registers together (80ms)

    ✓ Can use black hole register (78ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (177ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (178ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (209ms)

    ✓ Register '1'-'9' stores delete content (207ms)

    ✓ "A appends linewise text to "a (179ms)

    ✓ "A appends character wise text to "a (209ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (169ms)

    ✓ Small deletion using Del is stored in small delete register (221ms)

    ✓ Small deletion using X is stored in small delete register (126ms)

    ✓ Search register (/) is set by forward search (257ms)

    ✓ Search register (/) is set by backward search (238ms)

    ✓ Search register (/) is set by star search (212ms)

    ✓ Command register (:) is set by command line (118ms)

    ✓ Read-only registers cannot be written to (115ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character>

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward (91ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (39ms)

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period (47ms)

      ✓ move one sentence backward - multiline - previous line

      ✓ move one sentence backward - multiline - previous line - period

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path
    separatePath
      ✓ can separate drive letter path on Windows
      ✓ can separate UNC path on Windows
      ✓ can separate relative path on Windows
      ✓ can separate absolute path on posix
      ✓ can separate relative path on posix
    resolveUri
      ✓ posix

      ✓ win32

  1383 passing (3m)
  4 pending

  21 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1942:3)


  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)

  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:356:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:850:5)


  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:857:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)


  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three  five.
      + expected - actual

      -one  three  five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:162:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:178:3)


  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: 63694f20-8818-11ea-88d0-3540a036c4cf

@J-Fields J-Fields force-pushed the multicursor-tests branch from 2b70db9 to 59d2c16 Compare April 27, 2020 00:29
@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 12

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.13.1 build /home/travis/build/VSCodeVim/Vim
> gulp build

[00:31:06] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[00:31:06] Starting 'build'...
[00:31:06] Starting 'prettier'...
[00:31:06] Finished 'prettier' after 22 ms
[00:31:06] Starting 'tsc'...
[00:31:06] Starting 'tslint'...
[00:31:13] Finished 'tslint' after 7.27 s
[00:31:22] Finished 'tsc' after 16 s
[00:31:22] Starting 'commit-hash'...
[00:31:22] Finished 'commit-hash' after 39 ms
[00:31:22] Finished 'build' after 16 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-27T00:31:29.313Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6499) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6499) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (88ms)

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (65ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (39ms)

    ✓ <C-b> puts cursor at start of command line (50ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (46ms)

    ✓ <End> puts cursor at end of command line (42ms)

    ✓ <C-p>/<C-n> go to the previous/next command (77ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (80ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (105ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (96ms)

    ✓ <C-p> go to previous search string

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command (42ms)

    ✓ add empty command (41ms)

    ✓ add command over configuration.history (50ms)

    ✓ add command that exists in history (40ms)

    ✓ file system (44ms)

    ✓ change configuration.history (85ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace
    ✓ can lex long command name and args
    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1553ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (536ms)

    ✓ :smile editor contains smile text (535ms)

  Basic sort

    ✓ Sort whole file, asc (118ms)

    ✓ Sort whole file, asc, ignoreCase (118ms)

    ✓ Sort whole file, dsc (98ms)

    ✓ Sort whole file, dsc, ignoreCase (139ms)

    ✓ Sort range, asc (126ms)

    ✓ Sort range, asc, ignoreCase (95ms)

    ✓ Sort range, dsc (83ms)

    ✓ Sort range, dsc, ignoreCase (137ms)

    ✓ Sort whole file, asc, unique (123ms)

  Horizontal split

    ✓ :sp creates a second split (94ms)

    ✓ :split creates a second split (114ms)

    ✓ :new creates a second split (226ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (70ms)

    ✓ Replace with `g` flag (57ms)

    ✓ Replace with flags AND count (91ms)

    ✓ Replace with `c` flag (49ms)

    ✓ Replace with `gc` flag (67ms)

    ✓ Replace across all lines (96ms)

    ✓ Replace on specific single line (87ms)

    ✓ Replace on current line using dot (71ms)

    ✓ Replace single relative line using dot and plus (66ms)

    ✓ Replace across specific line range (73ms)

    ✓ Replace across relative line range using dot, plus, and minus (125ms)

    ✓ Replace across relative line range using numLines+colon shorthand (116ms)

    ✓ Repeat replacement across relative line range (113ms)

    ✓ Replace with range AND count but no flags (84ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (69ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (77ms)

    ✓ Undocumented: trailing operators use 1 as RHS (80ms)

    ✓ Replace specific single equal lines (119ms)

    ✓ Replace current line with no active selection (100ms)

    ✓ Replace text in selection (121ms)

    ✓ Substitute support marks (91ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (44ms)

      ✓ Replace with `g` flag inverts global flag (54ms)

      ✓ Replace with `c` flag inverts global flag (91ms)

      ✓ Replace multiple lines (82ms)

      ✓ Replace across specific lines (103ms)

      ✓ Replace current line with no active selection (99ms)

      ✓ Replace text in selection (89ms)

      ✓ Substitute support marks (85ms)

      ✓ Substitute with escaped delimiter (53ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (236ms)

      ✓ Substitute with previous search using # (167ms)

      ✓ Substitute with previous search using / (191ms)

      ✓ Substitute with parameters should update search state (119ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (292ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (132ms)

      ✓ Substitute repeat previous should accept flags (66ms)

      ✓ Substitute with empty search string should use last searched pattern (231ms)

      ✓ Ampersand (&) should repeat the last substitution (183ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (67ms)

    ✓ tabe with current file path does nothing (45ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path (41ms)

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (43ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (87ms)

    ✓ command line file tab completion with space in file path (186ms)

  Vertical split

    ✓ :vs creates a second split (62ms)

    ✓ :vsp creates a second split (64ms)

    ✓ :vsplit creates a second split (84ms)

    ✓ :vnew creates a second split (185ms)

    ✓ :vne creates a second split (200ms)

  Basic write-quit

    ✓ Run write and quit (67ms)
  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (64ms)

      ✓ Can complete lines in file with different indentation (47ms)

      ✓ Returns no completions for unmatched line (56ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (65ms)

    ✓ getMatchingRemap (52ms)

    ✓ jj -> <Esc> through modehandler (89ms)

    ✓ 0 -> :wq through modehandler (80ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (94ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (194ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (84ms)

    ✓ d -> black hole register delete in normal mode through modehandler (150ms)

    ✓ d -> black hole register delete in normal mode through modehandler (124ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (118ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled
  Remapping Validator
    ✓ no remappings
    ✓ jj->esc
    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc
    ✓ Can expand $HOME to user's home directory
    ✓ Can expand ~ to user's home directory
  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (48ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (152ms)

        ✓ Can track jumps for keys: /b<CR>n (48ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (63ms)

        ✓ Can track jumps for keys: j%% (40ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (48ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (50ms)

        ✓ Can track jumps for keys: j%%<C-o>%

        ✓ Can track jumps for keys: j%%<C-o>gg (55ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (57ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (76ms)

        ✓ Can enter number to jump back multiple times (48ms)

        ✓ Can track one-line `` jumps (60ms)

        ✓ Can track one-line double `` jumps (65ms)

        ✓ Can track one-line '' jumps (68ms)

        ✓ Can track one-line double '' jumps (80ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (70ms)

[main 2020-04-27T00:31:59.316Z] update#setState checking for updates

[main 2020-04-27T00:31:59.370Z] update#setState idle

        ✓ Can track jumps for keys: /^<CR>nnnkdd (81ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (86ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (69ms)
      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (116ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (159ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (156ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (117ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (172ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (57ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (138ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (63ms)

  Record and execute a macro

    ✓ Can record and execute (157ms)

    ✓ Can repeat last invoked macro (277ms)

    ✓ Can play back with count (433ms)

    ✓ Can play back with count, abort when a motion fails (428ms)

    ✓ Repeat change on contiguous lines (191ms)

    ✓ Append command to a macro (139ms)

    ✓ Can record Ctrl Keys and repeat (148ms)

    ✓ Can execute macros with dot commands properly (175ms)

    ✓ : (command) register can be used as a macro (166ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate
    ✓ get

  Mode Insert

    ✓ can be activated (98ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (63ms)

    ✓ <C-c> can exit insert (53ms)

    ✓ <Esc> can exit insert (65ms)

    ✓ Stay in insert when entering characters (88ms)

    ✓ Can handle 'O' (51ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line (46ms)

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace (50ms)

    ✓ Can handle <C-w> at beginning of line (38ms)

    ✓ <C-u> deletes to start of line (42ms)

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace (43ms)

    ✓ Correctly places the cursor after deleting the previous line break (67ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (47ms)

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file (45ms)

    ✓ Delete works in insert mode (50ms)

    ✓ Delete works at line end (38ms)

    ✓ Delete works at end of file (40ms)

    ✓ Delete works with repeat (171ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (83ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (59ms)

    ✓ Can perform insert command prefixed with count (53ms)

    ✓ Can perform append command prefixed with count (41ms)

    ✓ Can perform insert at start of line command prefixed with count (49ms)

    ✓ Can perform append to end of line command prefixed with count (40ms)

    ✓ Can perform change char (s) command prefixed with count (63ms)

    ✓ Can perform command prefixed with count with <C-[> (43ms)

    ✓ Can handle 'o' with count (100ms)

    ✓ Can handle 'O' with count (87ms)

    ✓ Can handle backspace at beginning of line with all spaces (45ms)

    ✓ Can handle digraph insert (70ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw (45ms)

    ✓ Can handle dw (40ms)

    ✓ Can handle dw across lines (1) (38ms)

    ✓ Can handle dw across lines (2) (70ms)

    ✓ Can handle dd last line (39ms)

    ✓ Can handle dd single line (49ms)

    ✓ Can handle dd (42ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document (48ms)

    ✓ Can handle d2d (41ms)

    ✓ Can handle dd empty line (39ms)

    ✓ Can handle ddp (52ms)

    ✓ Can handle 'de' (47ms)

    ✓ Can handle 'de' then 'de' again (40ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (96ms)

    ✓ Can handle 'dl' at end of line (171ms)

    ✓ Can handle 'dF' (74ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter> (42ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis (61ms)

    ✓ Can handle 'd]}' without deleting closing bracket (41ms)

    ✓ Can handle 'd/' (64ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (48ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (59ms)

    ✓ Can handle 'cw' (86ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w' (41ms)

    ✓ Can handle 'cw' without removing EOL (51ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (102ms)

    ✓ Can handle 'c]}' without deleting closing bracket (45ms)

    ✓ Can handle 's' (38ms)

    ✓ Can handle 'yiw' with correct cursor ending position (39ms)

    ✓ Can handle 'ciw' (55ms)

    ✓ Can handle 'ciw' on blanks (52ms)

    ✓ Can handle 'caw' (71ms)

    ✓ Can handle 'caw' on first letter (51ms)

    ✓ Can handle 'caw' on blanks (83ms)

    ✓ Can handle 'caw' on blanks (38ms)

    ✓ Can handle 'cae' (45ms)

    ✓ Can handle 'cae' with caret at document's top

    ✓ Can handle 'cae' with caret at document's end

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'cie' with leading space (53ms)

    ✓ Can handle 'cie' with trailing space (45ms)

    ✓ Can handle 'cie' with both leading and trailing space (49ms)

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses (39ms)

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (69ms)

    ✓ Can handle count prefixed 'ci)' (43ms)

    ✓ Can handle count prefixed 'ca)' (46ms)

    ✓ Can handle 'ca(' spanning multiple lines (43ms)

    ✓ Can handle 'cab' spanning multiple lines (38ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (77ms)

    ✓ Can handle 'ci(' on the closing bracket (38ms)

    ✓ Can handle 'ciB' spanning multiple lines (51ms)

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {} (66ms)

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket (45ms)

    ✓ Can handle 'ca[' on first bracket (39ms)

    ✓ Can handle 'ca]' on first bracket (57ms)

    ✓ Can handle 'ci'' on first quote (44ms)

    ✓ Can handle 'ci'' inside quoted string (49ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word (43ms)

    ✓ Can handle 'ca"' starting behind the quoted word (43ms)

    ✓ Can handle 'ca"' starting on the opening quote (44ms)

    ✓ Can handle 'ci"' with escaped quotes (47ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (40ms)

    ✓ Can handle 'ca"' starting on the closing quote (47ms)

    ✓ Can handle 'ci"' with complex escape sequences (47ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (48ms)

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (46ms)

    ✓ can handle cj (58ms)

    ✓ can handle ck (63ms)

    ✓ can handle c2j (87ms)

    ✓ can handle c2k (67ms)

    ✓ can handle cj on last line (70ms)

    ✓ can handle ck on first line (57ms)

    ✓ can handle c2j on last line (59ms)

    ✓ can handle c2k on first line (44ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces (50ms)

    ✓ Can handle 'daw' on word with numeric prefix (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (46ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (48ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line (40ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (45ms)

    ✓ Can handle 'daw' around word at end of line (51ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (40ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines (59ms)

    ✓ Can handle 'daW' on beginning of word (55ms)

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (45ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (90ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (46ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (44ms)

    ✓ Can handle 'diw' on word with cursor inside spaces (47ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (44ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line (38ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (40ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (39ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (42ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines (40ms)

    ✓ Can handle 'diW' on beginning of word (57ms)

    ✓ Can handle 'dae' (52ms)

    ✓ Can handle 'dae' with caret at document's top

    ✓ Can handle 'dae' with caret at document's end (53ms)

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space

    ✓ Can handle 'die' with trailing space (60ms)

    ✓ Can handle 'die' with both leading and trailing space (52ms)

    ✓ Can handle 'die' on blank content (43ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (45ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line (47ms)

    ✓ Select sentence with trailing spaces (38ms)

    ✓ Select sentence with leading spaces (51ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces (40ms)

    ✓ Select spaces between sentences (52ms)

    ✓ Can handle 'df' (40ms)

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines (75ms)

    ✓ Can handle A and backspace (45ms)

    ✓ A should update desiredColumn (45ms)

    ✓ I should updated desiredColumn (49ms)

    ✓ leaving insert mode should update desired column when entered with a (68ms)

    ✓ leaving insert mode should update desired column when entered with i (67ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (50ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy' (51ms)

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy' (49ms)

    ✓ Can handle 'gp' after 'Nyy' (51ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (53ms)

    ✓ Can handle 'gP' after 'yy' (39ms)

    ✓ Can handle 'gP' after 'Nyy' (46ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (56ms)

    ✓ Can handle ']p' after yy (64ms)

    ✓ Can handle ']p' after 'Nyy' (71ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (108ms)

    ✓ Can handle '[p' after yy (49ms)

    ✓ Can handle '[p' after 'Nyy' (62ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (51ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (50ms)

    ✓ Can handle 'p' after y'a (48ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (51ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (64ms)

    ✓ Can handle pasting in visual mode over selection (113ms)

    ✓ Can repeat w (72ms)

    ✓ Can repeat p

    ✓ I works correctly (59ms)

    ✓ gI works correctly (78ms)

    ✓ gi works correctly (84ms)

    ✓ `. works correctly (57ms)

    ✓ '. works correctly (55ms)

    ✓ g; works correctly (67ms)

    ✓ g, works correctly (64ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly (41ms)

    ✓ gq handles spaces after single line comments correctly (41ms)

    ✓ gq handles spaces before single line comments correctly (49ms)

    ✓ gq handles tabs before single line comments correctly (62ms)

    ✓ Can handle space

    ✓ Can handle space

    ✓ Undo 1 (104ms)

    ✓ Undo 2 (84ms)

    ✓ Undo cursor (133ms)

    ✓ Undo cursor 2 (112ms)

    ✓ Undo cursor 3 (130ms)

    ✓ Undo with movement first (80ms)

    ✓ Can handle 'U' (39ms)

    ✓ Can handle 'U' for multiple changes (73ms)

    ✓ Can handle 'U' for new line below (82ms)

    ✓ Can handle 'U' for new line above (84ms)

    ✓ Can handle 'U' for consecutive changes only (107ms)

    ✓ Can handle 'u' to undo 'U' (49ms)

    ✓ Can handle 'U' to undo 'U' (52ms)

    ✓ Can handle 'u' after :s/abc/def (96ms)

    ✓ Redo (92ms)

    ✓ Redo (74ms)

    ✓ Redo (77ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle guae (51ms)

    ✓ Can handle guie

    ✓ Can handle gUw

    ✓ Can handle gUae

    ✓ Can handle gUie (42ms)

    ✓ Can handle u over line breaks (41ms)

    ✓ can handle s in visual mode (48ms)

    ✓ can handle p with selection (51ms)

    ✓ can handle P with selection (57ms)

    ✓ can handle p in visual to end of line (88ms)

    ✓ can repeat backspace twice (141ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly (72ms)

    ✓ can dE correctly (47ms)

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after  (39ms)

    ✓ can ctrl-a properly on multiple lines (241ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y

    ✓ can do [count]Y if count is larger than EOF

    ✓ Can do S

    ✓ / does not affect mark (57ms)

    ✓ / can search with regex (47ms)

    ✓ / can search with newline

    ✓ / can search through multiple newlines (65ms)

    ✓ / matches ^ per line

    ✓ / matches $ per line (39ms)

    ✓ Can search for forward slash (43ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (68ms)

    ✓ /\C forces case sensitive search (64ms)

    ✓ <BS> deletes the last character in search in progress mode

    ✓ <S-BS> deletes the last character in search in progress mode (50ms)

    ✓ <C-h> deletes the last character in search in progress mode (46ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (55ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (48ms)

    ✓ Can do cit on a tag with an attribute tag (47ms)

    ✓ Can do cat on a matching tag (44ms)

    ✓ Can do cit on a multiline tag (46ms)

    ✓ Can do cit on a multiline tag with nested tags (50ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags (42ms)

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc (39ms)

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (61ms)

    ✓ Indent current line with correct Vim Mode (87ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent (155ms)

    ✓ Can do cai (46ms)

    ✓ Can do cii

    ✓ Can do caI (44ms)

    ✓ Can do dai (45ms)

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (59ms)

    ✓ '] go to the end of the previously operated or put text (59ms)

    ✓ `[ go to the start of the previously operated or put text (77ms)

    ✓ '[ go to the start of the previously operated or put text (60ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (162ms)

      ✓ gn selects the current word at |hello (234ms)

      ✓ gn selects the current word at h|ello (310ms)

      ✓ gn selects the current word at hel|lo (185ms)

      ✓ gn selects the current word at hell|o (225ms)

      ✓ gn selects the next word at hello| (305ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (60ms)

      ✓ dgn deletes the current word when cursor is at |hello (68ms)

      ✓ dgn deletes the current word when cursor is at h|ello (108ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (73ms)

      ✓ dgn deletes the current word when cursor is at hell|o (53ms)

      ✓ dgn deletes the next word when cursor is at hello| (236ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (89ms)

      ✓ cgn deletes the current word when cursor is at |hello (86ms)

      ✓ cgn deletes the current word when cursor is at h|ello (78ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (71ms)

      ✓ cgn deletes the current word when cursor is at hell|o (86ms)

      ✓ cgn deletes the next word when cursor is at hello| (66ms)

    can handle gN

      ✓ gN selects the previous match text (219ms)

      ✓ gN selects the current word at hell|o (219ms)

      ✓ gN selects the current word at hel|lo (231ms)

      ✓ gN selects the current word at h|ello (230ms)

      ✓ gN selects the current word at |hello (247ms)

      ✓ gN selects the previous word at | hello (235ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (67ms)

      ✓ dgN deletes the current word when cursor is at hell|o (71ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (88ms)

      ✓ dgN deletes the current word when cursor is at h|ello (98ms)

      ✓ dgN deletes the current word when cursor is at |hello (80ms)

      ✓ dgN deletes the previous word when cursor is at | hello (64ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (64ms)

      ✓ cgN deletes the current word when cursor is at hell|o (83ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (102ms)

      ✓ cgN deletes the current word when cursor is at h|ello (88ms)

      ✓ cgN deletes the current word when cursor is at |hello (101ms)

      ✓ cgN deletes the previous word when cursor is at | hello (68ms)

    marks

      ✓ capital marks can change the editors active document (117ms)

      ✓ can jump to lowercase mark (39ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (46ms)

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode (38ms)

    ✓ Can handle R across lines (67ms)

    ✓ Can handle R across lines and exit Replace Mode (142ms)

    ✓ Can handle R with {count} (71ms)

    ✓ Can handle backspace (47ms)

    ✓ Can handle backspace (49ms)

    ✓ Can handle backspace across lines (79ms)

    ✓ Can handle arrows (57ms)

    ✓ Can handle . (79ms)

    ✓ Can handle . across lines (165ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (120ms)

    ✓ Can handle wd (139ms)

    ✓ Can handle x (121ms)

    ✓ Can handle x across a selection (120ms)

    ✓ Can do vwd in middle of sentence (137ms)

    ✓ Can do vwd in middle of sentence (138ms)

    ✓ Can do vwd multiple times (179ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (160ms)

    ✓ Can handle H key (41ms)

    ✓ Can handle backspace key (62ms)

    ✓ handles case where we delete over a newline (138ms)

    ✓ handles change operator (127ms)

    ✓ Can do vat on multiple matching tags (53ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (67ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (49ms)

    ✓ Repeat-prefixed vat does not bleed below (46ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (43ms)

    ✓ Can do vi) on a matching parenthesis (49ms)

    ✓ Can do vi) on multiple matching parens (54ms)

    ✓ Can do va) on a matching parenthesis (48ms)

    ✓ Can do va) on multiple matching parens (51ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (38ms)

    ✓ Repeat-prefixed va) does not bleed below (44ms)

    ✓ Can do va} on a matching bracket as first character (41ms)

    ✓ Can do va} on multiple matching brackets (64ms)

    ✓ Can do vi( on a matching bracket near first character (102ms)

    ✓ Can do vi{ on outer pair of nested braces (45ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (40ms)

    ✓ Can do va] on multiple matching brackets

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (57ms)

    ✓ Repeat-prefixed vaf does not bleed below (51ms)

    ✓ vaf only expands to enclosing pairs (58ms)

    ✓ Can use . to repeat indent in visual (52ms)

    ✓ Can do v_x to delete to first char (49ms)

    ✓ Can do vg_x to delete to last char with no EOL (50ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (43ms)

    ✓ Can do v$x to delete to last char including EOL (54ms)

    ✓ Can do gv to reselect previous selection (70ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (54ms)

    Vim's EOL handling is weird

      ✓ delete through eol (90ms)

      ✓ join 2 lines by deleting through eol (110ms)

      ✓ d$ doesn't delete whole line (85ms)

      ✓ vd$ does delete whole line (79ms)

      ✓ Paste over selection copies the selection (67ms)

      ✓ Paste over selection copies the selection linewise (113ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (48ms)

      ✓ Can handle <down> key (46ms)

      ✓ Can handle <left> key (38ms)

      ✓ Can handle <right> key (45ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (65ms)

      ✓ Can handle 'gj' (46ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (71ms)

      ✓ Can handle 'vawd' on word with trailing spaces (48ms)

      ✓ Can handle 'vawd' on word with leading spaces (54ms)

      ✓ Can handle 'vawd' on word with numeric prefix (62ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (53ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (62ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (40ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (40ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (44ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (44ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (45ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (46ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (47ms)

      ✓ Can handle 'vawd' on word with trailing spaces (53ms)

      ✓ Can handle 'vawd' on word with leading spaces (48ms)

      ✓ Can handle 'vawd' on word with numeric prefix

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (49ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (49ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (49ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (43ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (51ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (43ms)

      ✓ Can handle 'Y' in visual mode (63ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (52ms)

      ✓ Select sentence with leading spaces in visual mode

      ✓ Select multiple sentences in visual mode (65ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (57ms)

      ✓ Select inner sentence with leading spaces in visual mode (62ms)

      ✓ Select spaces between sentences in visual mode (48ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (59ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (46ms)

      ✓ Can do vat on a matching tag (50ms)

    handles replace in visual mode

      ✓ Can do a single line replace (43ms)

      ✓ Can do a multi line replace (55ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (49ms)

      ✓ D deletes the current line (42ms)

    handles indent blocks in visual mode

      ✓ Can do vai (142ms)

      ✓ Can do vii (48ms)

      ✓ Doesn't naively select the next line

      ✓ Searches backwards if cursor line is empty (48ms)

      ✓ Can do vaI (49ms)

    visualstar

      ✓ Works with * (59ms)

      ✓ Works with # (57ms)

    search works in visual mode

      ✓ Works with / (75ms)

      ✓ Works with ? (66ms)

      ✓ Selects correct range (84ms)

    X will delete linewise

      ✓ normal selection (48ms)

      ✓ normal selection

    C will delete linewise

      ✓ normal selection (48ms)

      ✓ normal selection (53ms)

    R will delete linewise

      ✓ normal selection (52ms)

      ✓ normal selection (52ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (61ms)

      ✓ upward selection (118ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (154ms)

      ✓ multiline indent bottom up selection (341ms)

      ✓ repeat multiline indent top down selection (58ms)

      ✓ repeat multiline indent bottom up selection (66ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (46ms)

      ✓ multiline outdent bottom up selection (41ms)

      ✓ repeat multiline outdent top down selection (70ms)

      ✓ repeat multiline outdent bottom up selection (71ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (129ms)

    vi{ will go to end of second to last line

      ✓ select (51ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (332ms)

      ✓ gv selects the last pasted text (which is longer than original) (312ms)

      ✓ gv selects the last pasted text (multiline) (202ms)

    can handle gn

      ✓ gn selects the next match text (179ms)

      ✓ gn selects the current word at |hello (161ms)

      ✓ gn selects the current word at h|ello (178ms)

      ✓ gn selects the current word at hel|lo (221ms)

      ✓ gn selects the next word at hell|o (198ms)

      ✓ gn selects the next word at hello| (193ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (45ms)

      ✓ multiline insert from top down selection (49ms)

      ✓ skips blank lines (49ms)

    can append text with A

      ✓ multiline append from bottom up selection (50ms)

      ✓ multiline append from top down selection (45ms)

      ✓ skips blank lines (38ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (45ms)

      ✓ U/gU across a selection (174ms)

      ✓ U/gU across a selection (reverse) (119ms)

      ✓ u/gu on single character (68ms)

      ✓ u/gu across a selection (126ms)

      ✓ u/gu across a selection (reverse) (80ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (128ms)

      ✓ ~/g~ across a selection (83ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (64ms)

    ✓ Can handle A backwards select (52ms)

    ✓ Can handle I forward select (68ms)

    ✓ Can handle I backwards select (63ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (70ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (77ms)

    ✓ Can handle c forward select (67ms)

    ✓ Can handle c backwards select (64ms)

    ✓ Can handle C (61ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (51ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (83ms)

    ✓ Properly add to end of lines $ then j (74ms)

    ✓ o works in visual block mode (43ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    ✓ Select register using " works in visual block mode (110ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (42ms)

    ✓ Can handle 'J' when the visual block spans multiple lines (52ms)

    ✓ Can handle 'J' when start position of the visual block is below the stop (60ms)

    ✓ Can handle ~/g~ in visual block mode (86ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (158ms)

  Mode Visual Line

    ✓ can be activated (303ms)

    ✓ <count>V selects <count> lines (213ms)

    ✓ Can handle w (139ms)

    ✓ Can handle wd (112ms)

    ✓ Can handle x (94ms)

    ✓ Can handle x across a selection (112ms)

    ✓ Can do vwd in middle of sentence (152ms)

    ✓ Can do vwd in middle of sentence (196ms)

    ✓ Can do vwd multiple times (133ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (162ms)

    ✓ handles case where we delete over a newline (153ms)

    ✓ handles change operator (124ms)

    ✓ Vp updates register content (61ms)

    ✓ Vp does not append unnecessary newlines (first line)

    ✓ Vp does not append unnecessary newlines (middle line) (47ms)

    ✓ Vp does not append unnecessary newlines (last line) (61ms)

    ✓ Exiting via <Esc> returns cursor to original column (48ms)

    ✓ Exiting via `VV` returns cursor to original column (63ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (41ms)

    Vim's EOL handling is weird

      ✓ delete through eol (83ms)

      ✓ join 2 lines by deleting through eol (90ms)

      ✓ d$ doesn't delete whole line (86ms)

      ✓ vd$ does delete whole line (102ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (46ms)

      ✓ Can handle <down> key (47ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (46ms)

      ✓ Can handle 'gj'

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (46ms)

      ✓ Can handle d key

      ✓ Can handle d key (45ms)

      ✓ Can handle d key (47ms)

      ✓ can handle 'c' (46ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (39ms)

      ✓ Can do a multi visual line replace (40ms)

      ✓ Can do a multi visual line replace from the bottom up (58ms)

    search works in visual line mode

      ✓ Works with / (68ms)

      ✓ Works with ? (50ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (145ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (48ms)

      ✓ linewise visual put works also in the end of document (51ms)

      ✓ gv selects the last pasted text (which is shorter than original) (379ms)

      ✓ gv selects the last pasted text (which is longer than original) (330ms)

      ✓ gv selects the last pasted text (multiline) (134ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (71ms)

      ✓ multiline insert from top down selection (50ms)

      ✓ skips blank lines (51ms)

    can append text with A

      ✓ multiline append from bottom up selection (50ms)

      ✓ multiline append from top down selection (46ms)

      ✓ skips blank lines (47ms)

      ✓ updates desired column correctly (46ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (73ms)

      ✓ ~/g~ on multiple lines (61ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx' (98ms)

    ✓ Can handle 'Nx' and paste (40ms)

    ✓ Can handle 'x' at end of line (61ms)

    ✓ Can handle 'Ns' (39ms)

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (57ms)

    ✓ Can handle 'cc' (45ms)

    ✓ Can handle 'Ncc' (66ms)

    ✓ Can handle 'yy' (53ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows

    ✓ Can handle 'D' with count when end position is on blank line

    ✓ Can handle 'DD' (42ms)

    ✓ Can handle 'C' (43ms)

    ✓ Can handle 'NC' (49ms)

    ✓ Can handle 'NC' and put (46ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (59ms)

    ✓ Can handle 'r
' (43ms)

    ✓ Can handle '<Count>r
' (40ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (62ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line (44ms)

    ✓ Can handle 'J' with TWO indented lines (375ms)

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF

    ✓ Can handle 'J' in Visual Line mode (44ms)

    ✓ Can handle 'gJ' once (42ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~' (40ms)

    ✓ Can handle '<BS>' in insert mode (49ms)

    ✓ Can handle undo with P (92ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (46ms)

    ✓ Can repeat '~' with dot (38ms)

    ✓ Can repeat 'x' (45ms)

    ✓ Can repeat 'J' (44ms)

    ✓ Can handle dot with A (98ms)

    ✓ Can handle dot with I (65ms)

    ✓ Can repeat actions that require selections (57ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (53ms)

    ✓ Can repeat insert change and '<C-t>' (54ms)

    ✓ Can repeat change by `<C-a>` (66ms)

    ✓ Only one arrow key can be repeated in Insert Mode (82ms)

    ✓ Cached content change will be cleared by arrow keys (78ms)

  Matching Bracket (%)

    ✓ before opening parenthesis (53ms)

    ✓ inside parenthesis (44ms)

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>]) (47ms)

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{ (58ms)

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (41ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file (39ms)

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice (41ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (41ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (46ms)

    ✓ Can handle 'F' and find back search (38ms)

    ✓ Can handle 'f' and multiple back searches (51ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T' (45ms)

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (45ms)

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word (49ms)

    ✓ Can run a forward search with count 1

    ✓ Can run a forward search with count 3 (44ms)

    ✓ Can run a forward search with count exceeding max number of matches (48ms)

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (54ms)

    ✓ Can run a reverse search with count 1 (39ms)

    ✓ Can run a reverse search with count 3 (113ms)

    ✓ Can run a reverse search with count exceeding max number of matches (43ms)

    ✓ cancelled search reverts to previous search state (65ms)

    ✓ Backspace on empty search cancels (49ms)

    ✓ Search offsets: b does nothing (47ms)

    ✓ Search offsets: b2 goes 2 to the right (40ms)

    ✓ Search offsets: b+3 goes 3 to the right (43ms)

    ✓ Search offsets: e goes to the end

    ✓ Search offsets: character offset goes across line boundaries (51ms)

    ✓ Search offsets: 2 goes 2 down (54ms)

    ✓ Search offsets: -2 goes 2 up (57ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg (38ms)

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n (89ms)

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> | (38ms)

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix (43ms)

    ✓ Can handle - (44ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _ (54ms)

    ✓ Can handle _ with count prefix

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk' (44ms)

    ✓ Can handle 'gj' (40ms)

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right
      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word
    word left
      ✓ move cursor word left across the different char kind
      ✓ move cursor word left within the same char kind
      ✓ move cursor word left across spaces on non-ascii text
      ✓ move cursor word left within word on non-ascii text
      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down
      ✓ move down normally
      ✓ move down longer paragraph
      ✓ move down starting inside empty line
      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (46ms)

      ✓ search wraps around the start of the file (52ms)

    wrapscan disabled

      ✓ search stops at the end of the file (39ms)

      ✓ search stops at the start of the file (60ms)

  Multicursor

    ✓ can add multiple cursors below (93ms)

    ✓ can add multiple cursors above (145ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (315ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (345ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (351ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (350ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor (58ms)

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string
    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (200ms)

    ✓ gcj comments in current and next line (136ms)

    ✓ block comment with motion (193ms)

    ✓ block comment in Visual Mode (263ms)

    ✓ comment in visual line mode (223ms)

    ✓ comment in visual block mode (244ms)

  format operator

    ✓ == formats current line (266ms)

    ✓ =$ formats entire line (212ms)

    ✓ =j formats two lines (288ms)

    ✓ 3=k formats three lines (153ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (86ms)

    ✓ =ip formats paragraph (206ms)

    ✓ format in visual mode (101ms)

  put operator

    ✓ basic put test (47ms)

    ✓ test yy end of line (108ms)

    ✓ test yy first line (39ms)

    ✓ test yy middle line

    ✓ test yy with correct positon movement (48ms)

    ✓ test visual block single line yank p (80ms)

    ✓ test visual block single line yank P (53ms)

    ✓ test visual block single line delete p (70ms)

    ✓ test visual block single line delete P (54ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works (44ms)

    ✓ g? in visual line mode works (72ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test (39ms)

    ✓ shift left goto end test (45ms)

    ✓ shift left goto line test (134ms)

    ✓ shift right goto end test

    ✓ shift right goto line test (43ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word (39ms)

      ✓ step after CAP word (40ms)

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (120ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (38ms)

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word (39ms)

      ✓ delete two words from camel_word (152ms)

    handles di<leader>w

      ✓ delete from start of camelWord (45ms)

      ✓ delete from middle of camelWord (39ms)

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word (39ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (46ms)

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (53ms)

    ✓ Can handle 2s move (56ms)

    ✓ Can handle f move (51ms)

    ✓ Can handle 2f move (67ms)

    ✓ Can handle F move (51ms)

    ✓ Can handle 2F move (50ms)

    ✓ Can handle t move (49ms)

    ✓ Can handle bd-t move (53ms)

    ✓ Can handle 2t move (50ms)

    ✓ Can handle bd-t2 move (48ms)

    ✓ Can handle T move (46ms)

    ✓ Can handle 2T move (45ms)

    ✓ Can handle w move (51ms)

    ✓ Can handle bd-w move (45ms)

    ✓ Can handle b move (43ms)

    ✓ Can handle e move

    ✓ Can handle bd-e move

    ✓ Can handle ge move (41ms)

    ✓ Can handle n-char move (62ms)

    ✓ Can handle j move (60ms)

    ✓ Can handle k move (188ms)

    ✓ Can handle bd-jk move (1) (42ms)

    ✓ Can handle bd-jk move (2) (48ms)

    ✓ Can handle lineforward move (1) (81ms)

    ✓ Can handle lineforward move (2) (44ms)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (40ms)

    ✓ Can handle searching for carat (^) (82ms)

    ✓ Can handle searching for dot (.)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (53ms)

    ✓ Replaces within inner Word (42ms)

    ✓ Replaces within '' (50ms)

    ✓ Replaces within '' including spaces (111ms)

    ✓ Replaces within () (43ms)

    ✓ Replaces within () including spaces (47ms)

    ✓ Replaces within a paragraph (81ms)

    ✓ Replaces using a specified register (96ms)

    ✓ Replaces within {} over multiple lines (49ms)

    ✓ Replaces a multiline register within {} over multiple lines (75ms)

    ✓ Replaces a multiline register within {} over multiple lines (42ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (54ms)

    ✓ grr replaces the entire line with the register (50ms)

    ✓ grr can replace multiple lines (65ms)

    ✓ Replaces in visual mode (80ms)

    ✓ Replaces in visual mode using a specified register (96ms)

    ✓ Replaces in visual line mode (61ms)

    ✓ grj is linewise (49ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion (58ms)

    ✓ Can handle <operator>z motion (43ms)

    ✓ Can handle <operator>Z motion (38ms)

    ✓ Can handle s; motion

    ✓ Can handle s, motion

    ✓ Can handle S; motion

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion (50ms)

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (66ms)

    ✓ Can handle single letter <operator>Z motion (50ms)

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion (38ms)

    ✓ Can handle single letter S, motion (70ms)

    ✓ Can handle multiline single char <number>s motion (74ms)

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward (47ms)

    ✓ Can go back using <C-o> when repeating forward movement (67ms)

    ✓ Can go back using <C-o> when repeating backward movement (85ms)

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward (137ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (95ms)

    ✓ 'ysiw(' surrounds word with space (60ms)

    ✓ 'ysw)' surrounds word without space (165ms)

    ✓ 'ysw(' surrounds word with space (92ms)

    ✓ 'ysaw)' surrounds word without space (123ms)

    ✓ 'ysaw(' surrounds word with space (80ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (69ms)

    ✓ 'ysiw<' surrounds word with tags (277ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (181ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (53ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (90ms)

    ✓ change surround (121ms)

    ✓ change surround with two pairs of quotes (54ms)

    ✓ change surround with two pairs of parens (95ms)

    ✓ change surround with alias (145ms)

    ✓ change surround to tags (118ms)

    ✓ delete surround (81ms)

    ✓ delete surround with quotes (76ms)

    ✓ delete surround with nested of quotes (55ms)

    ✓ delete surround with inconsistent quotes (104ms)

    ✓ delete surround with mixed quotes (80ms)

    ✓ delete surround with empty quotes cursor at start (56ms)

    ✓ delete surround with empty quotes cursor at end (130ms)

    ✓ don't delete surround if cursor is after closing match (58ms)

    ✓ delete surround if cursor is before opening match (58ms)

    ✓ delete surround with two pairs of parens (143ms)

    ✓ delete surround with alias (101ms)

    ✓ delete surround with tags (48ms)

    ✓ change surround brackets at end of line (64ms)

    ✓ changing brackets with surround works again (68ms)

    ✓ change surround with tags that contain an attribute and preserve them (70ms)

    ✓ change surround with tags that contain an attribute and remove them (91ms)

  register

    ✓ Can copy to a register (46ms)

    ✓ Can use two registers together (131ms)

    ✓ Can use black hole register (88ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (239ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (154ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (262ms)

    ✓ Register '1'-'9' stores delete content (308ms)

    ✓ "A appends linewise text to "a (260ms)

    ✓ "A appends character wise text to "a (309ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (128ms)

    ✓ Small deletion using Del is stored in small delete register (245ms)

    ✓ Small deletion using X is stored in small delete register (186ms)

    ✓ Search register (/) is set by forward search (260ms)

    ✓ Search register (/) is set by backward search (370ms)

    ✓ Search register (/) is set by star search (269ms)

    ✓ Command register (:) is set by command line (101ms)

    ✓ Read-only registers cannot be written to (184ms)

    clipboard

      ✓ Can access '*' (clipboard) register (77ms)

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (71ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward (48ms)

      ✓ move [count] sentences backward

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (45ms)

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line (40ms)

      ✓ move one sentence backward - multiline - previous line - period (77ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1383 passing (3m)

  4 pending

  21 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1942:3)


  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)


  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:356:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:850:5)


  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:857:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)


  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three four five.
      + expected - actual

      -one  three four five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:162:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:178:3)


  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-12.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-27T00:31:29.313Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6499) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6499) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (88ms)

    ✓ command <C-w> can remove word in search mode

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (65ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (39ms)

    ✓ <C-b> puts cursor at start of command line (50ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (46ms)

    ✓ <End> puts cursor at end of command line (42ms)

    ✓ <C-p>/<C-n> go to the previous/next command (77ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (80ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (105ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (96ms)

    ✓ <C-p> go to previous search string

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command (42ms)

    ✓ add empty command (41ms)

    ✓ add command over configuration.history (50ms)

    ✓ add command that exists in history (40ms)

    ✓ file system (44ms)

    ✓ change configuration.history (85ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace
    ✓ can lex long command name and args
    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1553ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (536ms)

    ✓ :smile editor contains smile text (535ms)

  Basic sort

    ✓ Sort whole file, asc (118ms)

    ✓ Sort whole file, asc, ignoreCase (118ms)

    ✓ Sort whole file, dsc (98ms)

    ✓ Sort whole file, dsc, ignoreCase (139ms)

    ✓ Sort range, asc (126ms)

    ✓ Sort range, asc, ignoreCase (95ms)

    ✓ Sort range, dsc (83ms)

    ✓ Sort range, dsc, ignoreCase (137ms)

    ✓ Sort whole file, asc, unique (123ms)

  Horizontal split

    ✓ :sp creates a second split (94ms)

    ✓ :split creates a second split (114ms)

    ✓ :new creates a second split (226ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (70ms)

    ✓ Replace with `g` flag (57ms)

    ✓ Replace with flags AND count (91ms)

    ✓ Replace with `c` flag (49ms)

    ✓ Replace with `gc` flag (67ms)

    ✓ Replace across all lines (96ms)

    ✓ Replace on specific single line (87ms)

    ✓ Replace on current line using dot (71ms)

    ✓ Replace single relative line using dot and plus (66ms)

    ✓ Replace across specific line range (73ms)

    ✓ Replace across relative line range using dot, plus, and minus (125ms)

    ✓ Replace across relative line range using numLines+colon shorthand (116ms)

    ✓ Repeat replacement across relative line range (113ms)

    ✓ Replace with range AND count but no flags (84ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (69ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (77ms)

    ✓ Undocumented: trailing operators use 1 as RHS (80ms)

    ✓ Replace specific single equal lines (119ms)

    ✓ Replace current line with no active selection (100ms)

    ✓ Replace text in selection (121ms)

    ✓ Substitute support marks (91ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (44ms)

      ✓ Replace with `g` flag inverts global flag (54ms)

      ✓ Replace with `c` flag inverts global flag (91ms)

      ✓ Replace multiple lines (82ms)

      ✓ Replace across specific lines (103ms)

      ✓ Replace current line with no active selection (99ms)

      ✓ Replace text in selection (89ms)

      ✓ Substitute support marks (85ms)

      ✓ Substitute with escaped delimiter (53ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (236ms)

      ✓ Substitute with previous search using # (167ms)

      ✓ Substitute with previous search using / (191ms)

      ✓ Substitute with parameters should update search state (119ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (292ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (132ms)

      ✓ Substitute repeat previous should accept flags (66ms)

      ✓ Substitute with empty search string should use last searched pattern (231ms)

      ✓ Ampersand (&) should repeat the last substitution (183ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (67ms)

    ✓ tabe with current file path does nothing (45ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path (41ms)

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (43ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (87ms)

    ✓ command line file tab completion with space in file path (186ms)

  Vertical split

    ✓ :vs creates a second split (62ms)

    ✓ :vsp creates a second split (64ms)

    ✓ :vsplit creates a second split (84ms)

    ✓ :vnew creates a second split (185ms)

    ✓ :vne creates a second split (200ms)

  Basic write-quit

    ✓ Run write and quit (67ms)
  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (64ms)

      ✓ Can complete lines in file with different indentation (47ms)

      ✓ Returns no completions for unmatched line (56ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (65ms)

    ✓ getMatchingRemap (52ms)

    ✓ jj -> <Esc> through modehandler (89ms)

    ✓ 0 -> :wq through modehandler (80ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (94ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (194ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (84ms)

    ✓ d -> black hole register delete in normal mode through modehandler (150ms)

    ✓ d -> black hole register delete in normal mode through modehandler (124ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (118ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled
  Remapping Validator
    ✓ no remappings
    ✓ jj->esc
    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc
    ✓ Can expand $HOME to user's home directory
    ✓ Can expand ~ to user's home directory
  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps
    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (48ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (152ms)

        ✓ Can track jumps for keys: /b<CR>n (48ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (63ms)

        ✓ Can track jumps for keys: j%% (40ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (48ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (50ms)

        ✓ Can track jumps for keys: j%%<C-o>%

        ✓ Can track jumps for keys: j%%<C-o>gg (55ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (57ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (76ms)

        ✓ Can enter number to jump back multiple times (48ms)

        ✓ Can track one-line `` jumps (60ms)

        ✓ Can track one-line double `` jumps (65ms)

        ✓ Can track one-line '' jumps (68ms)

        ✓ Can track one-line double '' jumps (80ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (70ms)

[main 2020-04-27T00:31:59.316Z] update#setState checking for updates

[main 2020-04-27T00:31:59.370Z] update#setState idle

        ✓ Can track jumps for keys: /^<CR>nnnkdd (81ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (86ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (69ms)
      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (116ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (159ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (156ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (117ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (172ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (57ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (138ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (63ms)

  Record and execute a macro

    ✓ Can record and execute (157ms)

    ✓ Can repeat last invoked macro (277ms)

    ✓ Can play back with count (433ms)

    ✓ Can play back with count, abort when a motion fails (428ms)

    ✓ Repeat change on contiguous lines (191ms)

    ✓ Append command to a macro (139ms)

    ✓ Can record Ctrl Keys and repeat (148ms)

    ✓ Can execute macros with dot commands properly (175ms)

    ✓ : (command) register can be used as a macro (166ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate
    ✓ get

  Mode Insert

    ✓ can be activated (98ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (63ms)

    ✓ <C-c> can exit insert (53ms)

    ✓ <Esc> can exit insert (65ms)

    ✓ Stay in insert when entering characters (88ms)

    ✓ Can handle 'O' (51ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line (46ms)

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace (50ms)

    ✓ Can handle <C-w> at beginning of line (38ms)

    ✓ <C-u> deletes to start of line (42ms)

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace (43ms)

    ✓ Correctly places the cursor after deleting the previous line break (67ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (47ms)

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file (45ms)

    ✓ Delete works in insert mode (50ms)

    ✓ Delete works at line end (38ms)

    ✓ Delete works at end of file (40ms)

    ✓ Delete works with repeat (171ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (83ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (59ms)

    ✓ Can perform insert command prefixed with count (53ms)

    ✓ Can perform append command prefixed with count (41ms)

    ✓ Can perform insert at start of line command prefixed with count (49ms)

    ✓ Can perform append to end of line command prefixed with count (40ms)

    ✓ Can perform change char (s) command prefixed with count (63ms)

    ✓ Can perform command prefixed with count with <C-[> (43ms)

    ✓ Can handle 'o' with count (100ms)

    ✓ Can handle 'O' with count (87ms)

    ✓ Can handle backspace at beginning of line with all spaces (45ms)

    ✓ Can handle digraph insert (70ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw (45ms)

    ✓ Can handle dw (40ms)

    ✓ Can handle dw across lines (1) (38ms)

    ✓ Can handle dw across lines (2) (70ms)

    ✓ Can handle dd last line (39ms)

    ✓ Can handle dd single line (49ms)

    ✓ Can handle dd (42ms)

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document (48ms)

    ✓ Can handle d2d (41ms)

    ✓ Can handle dd empty line (39ms)

    ✓ Can handle ddp (52ms)

    ✓ Can handle 'de' (47ms)

    ✓ Can handle 'de' then 'de' again (40ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (96ms)

    ✓ Can handle 'dl' at end of line (171ms)

    ✓ Can handle 'dF' (74ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter> (42ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis (61ms)

    ✓ Can handle 'd]}' without deleting closing bracket (41ms)

    ✓ Can handle 'd/' (64ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (48ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (59ms)

    ✓ Can handle 'cw' (86ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w' (41ms)

    ✓ Can handle 'cw' without removing EOL (51ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (102ms)

    ✓ Can handle 'c]}' without deleting closing bracket (45ms)

    ✓ Can handle 's' (38ms)

    ✓ Can handle 'yiw' with correct cursor ending position (39ms)

    ✓ Can handle 'ciw' (55ms)

    ✓ Can handle 'ciw' on blanks (52ms)

    ✓ Can handle 'caw' (71ms)

    ✓ Can handle 'caw' on first letter (51ms)

    ✓ Can handle 'caw' on blanks (83ms)

    ✓ Can handle 'caw' on blanks (38ms)

    ✓ Can handle 'cae' (45ms)

    ✓ Can handle 'cae' with caret at document's top

    ✓ Can handle 'cae' with caret at document's end

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'cie' with leading space (53ms)

    ✓ Can handle 'cie' with trailing space (45ms)

    ✓ Can handle 'cie' with both leading and trailing space (49ms)

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses (39ms)

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (69ms)

    ✓ Can handle count prefixed 'ci)' (43ms)

    ✓ Can handle count prefixed 'ca)' (46ms)

    ✓ Can handle 'ca(' spanning multiple lines (43ms)

    ✓ Can handle 'cab' spanning multiple lines (38ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (77ms)

    ✓ Can handle 'ci(' on the closing bracket (38ms)

    ✓ Can handle 'ciB' spanning multiple lines (51ms)

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {} (66ms)

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket (45ms)

    ✓ Can handle 'ca[' on first bracket (39ms)

    ✓ Can handle 'ca]' on first bracket (57ms)

    ✓ Can handle 'ci'' on first quote (44ms)

    ✓ Can handle 'ci'' inside quoted string (49ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word (43ms)

    ✓ Can handle 'ca"' starting behind the quoted word (43ms)

    ✓ Can handle 'ca"' starting on the opening quote (44ms)

    ✓ Can handle 'ci"' with escaped quotes (47ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (40ms)

    ✓ Can handle 'ca"' starting on the closing quote (47ms)

    ✓ Can handle 'ci"' with complex escape sequences (47ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (48ms)

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word (46ms)

    ✓ can handle cj (58ms)

    ✓ can handle ck (63ms)

    ✓ can handle c2j (87ms)

    ✓ can handle c2k (67ms)

    ✓ can handle cj on last line (70ms)

    ✓ can handle ck on first line (57ms)

    ✓ can handle c2j on last line (59ms)

    ✓ can handle c2k on first line (44ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces

    ✓ Can handle 'daw' on word with leading spaces (50ms)

    ✓ Can handle 'daw' on word with numeric prefix (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (44ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (46ms)

    ✓ Can handle 'daw' on end of word

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (48ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line (40ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (45ms)

    ✓ Can handle 'daw' around word at end of line (51ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (40ms)

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines (59ms)

    ✓ Can handle 'daW' on beginning of word (55ms)

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (45ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (90ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (46ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (44ms)

    ✓ Can handle 'diw' on word with cursor inside spaces (47ms)

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix (44ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line (38ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (47ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (40ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (39ms)

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (42ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines (40ms)

    ✓ Can handle 'diW' on beginning of word (57ms)

    ✓ Can handle 'dae' (52ms)

    ✓ Can handle 'dae' with caret at document's top

    ✓ Can handle 'dae' with caret at document's end (53ms)

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space

    ✓ Can handle 'die' with trailing space (60ms)

    ✓ Can handle 'die' with both leading and trailing space (52ms)

    ✓ Can handle 'die' on blank content (43ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (45ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line (47ms)

    ✓ Select sentence with trailing spaces (38ms)

    ✓ Select sentence with leading spaces (51ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces (40ms)

    ✓ Select spaces between sentences (52ms)

    ✓ Can handle 'df' (40ms)

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines (75ms)

    ✓ Can handle A and backspace (45ms)

    ✓ A should update desiredColumn (45ms)

    ✓ I should updated desiredColumn (49ms)

    ✓ leaving insert mode should update desired column when entered with a (68ms)

    ✓ leaving insert mode should update desired column when entered with i (67ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (50ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy' (51ms)

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy' (49ms)

    ✓ Can handle 'gp' after 'Nyy' (51ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (53ms)

    ✓ Can handle 'gP' after 'yy' (39ms)

    ✓ Can handle 'gP' after 'Nyy' (46ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (56ms)

    ✓ Can handle ']p' after yy (64ms)

    ✓ Can handle ']p' after 'Nyy' (71ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (108ms)

    ✓ Can handle '[p' after yy (49ms)

    ✓ Can handle '[p' after 'Nyy' (62ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (51ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (50ms)

    ✓ Can handle 'p' after y'a (48ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (51ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (64ms)

    ✓ Can handle pasting in visual mode over selection (113ms)

    ✓ Can repeat w (72ms)

    ✓ Can repeat p

    ✓ I works correctly (59ms)

    ✓ gI works correctly (78ms)

    ✓ gi works correctly (84ms)

    ✓ `. works correctly (57ms)

    ✓ '. works correctly (55ms)

    ✓ g; works correctly (67ms)

    ✓ g, works correctly (64ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly (41ms)

    ✓ gq handles spaces after single line comments correctly (41ms)

    ✓ gq handles spaces before single line comments correctly (49ms)

    ✓ gq handles tabs before single line comments correctly (62ms)

    ✓ Can handle space

    ✓ Can handle space

    ✓ Undo 1 (104ms)

    ✓ Undo 2 (84ms)

    ✓ Undo cursor (133ms)

    ✓ Undo cursor 2 (112ms)

    ✓ Undo cursor 3 (130ms)

    ✓ Undo with movement first (80ms)

    ✓ Can handle 'U' (39ms)

    ✓ Can handle 'U' for multiple changes (73ms)

    ✓ Can handle 'U' for new line below (82ms)

    ✓ Can handle 'U' for new line above (84ms)

    ✓ Can handle 'U' for consecutive changes only (107ms)

    ✓ Can handle 'u' to undo 'U' (49ms)

    ✓ Can handle 'U' to undo 'U' (52ms)

    ✓ Can handle 'u' after :s/abc/def (96ms)

    ✓ Redo (92ms)

    ✓ Redo (74ms)

    ✓ Redo (77ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle guae (51ms)

    ✓ Can handle guie

    ✓ Can handle gUw

    ✓ Can handle gUae

    ✓ Can handle gUie (42ms)

    ✓ Can handle u over line breaks (41ms)

    ✓ can handle s in visual mode (48ms)

    ✓ can handle p with selection (51ms)

    ✓ can handle P with selection (57ms)

    ✓ can handle p in visual to end of line (88ms)

    ✓ can repeat backspace twice (141ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly (72ms)

    ✓ can dE correctly (47ms)

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after  (39ms)

    ✓ can ctrl-a properly on multiple lines (241ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y

    ✓ can do [count]Y if count is larger than EOF

    ✓ Can do S

    ✓ / does not affect mark (57ms)

    ✓ / can search with regex (47ms)

    ✓ / can search with newline

    ✓ / can search through multiple newlines (65ms)

    ✓ / matches ^ per line

    ✓ / matches $ per line (39ms)

    ✓ Can search for forward slash (43ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (68ms)

    ✓ /\C forces case sensitive search (64ms)

    ✓ <BS> deletes the last character in search in progress mode

    ✓ <S-BS> deletes the last character in search in progress mode (50ms)

    ✓ <C-h> deletes the last character in search in progress mode (46ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (55ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (48ms)

    ✓ Can do cit on a tag with an attribute tag (47ms)

    ✓ Can do cat on a matching tag (44ms)

    ✓ Can do cit on a multiline tag (46ms)

    ✓ Can do cit on a multiline tag with nested tags (50ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags (42ms)

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc (39ms)

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (61ms)

    ✓ Indent current line with correct Vim Mode (87ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent (155ms)

    ✓ Can do cai (46ms)

    ✓ Can do cii

    ✓ Can do caI (44ms)

    ✓ Can do dai (45ms)

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (59ms)

    ✓ '] go to the end of the previously operated or put text (59ms)

    ✓ `[ go to the start of the previously operated or put text (77ms)

    ✓ '[ go to the start of the previously operated or put text (60ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (162ms)

      ✓ gn selects the current word at |hello (234ms)

      ✓ gn selects the current word at h|ello (310ms)

      ✓ gn selects the current word at hel|lo (185ms)

      ✓ gn selects the current word at hell|o (225ms)

      ✓ gn selects the next word at hello| (305ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (60ms)

      ✓ dgn deletes the current word when cursor is at |hello (68ms)

      ✓ dgn deletes the current word when cursor is at h|ello (108ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (73ms)

      ✓ dgn deletes the current word when cursor is at hell|o (53ms)

      ✓ dgn deletes the next word when cursor is at hello| (236ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (89ms)

      ✓ cgn deletes the current word when cursor is at |hello (86ms)

      ✓ cgn deletes the current word when cursor is at h|ello (78ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (71ms)

      ✓ cgn deletes the current word when cursor is at hell|o (86ms)

      ✓ cgn deletes the next word when cursor is at hello| (66ms)

    can handle gN

      ✓ gN selects the previous match text (219ms)

      ✓ gN selects the current word at hell|o (219ms)

      ✓ gN selects the current word at hel|lo (231ms)

      ✓ gN selects the current word at h|ello (230ms)

      ✓ gN selects the current word at |hello (247ms)

      ✓ gN selects the previous word at | hello (235ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (67ms)

      ✓ dgN deletes the current word when cursor is at hell|o (71ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (88ms)

      ✓ dgN deletes the current word when cursor is at h|ello (98ms)

      ✓ dgN deletes the current word when cursor is at |hello (80ms)

      ✓ dgN deletes the previous word when cursor is at | hello (64ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (64ms)

      ✓ cgN deletes the current word when cursor is at hell|o (83ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (102ms)

      ✓ cgN deletes the current word when cursor is at h|ello (88ms)

      ✓ cgN deletes the current word when cursor is at |hello (101ms)

      ✓ cgN deletes the previous word when cursor is at | hello (68ms)

    marks

      ✓ capital marks can change the editors active document (117ms)

      ✓ can jump to lowercase mark (39ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (46ms)

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode (38ms)

    ✓ Can handle R across lines (67ms)

    ✓ Can handle R across lines and exit Replace Mode (142ms)

    ✓ Can handle R with {count} (71ms)

    ✓ Can handle backspace (47ms)

    ✓ Can handle backspace (49ms)

    ✓ Can handle backspace across lines (79ms)

    ✓ Can handle arrows (57ms)

    ✓ Can handle . (79ms)

    ✓ Can handle . across lines (165ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (120ms)

    ✓ Can handle wd (139ms)

    ✓ Can handle x (121ms)

    ✓ Can handle x across a selection (120ms)

    ✓ Can do vwd in middle of sentence (137ms)

    ✓ Can do vwd in middle of sentence (138ms)

    ✓ Can do vwd multiple times (179ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (160ms)

    ✓ Can handle H key (41ms)

    ✓ Can handle backspace key (62ms)

    ✓ handles case where we delete over a newline (138ms)

    ✓ handles change operator (127ms)

    ✓ Can do vat on multiple matching tags (53ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (67ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (49ms)

    ✓ Repeat-prefixed vat does not bleed below (46ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (43ms)

    ✓ Can do vi) on a matching parenthesis (49ms)

    ✓ Can do vi) on multiple matching parens (54ms)

    ✓ Can do va) on a matching parenthesis (48ms)

    ✓ Can do va) on multiple matching parens (51ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (38ms)

    ✓ Repeat-prefixed va) does not bleed below (44ms)

    ✓ Can do va} on a matching bracket as first character (41ms)

    ✓ Can do va} on multiple matching brackets (64ms)

    ✓ Can do vi( on a matching bracket near first character (102ms)

    ✓ Can do vi{ on outer pair of nested braces (45ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (40ms)

    ✓ Can do va] on multiple matching brackets

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (57ms)

    ✓ Repeat-prefixed vaf does not bleed below (51ms)

    ✓ vaf only expands to enclosing pairs (58ms)

    ✓ Can use . to repeat indent in visual (52ms)

    ✓ Can do v_x to delete to first char (49ms)

    ✓ Can do vg_x to delete to last char with no EOL (50ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (43ms)

    ✓ Can do v$x to delete to last char including EOL (54ms)

    ✓ Can do gv to reselect previous selection (70ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (54ms)

    Vim's EOL handling is weird

      ✓ delete through eol (90ms)

      ✓ join 2 lines by deleting through eol (110ms)

      ✓ d$ doesn't delete whole line (85ms)

      ✓ vd$ does delete whole line (79ms)

      ✓ Paste over selection copies the selection (67ms)

      ✓ Paste over selection copies the selection linewise (113ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (48ms)

      ✓ Can handle <down> key (46ms)

      ✓ Can handle <left> key (38ms)

      ✓ Can handle <right> key (45ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (65ms)

      ✓ Can handle 'gj' (46ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (71ms)

      ✓ Can handle 'vawd' on word with trailing spaces (48ms)

      ✓ Can handle 'vawd' on word with leading spaces (54ms)

      ✓ Can handle 'vawd' on word with numeric prefix (62ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (53ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (62ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (40ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (40ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (44ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (44ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (47ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (45ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (46ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (47ms)

      ✓ Can handle 'vawd' on word with trailing spaces (53ms)

      ✓ Can handle 'vawd' on word with leading spaces (48ms)

      ✓ Can handle 'vawd' on word with numeric prefix

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (49ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (49ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (49ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (43ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (51ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (43ms)

      ✓ Can handle 'Y' in visual mode (63ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (52ms)

      ✓ Select sentence with leading spaces in visual mode

      ✓ Select multiple sentences in visual mode (65ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (57ms)

      ✓ Select inner sentence with leading spaces in visual mode (62ms)

      ✓ Select spaces between sentences in visual mode (48ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (59ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (46ms)

      ✓ Can do vat on a matching tag (50ms)

    handles replace in visual mode

      ✓ Can do a single line replace (43ms)

      ✓ Can do a multi line replace (55ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (49ms)

      ✓ D deletes the current line (42ms)

    handles indent blocks in visual mode

      ✓ Can do vai (142ms)

      ✓ Can do vii (48ms)

      ✓ Doesn't naively select the next line

      ✓ Searches backwards if cursor line is empty (48ms)

      ✓ Can do vaI (49ms)

    visualstar

      ✓ Works with * (59ms)

      ✓ Works with # (57ms)

    search works in visual mode

      ✓ Works with / (75ms)

      ✓ Works with ? (66ms)

      ✓ Selects correct range (84ms)

    X will delete linewise

      ✓ normal selection (48ms)

      ✓ normal selection

    C will delete linewise

      ✓ normal selection (48ms)

      ✓ normal selection (53ms)

    R will delete linewise

      ✓ normal selection (52ms)

      ✓ normal selection (52ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (61ms)

      ✓ upward selection (118ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (154ms)

      ✓ multiline indent bottom up selection (341ms)

      ✓ repeat multiline indent top down selection (58ms)

      ✓ repeat multiline indent bottom up selection (66ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (46ms)

      ✓ multiline outdent bottom up selection (41ms)

      ✓ repeat multiline outdent top down selection (70ms)

      ✓ repeat multiline outdent bottom up selection (71ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (129ms)

    vi{ will go to end of second to last line

      ✓ select (51ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (332ms)

      ✓ gv selects the last pasted text (which is longer than original) (312ms)

      ✓ gv selects the last pasted text (multiline) (202ms)

    can handle gn

      ✓ gn selects the next match text (179ms)

      ✓ gn selects the current word at |hello (161ms)

      ✓ gn selects the current word at h|ello (178ms)

      ✓ gn selects the current word at hel|lo (221ms)

      ✓ gn selects the next word at hell|o (198ms)

      ✓ gn selects the next word at hello| (193ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (45ms)

      ✓ multiline insert from top down selection (49ms)

      ✓ skips blank lines (49ms)

    can append text with A

      ✓ multiline append from bottom up selection (50ms)

      ✓ multiline append from top down selection (45ms)

      ✓ skips blank lines (38ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (45ms)

      ✓ U/gU across a selection (174ms)

      ✓ U/gU across a selection (reverse) (119ms)

      ✓ u/gu on single character (68ms)

      ✓ u/gu across a selection (126ms)

      ✓ u/gu across a selection (reverse) (80ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (128ms)

      ✓ ~/g~ across a selection (83ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (64ms)

    ✓ Can handle A backwards select (52ms)

    ✓ Can handle I forward select (68ms)

    ✓ Can handle I backwards select (63ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (70ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (77ms)

    ✓ Can handle c forward select (67ms)

    ✓ Can handle c backwards select (64ms)

    ✓ Can handle C (61ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (51ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (83ms)

    ✓ Properly add to end of lines $ then j (74ms)

    ✓ o works in visual block mode (43ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    ✓ Select register using " works in visual block mode (110ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (42ms)

    ✓ Can handle 'J' when the visual block spans multiple lines (52ms)

    ✓ Can handle 'J' when start position of the visual block is below the stop (60ms)

    ✓ Can handle ~/g~ in visual block mode (86ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (158ms)

  Mode Visual Line

    ✓ can be activated (303ms)

    ✓ <count>V selects <count> lines (213ms)

    ✓ Can handle w (139ms)

    ✓ Can handle wd (112ms)

    ✓ Can handle x (94ms)

    ✓ Can handle x across a selection (112ms)

    ✓ Can do vwd in middle of sentence (152ms)

    ✓ Can do vwd in middle of sentence (196ms)

    ✓ Can do vwd multiple times (133ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (162ms)

    ✓ handles case where we delete over a newline (153ms)

    ✓ handles change operator (124ms)

    ✓ Vp updates register content (61ms)

    ✓ Vp does not append unnecessary newlines (first line)

    ✓ Vp does not append unnecessary newlines (middle line) (47ms)

    ✓ Vp does not append unnecessary newlines (last line) (61ms)

    ✓ Exiting via <Esc> returns cursor to original column (48ms)

    ✓ Exiting via `VV` returns cursor to original column (63ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (41ms)

    Vim's EOL handling is weird

      ✓ delete through eol (83ms)

      ✓ join 2 lines by deleting through eol (90ms)

      ✓ d$ doesn't delete whole line (86ms)

      ✓ vd$ does delete whole line (102ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (46ms)

      ✓ Can handle <down> key (47ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (46ms)

      ✓ Can handle 'gj'

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (46ms)

      ✓ Can handle d key

      ✓ Can handle d key (45ms)

      ✓ Can handle d key (47ms)

      ✓ can handle 'c' (46ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (39ms)

      ✓ Can do a multi visual line replace (40ms)

      ✓ Can do a multi visual line replace from the bottom up (58ms)

    search works in visual line mode

      ✓ Works with / (68ms)

      ✓ Works with ? (50ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (145ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (48ms)

      ✓ linewise visual put works also in the end of document (51ms)

      ✓ gv selects the last pasted text (which is shorter than original) (379ms)

      ✓ gv selects the last pasted text (which is longer than original) (330ms)

      ✓ gv selects the last pasted text (multiline) (134ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (71ms)

      ✓ multiline insert from top down selection (50ms)

      ✓ skips blank lines (51ms)

    can append text with A

      ✓ multiline append from bottom up selection (50ms)

      ✓ multiline append from top down selection (46ms)

      ✓ skips blank lines (47ms)

      ✓ updates desired column correctly (46ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (73ms)

      ✓ ~/g~ on multiple lines (61ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx' (98ms)

    ✓ Can handle 'Nx' and paste (40ms)

    ✓ Can handle 'x' at end of line (61ms)

    ✓ Can handle 'Ns' (39ms)

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (57ms)

    ✓ Can handle 'cc' (45ms)

    ✓ Can handle 'Ncc' (66ms)

    ✓ Can handle 'yy' (53ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows

    ✓ Can handle 'D' with count when end position is on blank line

    ✓ Can handle 'DD' (42ms)

    ✓ Can handle 'C' (43ms)

    ✓ Can handle 'NC' (49ms)

    ✓ Can handle 'NC' and put (46ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (59ms)

    ✓ Can handle 'r
' (43ms)

    ✓ Can handle '<Count>r
' (40ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (62ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line (44ms)

    ✓ Can handle 'J' with TWO indented lines (375ms)

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF

    ✓ Can handle 'J' in Visual Line mode (44ms)

    ✓ Can handle 'gJ' once (42ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~' (40ms)

    ✓ Can handle '<BS>' in insert mode (49ms)

    ✓ Can handle undo with P (92ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num> (46ms)

    ✓ Can repeat '~' with dot (38ms)

    ✓ Can repeat 'x' (45ms)

    ✓ Can repeat 'J' (44ms)

    ✓ Can handle dot with A (98ms)

    ✓ Can handle dot with I (65ms)

    ✓ Can repeat actions that require selections (57ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (53ms)

    ✓ Can repeat insert change and '<C-t>' (54ms)

    ✓ Can repeat change by `<C-a>` (66ms)

    ✓ Only one arrow key can be repeated in Insert Mode (82ms)

    ✓ Cached content change will be cleared by arrow keys (78ms)

  Matching Bracket (%)

    ✓ before opening parenthesis (53ms)

    ✓ inside parenthesis (44ms)

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>]) (47ms)

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{ (58ms)

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg' (41ms)

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file (39ms)

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice (41ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search (41ms)

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (46ms)

    ✓ Can handle 'F' and find back search (38ms)

    ✓ Can handle 'f' and multiple back searches (51ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T' (45ms)

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (45ms)

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word (49ms)

    ✓ Can run a forward search with count 1

    ✓ Can run a forward search with count 3 (44ms)

    ✓ Can run a forward search with count exceeding max number of matches (48ms)

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search (54ms)

    ✓ Can run a reverse search with count 1 (39ms)

    ✓ Can run a reverse search with count 3 (113ms)

    ✓ Can run a reverse search with count exceeding max number of matches (43ms)

    ✓ cancelled search reverts to previous search state (65ms)

    ✓ Backspace on empty search cancels (49ms)

    ✓ Search offsets: b does nothing (47ms)

    ✓ Search offsets: b2 goes 2 to the right (40ms)

    ✓ Search offsets: b+3 goes 3 to the right (43ms)

    ✓ Search offsets: e goes to the end

    ✓ Search offsets: character offset goes across line boundaries (51ms)

    ✓ Search offsets: 2 goes 2 down (54ms)

    ✓ Search offsets: -2 goes 2 up (57ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg (38ms)

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n (89ms)

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> | (38ms)

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix (43ms)

    ✓ Can handle - (44ms)

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _ (54ms)

    ✓ Can handle _ with count prefix

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk' (44ms)

    ✓ Can handle 'gj' (40ms)

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right
      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word
    word left
      ✓ move cursor word left across the different char kind
      ✓ move cursor word left within the same char kind
      ✓ move cursor word left across spaces on non-ascii text
      ✓ move cursor word left within word on non-ascii text
      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down
      ✓ move down normally
      ✓ move down longer paragraph
      ✓ move down starting inside empty line
      ✓ paragraph at end of document

    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled
      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (46ms)

      ✓ search wraps around the start of the file (52ms)

    wrapscan disabled

      ✓ search stops at the end of the file (39ms)

      ✓ search stops at the start of the file (60ms)

  Multicursor

    ✓ can add multiple cursors below (93ms)

    ✓ can add multiple cursors above (145ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (315ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (345ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (351ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (350ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor (58ms)

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string
    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5949) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (200ms)

    ✓ gcj comments in current and next line (136ms)

    ✓ block comment with motion (193ms)

    ✓ block comment in Visual Mode (263ms)

    ✓ comment in visual line mode (223ms)

    ✓ comment in visual block mode (244ms)

  format operator

    ✓ == formats current line (266ms)

    ✓ =$ formats entire line (212ms)

    ✓ =j formats two lines (288ms)

    ✓ 3=k formats three lines (153ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (86ms)

    ✓ =ip formats paragraph (206ms)

    ✓ format in visual mode (101ms)

  put operator

    ✓ basic put test (47ms)

    ✓ test yy end of line (108ms)

    ✓ test yy first line (39ms)

    ✓ test yy middle line

    ✓ test yy with correct positon movement (48ms)

    ✓ test visual block single line yank p (80ms)

    ✓ test visual block single line yank P (53ms)

    ✓ test visual block single line delete p (70ms)

    ✓ test visual block single line delete P (54ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works (44ms)

    ✓ g? in visual line mode works (72ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test (39ms)

    ✓ shift left goto end test (45ms)

    ✓ shift left goto line test (134ms)

    ✓ shift right goto end test

    ✓ shift right goto line test (43ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word (39ms)

      ✓ step after CAP word (40ms)

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (120ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord (38ms)

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word (39ms)

      ✓ delete two words from camel_word (152ms)

    handles di<leader>w

      ✓ delete from start of camelWord (45ms)

      ✓ delete from middle of camelWord (39ms)

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word (39ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (46ms)

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (53ms)

    ✓ Can handle 2s move (56ms)

    ✓ Can handle f move (51ms)

    ✓ Can handle 2f move (67ms)

    ✓ Can handle F move (51ms)

    ✓ Can handle 2F move (50ms)

    ✓ Can handle t move (49ms)

    ✓ Can handle bd-t move (53ms)

    ✓ Can handle 2t move (50ms)

    ✓ Can handle bd-t2 move (48ms)

    ✓ Can handle T move (46ms)

    ✓ Can handle 2T move (45ms)

    ✓ Can handle w move (51ms)

    ✓ Can handle bd-w move (45ms)

    ✓ Can handle b move (43ms)

    ✓ Can handle e move

    ✓ Can handle bd-e move

    ✓ Can handle ge move (41ms)

    ✓ Can handle n-char move (62ms)

    ✓ Can handle j move (60ms)

    ✓ Can handle k move (188ms)

    ✓ Can handle bd-jk move (1) (42ms)

    ✓ Can handle bd-jk move (2) (48ms)

    ✓ Can handle lineforward move (1) (81ms)

    ✓ Can handle lineforward move (2) (44ms)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (40ms)

    ✓ Can handle searching for carat (^) (82ms)

    ✓ Can handle searching for dot (.)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (53ms)

    ✓ Replaces within inner Word (42ms)

    ✓ Replaces within '' (50ms)

    ✓ Replaces within '' including spaces (111ms)

    ✓ Replaces within () (43ms)

    ✓ Replaces within () including spaces (47ms)

    ✓ Replaces within a paragraph (81ms)

    ✓ Replaces using a specified register (96ms)

    ✓ Replaces within {} over multiple lines (49ms)

    ✓ Replaces a multiline register within {} over multiple lines (75ms)

    ✓ Replaces a multiline register within {} over multiple lines (42ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (54ms)

    ✓ grr replaces the entire line with the register (50ms)

    ✓ grr can replace multiple lines (65ms)

    ✓ Replaces in visual mode (80ms)

    ✓ Replaces in visual mode using a specified register (96ms)

    ✓ Replaces in visual line mode (61ms)

    ✓ grj is linewise (49ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion (58ms)

    ✓ Can handle <operator>z motion (43ms)

    ✓ Can handle <operator>Z motion (38ms)

    ✓ Can handle s; motion

    ✓ Can handle s, motion

    ✓ Can handle S; motion

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion (50ms)

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (66ms)

    ✓ Can handle single letter <operator>Z motion (50ms)

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion (38ms)

    ✓ Can handle single letter S, motion (70ms)

    ✓ Can handle multiline single char <number>s motion (74ms)

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward (47ms)

    ✓ Can go back using <C-o> when repeating forward movement (67ms)

    ✓ Can go back using <C-o> when repeating backward movement (85ms)

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward (137ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (95ms)

    ✓ 'ysiw(' surrounds word with space (60ms)

    ✓ 'ysw)' surrounds word without space (165ms)

    ✓ 'ysw(' surrounds word with space (92ms)

    ✓ 'ysaw)' surrounds word without space (123ms)

    ✓ 'ysaw(' surrounds word with space (80ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (69ms)

    ✓ 'ysiw<' surrounds word with tags (277ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (181ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (53ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (90ms)

    ✓ change surround (121ms)

    ✓ change surround with two pairs of quotes (54ms)

    ✓ change surround with two pairs of parens (95ms)

    ✓ change surround with alias (145ms)

    ✓ change surround to tags (118ms)

    ✓ delete surround (81ms)

    ✓ delete surround with quotes (76ms)

    ✓ delete surround with nested of quotes (55ms)

    ✓ delete surround with inconsistent quotes (104ms)

    ✓ delete surround with mixed quotes (80ms)

    ✓ delete surround with empty quotes cursor at start (56ms)

    ✓ delete surround with empty quotes cursor at end (130ms)

    ✓ don't delete surround if cursor is after closing match (58ms)

    ✓ delete surround if cursor is before opening match (58ms)

    ✓ delete surround with two pairs of parens (143ms)

    ✓ delete surround with alias (101ms)

    ✓ delete surround with tags (48ms)

    ✓ change surround brackets at end of line (64ms)

    ✓ changing brackets with surround works again (68ms)

    ✓ change surround with tags that contain an attribute and preserve them (70ms)

    ✓ change surround with tags that contain an attribute and remove them (91ms)

  register

    ✓ Can copy to a register (46ms)

    ✓ Can use two registers together (131ms)

    ✓ Can use black hole register (88ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (239ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (154ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (262ms)

    ✓ Register '1'-'9' stores delete content (308ms)

    ✓ "A appends linewise text to "a (260ms)

    ✓ "A appends character wise text to "a (309ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (128ms)

    ✓ Small deletion using Del is stored in small delete register (245ms)

    ✓ Small deletion using X is stored in small delete register (186ms)

    ✓ Search register (/) is set by forward search (260ms)

    ✓ Search register (/) is set by backward search (370ms)

    ✓ Search register (/) is set by star search (269ms)

    ✓ Command register (:) is set by command line (101ms)

    ✓ Read-only registers cannot be written to (184ms)

    clipboard

      ✓ Can access '*' (clipboard) register (77ms)

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character> (71ms)

    ✓ Can repeat N times reversed t<character>

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward (48ms)

      ✓ move [count] sentences backward

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (45ms)

      ✓ move one sentence backward no space - middle

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line (40ms)

      ✓ move one sentence backward - multiline - previous line - period (77ms)

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix

      ✓ can separate relative path on posix

    resolveUri

      ✓ posix

      ✓ win32

  1383 passing (3m)

  4 pending

  21 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1942:3)


  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)


  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:356:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:850:5)


  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:857:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)


  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three four five.
      + expected - actual

      -one  three four five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:162:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:178:3)


  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: f4a51f40-881e-11ea-88d0-3540a036c4cf

@J-Fields J-Fields force-pushed the multicursor-tests branch from 59d2c16 to 1200e5d Compare April 27, 2020 00:42
@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 12

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.13.1 build /home/travis/build/VSCodeVim/Vim
> gulp build

[00:43:24] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[00:43:24] Starting 'build'...
[00:43:24] Starting 'prettier'...
[00:43:24] Finished 'prettier' after 25 ms
[00:43:24] Starting 'tsc'...
[00:43:24] Starting 'tslint'...
[00:43:32] Finished 'tslint' after 7.54 s
[00:43:42] Finished 'tsc' after 17 s
[00:43:42] Starting 'commit-hash'...
[00:43:42] Finished 'commit-hash' after 47 ms
[00:43:42] Finished 'build' after 17 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-27T00:43:50.458Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6375) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6375) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (63ms)

    ✓ command <C-w> can remove word in search mode (41ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (55ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line (43ms)

    ✓ <Home> puts cursor at start of command line (40ms)

    ✓ <C-e> puts cursor at end of command line (51ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (59ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (116ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (118ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (90ms)

    ✓ <C-p> go to previous search string (41ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command (42ms)

    ✓ add empty command (45ms)

    ✓ add command over configuration.history (48ms)

    ✓ add command that exists in history (52ms)

    ✓ file system (48ms)

    ✓ change configuration.history (91ms)

  command-line lexer
    ✓ can lex empty string
    ✓ can lex comma
    ✓ can lex percent
    ✓ can lex dollar
    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search
    ✓ can lex reverse search escaping
    ✓ can lex command name
    ✓ can lex command args
    ✓ can lex command args with leading whitespace
    ✓ can lex long command name and args
    ✓ can lex left and right line refs
  :only command

    ✓ Run :only (1481ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (546ms)

    ✓ :smile editor contains smile text (538ms)

  Basic sort

    ✓ Sort whole file, asc (114ms)

    ✓ Sort whole file, asc, ignoreCase (129ms)

    ✓ Sort whole file, dsc (150ms)

    ✓ Sort whole file, dsc, ignoreCase (119ms)

    ✓ Sort range, asc (176ms)

    ✓ Sort range, asc, ignoreCase (157ms)

    ✓ Sort range, dsc (141ms)

    ✓ Sort range, dsc, ignoreCase (158ms)

    ✓ Sort whole file, asc, unique (152ms)

  Horizontal split

    ✓ :sp creates a second split (88ms)

    ✓ :split creates a second split (66ms)

    ✓ :new creates a second split (243ms)

  :close args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !
    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (55ms)

    ✓ Replace with `g` flag (71ms)

    ✓ Replace with flags AND count (132ms)

    ✓ Replace with `c` flag (63ms)

    ✓ Replace with `gc` flag (76ms)

    ✓ Replace across all lines (102ms)

    ✓ Replace on specific single line (128ms)

    ✓ Replace on current line using dot (85ms)

    ✓ Replace single relative line using dot and plus (92ms)

    ✓ Replace across specific line range (108ms)

    ✓ Replace across relative line range using dot, plus, and minus (102ms)

    ✓ Replace across relative line range using numLines+colon shorthand (104ms)

    ✓ Repeat replacement across relative line range (118ms)

    ✓ Replace with range AND count but no flags (82ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (82ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (71ms)

    ✓ Undocumented: trailing operators use 1 as RHS (67ms)

    ✓ Replace specific single equal lines (77ms)

    ✓ Replace current line with no active selection (99ms)

    ✓ Replace text in selection (164ms)

    ✓ Substitute support marks (114ms)
    Effects of gdefault=true

      ✓ Replace all matches in the line (79ms)

      ✓ Replace with `g` flag inverts global flag (50ms)

      ✓ Replace with `c` flag inverts global flag (78ms)

      ✓ Replace multiple lines (119ms)

      ✓ Replace across specific lines (106ms)

      ✓ Replace current line with no active selection (83ms)

      ✓ Replace text in selection (119ms)

      ✓ Substitute support marks (112ms)

      ✓ Substitute with escaped delimiter (54ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (234ms)

      ✓ Substitute with previous search using # (306ms)

      ✓ Substitute with previous search using / (248ms)

      ✓ Substitute with parameters should update search state (103ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (296ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (162ms)

      ✓ Substitute repeat previous should accept flags (93ms)

      ✓ Substitute with empty search string should use last searched pattern (220ms)

      ✓ Ampersand (&) should repeat the last substitution (95ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (70ms)

    ✓ tabe with current file path does nothing (49ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (49ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (68ms)

    ✓ command line file tab completion with space in file path (171ms)

  Vertical split

    ✓ :vs creates a second split (77ms)

    ✓ :vsp creates a second split (68ms)

    ✓ :vsplit creates a second split (91ms)

    ✓ :vnew creates a second split (213ms)

    ✓ :vne creates a second split (408ms)

  Basic write-quit

    ✓ Run write and quit (80ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (53ms)

      ✓ Can complete lines in file with different indentation (41ms)

      ✓ Returns no completions for unmatched line (49ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (69ms)

    ✓ getMatchingRemap (62ms)

    ✓ jj -> <Esc> through modehandler (122ms)

    ✓ 0 -> :wq through modehandler (85ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (112ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (71ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (89ms)

    ✓ d -> black hole register delete in normal mode through modehandler (148ms)

    ✓ d -> black hole register delete in normal mode through modehandler (137ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (246ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled
  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (54ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (95ms)

        ✓ Can track jumps for keys: /b<CR>n (61ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (59ms)

        ✓ Can track jumps for keys: j%% (46ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (50ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (42ms)

        ✓ Can track jumps for keys: j%%<C-o>% (55ms)

[main 2020-04-27T00:44:20.466Z] update#setState checking for updates

[main 2020-04-27T00:44:20.550Z] update#setState idle

        ✓ Can track jumps for keys: j%%<C-o>gg (66ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (74ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (85ms)

        ✓ Can enter number to jump back multiple times (63ms)

        ✓ Can track one-line `` jumps (101ms)

        ✓ Can track one-line double `` jumps (82ms)

        ✓ Can track one-line '' jumps (74ms)

        ✓ Can track one-line double '' jumps (81ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (184ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (92ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (112ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (101ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (100ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (164ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (169ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (185ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (237ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (68ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (144ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (42ms)

  Record and execute a macro

    ✓ Can record and execute (188ms)

    ✓ Can repeat last invoked macro (234ms)

    ✓ Can play back with count (509ms)

    ✓ Can play back with count, abort when a motion fails (481ms)

    ✓ Repeat change on contiguous lines (184ms)

    ✓ Append command to a macro (174ms)

    ✓ Can record Ctrl Keys and repeat (163ms)

    ✓ Can execute macros with dot commands properly (172ms)

    ✓ : (command) register can be used as a macro (107ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (114ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (48ms)

    ✓ <C-c> can exit insert (94ms)

    ✓ <Esc> can exit insert (61ms)

    ✓ Stay in insert when entering characters (199ms)

    ✓ Can handle 'O' (77ms)

    ✓ 'i' puts you in insert mode before the cursor (50ms)

    ✓ 'I' puts you in insert mode at start of line (38ms)

    ✓ 'a' puts you in insert mode after the cursor (40ms)

    ✓ 'A' appends to end of line (48ms)

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace (47ms)

    ✓ Can handle <C-w> at beginning of line (41ms)

    ✓ <C-u> deletes to start of line (50ms)

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace (46ms)

    ✓ Correctly places the cursor after deleting the previous line break (69ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (48ms)

    ✓ Backspace works on whitespace only lines (52ms)

    ✓ Backspace works on end of whitespace only lines (55ms)

    ✓ Backspace works at beginning of file (46ms)

    ✓ Delete works in insert mode (38ms)

    ✓ Delete works at line end (53ms)

    ✓ Delete works at end of file (56ms)

    ✓ Delete works with repeat (171ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (97ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (67ms)

    ✓ Can perform insert command prefixed with count (66ms)

    ✓ Can perform append command prefixed with count (56ms)

    ✓ Can perform insert at start of line command prefixed with count (54ms)

    ✓ Can perform append to end of line command prefixed with count (52ms)

    ✓ Can perform change char (s) command prefixed with count (77ms)

    ✓ Can perform command prefixed with count with <C-[> (39ms)

    ✓ Can handle 'o' with count (127ms)

    ✓ Can handle 'O' with count (104ms)

    ✓ Can handle backspace at beginning of line with all spaces (52ms)

    ✓ Can handle digraph insert (103ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw (83ms)

    ✓ Can handle dw (38ms)

    ✓ Can handle dw

    ✓ Can handle dw across lines (1) (54ms)

    ✓ Can handle dw across lines (2) (38ms)

    ✓ Can handle dd last line (55ms)

    ✓ Can handle dd single line

    ✓ Can handle dd (38ms)

    ✓ Can handle 3dd (47ms)

    ✓ Can handle 3dd off end of document (51ms)

    ✓ Can handle d2d (41ms)

    ✓ Can handle dd empty line (43ms)

    ✓ Can handle ddp (87ms)

    ✓ Can handle 'de' (39ms)

    ✓ Can handle 'de' then 'de' again (52ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (113ms)

    ✓ Can handle 'dl' at end of line (84ms)

    ✓ Can handle 'dF' (39ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter> (39ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (47ms)

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket (68ms)

    ✓ Can handle 'd/' (60ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (65ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (63ms)

    ✓ Can handle 'cw' (84ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (71ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (42ms)

    ✓ Can handle 'c]}' without deleting closing bracket (55ms)

    ✓ Can handle 's' (53ms)

    ✓ Can handle 'yiw' with correct cursor ending position (44ms)

    ✓ Can handle 'ciw' (80ms)

    ✓ Can handle 'ciw' on blanks (65ms)

    ✓ Can handle 'caw' (70ms)

    ✓ Can handle 'caw' on first letter (53ms)

    ✓ Can handle 'caw' on blanks (80ms)

    ✓ Can handle 'caw' on blanks (48ms)

    ✓ Can handle 'cae' (48ms)

    ✓ Can handle 'cae' with caret at document's top (47ms)

    ✓ Can handle 'cae' with caret at document's end (50ms)

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'cie' with leading space (50ms)

    ✓ Can handle 'cie' with trailing space (47ms)

    ✓ Can handle 'cie' with both leading and trailing space (59ms)

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses (48ms)

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens (52ms)

    ✓ Can handle 'cib' on first parentheses (44ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (69ms)

    ✓ Can handle count prefixed 'ci)' (49ms)

    ✓ Can handle count prefixed 'ca)' (178ms)

    ✓ Can handle 'ca(' spanning multiple lines (50ms)

    ✓ Can handle 'cab' spanning multiple lines (51ms)

    ✓ Can handle 'ci{' spanning multiple lines (62ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (38ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (46ms)

    ✓ Can handle 'ci(' on the closing bracket (42ms)

    ✓ Can handle 'ciB' spanning multiple lines (54ms)

    ✓ will fail when ca( with no () (49ms)

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines (47ms)

    ✓ Can handle 'ci]' on first bracket (44ms)

    ✓ Can handle 'ca[' on first bracket (53ms)

    ✓ Can handle 'ca]' on first bracket (45ms)

    ✓ Can handle 'ci'' on first quote (51ms)

    ✓ Can handle 'ci'' inside quoted string (86ms)

    ✓ Can handle 'ci'' on closing quote (46ms)

    ✓ Can handle 'ci'' when string is ahead (46ms)

    ✓ Can handle 'ci"' on opening quote (47ms)

    ✓ Can handle 'ci"' starting behind the quoted word (44ms)

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote (41ms)

    ✓ Can handle 'ci"' with escaped quotes (47ms)

    ✓ Can handle 'ci"' with a single escaped quote (47ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (46ms)

    ✓ Can handle 'ci"' with an escaped backslash (48ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (40ms)

    ✓ Can handle 'ca"' starting on the closing quote (68ms)

    ✓ Can handle 'ci"' with complex escape sequences (47ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (49ms)

    ✓ will fail when ca" ahead of quoted string (42ms)

    ✓ Can handle 'ca`' inside word (50ms)

    ✓ can handle cj (79ms)

    ✓ can handle ck (85ms)

    ✓ can handle c2j (79ms)

    ✓ can handle c2k (76ms)

    ✓ can handle cj on last line (81ms)

    ✓ can handle ck on first line (73ms)

    ✓ can handle c2j on last line (86ms)

    ✓ can handle c2k on first line (93ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (39ms)

    ✓ Can handle 'daw' on word with trailing spaces (43ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (51ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (66ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (51ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (60ms)

    ✓ Can handle 'daw' on end of word (49ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (48ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (123ms)

    ✓ Can handle 'daw' on word at beginning of file (41ms)

    ✓ Can handle 'daw' on word at beginning of line (42ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (51ms)

    ✓ Can handle 'daw' around word at end of line (53ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (46ms)

    ✓ Can handle 'daW' around word at whitespace (45ms)

    ✓ Can handle 'daW' on word with trailing spaces (43ms)

    ✓ Can handle 'daW' on word with leading spaces (41ms)

    ✓ Can handle 'daW' on word with numeric prefix (41ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (59ms)

    ✓ Can handle 'daW' on beginning of word (197ms)

    ✓ Can handle 'daW' on end of one line (67ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (41ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (47ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (48ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (53ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (67ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word (46ms)

    ✓ Can handle 'diw' on word with numeric prefix (46ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line (43ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (49ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (49ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (48ms)

    ✓ Can handle 'diW' on word with trailing spaces (82ms)

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (46ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines (41ms)

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle 'dae' (41ms)

    ✓ Can handle 'dae' with caret at document's top (39ms)

    ✓ Can handle 'dae' with caret at document's end (59ms)

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space (48ms)

    ✓ Can handle 'die' with trailing space (49ms)

    ✓ Can handle 'die' with both leading and trailing space (43ms)

    ✓ Can handle 'die' on blank content

    ✓ Can handle d} at beginning of line (40ms)

    ✓ Can handle y} at beginning of line (54ms)

    ✓ Can handle d} when not at beginning of line (49ms)

    ✓ Can handle } with operator and count, at beginning of line (43ms)

    ✓ Can handle } with operator and count, and not at beginning of line (63ms)

    ✓ Select sentence with trailing spaces (46ms)

    ✓ Select sentence with leading spaces (52ms)

    ✓ Select inner sentence with trailing spaces (44ms)

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (45ms)

    ✓ Can handle 'df' (42ms)

    ✓ Can handle 'dt' (43ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (68ms)

    ✓ A should update desiredColumn (87ms)

    ✓ I should updated desiredColumn (47ms)

    ✓ leaving insert mode should update desired column when entered with a (88ms)

    ✓ leaving insert mode should update desired column when entered with i (76ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (44ms)

    ✓ Can handle 'p' after 'yy' (42ms)

    ✓ Can handle 'P' after 'Nyy' (54ms)

    ✓ Can handle 'p' after 'Nyy' (53ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (50ms)

    ✓ Can handle 'gp' after 'yy' (49ms)

    ✓ Can handle 'gp' after 'Nyy' (69ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (66ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (155ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (48ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (48ms)

    ✓ Can handle ']p' after yy (49ms)

    ✓ Can handle ']p' after 'Nyy' (75ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (52ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (59ms)

    ✓ Can handle '[p' after yy (50ms)

    ✓ Can handle '[p' after 'Nyy' (60ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (61ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (53ms)

    ✓ Can handle 'p' after y'a (57ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (49ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (57ms)

    ✓ Can handle pasting in visual mode over selection (158ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (74ms)

    ✓ gI works correctly (133ms)

    ✓ gi works correctly (123ms)

    ✓ `. works correctly (66ms)

    ✓ '. works correctly (55ms)

    ✓ g; works correctly (90ms)

    ✓ g, works correctly (92ms)

    ✓ g_ works correctly (40ms)

    ✓ 3g_ works correctly (47ms)

    ✓ gq handles spaces after single line comments correctly (53ms)

    ✓ gq handles spaces before single line comments correctly (53ms)

    ✓ gq handles tabs before single line comments correctly (68ms)

    ✓ Can handle space (39ms)

    ✓ Can handle space (45ms)

    ✓ Undo 1 (115ms)

    ✓ Undo 2 (115ms)

    ✓ Undo cursor (136ms)

    ✓ Undo cursor 2 (137ms)

    ✓ Undo cursor 3 (122ms)

    ✓ Undo with movement first (134ms)

    ✓ Can handle 'U' (57ms)

    ✓ Can handle 'U' for multiple changes (74ms)

    ✓ Can handle 'U' for new line below (88ms)

    ✓ Can handle 'U' for new line above (97ms)

    ✓ Can handle 'U' for consecutive changes only (134ms)

    ✓ Can handle 'u' to undo 'U' (79ms)

    ✓ Can handle 'U' to undo 'U' (57ms)

    ✓ Can handle 'u' after :s/abc/def (132ms)

    ✓ Redo (131ms)

    ✓ Redo (133ms)

    ✓ Redo (108ms)

    ✓ Can handle u (54ms)

    ✓ Can handle guw (40ms)

    ✓ Can handle guae (43ms)

    ✓ Can handle guie (44ms)

    ✓ Can handle gUw (47ms)

    ✓ Can handle gUae (42ms)

    ✓ Can handle gUie (75ms)

    ✓ Can handle u over line breaks (47ms)

    ✓ can handle s in visual mode (75ms)

    ✓ can handle p with selection (85ms)

    ✓ can handle P with selection (78ms)

    ✓ can handle p in visual to end of line (118ms)

    ✓ can repeat backspace twice (152ms)

    ✓ can delete linewise with d2G (38ms)

    ✓ can delete with + motion and count (64ms)

    ✓ can delete with - motion and count (50ms)

    ✓ can dE correctly

    ✓ can dE correctly (41ms)

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number (38ms)

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (69ms)

    ✓ can ctrl-x on a negative number with word before and after  (45ms)

    ✓ can ctrl-a properly on multiple lines (54ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y (45ms)

    ✓ can do [count]Y if count is larger than EOF (39ms)

    ✓ Can do S (49ms)

    ✓ / does not affect mark (66ms)

    ✓ / can search with regex (49ms)

    ✓ / can search with newline (48ms)

    ✓ / can search through multiple newlines (68ms)

    ✓ / matches ^ per line (48ms)

    ✓ / matches $ per line (72ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark (39ms)

    ✓ /\c forces case insensitive search (65ms)

    ✓ /\C forces case sensitive search (41ms)

    ✓ <BS> deletes the last character in search in progress mode (57ms)

    ✓ <S-BS> deletes the last character in search in progress mode (41ms)

    ✓ <C-h> deletes the last character in search in progress mode (42ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (41ms)

    ✓ Ignores cit on a non-matching tag (44ms)

    ✓ Ignores cit on a nested tag (47ms)

    ✓ Can do cit on a tag with an attribute tag (47ms)

    ✓ Can do cat on a matching tag (47ms)

    ✓ Can do cit on a multiline tag (86ms)

    ✓ Can do cit on a multiline tag with nested tags (45ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (47ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (47ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (40ms)

    ✓ Can do cit on empty tag block, cursor moves to inside (57ms)

    ✓ can do cit with self closing tags (39ms)

    ✓ Respects indentation with cc (48ms)

    ✓ Resets cursor to indent end with cc (49ms)

    ✓ can handle 'cc' on empty line (45ms)

    ✓ cc copies linewise (58ms)

    ✓ Indent current line with correct Vim Mode (89ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent (43ms)

    ✓ Can do cai (52ms)

    ✓ Can do cii (51ms)

    ✓ Can do caI (47ms)

    ✓ Can do dai (42ms)

    ✓ Can do dii

    ✓ Can do daI (42ms)

    ✓ `] go to the end of the previously operated or put text (83ms)

    ✓ '] go to the end of the previously operated or put text (100ms)

    ✓ `[ go to the start of the previously operated or put text (101ms)

    ✓ '[ go to the start of the previously operated or put text (89ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle (248ms)

    can handle gn

      ✓ gn selects the next match text (271ms)

      ✓ gn selects the current word at |hello (237ms)

      ✓ gn selects the current word at h|ello (301ms)

      ✓ gn selects the current word at hel|lo (235ms)

      ✓ gn selects the current word at hell|o (271ms)

      ✓ gn selects the next word at hello| (247ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (68ms)

      ✓ dgn deletes the current word when cursor is at |hello (67ms)

      ✓ dgn deletes the current word when cursor is at h|ello (82ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (103ms)

      ✓ dgn deletes the current word when cursor is at hell|o (64ms)

      ✓ dgn deletes the next word when cursor is at hello| (77ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (78ms)

      ✓ cgn deletes the current word when cursor is at |hello (83ms)

      ✓ cgn deletes the current word when cursor is at h|ello (72ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (84ms)

      ✓ cgn deletes the current word when cursor is at hell|o (84ms)

      ✓ cgn deletes the next word when cursor is at hello| (98ms)

    can handle gN

      ✓ gN selects the previous match text (274ms)

      ✓ gN selects the current word at hell|o (265ms)

      ✓ gN selects the current word at hel|lo (358ms)

      ✓ gN selects the current word at h|ello (252ms)

      ✓ gN selects the current word at |hello (252ms)

      ✓ gN selects the previous word at | hello (255ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (83ms)

      ✓ dgN deletes the current word when cursor is at hell|o (96ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (105ms)

      ✓ dgN deletes the current word when cursor is at h|ello (87ms)

      ✓ dgN deletes the current word when cursor is at |hello (94ms)

      ✓ dgN deletes the previous word when cursor is at | hello (88ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (87ms)

      ✓ cgN deletes the current word when cursor is at hell|o (87ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (104ms)

      ✓ cgN deletes the current word when cursor is at h|ello (354ms)

      ✓ cgN deletes the current word when cursor is at |hello (104ms)

      ✓ cgN deletes the previous word when cursor is at | hello (95ms)

    marks

      ✓ capital marks can change the editors active document (121ms)

      ✓ can jump to lowercase mark (41ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode (101ms)

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (40ms)

    ✓ Can handle R past current line (53ms)

    ✓ Can handle R and exit Replace Mode (64ms)

    ✓ Can handle R across lines (89ms)

    ✓ Can handle R across lines and exit Replace Mode (107ms)

    ✓ Can handle R with {count} (94ms)

    ✓ Can handle backspace (75ms)

    ✓ Can handle backspace (94ms)

    ✓ Can handle backspace across lines (122ms)

    ✓ Can handle arrows (56ms)

    ✓ Can handle . (108ms)

    ✓ Can handle . across lines (148ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (200ms)

    ✓ Can handle wd (131ms)

    ✓ Can handle x (129ms)

    ✓ Can handle x across a selection (146ms)

    ✓ Can do vwd in middle of sentence (193ms)

    ✓ Can do vwd in middle of sentence (167ms)

    ✓ Can do vwd multiple times (200ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (200ms)

    ✓ Can handle H key (44ms)

    ✓ Can handle backspace key (66ms)

    ✓ handles case where we delete over a newline (200ms)

    ✓ handles change operator (137ms)

    ✓ Can do vat on multiple matching tags (80ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (64ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (50ms)

    ✓ Repeat-prefixed vat does not bleed below (48ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (50ms)

    ✓ Can do vi) on a matching parenthesis (54ms)

    ✓ Can do vi) on multiple matching parens (74ms)

    ✓ Can do va) on a matching parenthesis (61ms)

    ✓ Can do va) on multiple matching parens (64ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (60ms)

    ✓ Repeat-prefixed va) does not bleed below (63ms)

    ✓ Can do va} on a matching bracket as first character (52ms)

    ✓ Can do va} on multiple matching brackets (74ms)

    ✓ Can do vi( on a matching bracket near first character (60ms)

    ✓ Can do vi{ on outer pair of nested braces (43ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (58ms)

    ✓ Can do va] on multiple matching brackets (84ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (54ms)

    ✓ Repeat-prefixed vaf does not bleed below (68ms)

    ✓ vaf only expands to enclosing pairs (51ms)

    ✓ Can use . to repeat indent in visual (55ms)

    ✓ Can do v_x to delete to first char (49ms)

    ✓ Can do vg_x to delete to last char with no EOL (49ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (200ms)

    ✓ Can do v$x to delete to last char including EOL (66ms)

    ✓ Can do gv to reselect previous selection (81ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (75ms)

    Vim's EOL handling is weird

      ✓ delete through eol (119ms)

      ✓ join 2 lines by deleting through eol (103ms)

      ✓ d$ doesn't delete whole line (108ms)

      ✓ vd$ does delete whole line (86ms)

      ✓ Paste over selection copies the selection (69ms)

      ✓ Paste over selection copies the selection linewise (109ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (52ms)

      ✓ Can handle <down> key (57ms)

      ✓ Can handle <left> key (59ms)

      ✓ Can handle <right> key (51ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (61ms)

      ✓ Can handle 'gj' (57ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (60ms)

      ✓ Can handle 'vawd' on word with trailing spaces (49ms)

      ✓ Can handle 'vawd' on word with leading spaces (53ms)

      ✓ Can handle 'vawd' on word with numeric prefix (55ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (71ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (63ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (42ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (52ms)

      ✓ Can handle 'vaWd' on word with leading spaces (53ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (59ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (46ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (63ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (50ms)

      ✓ Can handle 'vaWd' on word with leading spaces (49ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (53ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (68ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (69ms)

      ✓ Can handle 'vawd' on word with trailing spaces (46ms)

      ✓ Can handle 'vawd' on word with leading spaces (62ms)

      ✓ Can handle 'vawd' on word with numeric prefix (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (61ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (46ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (64ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (44ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (58ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (68ms)

      ✓ Can handle 'Y' in visual mode (81ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (69ms)

      ✓ Select sentence with leading spaces in visual mode (43ms)

      ✓ Select multiple sentences in visual mode (52ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (57ms)

      ✓ Select inner sentence with leading spaces in visual mode (52ms)

      ✓ Select spaces between sentences in visual mode (46ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (54ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (54ms)

      ✓ Can do vat on a matching tag (67ms)

    handles replace in visual mode

      ✓ Can do a single line replace (52ms)

      ✓ Can do a multi line replace (55ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (50ms)

      ✓ D deletes the current line (81ms)

    handles indent blocks in visual mode

      ✓ Can do vai (124ms)

      ✓ Can do vii (49ms)

      ✓ Doesn't naively select the next line (50ms)

      ✓ Searches backwards if cursor line is empty (46ms)

      ✓ Can do vaI (77ms)

    visualstar

      ✓ Works with * (62ms)

      ✓ Works with # (47ms)

    search works in visual mode

      ✓ Works with / (70ms)

      ✓ Works with ? (67ms)

      ✓ Selects correct range (145ms)

    X will delete linewise

      ✓ normal selection (53ms)

      ✓ normal selection (78ms)

    C will delete linewise

      ✓ normal selection (47ms)

      ✓ normal selection (53ms)

    R will delete linewise

      ✓ normal selection (62ms)

      ✓ normal selection (66ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (83ms)

      ✓ upward selection (124ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (52ms)

      ✓ multiline indent bottom up selection (60ms)

      ✓ repeat multiline indent top down selection (102ms)

      ✓ repeat multiline indent bottom up selection (89ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (55ms)

      ✓ multiline outdent bottom up selection (115ms)

      ✓ repeat multiline outdent top down selection (81ms)

      ✓ repeat multiline outdent bottom up selection (84ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (161ms)

    vi{ will go to end of second to last line

      ✓ select (88ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (496ms)

      ✓ gv selects the last pasted text (which is longer than original) (468ms)

      ✓ gv selects the last pasted text (multiline) (246ms)

    can handle gn

      ✓ gn selects the next match text (270ms)

      ✓ gn selects the current word at |hello (236ms)

      ✓ gn selects the current word at h|ello (292ms)

      ✓ gn selects the current word at hel|lo (253ms)

      ✓ gn selects the next word at hell|o (319ms)

      ✓ gn selects the next word at hello| (304ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (53ms)

      ✓ multiline insert from top down selection (54ms)

      ✓ skips blank lines (47ms)

    can append text with A

      ✓ multiline append from bottom up selection (53ms)

      ✓ multiline append from top down selection (66ms)

      ✓ skips blank lines (62ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (85ms)

      ✓ U/gU across a selection (169ms)

      ✓ U/gU across a selection (reverse) (85ms)

      ✓ u/gu on single character (66ms)

      ✓ u/gu across a selection (93ms)

      ✓ u/gu across a selection (reverse) (86ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (125ms)

      ✓ ~/g~ across a selection (110ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (70ms)

    ✓ Can handle A backwards select (95ms)

    ✓ Can handle I forward select (85ms)

    ✓ Can handle I backwards select (78ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (116ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (115ms)

    ✓ Can handle c forward select (76ms)

    ✓ Can handle c backwards select (82ms)

    ✓ Can handle C (75ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (56ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (72ms)

    ✓ Properly add to end of lines $ then j (79ms)

    ✓ o works in visual block mode (62ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    ✓ Select register using " works in visual block mode (91ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (50ms)

    ✓ Can handle 'J' when the visual block spans multiple lines (54ms)

    ✓ Can handle 'J' when start position of the visual block is below the stop (357ms)

    ✓ Can handle ~/g~ in visual block mode (126ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (226ms)

  Mode Visual Line

    ✓ can be activated

    ✓ <count>V selects <count> lines (276ms)

    ✓ Can handle w (194ms)

    ✓ Can handle wd (121ms)

    ✓ Can handle x (197ms)

    ✓ Can handle x across a selection (131ms)

    ✓ Can do vwd in middle of sentence (179ms)

    ✓ Can do vwd in middle of sentence (181ms)

    ✓ Can do vwd multiple times (229ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (165ms)

    ✓ handles case where we delete over a newline (170ms)

    ✓ handles change operator (158ms)

    ✓ Vp updates register content (62ms)

    ✓ Vp does not append unnecessary newlines (first line) (56ms)

    ✓ Vp does not append unnecessary newlines (middle line) (49ms)

    ✓ Vp does not append unnecessary newlines (last line) (57ms)

    ✓ Exiting via <Esc> returns cursor to original column (42ms)

    ✓ Exiting via `VV` returns cursor to original column (45ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (285ms)

    Vim's EOL handling is weird

      ✓ delete through eol (110ms)

      ✓ join 2 lines by deleting through eol (116ms)

      ✓ d$ doesn't delete whole line (123ms)

      ✓ vd$ does delete whole line (91ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (62ms)

      ✓ Can handle <down> key (47ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (49ms)

      ✓ Can handle 'gj' (47ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (53ms)

      ✓ Can handle d key (55ms)

      ✓ Can handle d key (54ms)

      ✓ Can handle d key (64ms)

      ✓ can handle 'c' (47ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (44ms)

      ✓ Can do a multi visual line replace (53ms)

      ✓ Can do a multi visual line replace from the bottom up (45ms)

    search works in visual line mode

      ✓ Works with / (76ms)

      ✓ Works with ? (61ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (165ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (65ms)

      ✓ linewise visual put works also in the end of document (61ms)

      ✓ gv selects the last pasted text (which is shorter than original) (430ms)

      ✓ gv selects the last pasted text (which is longer than original) (419ms)

      ✓ gv selects the last pasted text (multiline) (248ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (64ms)

      ✓ multiline insert from top down selection (47ms)

      ✓ skips blank lines (49ms)

    can append text with A

      ✓ multiline append from bottom up selection (79ms)

      ✓ multiline append from top down selection (63ms)

      ✓ skips blank lines (61ms)

      ✓ updates desired column correctly (58ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (78ms)

      ✓ ~/g~ on multiple lines (74ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (60ms)

    ✓ Can handle 'x' at end of line (104ms)

    ✓ Can handle 'Ns' (46ms)

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (82ms)

    ✓ Can handle 'cc' (52ms)

    ✓ Can handle 'Ncc' (57ms)

    ✓ Can handle 'yy' (54ms)

    ✓ Can handle 'D' (48ms)

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows (38ms)

    ✓ Can handle 'D' with count when end position is on blank line (44ms)

    ✓ Can handle 'DD' (43ms)

    ✓ Can handle 'C' (41ms)

    ✓ Can handle 'NC' (78ms)

    ✓ Can handle 'NC' and put (54ms)

    ✓ Can handle 'r' (43ms)

    ✓ Can handle '<Count>r' (52ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (61ms)

    ✓ Can handle 'r
' (93ms)

    ✓ Can handle '<Count>r
' (52ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (54ms)

    ✓ Can handle 'J' with empty last line (38ms)

    ✓ Can handle 'J's with multiple empty last lines (80ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line (42ms)

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line (40ms)

    ✓ Can handle 'J' with a following delete (44ms)

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF (302ms)

    ✓ Can handle 'J' in Visual Line mode (43ms)

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (46ms)

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~' (41ms)

    ✓ Can handle '<BS>' in insert mode (59ms)

    ✓ Can handle undo with P (93ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (44ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J' (41ms)

    ✓ Can handle dot with A (91ms)

    ✓ Can handle dot with I (92ms)

    ✓ Can repeat actions that require selections (70ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (73ms)

    ✓ Can repeat insert change and '<C-t>' (125ms)

    ✓ Can repeat change by `<C-a>` (82ms)

    ✓ Only one arrow key can be repeated in Insert Mode (90ms)

    ✓ Cached content change will be cleared by arrow keys (87ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis (43ms)

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>]) (39ms)

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{ (47ms)

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]} (41ms)

    ✓ Can handle ]} and character under cursor exclusive (42ms)

    ✓ Can handle 'ge' (193ms)

    ✓ Can handle 'gg' (54ms)

    ✓ Can handle 'gg' to first non blank char on random line (46ms)

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (40ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice (44ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (45ms)

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (42ms)

    ✓ Can handle 't' (113ms)

    ✓ Can handle 't' twice (55ms)

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T' (38ms)

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (42ms)

    ✓ Can run a forward and find next search (50ms)

    ✓ Can run a forward and find previous search from end of word (55ms)

    ✓ Can run a forward search with count 1 (41ms)

    ✓ Can run a forward search with count 3

    ✓ Can run a forward search with count exceeding max number of matches

    ✓ Can run a reverse search (41ms)

    ✓ Can run a reverse and find next search (46ms)

    ✓ Can run a reverse search with count 1

    ✓ Can run a reverse search with count 3 (51ms)

    ✓ Can run a reverse search with count exceeding max number of matches (43ms)

    ✓ cancelled search reverts to previous search state (90ms)

    ✓ Backspace on empty search cancels (48ms)

    ✓ Search offsets: b does nothing (62ms)

    ✓ Search offsets: b2 goes 2 to the right (55ms)

    ✓ Search offsets: b+3 goes 3 to the right (54ms)

    ✓ Search offsets: e goes to the end (42ms)

    ✓ Search offsets: character offset goes across line boundaries (52ms)

    ✓ Search offsets: 2 goes 2 down (50ms)

    ✓ Search offsets: -2 goes 2 up (63ms)

    ✓ maintains column position correctly (46ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix (47ms)

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL (105ms)

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history (43ms)

    ✓ # adds to search history (39ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down
    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin

    ✓ document end
    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    word right

      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line

      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)
    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word

      ✓ first word should move to previous line, stops on empty line

      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind
      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down
      ✓ move down normally
      ✓ move down longer paragraph
      ✓ move down starting inside empty line
      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line (404ms)

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (38ms)

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (62ms)

      ✓ search wraps around the start of the file (81ms)

    wrapscan disabled

      ✓ search stops at the end of the file (49ms)

      ✓ search stops at the start of the file (47ms)

  Multicursor

    ✓ can add multiple cursors below (94ms)

    ✓ can add multiple cursors above (124ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (396ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (375ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (415ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (381ms)

    ✓ dd works with multi-cursor (279ms)

    ✓ Vd works with multi-cursor (63ms)

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor (39ms)

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (229ms)

    ✓ gcj comments in current and next line (76ms)

    ✓ block comment with motion (236ms)

    ✓ block comment in Visual Mode (258ms)

    ✓ comment in visual line mode (339ms)

    ✓ comment in visual block mode (405ms)

  format operator

    ✓ == formats current line (370ms)

    ✓ =$ formats entire line (227ms)

    ✓ =j formats two lines (142ms)

    ✓ 3=k formats three lines (171ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (109ms)

    ✓ =ip formats paragraph (96ms)

    ✓ format in visual mode (112ms)

  put operator

    ✓ basic put test (82ms)

    ✓ test yy end of line (109ms)

    ✓ test yy first line (51ms)

    ✓ test yy middle line (58ms)

    ✓ test yy with correct positon movement (55ms)

    ✓ test visual block single line yank p (77ms)

    ✓ test visual block single line yank P (92ms)

    ✓ test visual block single line delete p (66ms)

    ✓ test visual block single line delete P (68ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (60ms)

    ✓ g? in visual mode works (43ms)

    ✓ g? in visual line mode works (49ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test (46ms)

    ✓ shift left goto end test (67ms)

    ✓ shift left goto line test (59ms)

    ✓ shift right goto end test

    ✓ shift right goto line test (45ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace (61ms)

      ✓ step to Camel word (38ms)

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word (58ms)

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word (93ms)

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord (41ms)

      ✓ delete from start of CamelWord (56ms)

      ✓ delete two words from camelWord (42ms)

      ✓ delete from start of underscore_word (88ms)

      ✓ delete from middle of underscore_word (40ms)

      ✓ delete two words from camel_word (45ms)

    handles di<leader>w

      ✓ delete from start of camelWord (94ms)

      ✓ delete from middle of camelWord (81ms)

      ✓ delete from start of CamelWord (46ms)

      ✓ delete two words from camelWord (40ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word (69ms)

      ✓ delete two words from camel_word (40ms)

    handles <leader>b

      ✓ back from middle of word (66ms)

      ✓ back over whitespace to camelWord (63ms)

      ✓ back twice over operator (52ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (39ms)

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (51ms)

    ✓ Can handle 2s move (79ms)

    ✓ Can handle f move (48ms)

    ✓ Can handle 2f move (111ms)

    ✓ Can handle F move (71ms)

    ✓ Can handle 2F move (50ms)

    ✓ Can handle t move (52ms)

    ✓ Can handle bd-t move (52ms)

    ✓ Can handle 2t move (71ms)

    ✓ Can handle bd-t2 move (90ms)

    ✓ Can handle T move (80ms)

    ✓ Can handle 2T move (62ms)

    ✓ Can handle w move (44ms)

    ✓ Can handle bd-w move (38ms)

    ✓ Can handle b move (53ms)

    ✓ Can handle e move (42ms)

    ✓ Can handle bd-e move (47ms)

    ✓ Can handle ge move (41ms)

    ✓ Can handle n-char move (107ms)

    ✓ Can handle j move (91ms)

    ✓ Can handle k move (75ms)

    ✓ Can handle bd-jk move (1) (82ms)

    ✓ Can handle bd-jk move (2) (61ms)

    ✓ Can handle lineforward move (1) (49ms)

    ✓ Can handle lineforward move (2) (57ms)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (43ms)

    ✓ Can handle searching for carat (^) (83ms)

    ✓ Can handle searching for dot (.) (43ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (88ms)

    ✓ Replaces within inner Word (76ms)

    ✓ Replaces within '' (106ms)

    ✓ Replaces within '' including spaces (97ms)

    ✓ Replaces within () (60ms)

    ✓ Replaces within () including spaces (75ms)

    ✓ Replaces within a paragraph (46ms)

    ✓ Replaces using a specified register (131ms)

    ✓ Replaces within {} over multiple lines (60ms)

    ✓ Replaces a multiline register within {} over multiple lines (108ms)

    ✓ Replaces a multiline register within {} over multiple lines (104ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (84ms)

    ✓ grr replaces the entire line with the register (155ms)

    ✓ grr can replace multiple lines (44ms)

    ✓ Replaces in visual mode (90ms)

    ✓ Replaces in visual mode using a specified register (111ms)

    ✓ Replaces in visual line mode (93ms)

    ✓ grj is linewise (58ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion (69ms)

    ✓ Can handle <operator>Z motion (59ms)

    ✓ Can handle s; motion (41ms)

    ✓ Can handle s, motion (39ms)

    ✓ Can handle S; motion

    ✓ Can handle S, motion (68ms)

    ✓ Can handle single letter s motion (69ms)

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion

    ✓ Can handle single letter <operator>Z motion (81ms)

    ✓ Can handle single letter s; motion (50ms)

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward (81ms)

    ✓ Can go back using <C-o> when repeating forward movement (529ms)

    ✓ Can go back using <C-o> when repeating backward movement (42ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (39ms)

    ✓ sneakReplacesF backward (143ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (131ms)

    ✓ 'ysiw(' surrounds word with space (120ms)

    ✓ 'ysw)' surrounds word without space (105ms)

    ✓ 'ysw(' surrounds word with space (51ms)

    ✓ 'ysaw)' surrounds word without space (129ms)

    ✓ 'ysaw(' surrounds word with space (115ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (211ms)

    ✓ 'ysiw<' surrounds word with tags (73ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (91ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (43ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (69ms)

    ✓ change surround (128ms)

    ✓ change surround with two pairs of quotes (143ms)

    ✓ change surround with two pairs of parens (141ms)

    ✓ change surround with alias (85ms)

    ✓ change surround to tags (114ms)

    ✓ delete surround (92ms)

    ✓ delete surround with quotes (81ms)

    ✓ delete surround with nested of quotes (89ms)

    ✓ delete surround with inconsistent quotes (86ms)

    ✓ delete surround with mixed quotes (63ms)

    ✓ delete surround with empty quotes cursor at start (115ms)

    ✓ delete surround with empty quotes cursor at end (67ms)

    ✓ don't delete surround if cursor is after closing match (91ms)

    ✓ delete surround if cursor is before opening match (51ms)

    ✓ delete surround with two pairs of parens (105ms)

    ✓ delete surround with alias (83ms)

    ✓ delete surround with tags (89ms)

    ✓ change surround brackets at end of line (81ms)

    ✓ changing brackets with surround works again (120ms)

    ✓ change surround with tags that contain an attribute and preserve them (105ms)

    ✓ change surround with tags that contain an attribute and remove them (403ms)

  register

    ✓ Can copy to a register (80ms)

    ✓ Can use two registers together (127ms)

    ✓ Can use black hole register (82ms)

    ✓ System clipboard works with chinese characters (71ms)

    ✓ Yank stores text in Register '0' (277ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (268ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (277ms)

    ✓ Register '1'-'9' stores delete content (333ms)

    ✓ "A appends linewise text to "a (308ms)

    ✓ "A appends character wise text to "a (292ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (225ms)

    ✓ Small deletion using Del is stored in small delete register (249ms)

    ✓ Small deletion using X is stored in small delete register (184ms)

    ✓ Search register (/) is set by forward search (367ms)

    ✓ Search register (/) is set by backward search (379ms)

    ✓ Search register (/) is set by star search (355ms)

    ✓ Command register (:) is set by command line (127ms)

    ✓ Read-only registers cannot be written to (239ms)

    clipboard

      ✓ Can access '*' (clipboard) register (65ms)

      ✓ Can access '+' (clipboard) register (54ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character>

    ✓ Can repeat N times reversed t<character> (46ms)

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward (47ms)

      ✓ move [count] sentences backward (54ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (58ms)

      ✓ move one sentence backward no space - middle (39ms)

      ✓ move one sentence backward - multiline (66ms)

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line (59ms)

      ✓ move one sentence backward - multiline - previous line - period

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path
    separatePath

      ✓ can separate drive letter path on Windows
      ✓ can separate UNC path on Windows
      ✓ can separate relative path on Windows
      ✓ can separate absolute path on posix
      ✓ can separate relative path on posix
    resolveUri

      ✓ posix
      ✓ win32

  1383 passing (4m)
  4 pending

  21 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1942:3)


  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)


  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:356:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:850:5)


  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:857:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)


  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three four five.
      + expected - actual

      -one  three four five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:162:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:178:3)


  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-12.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-27T00:43:50.458Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6375) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6375) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive

    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (63ms)

    ✓ command <C-w> can remove word in search mode (41ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (55ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line (43ms)

    ✓ <Home> puts cursor at start of command line (40ms)

    ✓ <C-e> puts cursor at end of command line (51ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (59ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (116ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (118ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (90ms)

    ✓ <C-p> go to previous search string (41ms)

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command (42ms)

    ✓ add empty command (45ms)

    ✓ add command over configuration.history (48ms)

    ✓ add command that exists in history (52ms)

    ✓ file system (48ms)

    ✓ change configuration.history (91ms)

  command-line lexer
    ✓ can lex empty string
    ✓ can lex comma
    ✓ can lex percent
    ✓ can lex dollar
    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search
    ✓ can lex reverse search escaping
    ✓ can lex command name
    ✓ can lex command args
    ✓ can lex command args with leading whitespace
    ✓ can lex long command name and args
    ✓ can lex left and right line refs
  :only command

    ✓ Run :only (1481ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent

    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (546ms)

    ✓ :smile editor contains smile text (538ms)

  Basic sort

    ✓ Sort whole file, asc (114ms)

    ✓ Sort whole file, asc, ignoreCase (129ms)

    ✓ Sort whole file, dsc (150ms)

    ✓ Sort whole file, dsc, ignoreCase (119ms)

    ✓ Sort range, asc (176ms)

    ✓ Sort range, asc, ignoreCase (157ms)

    ✓ Sort range, dsc (141ms)

    ✓ Sort range, dsc, ignoreCase (158ms)

    ✓ Sort whole file, asc, unique (152ms)

  Horizontal split

    ✓ :sp creates a second split (88ms)

    ✓ :split creates a second split (66ms)

    ✓ :new creates a second split (243ms)

  :close args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !
    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (55ms)

    ✓ Replace with `g` flag (71ms)

    ✓ Replace with flags AND count (132ms)

    ✓ Replace with `c` flag (63ms)

    ✓ Replace with `gc` flag (76ms)

    ✓ Replace across all lines (102ms)

    ✓ Replace on specific single line (128ms)

    ✓ Replace on current line using dot (85ms)

    ✓ Replace single relative line using dot and plus (92ms)

    ✓ Replace across specific line range (108ms)

    ✓ Replace across relative line range using dot, plus, and minus (102ms)

    ✓ Replace across relative line range using numLines+colon shorthand (104ms)

    ✓ Repeat replacement across relative line range (118ms)

    ✓ Replace with range AND count but no flags (82ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (82ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (71ms)

    ✓ Undocumented: trailing operators use 1 as RHS (67ms)

    ✓ Replace specific single equal lines (77ms)

    ✓ Replace current line with no active selection (99ms)

    ✓ Replace text in selection (164ms)

    ✓ Substitute support marks (114ms)
    Effects of gdefault=true

      ✓ Replace all matches in the line (79ms)

      ✓ Replace with `g` flag inverts global flag (50ms)

      ✓ Replace with `c` flag inverts global flag (78ms)

      ✓ Replace multiple lines (119ms)

      ✓ Replace across specific lines (106ms)

      ✓ Replace current line with no active selection (83ms)

      ✓ Replace text in selection (119ms)

      ✓ Substitute support marks (112ms)

      ✓ Substitute with escaped delimiter (54ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (234ms)

      ✓ Substitute with previous search using # (306ms)

      ✓ Substitute with previous search using / (248ms)

      ✓ Substitute with parameters should update search state (103ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (296ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (162ms)

      ✓ Substitute repeat previous should accept flags (93ms)

      ✓ Substitute with empty search string should use last searched pattern (220ms)

      ✓ Ampersand (&) should repeat the last substitution (95ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (70ms)

    ✓ tabe with current file path does nothing (49ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (49ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (68ms)

    ✓ command line file tab completion with space in file path (171ms)

  Vertical split

    ✓ :vs creates a second split (77ms)

    ✓ :vsp creates a second split (68ms)

    ✓ :vsplit creates a second split (91ms)

    ✓ :vnew creates a second split (213ms)

    ✓ :vne creates a second split (408ms)

  Basic write-quit

    ✓ Run write and quit (80ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (53ms)

      ✓ Can complete lines in file with different indentation (41ms)

      ✓ Returns no completions for unmatched line (49ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (69ms)

    ✓ getMatchingRemap (62ms)

    ✓ jj -> <Esc> through modehandler (122ms)

    ✓ 0 -> :wq through modehandler (85ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (112ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (71ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (89ms)

    ✓ d -> black hole register delete in normal mode through modehandler (148ms)

    ✓ d -> black hole register delete in normal mode through modehandler (137ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (246ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled
  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (54ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (95ms)

        ✓ Can track jumps for keys: /b<CR>n (61ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (59ms)

        ✓ Can track jumps for keys: j%% (46ms)

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (50ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i> (42ms)

        ✓ Can track jumps for keys: j%%<C-o>% (55ms)

[main 2020-04-27T00:44:20.466Z] update#setState checking for updates

[main 2020-04-27T00:44:20.550Z] update#setState idle

        ✓ Can track jumps for keys: j%%<C-o>gg (66ms)

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (74ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (85ms)

        ✓ Can enter number to jump back multiple times (63ms)

        ✓ Can track one-line `` jumps (101ms)

        ✓ Can track one-line double `` jumps (82ms)

        ✓ Can track one-line '' jumps (74ms)

        ✓ Can track one-line double '' jumps (81ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (184ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (92ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (112ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (101ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (100ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (164ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (169ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (185ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (237ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (68ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (144ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a (42ms)

  Record and execute a macro

    ✓ Can record and execute (188ms)

    ✓ Can repeat last invoked macro (234ms)

    ✓ Can play back with count (509ms)

    ✓ Can play back with count, abort when a motion fails (481ms)

    ✓ Repeat change on contiguous lines (184ms)

    ✓ Append command to a macro (174ms)

    ✓ Can record Ctrl Keys and repeat (163ms)

    ✓ Can execute macros with dot commands properly (172ms)

    ✓ : (command) register can be used as a macro (107ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (114ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (48ms)

    ✓ <C-c> can exit insert (94ms)

    ✓ <Esc> can exit insert (61ms)

    ✓ Stay in insert when entering characters (199ms)

    ✓ Can handle 'O' (77ms)

    ✓ 'i' puts you in insert mode before the cursor (50ms)

    ✓ 'I' puts you in insert mode at start of line (38ms)

    ✓ 'a' puts you in insert mode after the cursor (40ms)

    ✓ 'A' appends to end of line (48ms)

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace (47ms)

    ✓ Can handle <C-w> at beginning of line (41ms)

    ✓ <C-u> deletes to start of line (50ms)

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace (46ms)

    ✓ Correctly places the cursor after deleting the previous line break (69ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (48ms)

    ✓ Backspace works on whitespace only lines (52ms)

    ✓ Backspace works on end of whitespace only lines (55ms)

    ✓ Backspace works at beginning of file (46ms)

    ✓ Delete works in insert mode (38ms)

    ✓ Delete works at line end (53ms)

    ✓ Delete works at end of file (56ms)

    ✓ Delete works with repeat (171ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (97ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (67ms)

    ✓ Can perform insert command prefixed with count (66ms)

    ✓ Can perform append command prefixed with count (56ms)

    ✓ Can perform insert at start of line command prefixed with count (54ms)

    ✓ Can perform append to end of line command prefixed with count (52ms)

    ✓ Can perform change char (s) command prefixed with count (77ms)

    ✓ Can perform command prefixed with count with <C-[> (39ms)

    ✓ Can handle 'o' with count (127ms)

    ✓ Can handle 'O' with count (104ms)

    ✓ Can handle backspace at beginning of line with all spaces (52ms)

    ✓ Can handle digraph insert (103ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw (83ms)

    ✓ Can handle dw (38ms)

    ✓ Can handle dw

    ✓ Can handle dw across lines (1) (54ms)

    ✓ Can handle dw across lines (2) (38ms)

    ✓ Can handle dd last line (55ms)

    ✓ Can handle dd single line

    ✓ Can handle dd (38ms)

    ✓ Can handle 3dd (47ms)

    ✓ Can handle 3dd off end of document (51ms)

    ✓ Can handle d2d (41ms)

    ✓ Can handle dd empty line (43ms)

    ✓ Can handle ddp (87ms)

    ✓ Can handle 'de' (39ms)

    ✓ Can handle 'de' then 'de' again (52ms)

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (113ms)

    ✓ Can handle 'dl' at end of line (84ms)

    ✓ Can handle 'dF' (39ms)

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter> (39ms)

    ✓ Can handle 'dj'

    ✓ Can handle 'dk' (47ms)

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket (68ms)

    ✓ Can handle 'd/' (60ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (65ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (63ms)

    ✓ Can handle 'cw' (84ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (71ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (42ms)

    ✓ Can handle 'c]}' without deleting closing bracket (55ms)

    ✓ Can handle 's' (53ms)

    ✓ Can handle 'yiw' with correct cursor ending position (44ms)

    ✓ Can handle 'ciw' (80ms)

    ✓ Can handle 'ciw' on blanks (65ms)

    ✓ Can handle 'caw' (70ms)

    ✓ Can handle 'caw' on first letter (53ms)

    ✓ Can handle 'caw' on blanks (80ms)

    ✓ Can handle 'caw' on blanks (48ms)

    ✓ Can handle 'cae' (48ms)

    ✓ Can handle 'cae' with caret at document's top (47ms)

    ✓ Can handle 'cae' with caret at document's end (50ms)

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'cie' with leading space (50ms)

    ✓ Can handle 'cie' with trailing space (47ms)

    ✓ Can handle 'cie' with both leading and trailing space (59ms)

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses (48ms)

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens (52ms)

    ✓ Can handle 'cib' on first parentheses (44ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (69ms)

    ✓ Can handle count prefixed 'ci)' (49ms)

    ✓ Can handle count prefixed 'ca)' (178ms)

    ✓ Can handle 'ca(' spanning multiple lines (50ms)

    ✓ Can handle 'cab' spanning multiple lines (51ms)

    ✓ Can handle 'ci{' spanning multiple lines (62ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (38ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (46ms)

    ✓ Can handle 'ci(' on the closing bracket (42ms)

    ✓ Can handle 'ciB' spanning multiple lines (54ms)

    ✓ will fail when ca( with no () (49ms)

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines (47ms)

    ✓ Can handle 'ci]' on first bracket (44ms)

    ✓ Can handle 'ca[' on first bracket (53ms)

    ✓ Can handle 'ca]' on first bracket (45ms)

    ✓ Can handle 'ci'' on first quote (51ms)

    ✓ Can handle 'ci'' inside quoted string (86ms)

    ✓ Can handle 'ci'' on closing quote (46ms)

    ✓ Can handle 'ci'' when string is ahead (46ms)

    ✓ Can handle 'ci"' on opening quote (47ms)

    ✓ Can handle 'ci"' starting behind the quoted word (44ms)

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote (41ms)

    ✓ Can handle 'ci"' with escaped quotes (47ms)

    ✓ Can handle 'ci"' with a single escaped quote (47ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (46ms)

    ✓ Can handle 'ci"' with an escaped backslash (48ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (40ms)

    ✓ Can handle 'ca"' starting on the closing quote (68ms)

    ✓ Can handle 'ci"' with complex escape sequences (47ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (49ms)

    ✓ will fail when ca" ahead of quoted string (42ms)

    ✓ Can handle 'ca`' inside word (50ms)

    ✓ can handle cj (79ms)

    ✓ can handle ck (85ms)

    ✓ can handle c2j (79ms)

    ✓ can handle c2k (76ms)

    ✓ can handle cj on last line (81ms)

    ✓ can handle ck on first line (73ms)

    ✓ can handle c2j on last line (86ms)

    ✓ can handle c2k on first line (93ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (39ms)

    ✓ Can handle 'daw' on word with trailing spaces (43ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix (51ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (66ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines (51ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (60ms)

    ✓ Can handle 'daw' on end of word (49ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (48ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (123ms)

    ✓ Can handle 'daw' on word at beginning of file (41ms)

    ✓ Can handle 'daw' on word at beginning of line (42ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (51ms)

    ✓ Can handle 'daw' around word at end of line (53ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (46ms)

    ✓ Can handle 'daW' around word at whitespace (45ms)

    ✓ Can handle 'daW' on word with trailing spaces (43ms)

    ✓ Can handle 'daW' on word with leading spaces (41ms)

    ✓ Can handle 'daW' on word with numeric prefix (41ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (59ms)

    ✓ Can handle 'daW' on beginning of word (197ms)

    ✓ Can handle 'daW' on end of one line (67ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (41ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (47ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (48ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (53ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (67ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word (46ms)

    ✓ Can handle 'diw' on word with numeric prefix (46ms)

    ✓ Can handle 'diw' on trailing spaces at the end of line (43ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (49ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.` (49ms)

    ✓ Can handle 'diW' on big word with cursor inside spaces (48ms)

    ✓ Can handle 'diW' on word with trailing spaces (82ms)

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix (46ms)

    ✓ Can handle 'diW' on word with numeric prefix and across lines (41ms)

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle 'dae' (41ms)

    ✓ Can handle 'dae' with caret at document's top (39ms)

    ✓ Can handle 'dae' with caret at document's end (59ms)

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space (48ms)

    ✓ Can handle 'die' with trailing space (49ms)

    ✓ Can handle 'die' with both leading and trailing space (43ms)

    ✓ Can handle 'die' on blank content

    ✓ Can handle d} at beginning of line (40ms)

    ✓ Can handle y} at beginning of line (54ms)

    ✓ Can handle d} when not at beginning of line (49ms)

    ✓ Can handle } with operator and count, at beginning of line (43ms)

    ✓ Can handle } with operator and count, and not at beginning of line (63ms)

    ✓ Select sentence with trailing spaces (46ms)

    ✓ Select sentence with leading spaces (52ms)

    ✓ Select inner sentence with trailing spaces (44ms)

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (45ms)

    ✓ Can handle 'df' (42ms)

    ✓ Can handle 'dt' (43ms)

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace (68ms)

    ✓ A should update desiredColumn (87ms)

    ✓ I should updated desiredColumn (47ms)

    ✓ leaving insert mode should update desired column when entered with a (88ms)

    ✓ leaving insert mode should update desired column when entered with i (76ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (44ms)

    ✓ Can handle 'p' after 'yy' (42ms)

    ✓ Can handle 'P' after 'Nyy' (54ms)

    ✓ Can handle 'p' after 'Nyy' (53ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (50ms)

    ✓ Can handle 'gp' after 'yy' (49ms)

    ✓ Can handle 'gp' after 'Nyy' (69ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (66ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (155ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (48ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (48ms)

    ✓ Can handle ']p' after yy (49ms)

    ✓ Can handle ']p' after 'Nyy' (75ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (52ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (59ms)

    ✓ Can handle '[p' after yy (50ms)

    ✓ Can handle '[p' after 'Nyy' (60ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (61ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (53ms)

    ✓ Can handle 'p' after y'a (57ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (49ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (57ms)

    ✓ Can handle pasting in visual mode over selection (158ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (74ms)

    ✓ gI works correctly (133ms)

    ✓ gi works correctly (123ms)

    ✓ `. works correctly (66ms)

    ✓ '. works correctly (55ms)

    ✓ g; works correctly (90ms)

    ✓ g, works correctly (92ms)

    ✓ g_ works correctly (40ms)

    ✓ 3g_ works correctly (47ms)

    ✓ gq handles spaces after single line comments correctly (53ms)

    ✓ gq handles spaces before single line comments correctly (53ms)

    ✓ gq handles tabs before single line comments correctly (68ms)

    ✓ Can handle space (39ms)

    ✓ Can handle space (45ms)

    ✓ Undo 1 (115ms)

    ✓ Undo 2 (115ms)

    ✓ Undo cursor (136ms)

    ✓ Undo cursor 2 (137ms)

    ✓ Undo cursor 3 (122ms)

    ✓ Undo with movement first (134ms)

    ✓ Can handle 'U' (57ms)

    ✓ Can handle 'U' for multiple changes (74ms)

    ✓ Can handle 'U' for new line below (88ms)

    ✓ Can handle 'U' for new line above (97ms)

    ✓ Can handle 'U' for consecutive changes only (134ms)

    ✓ Can handle 'u' to undo 'U' (79ms)

    ✓ Can handle 'U' to undo 'U' (57ms)

    ✓ Can handle 'u' after :s/abc/def (132ms)

    ✓ Redo (131ms)

    ✓ Redo (133ms)

    ✓ Redo (108ms)

    ✓ Can handle u (54ms)

    ✓ Can handle guw (40ms)

    ✓ Can handle guae (43ms)

    ✓ Can handle guie (44ms)

    ✓ Can handle gUw (47ms)

    ✓ Can handle gUae (42ms)

    ✓ Can handle gUie (75ms)

    ✓ Can handle u over line breaks (47ms)

    ✓ can handle s in visual mode (75ms)

    ✓ can handle p with selection (85ms)

    ✓ can handle P with selection (78ms)

    ✓ can handle p in visual to end of line (118ms)

    ✓ can repeat backspace twice (152ms)

    ✓ can delete linewise with d2G (38ms)

    ✓ can delete with + motion and count (64ms)

    ✓ can delete with - motion and count (50ms)

    ✓ can dE correctly

    ✓ can dE correctly (41ms)

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number (38ms)

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after  (69ms)

    ✓ can ctrl-x on a negative number with word before and after  (45ms)

    ✓ can ctrl-a properly on multiple lines (54ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y (45ms)

    ✓ can do [count]Y if count is larger than EOF (39ms)

    ✓ Can do S (49ms)

    ✓ / does not affect mark (66ms)

    ✓ / can search with regex (49ms)

    ✓ / can search with newline (48ms)

    ✓ / can search through multiple newlines (68ms)

    ✓ / matches ^ per line (48ms)

    ✓ / matches $ per line (72ms)

    ✓ Can search for forward slash

    ✓ Can search backward for question mark (39ms)

    ✓ /\c forces case insensitive search (65ms)

    ✓ /\C forces case sensitive search (41ms)

    ✓ <BS> deletes the last character in search in progress mode (57ms)

    ✓ <S-BS> deletes the last character in search in progress mode (41ms)

    ✓ <C-h> deletes the last character in search in progress mode (42ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (41ms)

    ✓ Ignores cit on a non-matching tag (44ms)

    ✓ Ignores cit on a nested tag (47ms)

    ✓ Can do cit on a tag with an attribute tag (47ms)

    ✓ Can do cat on a matching tag (47ms)

    ✓ Can do cit on a multiline tag (86ms)

    ✓ Can do cit on a multiline tag with nested tags (45ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (47ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (47ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (40ms)

    ✓ Can do cit on empty tag block, cursor moves to inside (57ms)

    ✓ can do cit with self closing tags (39ms)

    ✓ Respects indentation with cc (48ms)

    ✓ Resets cursor to indent end with cc (49ms)

    ✓ can handle 'cc' on empty line (45ms)

    ✓ cc copies linewise (58ms)

    ✓ Indent current line with correct Vim Mode (89ms)

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent (43ms)

    ✓ Can do cai (52ms)

    ✓ Can do cii (51ms)

    ✓ Can do caI (47ms)

    ✓ Can do dai (42ms)

    ✓ Can do dii

    ✓ Can do daI (42ms)

    ✓ `] go to the end of the previously operated or put text (83ms)

    ✓ '] go to the end of the previously operated or put text (100ms)

    ✓ `[ go to the start of the previously operated or put text (101ms)

    ✓ '[ go to the start of the previously operated or put text (89ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle (248ms)

    can handle gn

      ✓ gn selects the next match text (271ms)

      ✓ gn selects the current word at |hello (237ms)

      ✓ gn selects the current word at h|ello (301ms)

      ✓ gn selects the current word at hel|lo (235ms)

      ✓ gn selects the current word at hell|o (271ms)

      ✓ gn selects the next word at hello| (247ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (68ms)

      ✓ dgn deletes the current word when cursor is at |hello (67ms)

      ✓ dgn deletes the current word when cursor is at h|ello (82ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (103ms)

      ✓ dgn deletes the current word when cursor is at hell|o (64ms)

      ✓ dgn deletes the next word when cursor is at hello| (77ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (78ms)

      ✓ cgn deletes the current word when cursor is at |hello (83ms)

      ✓ cgn deletes the current word when cursor is at h|ello (72ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (84ms)

      ✓ cgn deletes the current word when cursor is at hell|o (84ms)

      ✓ cgn deletes the next word when cursor is at hello| (98ms)

    can handle gN

      ✓ gN selects the previous match text (274ms)

      ✓ gN selects the current word at hell|o (265ms)

      ✓ gN selects the current word at hel|lo (358ms)

      ✓ gN selects the current word at h|ello (252ms)

      ✓ gN selects the current word at |hello (252ms)

      ✓ gN selects the previous word at | hello (255ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (83ms)

      ✓ dgN deletes the current word when cursor is at hell|o (96ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (105ms)

      ✓ dgN deletes the current word when cursor is at h|ello (87ms)

      ✓ dgN deletes the current word when cursor is at |hello (94ms)

      ✓ dgN deletes the previous word when cursor is at | hello (88ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (87ms)

      ✓ cgN deletes the current word when cursor is at hell|o (87ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (104ms)

      ✓ cgN deletes the current word when cursor is at h|ello (354ms)

      ✓ cgN deletes the current word when cursor is at |hello (104ms)

      ✓ cgN deletes the previous word when cursor is at | hello (95ms)

    marks

      ✓ capital marks can change the editors active document (121ms)

      ✓ can jump to lowercase mark (41ms)

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode (101ms)

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (40ms)

    ✓ Can handle R past current line (53ms)

    ✓ Can handle R and exit Replace Mode (64ms)

    ✓ Can handle R across lines (89ms)

    ✓ Can handle R across lines and exit Replace Mode (107ms)

    ✓ Can handle R with {count} (94ms)

    ✓ Can handle backspace (75ms)

    ✓ Can handle backspace (94ms)

    ✓ Can handle backspace across lines (122ms)

    ✓ Can handle arrows (56ms)

    ✓ Can handle . (108ms)

    ✓ Can handle . across lines (148ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (200ms)

    ✓ Can handle wd (131ms)

    ✓ Can handle x (129ms)

    ✓ Can handle x across a selection (146ms)

    ✓ Can do vwd in middle of sentence (193ms)

    ✓ Can do vwd in middle of sentence (167ms)

    ✓ Can do vwd multiple times (200ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (200ms)

    ✓ Can handle H key (44ms)

    ✓ Can handle backspace key (66ms)

    ✓ handles case where we delete over a newline (200ms)

    ✓ handles change operator (137ms)

    ✓ Can do vat on multiple matching tags (80ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (64ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (50ms)

    ✓ Repeat-prefixed vat does not bleed below (48ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (50ms)

    ✓ Can do vi) on a matching parenthesis (54ms)

    ✓ Can do vi) on multiple matching parens (74ms)

    ✓ Can do va) on a matching parenthesis (61ms)

    ✓ Can do va) on multiple matching parens (64ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (60ms)

    ✓ Repeat-prefixed va) does not bleed below (63ms)

    ✓ Can do va} on a matching bracket as first character (52ms)

    ✓ Can do va} on multiple matching brackets (74ms)

    ✓ Can do vi( on a matching bracket near first character (60ms)

    ✓ Can do vi{ on outer pair of nested braces (43ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (58ms)

    ✓ Can do va] on multiple matching brackets (84ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (54ms)

    ✓ Repeat-prefixed vaf does not bleed below (68ms)

    ✓ vaf only expands to enclosing pairs (51ms)

    ✓ Can use . to repeat indent in visual (55ms)

    ✓ Can do v_x to delete to first char (49ms)

    ✓ Can do vg_x to delete to last char with no EOL (49ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (200ms)

    ✓ Can do v$x to delete to last char including EOL (66ms)

    ✓ Can do gv to reselect previous selection (81ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (75ms)

    Vim's EOL handling is weird

      ✓ delete through eol (119ms)

      ✓ join 2 lines by deleting through eol (103ms)

      ✓ d$ doesn't delete whole line (108ms)

      ✓ vd$ does delete whole line (86ms)

      ✓ Paste over selection copies the selection (69ms)

      ✓ Paste over selection copies the selection linewise (109ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (52ms)

      ✓ Can handle <down> key (57ms)

      ✓ Can handle <left> key (59ms)

      ✓ Can handle <right> key (51ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (61ms)

      ✓ Can handle 'gj' (57ms)

      - Preserves cursor position when handling 'gk'

      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (60ms)

      ✓ Can handle 'vawd' on word with trailing spaces (49ms)

      ✓ Can handle 'vawd' on word with leading spaces (53ms)

      ✓ Can handle 'vawd' on word with numeric prefix (55ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (71ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (63ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (42ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (52ms)

      ✓ Can handle 'vaWd' on word with leading spaces (53ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (59ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (46ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (63ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (50ms)

      ✓ Can handle 'vaWd' on word with leading spaces (49ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (53ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (68ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (69ms)

      ✓ Can handle 'vawd' on word with trailing spaces (46ms)

      ✓ Can handle 'vawd' on word with leading spaces (62ms)

      ✓ Can handle 'vawd' on word with numeric prefix (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (61ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (46ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (64ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (44ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (58ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (68ms)

      ✓ Can handle 'Y' in visual mode (81ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (69ms)

      ✓ Select sentence with leading spaces in visual mode (43ms)

      ✓ Select multiple sentences in visual mode (52ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (57ms)

      ✓ Select inner sentence with leading spaces in visual mode (52ms)

      ✓ Select spaces between sentences in visual mode (46ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (54ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (54ms)

      ✓ Can do vat on a matching tag (67ms)

    handles replace in visual mode

      ✓ Can do a single line replace (52ms)

      ✓ Can do a multi line replace (55ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (50ms)

      ✓ D deletes the current line (81ms)

    handles indent blocks in visual mode

      ✓ Can do vai (124ms)

      ✓ Can do vii (49ms)

      ✓ Doesn't naively select the next line (50ms)

      ✓ Searches backwards if cursor line is empty (46ms)

      ✓ Can do vaI (77ms)

    visualstar

      ✓ Works with * (62ms)

      ✓ Works with # (47ms)

    search works in visual mode

      ✓ Works with / (70ms)

      ✓ Works with ? (67ms)

      ✓ Selects correct range (145ms)

    X will delete linewise

      ✓ normal selection (53ms)

      ✓ normal selection (78ms)

    C will delete linewise

      ✓ normal selection (47ms)

      ✓ normal selection (53ms)

    R will delete linewise

      ✓ normal selection (62ms)

      ✓ normal selection (66ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (83ms)

      ✓ upward selection (124ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (52ms)

      ✓ multiline indent bottom up selection (60ms)

      ✓ repeat multiline indent top down selection (102ms)

      ✓ repeat multiline indent bottom up selection (89ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (55ms)

      ✓ multiline outdent bottom up selection (115ms)

      ✓ repeat multiline outdent top down selection (81ms)

      ✓ repeat multiline outdent bottom up selection (84ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (161ms)

    vi{ will go to end of second to last line

      ✓ select (88ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (496ms)

      ✓ gv selects the last pasted text (which is longer than original) (468ms)

      ✓ gv selects the last pasted text (multiline) (246ms)

    can handle gn

      ✓ gn selects the next match text (270ms)

      ✓ gn selects the current word at |hello (236ms)

      ✓ gn selects the current word at h|ello (292ms)

      ✓ gn selects the current word at hel|lo (253ms)

      ✓ gn selects the next word at hell|o (319ms)

      ✓ gn selects the next word at hello| (304ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (53ms)

      ✓ multiline insert from top down selection (54ms)

      ✓ skips blank lines (47ms)

    can append text with A

      ✓ multiline append from bottom up selection (53ms)

      ✓ multiline append from top down selection (66ms)

      ✓ skips blank lines (62ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (85ms)

      ✓ U/gU across a selection (169ms)

      ✓ U/gU across a selection (reverse) (85ms)

      ✓ u/gu on single character (66ms)

      ✓ u/gu across a selection (93ms)

      ✓ u/gu across a selection (reverse) (86ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (125ms)

      ✓ ~/g~ across a selection (110ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (70ms)

    ✓ Can handle A backwards select (95ms)

    ✓ Can handle I forward select (85ms)

    ✓ Can handle I backwards select (78ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (116ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (115ms)

    ✓ Can handle c forward select (76ms)

    ✓ Can handle c backwards select (82ms)

    ✓ Can handle C (75ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (56ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (72ms)

    ✓ Properly add to end of lines $ then j (79ms)

    ✓ o works in visual block mode (62ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    ✓ Select register using " works in visual block mode (91ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (50ms)

    ✓ Can handle 'J' when the visual block spans multiple lines (54ms)

    ✓ Can handle 'J' when start position of the visual block is below the stop (357ms)

    ✓ Can handle ~/g~ in visual block mode (126ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (226ms)

  Mode Visual Line

    ✓ can be activated

    ✓ <count>V selects <count> lines (276ms)

    ✓ Can handle w (194ms)

    ✓ Can handle wd (121ms)

    ✓ Can handle x (197ms)

    ✓ Can handle x across a selection (131ms)

    ✓ Can do vwd in middle of sentence (179ms)

    ✓ Can do vwd in middle of sentence (181ms)

    ✓ Can do vwd multiple times (229ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (165ms)

    ✓ handles case where we delete over a newline (170ms)

    ✓ handles change operator (158ms)

    ✓ Vp updates register content (62ms)

    ✓ Vp does not append unnecessary newlines (first line) (56ms)

    ✓ Vp does not append unnecessary newlines (middle line) (49ms)

    ✓ Vp does not append unnecessary newlines (last line) (57ms)

    ✓ Exiting via <Esc> returns cursor to original column (42ms)

    ✓ Exiting via `VV` returns cursor to original column (45ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (285ms)

    Vim's EOL handling is weird

      ✓ delete through eol (110ms)

      ✓ join 2 lines by deleting through eol (116ms)

      ✓ d$ doesn't delete whole line (123ms)

      ✓ vd$ does delete whole line (91ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (62ms)

      ✓ Can handle <down> key (47ms)

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (49ms)

      ✓ Can handle 'gj' (47ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (53ms)

      ✓ Can handle d key (55ms)

      ✓ Can handle d key (54ms)

      ✓ Can handle d key (64ms)

      ✓ can handle 'c' (47ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (44ms)

      ✓ Can do a multi visual line replace (53ms)

      ✓ Can do a multi visual line replace from the bottom up (45ms)

    search works in visual line mode

      ✓ Works with / (76ms)

      ✓ Works with ? (61ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (165ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (65ms)

      ✓ linewise visual put works also in the end of document (61ms)

      ✓ gv selects the last pasted text (which is shorter than original) (430ms)

      ✓ gv selects the last pasted text (which is longer than original) (419ms)

      ✓ gv selects the last pasted text (multiline) (248ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (64ms)

      ✓ multiline insert from top down selection (47ms)

      ✓ skips blank lines (49ms)

    can append text with A

      ✓ multiline append from bottom up selection (79ms)

      ✓ multiline append from top down selection (63ms)

      ✓ skips blank lines (61ms)

      ✓ updates desired column correctly (58ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (78ms)

      ✓ ~/g~ on multiple lines (74ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (60ms)

    ✓ Can handle 'x' at end of line (104ms)

    ✓ Can handle 'Ns' (46ms)

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (82ms)

    ✓ Can handle 'cc' (52ms)

    ✓ Can handle 'Ncc' (57ms)

    ✓ Can handle 'yy' (54ms)

    ✓ Can handle 'D' (48ms)

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows (38ms)

    ✓ Can handle 'D' with count when end position is on blank line (44ms)

    ✓ Can handle 'DD' (43ms)

    ✓ Can handle 'C' (41ms)

    ✓ Can handle 'NC' (78ms)

    ✓ Can handle 'NC' and put (54ms)

    ✓ Can handle 'r' (43ms)

    ✓ Can handle '<Count>r' (52ms)

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd' (61ms)

    ✓ Can handle 'r
' (93ms)

    ✓ Can handle '<Count>r
' (52ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice (54ms)

    ✓ Can handle 'J' with empty last line (38ms)

    ✓ Can handle 'J's with multiple empty last lines (80ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line (42ms)

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line (40ms)

    ✓ Can handle 'J' with a following delete (44ms)

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF (302ms)

    ✓ Can handle 'J' in Visual Line mode (43ms)

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (46ms)

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~' (41ms)

    ✓ Can handle '<BS>' in insert mode (59ms)

    ✓ Can handle undo with P (93ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot (44ms)

    ✓ Can repeat 'x'

    ✓ Can repeat 'J' (41ms)

    ✓ Can handle dot with A (91ms)

    ✓ Can handle dot with I (92ms)

    ✓ Can repeat actions that require selections (70ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (73ms)

    ✓ Can repeat insert change and '<C-t>' (125ms)

    ✓ Can repeat change by `<C-a>` (82ms)

    ✓ Only one arrow key can be repeated in Insert Mode (90ms)

    ✓ Cached content change will be cleared by arrow keys (87ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis (43ms)

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>]) (39ms)

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{ (47ms)

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]} (41ms)

    ✓ Can handle ]} and character under cursor exclusive (42ms)

    ✓ Can handle 'ge' (193ms)

    ✓ Can handle 'gg' (54ms)

    ✓ Can handle 'gg' to first non blank char on random line (46ms)

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL (40ms)

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice (44ms)

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (45ms)

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (42ms)

    ✓ Can handle 't' (113ms)

    ✓ Can handle 't' twice (55ms)

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T' (38ms)

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search (42ms)

    ✓ Can run a forward and find next search (50ms)

    ✓ Can run a forward and find previous search from end of word (55ms)

    ✓ Can run a forward search with count 1 (41ms)

    ✓ Can run a forward search with count 3

    ✓ Can run a forward search with count exceeding max number of matches

    ✓ Can run a reverse search (41ms)

    ✓ Can run a reverse and find next search (46ms)

    ✓ Can run a reverse search with count 1

    ✓ Can run a reverse search with count 3 (51ms)

    ✓ Can run a reverse search with count exceeding max number of matches (43ms)

    ✓ cancelled search reverts to previous search state (90ms)

    ✓ Backspace on empty search cancels (48ms)

    ✓ Search offsets: b does nothing (62ms)

    ✓ Search offsets: b2 goes 2 to the right (55ms)

    ✓ Search offsets: b+3 goes 3 to the right (54ms)

    ✓ Search offsets: e goes to the end (42ms)

    ✓ Search offsets: character offset goes across line boundaries (52ms)

    ✓ Search offsets: 2 goes 2 down (50ms)

    ✓ Search offsets: -2 goes 2 up (63ms)

    ✓ maintains column position correctly (46ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix (47ms)

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL (105ms)

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history (43ms)

    ✓ # adds to search history (39ms)

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right
    ✓ char left: should move cursor one column left
    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down
    ✓ line down: bottom-most line should stay at the same location
    ✓ line begin
    ✓ line end
    ✓ document begin

    ✓ document end
    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    word right

      ✓ move to word right

      ✓ last word should move to next line

      ✓ last word should move to next line stops on empty line

      ✓ last word should move to next line skips whitespace only line

      ✓ last word on last line should go to end of document (special case!)
    word left

      ✓ move cursor word left across spaces

      ✓ move cursor word left within word

      ✓ first word should move to previous line, beginning of last word

      ✓ first word should move to previous line, stops on empty line

      ✓ first word should move to previous line, skips whitespace only line

    WORD right

      ✓ move to WORD right

      ✓ last WORD should move to next line

      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text

      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind

      ✓ move cursor word left within the same char kind
      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down
      ✓ move down normally
      ✓ move down longer paragraph
      ✓ move down starting inside empty line
      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line (404ms)

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (38ms)

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (62ms)

      ✓ search wraps around the start of the file (81ms)

    wrapscan disabled

      ✓ search stops at the end of the file (49ms)

      ✓ search stops at the start of the file (47ms)

  Multicursor

    ✓ can add multiple cursors below (94ms)

    ✓ can add multiple cursors above (124ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (396ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (375ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (415ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (381ms)

    ✓ dd works with multi-cursor (279ms)

    ✓ Vd works with multi-cursor (63ms)

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor (39ms)

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5823) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (229ms)

    ✓ gcj comments in current and next line (76ms)

    ✓ block comment with motion (236ms)

    ✓ block comment in Visual Mode (258ms)

    ✓ comment in visual line mode (339ms)

    ✓ comment in visual block mode (405ms)

  format operator

    ✓ == formats current line (370ms)

    ✓ =$ formats entire line (227ms)

    ✓ =j formats two lines (142ms)

    ✓ 3=k formats three lines (171ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (109ms)

    ✓ =ip formats paragraph (96ms)

    ✓ format in visual mode (112ms)

  put operator

    ✓ basic put test (82ms)

    ✓ test yy end of line (109ms)

    ✓ test yy first line (51ms)

    ✓ test yy middle line (58ms)

    ✓ test yy with correct positon movement (55ms)

    ✓ test visual block single line yank p (77ms)

    ✓ test visual block single line yank P (92ms)

    ✓ test visual block single line delete p (66ms)

    ✓ test visual block single line delete P (68ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works (60ms)

    ✓ g? in visual mode works (43ms)

    ✓ g? in visual line mode works (49ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test (46ms)

    ✓ shift left goto end test (67ms)

    ✓ shift left goto line test (59ms)

    ✓ shift right goto end test

    ✓ shift right goto line test (45ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace (61ms)

      ✓ step to Camel word (38ms)

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word (58ms)

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word (93ms)

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord (41ms)

      ✓ delete from start of CamelWord (56ms)

      ✓ delete two words from camelWord (42ms)

      ✓ delete from start of underscore_word (88ms)

      ✓ delete from middle of underscore_word (40ms)

      ✓ delete two words from camel_word (45ms)

    handles di<leader>w

      ✓ delete from start of camelWord (94ms)

      ✓ delete from middle of camelWord (81ms)

      ✓ delete from start of CamelWord (46ms)

      ✓ delete two words from camelWord (40ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word (69ms)

      ✓ delete two words from camel_word (40ms)

    handles <leader>b

      ✓ back from middle of word (66ms)

      ✓ back over whitespace to camelWord (63ms)

      ✓ back twice over operator (52ms)

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (39ms)

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (51ms)

    ✓ Can handle 2s move (79ms)

    ✓ Can handle f move (48ms)

    ✓ Can handle 2f move (111ms)

    ✓ Can handle F move (71ms)

    ✓ Can handle 2F move (50ms)

    ✓ Can handle t move (52ms)

    ✓ Can handle bd-t move (52ms)

    ✓ Can handle 2t move (71ms)

    ✓ Can handle bd-t2 move (90ms)

    ✓ Can handle T move (80ms)

    ✓ Can handle 2T move (62ms)

    ✓ Can handle w move (44ms)

    ✓ Can handle bd-w move (38ms)

    ✓ Can handle b move (53ms)

    ✓ Can handle e move (42ms)

    ✓ Can handle bd-e move (47ms)

    ✓ Can handle ge move (41ms)

    ✓ Can handle n-char move (107ms)

    ✓ Can handle j move (91ms)

    ✓ Can handle k move (75ms)

    ✓ Can handle bd-jk move (1) (82ms)

    ✓ Can handle bd-jk move (2) (61ms)

    ✓ Can handle lineforward move (1) (49ms)

    ✓ Can handle lineforward move (2) (57ms)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\) (43ms)

    ✓ Can handle searching for carat (^) (83ms)

    ✓ Can handle searching for dot (.) (43ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (88ms)

    ✓ Replaces within inner Word (76ms)

    ✓ Replaces within '' (106ms)

    ✓ Replaces within '' including spaces (97ms)

    ✓ Replaces within () (60ms)

    ✓ Replaces within () including spaces (75ms)

    ✓ Replaces within a paragraph (46ms)

    ✓ Replaces using a specified register (131ms)

    ✓ Replaces within {} over multiple lines (60ms)

    ✓ Replaces a multiline register within {} over multiple lines (108ms)

    ✓ Replaces a multiline register within {} over multiple lines (104ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (84ms)

    ✓ grr replaces the entire line with the register (155ms)

    ✓ grr can replace multiple lines (44ms)

    ✓ Replaces in visual mode (90ms)

    ✓ Replaces in visual mode using a specified register (111ms)

    ✓ Replaces in visual line mode (93ms)

    ✓ grj is linewise (58ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion (69ms)

    ✓ Can handle <operator>Z motion (59ms)

    ✓ Can handle s; motion (41ms)

    ✓ Can handle s, motion (39ms)

    ✓ Can handle S; motion

    ✓ Can handle S, motion (68ms)

    ✓ Can handle single letter s motion (69ms)

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion

    ✓ Can handle single letter <operator>Z motion (81ms)

    ✓ Can handle single letter s; motion (50ms)

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward (81ms)

    ✓ Can go back using <C-o> when repeating forward movement (529ms)

    ✓ Can go back using <C-o> when repeating backward movement (42ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (39ms)

    ✓ sneakReplacesF backward (143ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (131ms)

    ✓ 'ysiw(' surrounds word with space (120ms)

    ✓ 'ysw)' surrounds word without space (105ms)

    ✓ 'ysw(' surrounds word with space (51ms)

    ✓ 'ysaw)' surrounds word without space (129ms)

    ✓ 'ysaw(' surrounds word with space (115ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (211ms)

    ✓ 'ysiw<' surrounds word with tags (73ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (91ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (43ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (69ms)

    ✓ change surround (128ms)

    ✓ change surround with two pairs of quotes (143ms)

    ✓ change surround with two pairs of parens (141ms)

    ✓ change surround with alias (85ms)

    ✓ change surround to tags (114ms)

    ✓ delete surround (92ms)

    ✓ delete surround with quotes (81ms)

    ✓ delete surround with nested of quotes (89ms)

    ✓ delete surround with inconsistent quotes (86ms)

    ✓ delete surround with mixed quotes (63ms)

    ✓ delete surround with empty quotes cursor at start (115ms)

    ✓ delete surround with empty quotes cursor at end (67ms)

    ✓ don't delete surround if cursor is after closing match (91ms)

    ✓ delete surround if cursor is before opening match (51ms)

    ✓ delete surround with two pairs of parens (105ms)

    ✓ delete surround with alias (83ms)

    ✓ delete surround with tags (89ms)

    ✓ change surround brackets at end of line (81ms)

    ✓ changing brackets with surround works again (120ms)

    ✓ change surround with tags that contain an attribute and preserve them (105ms)

    ✓ change surround with tags that contain an attribute and remove them (403ms)

  register

    ✓ Can copy to a register (80ms)

    ✓ Can use two registers together (127ms)

    ✓ Can use black hole register (82ms)

    ✓ System clipboard works with chinese characters (71ms)

    ✓ Yank stores text in Register '0' (277ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (268ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (277ms)

    ✓ Register '1'-'9' stores delete content (333ms)

    ✓ "A appends linewise text to "a (308ms)

    ✓ "A appends character wise text to "a (292ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (225ms)

    ✓ Small deletion using Del is stored in small delete register (249ms)

    ✓ Small deletion using X is stored in small delete register (184ms)

    ✓ Search register (/) is set by forward search (367ms)

    ✓ Search register (/) is set by backward search (379ms)

    ✓ Search register (/) is set by star search (355ms)

    ✓ Command register (:) is set by command line (127ms)

    ✓ Read-only registers cannot be written to (239ms)

    clipboard

      ✓ Can access '*' (clipboard) register (65ms)

      ✓ Can access '+' (clipboard) register (54ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character>

    ✓ Can repeat N times reversed t<character> (46ms)

  sentence motion

    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward (47ms)

      ✓ move [count] sentences backward (54ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space (58ms)

      ✓ move one sentence backward no space - middle (39ms)

      ✓ move one sentence backward - multiline (66ms)

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line (59ms)

      ✓ move one sentence backward - multiline - previous line - period

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist

  util path
    separatePath

      ✓ can separate drive letter path on Windows
      ✓ can separate UNC path on Windows
      ✓ can separate relative path on Windows
      ✓ can separate absolute path on posix
      ✓ can separate relative path on posix
    resolveUri

      ✓ posix
      ✓ win32

  1383 passing (4m)
  4 pending

  21 failing

  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1942:3)


  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)


  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:356:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)


  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:850:5)


  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:857:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)


  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three four five.
      + expected - actual

      -one  three four five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:162:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:178:3)


  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: ba793ca0-8820-11ea-88d0-3540a036c4cf

@J-Fields J-Fields force-pushed the multicursor-tests branch from 1200e5d to 6d68f75 Compare April 27, 2020 01:08
@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 12

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.13.1 build /home/travis/build/VSCodeVim/Vim
> gulp build

[01:09:44] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[01:09:44] Starting 'build'...
[01:09:44] Starting 'prettier'...
[01:09:44] Finished 'prettier' after 24 ms
[01:09:44] Starting 'tsc'...
[01:09:44] Starting 'tslint'...
[01:09:51] Finished 'tslint' after 7.36 s
[01:10:00] Finished 'tsc' after 16 s
[01:10:00] Starting 'commit-hash'...
[01:10:00] Finished 'commit-hash' after 38 ms
[01:10:00] Finished 'build' after 16 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-27T01:10:08.483Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6485) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6485) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (49ms)

    ✓ command <C-w> can remove word in search mode (41ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (63ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (44ms)

    ✓ <C-b> puts cursor at start of command line (39ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (42ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (65ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (88ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (114ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (98ms)

    ✓ <C-p> go to previous search string (44ms)

  cursor location

    ✓ cursor location in command line (40ms)

    ✓ cursor location in search

  HistoryFile

    ✓ add command (38ms)

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system (43ms)

    ✓ change configuration.history (74ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number
    ✓ can lex plus
    ✓ can lex minus
    ✓ can lex forward search
    ✓ can lex forward search escaping
    ✓ can lex reverse search
    ✓ can lex reverse search escaping
    ✓ can lex command name
    ✓ can lex command args
    ✓ can lex command args with leading whitespace
    ✓ can lex long command name and args
    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1294ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent
    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor
    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF
    ✓ can scan
    ✓ can emit
    ✓ can ignore

    ✓ can skip whitespace
    ✓ can skip whitespace with one char before EOF
    ✓ can skip whitespace at EOF
    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF
    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (541ms)

    ✓ :smile editor contains smile text (548ms)

  Basic sort

    ✓ Sort whole file, asc (126ms)

    ✓ Sort whole file, asc, ignoreCase (100ms)

    ✓ Sort whole file, dsc (131ms)

    ✓ Sort whole file, dsc, ignoreCase (121ms)

    ✓ Sort range, asc (154ms)

    ✓ Sort range, asc, ignoreCase (146ms)

    ✓ Sort range, dsc (142ms)

    ✓ Sort range, dsc, ignoreCase (124ms)

    ✓ Sort whole file, asc, unique (421ms)

  Horizontal split

    ✓ :sp creates a second split (90ms)

    ✓ :split creates a second split (83ms)

    ✓ :new creates a second split (240ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (58ms)

    ✓ Replace with `g` flag (57ms)

    ✓ Replace with flags AND count (112ms)

    ✓ Replace with `c` flag (62ms)

    ✓ Replace with `gc` flag (91ms)

    ✓ Replace across all lines (92ms)

    ✓ Replace on specific single line (64ms)

    ✓ Replace on current line using dot (69ms)

    ✓ Replace single relative line using dot and plus (66ms)

    ✓ Replace across specific line range (64ms)

    ✓ Replace across relative line range using dot, plus, and minus (108ms)

    ✓ Replace across relative line range using numLines+colon shorthand (103ms)

    ✓ Repeat replacement across relative line range (121ms)

    ✓ Replace with range AND count but no flags (78ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (69ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (166ms)

    ✓ Undocumented: trailing operators use 1 as RHS (71ms)

    ✓ Replace specific single equal lines (91ms)

    ✓ Replace current line with no active selection (114ms)

    ✓ Replace text in selection (129ms)

    ✓ Substitute support marks (114ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (55ms)

      ✓ Replace with `g` flag inverts global flag (61ms)

      ✓ Replace with `c` flag inverts global flag (67ms)

      ✓ Replace multiple lines (81ms)

      ✓ Replace across specific lines (94ms)

      ✓ Replace current line with no active selection (147ms)

      ✓ Replace text in selection (105ms)

      ✓ Substitute support marks (96ms)

      ✓ Substitute with escaped delimiter (79ms)
    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (235ms)

      ✓ Substitute with previous search using # (226ms)

      ✓ Substitute with previous search using / (236ms)

      ✓ Substitute with parameters should update search state (90ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (350ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (144ms)

      ✓ Substitute repeat previous should accept flags (81ms)

      ✓ Substitute with empty search string should use last searched pattern (316ms)

      ✓ Ampersand (&) should repeat the last substitution (52ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (62ms)

    ✓ tabe with current file path does nothing (52ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (61ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (71ms)

    ✓ command line file tab completion with space in file path (151ms)

  Vertical split

    ✓ :vs creates a second split (65ms)

    ✓ :vsp creates a second split (72ms)

    ✓ :vsplit creates a second split (93ms)

    ✓ :vnew creates a second split (222ms)

    ✓ :vne creates a second split (257ms)

  Basic write-quit

    ✓ Run write and quit (192ms)
  Provide line completions
    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (60ms)

      ✓ Can complete lines in file with different indentation (62ms)

      ✓ Returns no completions for unmatched line (64ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (90ms)

    ✓ getMatchingRemap (67ms)

    ✓ jj -> <Esc> through modehandler (119ms)

    ✓ 0 -> :wq through modehandler (87ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (89ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (80ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (115ms)

    ✓ d -> black hole register delete in normal mode through modehandler (141ms)

    ✓ d -> black hole register delete in normal mode through modehandler (130ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (147ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers
    ✓ all defined configurations in package.json have handlers
  historyTracker unit tests
    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (154ms)

        ✓ Can track jumps for keys: /b<CR>n (51ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (67ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (38ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>%

[main 2020-04-27T01:10:38.489Z] update#setState checking for updates

        ✓ Can track jumps for keys: j%%<C-o>gg (44ms)

[main 2020-04-27T01:10:38.577Z] update#setState idle

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (43ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (83ms)

        ✓ Can enter number to jump back multiple times (51ms)

        ✓ Can track one-line `` jumps (61ms)

        ✓ Can track one-line double `` jumps (66ms)

        ✓ Can track one-line '' jumps (81ms)

        ✓ Can track one-line double '' jumps (79ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (71ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (102ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (171ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (88ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (91ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (155ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (156ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (178ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (180ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (52ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (125ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (152ms)

    ✓ Can repeat last invoked macro (215ms)

    ✓ Can play back with count (380ms)

    ✓ Can play back with count, abort when a motion fails (433ms)

    ✓ Repeat change on contiguous lines (152ms)

    ✓ Append command to a macro (173ms)

    ✓ Can record Ctrl Keys and repeat (146ms)

    ✓ Can execute macros with dot commands properly (131ms)

    ✓ : (command) register can be used as a macro (75ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (161ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (50ms)

    ✓ <C-c> can exit insert (76ms)

    ✓ <Esc> can exit insert (47ms)

    ✓ Stay in insert when entering characters (78ms)

    ✓ Can handle 'O' (55ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (40ms)

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (96ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (73ms)

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode (47ms)

    ✓ Delete works at line end (45ms)

    ✓ Delete works at end of file

    ✓ Delete works with repeat (152ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (71ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (61ms)

    ✓ Can perform insert command prefixed with count

    ✓ Can perform append command prefixed with count (58ms)

    ✓ Can perform insert at start of line command prefixed with count (55ms)

    ✓ Can perform append to end of line command prefixed with count (38ms)

    ✓ Can perform change char (s) command prefixed with count (165ms)

    ✓ Can perform command prefixed with count with <C-[> (50ms)

    ✓ Can handle 'o' with count (86ms)

    ✓ Can handle 'O' with count (80ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (98ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw (38ms)

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd (48ms)

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (46ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (43ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (50ms)

    ✓ Can handle 'dl' at end of line (66ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'd/' (64ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (66ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (39ms)

    ✓ Can handle 'cw' (53ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (59ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (73ms)

    ✓ Can handle 'ciw' on blanks (63ms)

    ✓ Can handle 'caw' (53ms)

    ✓ Can handle 'caw' on first letter (63ms)

    ✓ Can handle 'caw' on blanks (66ms)

    ✓ Can handle 'caw' on blanks (39ms)

    ✓ Can handle 'cae'

    ✓ Can handle 'cae' with caret at document's top

    ✓ Can handle 'cae' with caret at document's end (44ms)

    ✓ Can handle 'cie' on blank content (49ms)

    ✓ Can handle 'cie' with leading space (39ms)

    ✓ Can handle 'cie' with trailing space

    ✓ Can handle 'cie' with both leading and trailing space (50ms)

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)' (38ms)

    ✓ Can handle count prefixed 'ca)'

    ✓ Can handle 'ca(' spanning multiple lines

    ✓ Can handle 'cab' spanning multiple lines (45ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket (44ms)

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote (46ms)

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote

    ✓ Can handle 'ca"' starting on the closing quote (38ms)

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (93ms)

    ✓ can handle ck (70ms)

    ✓ can handle c2j (118ms)

    ✓ can handle c2k (67ms)

    ✓ can handle cj on last line (71ms)

    ✓ can handle ck on first line (61ms)

    ✓ can handle c2j on last line (72ms)

    ✓ can handle c2k on first line (57ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (173ms)

    ✓ Can handle 'daw' on word with trailing spaces (42ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word (57ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (58ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace

    ✓ Can handle 'daw' around word at end of line

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (47ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (43ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines (43ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines (40ms)

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle 'dae'

    ✓ Can handle 'dae' with caret at document's top

    ✓ Can handle 'dae' with caret at document's end

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space

    ✓ Can handle 'die' with trailing space

    ✓ Can handle 'die' with both leading and trailing space

    ✓ Can handle 'die' on blank content (48ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (38ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line (42ms)

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (45ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn

    ✓ I should updated desiredColumn (50ms)

    ✓ leaving insert mode should update desired column when entered with a (78ms)

    ✓ leaving insert mode should update desired column when entered with i (56ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (49ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (41ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (40ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (45ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines

    ✓ Can handle ']p' after yy

    ✓ Can handle ']p' after 'Nyy' (46ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (49ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (39ms)

    ✓ Can handle '[p' after yy (96ms)

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (38ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (41ms)

    ✓ Can handle 'p' after y'a (48ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (122ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (68ms)

    ✓ gI works correctly (50ms)

    ✓ gi works correctly (89ms)

    ✓ `. works correctly (64ms)

    ✓ '. works correctly (49ms)

    ✓ g; works correctly (87ms)

    ✓ g, works correctly (84ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly (54ms)

    ✓ gq handles spaces before single line comments correctly (38ms)

    ✓ gq handles tabs before single line comments correctly (43ms)

    ✓ Can handle space

    ✓ Can handle space

    ✓ Undo 1 (78ms)

    ✓ Undo 2 (87ms)

    ✓ Undo cursor (123ms)

    ✓ Undo cursor 2 (119ms)

    ✓ Undo cursor 3 (101ms)

    ✓ Undo with movement first (118ms)

    ✓ Can handle 'U' (48ms)

    ✓ Can handle 'U' for multiple changes (77ms)

    ✓ Can handle 'U' for new line below (80ms)

    ✓ Can handle 'U' for new line above (95ms)

    ✓ Can handle 'U' for consecutive changes only (146ms)

    ✓ Can handle 'u' to undo 'U' (52ms)

    ✓ Can handle 'U' to undo 'U' (51ms)

    ✓ Can handle 'u' after :s/abc/def (68ms)

    ✓ Redo (105ms)

    ✓ Redo (87ms)

    ✓ Redo (118ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle guae

    ✓ Can handle guie

    ✓ Can handle gUw

    ✓ Can handle gUae (45ms)

    ✓ Can handle gUie

    ✓ Can handle u over line breaks (47ms)

    ✓ can handle s in visual mode (49ms)

    ✓ can handle p with selection (59ms)

    ✓ can handle P with selection (57ms)

    ✓ can handle p in visual to end of line (113ms)

    ✓ can repeat backspace twice (68ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count (39ms)

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y

    ✓ can do [count]Y if count is larger than EOF

    ✓ Can do S

    ✓ / does not affect mark (45ms)

    ✓ / can search with regex (41ms)

    ✓ / can search with newline (47ms)

    ✓ / can search through multiple newlines (67ms)

    ✓ / matches ^ per line

    ✓ / matches $ per line

    ✓ Can search for forward slash (48ms)

    ✓ Can search backward for question mark (39ms)

    ✓ /\c forces case insensitive search

    ✓ /\C forces case sensitive search (41ms)

    ✓ <BS> deletes the last character in search in progress mode (46ms)

    ✓ <S-BS> deletes the last character in search in progress mode

    ✓ <C-h> deletes the last character in search in progress mode (41ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (49ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags (45ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (57ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (236ms)

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (43ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (63ms)

    ✓ '] go to the end of the previously operated or put text (61ms)

    ✓ `[ go to the start of the previously operated or put text (67ms)

    ✓ '[ go to the start of the previously operated or put text (76ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (59ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (245ms)

      ✓ gn selects the current word at |hello (231ms)

      ✓ gn selects the current word at h|ello (252ms)

      ✓ gn selects the current word at hel|lo (255ms)

      ✓ gn selects the current word at hell|o (272ms)

      ✓ gn selects the next word at hello| (263ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (54ms)

      ✓ dgn deletes the current word when cursor is at |hello (57ms)

      ✓ dgn deletes the current word when cursor is at h|ello (63ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (66ms)

      ✓ dgn deletes the current word when cursor is at hell|o (58ms)

      ✓ dgn deletes the next word when cursor is at hello| (77ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (70ms)

      ✓ cgn deletes the current word when cursor is at |hello (54ms)

      ✓ cgn deletes the current word when cursor is at h|ello (61ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (62ms)

      ✓ cgn deletes the current word when cursor is at hell|o (72ms)

      ✓ cgn deletes the next word when cursor is at hello| (69ms)

    can handle gN

      ✓ gN selects the previous match text (254ms)

      ✓ gN selects the current word at hell|o (247ms)

      ✓ gN selects the current word at hel|lo (269ms)

      ✓ gN selects the current word at h|ello (284ms)

      ✓ gN selects the current word at |hello (259ms)

      ✓ gN selects the previous word at | hello (300ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (63ms)

      ✓ dgN deletes the current word when cursor is at hell|o (84ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (75ms)

      ✓ dgN deletes the current word when cursor is at h|ello (65ms)

      ✓ dgN deletes the current word when cursor is at |hello (65ms)

      ✓ dgN deletes the previous word when cursor is at | hello (75ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (56ms)

      ✓ cgN deletes the current word when cursor is at hell|o (67ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (68ms)

      ✓ cgN deletes the current word when cursor is at h|ello (80ms)

      ✓ cgN deletes the current word when cursor is at |hello (79ms)

      ✓ cgN deletes the previous word when cursor is at | hello (318ms)

    marks

      ✓ capital marks can change the editors active document (127ms)

      ✓ can jump to lowercase mark

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode (47ms)

    ✓ Can handle R across lines (63ms)

    ✓ Can handle R across lines and exit Replace Mode (85ms)

    ✓ Can handle R with {count} (87ms)

    ✓ Can handle backspace (42ms)

    ✓ Can handle backspace (60ms)

    ✓ Can handle backspace across lines (117ms)

    ✓ Can handle arrows (47ms)

    ✓ Can handle . (98ms)

    ✓ Can handle . across lines (138ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (151ms)

    ✓ Can handle wd (273ms)

    ✓ Can handle x (121ms)

    ✓ Can handle x across a selection (136ms)

    ✓ Can do vwd in middle of sentence (177ms)

    ✓ Can do vwd in middle of sentence (147ms)

    ✓ Can do vwd multiple times (214ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (143ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (42ms)

    ✓ handles case where we delete over a newline (148ms)

    ✓ handles change operator (130ms)

    ✓ Can do vat on multiple matching tags (61ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (65ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (44ms)

    ✓ Repeat-prefixed vat does not bleed below (48ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis (39ms)

    ✓ Can do vi) on multiple matching parens (63ms)

    ✓ Can do va) on a matching parenthesis

    ✓ Can do va) on multiple matching parens

    ✓ Failed va) does not expand or move selection, remains in visual mode

    ✓ Repeat-prefixed va) does not bleed below (45ms)

    ✓ Can do va} on a matching bracket as first character

    ✓ Can do va} on multiple matching brackets (49ms)

    ✓ Can do vi( on a matching bracket near first character

    ✓ Can do vi{ on outer pair of nested braces (40ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (44ms)

    ✓ Can do va] on multiple matching brackets (48ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (42ms)

    ✓ Repeat-prefixed vaf does not bleed below (38ms)

    ✓ vaf only expands to enclosing pairs (42ms)

    ✓ Can use . to repeat indent in visual (57ms)

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL (45ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (50ms)

    ✓ Can do v$x to delete to last char including EOL (39ms)

    ✓ Can do gv to reselect previous selection (55ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (46ms)

    Vim's EOL handling is weird

      ✓ delete through eol (135ms)

      ✓ join 2 lines by deleting through eol (112ms)

      ✓ d$ doesn't delete whole line (84ms)

      ✓ vd$ does delete whole line (113ms)

      ✓ Paste over selection copies the selection (72ms)

      ✓ Paste over selection copies the selection linewise (89ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (100ms)

      ✓ Can handle <down> key

      ✓ Can handle <left> key (45ms)

      ✓ Can handle <right> key

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (47ms)

      ✓ Can handle 'gj' (40ms)

      - Preserves cursor position when handling 'gk'
      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces

      ✓ Can handle 'vawd' on word with trailing spaces (62ms)

      ✓ Can handle 'vawd' on word with leading spaces (44ms)

      ✓ Can handle 'vawd' on word with numeric prefix (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (39ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (38ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (40ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (89ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (40ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (40ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (46ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (38ms)

      ✓ Can handle 'vaWd' on word with leading spaces (46ms)

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (44ms)

      ✓ Can handle 'Y' in visual mode (43ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (43ms)

      ✓ Select sentence with leading spaces in visual mode (40ms)

      ✓ Select multiple sentences in visual mode (47ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (125ms)

      ✓ Select inner sentence with leading spaces in visual mode (64ms)

      ✓ Select spaces between sentences in visual mode

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (87ms)

      ✓ Can do vat on a matching tag (51ms)

    handles replace in visual mode

      ✓ Can do a single line replace (40ms)

      ✓ Can do a multi line replace

    D command will remove all selected lines

      ✓ D deletes all selected lines (44ms)

      ✓ D deletes the current line (55ms)

    handles indent blocks in visual mode

      ✓ Can do vai

      ✓ Can do vii (44ms)

      ✓ Doesn't naively select the next line (49ms)

      ✓ Searches backwards if cursor line is empty (48ms)

      ✓ Can do vaI (43ms)

    visualstar

      ✓ Works with *

      ✓ Works with # (42ms)

    search works in visual mode

      ✓ Works with / (51ms)

      ✓ Works with ? (59ms)

      ✓ Selects correct range (126ms)

    X will delete linewise

      ✓ normal selection

      ✓ normal selection

    C will delete linewise

      ✓ normal selection

      ✓ normal selection (38ms)

    R will delete linewise

      ✓ normal selection (48ms)

      ✓ normal selection (48ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (78ms)

      ✓ upward selection (96ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (60ms)

      ✓ multiline indent bottom up selection (50ms)

      ✓ repeat multiline indent top down selection (127ms)

      ✓ repeat multiline indent bottom up selection (56ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (40ms)

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (51ms)

      ✓ repeat multiline outdent bottom up selection (64ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (168ms)

    vi{ will go to end of second to last line

      ✓ select (57ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode (75ms)

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (393ms)

      ✓ gv selects the last pasted text (which is longer than original) (415ms)

      ✓ gv selects the last pasted text (multiline) (503ms)

    can handle gn

      ✓ gn selects the next match text (249ms)

      ✓ gn selects the current word at |hello (227ms)

      ✓ gn selects the current word at h|ello (249ms)

      ✓ gn selects the current word at hel|lo (264ms)

      ✓ gn selects the next word at hell|o (252ms)

      ✓ gn selects the next word at hello| (256ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (49ms)

      ✓ multiline insert from top down selection (47ms)

      ✓ skips blank lines (45ms)

    can append text with A

      ✓ multiline append from bottom up selection (38ms)

      ✓ multiline append from top down selection

      ✓ skips blank lines (39ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (57ms)

      ✓ U/gU across a selection (84ms)

      ✓ U/gU across a selection (reverse) (70ms)

      ✓ u/gu on single character (82ms)

      ✓ u/gu across a selection (76ms)

      ✓ u/gu across a selection (reverse) (65ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (115ms)

      ✓ ~/g~ across a selection (85ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (69ms)

    ✓ Can handle A backwards select (53ms)

    ✓ Can handle I forward select (60ms)

    ✓ Can handle I backwards select (58ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (61ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (78ms)

    ✓ Can handle c forward select (65ms)

    ✓ Can handle c backwards select (69ms)

    ✓ Can handle C (64ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (41ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (51ms)

    ✓ Properly add to end of lines $ then j (60ms)

    ✓ o works in visual block mode (47ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    ✓ Select register using " works in visual block mode (75ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (46ms)

    ✓ Can handle 'J' when the visual block spans multiple lines (47ms)

    ✓ Can handle 'J' when start position of the visual block is below the stop (43ms)

    ✓ Can handle ~/g~ in visual block mode (84ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (184ms)

  Mode Visual Line

    ✓ can be activated

    ✓ <count>V selects <count> lines (369ms)

    ✓ Can handle w (183ms)

    ✓ Can handle wd (130ms)

    ✓ Can handle x (243ms)

    ✓ Can handle x across a selection (141ms)

    ✓ Can do vwd in middle of sentence (150ms)

    ✓ Can do vwd in middle of sentence (161ms)

    ✓ Can do vwd multiple times (217ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (157ms)

    ✓ handles case where we delete over a newline (199ms)

    ✓ handles change operator (124ms)

    ✓ Vp updates register content (67ms)

    ✓ Vp does not append unnecessary newlines (first line) (44ms)

    ✓ Vp does not append unnecessary newlines (middle line) (46ms)

    ✓ Vp does not append unnecessary newlines (last line) (49ms)

    ✓ Exiting via <Esc> returns cursor to original column

    ✓ Exiting via `VV` returns cursor to original column

    ✓ Can handle 'J' when the selected area spans multiple lines

    Vim's EOL handling is weird

      ✓ delete through eol (97ms)

      ✓ join 2 lines by deleting through eol (129ms)

      ✓ d$ doesn't delete whole line (128ms)

      ✓ vd$ does delete whole line (79ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (52ms)

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (51ms)

      ✓ Can handle 'gj' (46ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key (43ms)

      ✓ Can handle d key (38ms)

      ✓ Can handle d key (38ms)

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up (44ms)

    search works in visual line mode

      ✓ Works with / (76ms)

      ✓ Works with ? (49ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (131ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (44ms)

      ✓ linewise visual put works also in the end of document (68ms)

      ✓ gv selects the last pasted text (which is shorter than original) (409ms)

      ✓ gv selects the last pasted text (which is longer than original) (432ms)

      ✓ gv selects the last pasted text (multiline) (185ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (93ms)

      ✓ multiline insert from top down selection (46ms)

      ✓ skips blank lines (40ms)

    can append text with A

      ✓ multiline append from bottom up selection (40ms)

      ✓ multiline append from top down selection

      ✓ skips blank lines (44ms)

      ✓ updates desired column correctly (44ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (63ms)

      ✓ ~/g~ on multiple lines (59ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste

    ✓ Can handle 'x' at end of line (64ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (92ms)

    ✓ Can handle 'cc' (47ms)

    ✓ Can handle 'Ncc' (42ms)

    ✓ Can handle 'yy' (42ms)

    ✓ Can handle 'D' (59ms)

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows

    ✓ Can handle 'D' with count when end position is on blank line

    ✓ Can handle 'DD' (38ms)

    ✓ Can handle 'C'

    ✓ Can handle 'NC' (43ms)

    ✓ Can handle 'NC' and put (39ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd'

    ✓ Can handle 'r
'

    ✓ Can handle '<Count>r
' (38ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (73ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~'

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (78ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (77ms)

    ✓ Can handle dot with I (69ms)

    ✓ Can repeat actions that require selections (47ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (65ms)

    ✓ Can repeat insert change and '<C-t>' (83ms)

    ✓ Can repeat change by `<C-a>` (55ms)

    ✓ Only one arrow key can be repeated in Insert Mode (56ms)

    ✓ Cached content change will be cleared by arrow keys (73ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[( (43ms)

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg'

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (45ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (45ms)

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word (42ms)

    ✓ Can run a forward search with count 1

    ✓ Can run a forward search with count 3

    ✓ Can run a forward search with count exceeding max number of matches

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search

    ✓ Can run a reverse search with count 1

    ✓ Can run a reverse search with count 3

    ✓ Can run a reverse search with count exceeding max number of matches

    ✓ cancelled search reverts to previous search state (53ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (47ms)

    ✓ Search offsets: b2 goes 2 to the right (44ms)

    ✓ Search offsets: b+3 goes 3 to the right (39ms)

    ✓ Search offsets: e goes to the end (44ms)

    ✓ Search offsets: character offset goes across line boundaries (48ms)

    ✓ Search offsets: 2 goes 2 down (42ms)

    ✓ Search offsets: -2 goes 2 up (48ms)

    ✓ maintains column position correctly (123ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind
      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward

      ✓ current sentence begin

      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document
    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (91ms)

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (97ms)

      ✓ search wraps around the start of the file

    wrapscan disabled

      ✓ search stops at the end of the file

      ✓ search stops at the start of the file (47ms)

  Multicursor

    ✓ can add multiple cursors below (125ms)

    ✓ can add multiple cursors above (134ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (316ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (372ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (332ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (334ms)

    ✓ dd works with multi-cursor (41ms)

    ✓ Vd works with multi-cursor

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip
    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (156ms)

    ✓ gcj comments in current and next line (114ms)

    ✓ block comment with motion (151ms)

    ✓ block comment in Visual Mode (299ms)

    ✓ comment in visual line mode (256ms)

    ✓ comment in visual block mode (245ms)

  format operator

    ✓ == formats current line (243ms)

    ✓ =$ formats entire line (174ms)

    ✓ =j formats two lines (217ms)

    ✓ 3=k formats three lines (100ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (101ms)

    ✓ =ip formats paragraph (145ms)

    ✓ format in visual mode (124ms)

  put operator

    ✓ basic put test (47ms)

    ✓ test yy end of line (77ms)

    ✓ test yy first line (41ms)

    ✓ test yy middle line (48ms)

    ✓ test yy with correct positon movement (45ms)

    ✓ test visual block single line yank p (65ms)

    ✓ test visual block single line yank P (46ms)

    ✓ test visual block single line delete p (54ms)

    ✓ test visual block single line delete P (53ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works

    ✓ g? in visual line mode works (133ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test

    ✓ shift left goto end test

    ✓ shift left goto line test

    ✓ shift right goto end test

    ✓ shift right goto line test (43ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word (143ms)

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (113ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word (40ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (50ms)

    ✓ Can handle 2s move

    ✓ Can handle f move (40ms)

    ✓ Can handle 2f move (39ms)

    ✓ Can handle F move (40ms)

    ✓ Can handle 2F move (44ms)

    ✓ Can handle t move (46ms)

    ✓ Can handle bd-t move (79ms)

    ✓ Can handle 2t move (64ms)

    ✓ Can handle bd-t2 move (43ms)

    ✓ Can handle T move

    ✓ Can handle 2T move (39ms)

    ✓ Can handle w move

    ✓ Can handle bd-w move (43ms)

    ✓ Can handle b move (48ms)

    ✓ Can handle e move

    ✓ Can handle bd-e move (76ms)

    ✓ Can handle ge move (40ms)

    ✓ Can handle n-char move (59ms)

    ✓ Can handle j move (42ms)

    ✓ Can handle k move (90ms)

    ✓ Can handle bd-jk move (1) (53ms)

    ✓ Can handle bd-jk move (2) (45ms)

    ✓ Can handle lineforward move (1)

    ✓ Can handle lineforward move (2)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.) (39ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (53ms)

    ✓ Replaces within inner Word (63ms)

    ✓ Replaces within '' (72ms)

    ✓ Replaces within '' including spaces (54ms)

    ✓ Replaces within () (53ms)

    ✓ Replaces within () including spaces (59ms)

    ✓ Replaces within a paragraph (46ms)

    ✓ Replaces using a specified register (84ms)

    ✓ Replaces within {} over multiple lines (87ms)

    ✓ Replaces a multiline register within {} over multiple lines (47ms)

    ✓ Replaces a multiline register within {} over multiple lines (52ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (61ms)

    ✓ grr replaces the entire line with the register (82ms)

    ✓ grr can replace multiple lines (43ms)

    ✓ Replaces in visual mode (68ms)

    ✓ Replaces in visual mode using a specified register (127ms)

    ✓ Replaces in visual line mode (118ms)

    ✓ grj is linewise (43ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion (70ms)

    ✓ Can handle s; motion

    ✓ Can handle s, motion

    ✓ Can handle S; motion (38ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (40ms)

    ✓ Can handle single letter <operator>Z motion

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion (49ms)

    ✓ Can handle single letter S, motion (68ms)

    ✓ Can handle multiline single char <number>s motion

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward

    ✓ Can go back using <C-o> when repeating forward movement

    ✓ Can go back using <C-o> when repeating backward movement (59ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (46ms)

    ✓ sneakReplacesF backward (47ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (114ms)

    ✓ 'ysiw(' surrounds word with space (106ms)

    ✓ 'ysw)' surrounds word without space (66ms)

    ✓ 'ysw(' surrounds word with space (107ms)

    ✓ 'ysaw)' surrounds word without space (42ms)

    ✓ 'ysaw(' surrounds word with space (96ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (57ms)

    ✓ 'ysiw<' surrounds word with tags (49ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (63ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (72ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (61ms)

    ✓ change surround (58ms)

    ✓ change surround with two pairs of quotes (62ms)

    ✓ change surround with two pairs of parens (78ms)

    ✓ change surround with alias (85ms)

    ✓ change surround to tags (83ms)

    ✓ delete surround (41ms)

    ✓ delete surround with quotes (105ms)

    ✓ delete surround with nested of quotes

    ✓ delete surround with inconsistent quotes (46ms)

    ✓ delete surround with mixed quotes (42ms)

    ✓ delete surround with empty quotes cursor at start (82ms)

    ✓ delete surround with empty quotes cursor at end (81ms)

    ✓ don't delete surround if cursor is after closing match (83ms)

    ✓ delete surround if cursor is before opening match (39ms)

    ✓ delete surround with two pairs of parens (81ms)

    ✓ delete surround with alias (61ms)

    ✓ delete surround with tags (56ms)

    ✓ change surround brackets at end of line (45ms)

    ✓ changing brackets with surround works again (106ms)

    ✓ change surround with tags that contain an attribute and preserve them (70ms)

    ✓ change surround with tags that contain an attribute and remove them (70ms)

  register

    ✓ Can copy to a register (68ms)

    ✓ Can use two registers together (140ms)

    ✓ Can use black hole register (76ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (359ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (264ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (276ms)

    ✓ Register '1'-'9' stores delete content (313ms)

    ✓ "A appends linewise text to "a (290ms)

    ✓ "A appends character wise text to "a (338ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (302ms)

    ✓ Small deletion using Del is stored in small delete register (217ms)

    ✓ Small deletion using X is stored in small delete register (236ms)

    ✓ Search register (/) is set by forward search (409ms)

    ✓ Search register (/) is set by backward search (364ms)

    ✓ Search register (/) is set by star search (295ms)

    ✓ Command register (:) is set by command line (103ms)

    ✓ Read-only registers cannot be written to (258ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character>

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward (43ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle (42ms)

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line

      ✓ move one sentence backward - multiline - previous line - period

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix
      ✓ can separate relative path on posix
    resolveUri

      ✓ posix

      ✓ win32

  1383 passing (4m)

  4 pending

  21 failing
  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1942:3)

  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)

  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)

  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)

  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:356:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)

  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:850:5)

  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:857:5)

  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)

  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)

  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three four five.
      + expected - actual

      -one  three four five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:162:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:178:3)

  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)

  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)

  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
changes detected (content changed, file is created, or file is deleted):\n/home/travis/.npm/anonymous-cli-metrics.json
/home/travis/.npm/_cacache/index-v5/05/f2/5efeceaf581d5b606bdafad32623ddd75352cb1942290a9cd93d48923be6
/home/travis/.npm/_cacache/index-v5/34/8e/30c54cce758990bcd1b33114c4aa8a9e5a25c152ac39d9feab22b7e13e00\n
changes detected, packing new archive
uploading PR.4583/cache--linux-xenial-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855--node-12.tgz
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-27T01:10:08.483Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information
(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6485) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6485) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive

    ✓ couldActionApply 2D keys negative
    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative

    ✓ doesActionApply 2D keys positive
    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (49ms)

    ✓ command <C-w> can remove word in search mode (41ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (63ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character (44ms)

    ✓ <C-b> puts cursor at start of command line (39ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (42ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (65ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (88ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (114ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (98ms)

    ✓ <C-p> go to previous search string (44ms)

  cursor location

    ✓ cursor location in command line (40ms)

    ✓ cursor location in search

  HistoryFile

    ✓ add command (38ms)

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ file system (43ms)

    ✓ change configuration.history (74ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number
    ✓ can lex plus
    ✓ can lex minus
    ✓ can lex forward search
    ✓ can lex forward search escaping
    ✓ can lex reverse search
    ✓ can lex reverse search escaping
    ✓ can lex command name
    ✓ can lex command args
    ✓ can lex command args with leading whitespace
    ✓ can lex long command name and args
    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1294ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot

    ✓ can parse left - dollar

    ✓ can parse left - percent
    ✓ can parse separator - comma

    ✓ can parse right - dollar

  command line scanner

    ✓ ctor
    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF
    ✓ can scan
    ✓ can emit
    ✓ can ignore

    ✓ can skip whitespace
    ✓ can skip whitespace with one char before EOF
    ✓ can skip whitespace at EOF
    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF
    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (541ms)

    ✓ :smile editor contains smile text (548ms)

  Basic sort

    ✓ Sort whole file, asc (126ms)

    ✓ Sort whole file, asc, ignoreCase (100ms)

    ✓ Sort whole file, dsc (131ms)

    ✓ Sort whole file, dsc, ignoreCase (121ms)

    ✓ Sort range, asc (154ms)

    ✓ Sort range, asc, ignoreCase (146ms)

    ✓ Sort range, dsc (142ms)

    ✓ Sort range, dsc, ignoreCase (124ms)

    ✓ Sort whole file, asc, unique (421ms)

  Horizontal split

    ✓ :sp creates a second split (90ms)

    ✓ :split creates a second split (83ms)

    ✓ :new creates a second split (240ms)

  :close args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :quit args parser

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'

      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (58ms)

    ✓ Replace with `g` flag (57ms)

    ✓ Replace with flags AND count (112ms)

    ✓ Replace with `c` flag (62ms)

    ✓ Replace with `gc` flag (91ms)

    ✓ Replace across all lines (92ms)

    ✓ Replace on specific single line (64ms)

    ✓ Replace on current line using dot (69ms)

    ✓ Replace single relative line using dot and plus (66ms)

    ✓ Replace across specific line range (64ms)

    ✓ Replace across relative line range using dot, plus, and minus (108ms)

    ✓ Replace across relative line range using numLines+colon shorthand (103ms)

    ✓ Repeat replacement across relative line range (121ms)

    ✓ Replace with range AND count but no flags (78ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (69ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (166ms)

    ✓ Undocumented: trailing operators use 1 as RHS (71ms)

    ✓ Replace specific single equal lines (91ms)

    ✓ Replace current line with no active selection (114ms)

    ✓ Replace text in selection (129ms)

    ✓ Substitute support marks (114ms)

    Effects of gdefault=true

      ✓ Replace all matches in the line (55ms)

      ✓ Replace with `g` flag inverts global flag (61ms)

      ✓ Replace with `c` flag inverts global flag (67ms)

      ✓ Replace multiple lines (81ms)

      ✓ Replace across specific lines (94ms)

      ✓ Replace current line with no active selection (147ms)

      ✓ Replace text in selection (105ms)

      ✓ Substitute support marks (96ms)

      ✓ Substitute with escaped delimiter (79ms)
    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (235ms)

      ✓ Substitute with previous search using # (226ms)

      ✓ Substitute with previous search using / (236ms)

      ✓ Substitute with parameters should update search state (90ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (350ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (144ms)

      ✓ Substitute repeat previous should accept flags (81ms)

      ✓ Substitute with empty search string should use last searched pattern (316ms)

      ✓ Ampersand (&) should repeat the last substitution (52ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (62ms)

    ✓ tabe with current file path does nothing (52ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end

    ✓ command line file navigate tab completion (61ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (71ms)

    ✓ command line file tab completion with space in file path (151ms)

  Vertical split

    ✓ :vs creates a second split (65ms)

    ✓ :vsp creates a second split (72ms)

    ✓ :vsplit creates a second split (93ms)

    ✓ :vnew creates a second split (222ms)

    ✓ :vne creates a second split (257ms)

  Basic write-quit

    ✓ Run write and quit (192ms)
  Provide line completions
    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (60ms)

      ✓ Can complete lines in file with different indentation (62ms)

      ✓ Returns no completions for unmatched line (64ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation
    ✓ Normalize
  Remapper

    ✓ getLongestedRemappedKeySequence (90ms)

    ✓ getMatchingRemap (67ms)

    ✓ jj -> <Esc> through modehandler (119ms)

    ✓ 0 -> :wq through modehandler (87ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (89ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (80ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (115ms)

    ✓ d -> black hole register delete in normal mode through modehandler (141ms)

    ✓ d -> black hole register delete in normal mode through modehandler (130ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (147ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command

    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines

  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers
    ✓ all defined configurations in package.json have handlers
  historyTracker unit tests
    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (154ms)

        ✓ Can track jumps for keys: /b<CR>n (51ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (67ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o> (38ms)

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>%

[main 2020-04-27T01:10:38.489Z] update#setState checking for updates

        ✓ Can track jumps for keys: j%%<C-o>gg (44ms)

[main 2020-04-27T01:10:38.577Z] update#setState idle

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (43ms)

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (83ms)

        ✓ Can enter number to jump back multiple times (51ms)

        ✓ Can track one-line `` jumps (61ms)

        ✓ Can track one-line double `` jumps (66ms)

        ✓ Can track one-line '' jumps (81ms)

        ✓ Can track one-line double '' jumps (79ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (71ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (102ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (171ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (88ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (91ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (155ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (156ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (178ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (180ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (52ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (125ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (152ms)

    ✓ Can repeat last invoked macro (215ms)

    ✓ Can play back with count (380ms)

    ✓ Can play back with count, abort when a motion fails (433ms)

    ✓ Repeat change on contiguous lines (152ms)

    ✓ Append command to a macro (173ms)

    ✓ Can record Ctrl Keys and repeat (146ms)

    ✓ Can execute macros with dot commands properly (131ms)

    ✓ : (command) register can be used as a macro (75ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (161ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (50ms)

    ✓ <C-c> can exit insert (76ms)

    ✓ <Esc> can exit insert (47ms)

    ✓ Stay in insert when entering characters (78ms)

    ✓ Can handle 'O' (55ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line (40ms)

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (96ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (73ms)

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode (47ms)

    ✓ Delete works at line end (45ms)

    ✓ Delete works at end of file

    ✓ Delete works with repeat (152ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (71ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (61ms)

    ✓ Can perform insert command prefixed with count

    ✓ Can perform append command prefixed with count (58ms)

    ✓ Can perform insert at start of line command prefixed with count (55ms)

    ✓ Can perform append to end of line command prefixed with count (38ms)

    ✓ Can perform change char (s) command prefixed with count (165ms)

    ✓ Can perform command prefixed with count with <C-[> (50ms)

    ✓ Can handle 'o' with count (86ms)

    ✓ Can handle 'O' with count (80ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (98ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw (38ms)

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd (48ms)

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (46ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (43ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (50ms)

    ✓ Can handle 'dl' at end of line (66ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'd/' (64ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (66ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (39ms)

    ✓ Can handle 'cw' (53ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (59ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (73ms)

    ✓ Can handle 'ciw' on blanks (63ms)

    ✓ Can handle 'caw' (53ms)

    ✓ Can handle 'caw' on first letter (63ms)

    ✓ Can handle 'caw' on blanks (66ms)

    ✓ Can handle 'caw' on blanks (39ms)

    ✓ Can handle 'cae'

    ✓ Can handle 'cae' with caret at document's top

    ✓ Can handle 'cae' with caret at document's end (44ms)

    ✓ Can handle 'cie' on blank content (49ms)

    ✓ Can handle 'cie' with leading space (39ms)

    ✓ Can handle 'cie' with trailing space

    ✓ Can handle 'cie' with both leading and trailing space (50ms)

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)' (38ms)

    ✓ Can handle count prefixed 'ca)'

    ✓ Can handle 'ca(' spanning multiple lines

    ✓ Can handle 'cab' spanning multiple lines (45ms)

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no ()

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket (44ms)

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote (46ms)

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word

    ✓ Can handle 'ca"' starting on the opening quote

    ✓ Can handle 'ci"' with escaped quotes

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote

    ✓ Can handle 'ca"' starting on the closing quote (38ms)

    ✓ Can handle 'ci"' with complex escape sequences

    ✓ Can pick the correct open quote between two strings for 'ci"'

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (93ms)

    ✓ can handle ck (70ms)

    ✓ can handle c2j (118ms)

    ✓ can handle c2k (67ms)

    ✓ can handle cj on last line (71ms)

    ✓ can handle ck on first line (61ms)

    ✓ can handle c2j on last line (72ms)

    ✓ can handle c2k on first line (57ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (173ms)

    ✓ Can handle 'daw' on word with trailing spaces (42ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word (57ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (58ms)

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace

    ✓ Can handle 'daw' around word at end of line

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix

    ✓ Can handle 'daW' on word with numeric prefix and across lines

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (47ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (43ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line

    ✓ Can handle 'diw' on word with numeric prefix and across lines (43ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines (40ms)

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle 'dae'

    ✓ Can handle 'dae' with caret at document's top

    ✓ Can handle 'dae' with caret at document's end

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space

    ✓ Can handle 'die' with trailing space

    ✓ Can handle 'die' with both leading and trailing space

    ✓ Can handle 'die' on blank content (48ms)

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (38ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line (42ms)

    ✓ Select sentence with trailing spaces

    ✓ Select sentence with leading spaces

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences (45ms)

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn

    ✓ I should updated desiredColumn (50ms)

    ✓ leaving insert mode should update desired column when entered with a (78ms)

    ✓ leaving insert mode should update desired column when entered with i (56ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy'

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (49ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (41ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (40ms)

    ✓ Can handle 'gP' after 'yy'

    ✓ Can handle 'gP' after 'Nyy' (45ms)

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines

    ✓ Can handle ']p' after yy

    ✓ Can handle ']p' after 'Nyy' (46ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (49ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (39ms)

    ✓ Can handle '[p' after yy (96ms)

    ✓ Can handle '[p' after 'Nyy'

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (38ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (41ms)

    ✓ Can handle 'p' after y'a (48ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket

    ✓ Can handle pasting in visual mode over selection (122ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (68ms)

    ✓ gI works correctly (50ms)

    ✓ gi works correctly (89ms)

    ✓ `. works correctly (64ms)

    ✓ '. works correctly (49ms)

    ✓ g; works correctly (87ms)

    ✓ g, works correctly (84ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly (54ms)

    ✓ gq handles spaces before single line comments correctly (38ms)

    ✓ gq handles tabs before single line comments correctly (43ms)

    ✓ Can handle space

    ✓ Can handle space

    ✓ Undo 1 (78ms)

    ✓ Undo 2 (87ms)

    ✓ Undo cursor (123ms)

    ✓ Undo cursor 2 (119ms)

    ✓ Undo cursor 3 (101ms)

    ✓ Undo with movement first (118ms)

    ✓ Can handle 'U' (48ms)

    ✓ Can handle 'U' for multiple changes (77ms)

    ✓ Can handle 'U' for new line below (80ms)

    ✓ Can handle 'U' for new line above (95ms)

    ✓ Can handle 'U' for consecutive changes only (146ms)

    ✓ Can handle 'u' to undo 'U' (52ms)

    ✓ Can handle 'U' to undo 'U' (51ms)

    ✓ Can handle 'u' after :s/abc/def (68ms)

    ✓ Redo (105ms)

    ✓ Redo (87ms)

    ✓ Redo (118ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle guae

    ✓ Can handle guie

    ✓ Can handle gUw

    ✓ Can handle gUae (45ms)

    ✓ Can handle gUie

    ✓ Can handle u over line breaks (47ms)

    ✓ can handle s in visual mode (49ms)

    ✓ can handle p with selection (59ms)

    ✓ can handle P with selection (57ms)

    ✓ can handle p in visual to end of line (113ms)

    ✓ can repeat backspace twice (68ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count (39ms)

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal

    1) can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y

    ✓ can do [count]Y if count is larger than EOF

    ✓ Can do S

    ✓ / does not affect mark (45ms)

    ✓ / can search with regex (41ms)

    ✓ / can search with newline (47ms)

    ✓ / can search through multiple newlines (67ms)

    ✓ / matches ^ per line

    ✓ / matches $ per line

    ✓ Can search for forward slash (48ms)

    ✓ Can search backward for question mark (39ms)

    ✓ /\c forces case insensitive search

    ✓ /\C forces case sensitive search (41ms)

    ✓ <BS> deletes the last character in search in progress mode (46ms)

    ✓ <S-BS> deletes the last character in search in progress mode

    ✓ <C-h> deletes the last character in search in progress mode (41ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag (49ms)

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag

    ✓ Can do cit on a multiline tag with nested tags (45ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (57ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (236ms)

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line

    ✓ cc copies linewise (43ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (63ms)

    ✓ '] go to the end of the previously operated or put text (61ms)

    ✓ `[ go to the start of the previously operated or put text (67ms)

    ✓ '[ go to the start of the previously operated or put text (76ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning (59ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle

    can handle gn

      ✓ gn selects the next match text (245ms)

      ✓ gn selects the current word at |hello (231ms)

      ✓ gn selects the current word at h|ello (252ms)

      ✓ gn selects the current word at hel|lo (255ms)

      ✓ gn selects the current word at hell|o (272ms)

      ✓ gn selects the next word at hello| (263ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (54ms)

      ✓ dgn deletes the current word when cursor is at |hello (57ms)

      ✓ dgn deletes the current word when cursor is at h|ello (63ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (66ms)

      ✓ dgn deletes the current word when cursor is at hell|o (58ms)

      ✓ dgn deletes the next word when cursor is at hello| (77ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (70ms)

      ✓ cgn deletes the current word when cursor is at |hello (54ms)

      ✓ cgn deletes the current word when cursor is at h|ello (61ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (62ms)

      ✓ cgn deletes the current word when cursor is at hell|o (72ms)

      ✓ cgn deletes the next word when cursor is at hello| (69ms)

    can handle gN

      ✓ gN selects the previous match text (254ms)

      ✓ gN selects the current word at hell|o (247ms)

      ✓ gN selects the current word at hel|lo (269ms)

      ✓ gN selects the current word at h|ello (284ms)

      ✓ gN selects the current word at |hello (259ms)

      ✓ gN selects the previous word at | hello (300ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (63ms)

      ✓ dgN deletes the current word when cursor is at hell|o (84ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (75ms)

      ✓ dgN deletes the current word when cursor is at h|ello (65ms)

      ✓ dgN deletes the current word when cursor is at |hello (65ms)

      ✓ dgN deletes the previous word when cursor is at | hello (75ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (56ms)

      ✓ cgN deletes the current word when cursor is at hell|o (67ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (68ms)

      ✓ cgN deletes the current word when cursor is at h|ello (80ms)

      ✓ cgN deletes the current word when cursor is at |hello (79ms)

      ✓ cgN deletes the previous word when cursor is at | hello (318ms)

    marks

      ✓ capital marks can change the editors active document (127ms)

      ✓ can jump to lowercase mark

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R

    ✓ Can handle R past current line

    ✓ Can handle R and exit Replace Mode (47ms)

    ✓ Can handle R across lines (63ms)

    ✓ Can handle R across lines and exit Replace Mode (85ms)

    ✓ Can handle R with {count} (87ms)

    ✓ Can handle backspace (42ms)

    ✓ Can handle backspace (60ms)

    ✓ Can handle backspace across lines (117ms)

    ✓ Can handle arrows (47ms)

    ✓ Can handle . (98ms)

    ✓ Can handle . across lines (138ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (151ms)

    ✓ Can handle wd (273ms)

    ✓ Can handle x (121ms)

    ✓ Can handle x across a selection (136ms)

    ✓ Can do vwd in middle of sentence (177ms)

    ✓ Can do vwd in middle of sentence (147ms)

    ✓ Can do vwd multiple times (214ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (143ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (42ms)

    ✓ handles case where we delete over a newline (148ms)

    ✓ handles change operator (130ms)

    ✓ Can do vat on multiple matching tags (61ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (65ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (44ms)

    ✓ Repeat-prefixed vat does not bleed below (48ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis (39ms)

    ✓ Can do vi) on multiple matching parens (63ms)

    ✓ Can do va) on a matching parenthesis

    ✓ Can do va) on multiple matching parens

    ✓ Failed va) does not expand or move selection, remains in visual mode

    ✓ Repeat-prefixed va) does not bleed below (45ms)

    ✓ Can do va} on a matching bracket as first character

    ✓ Can do va} on multiple matching brackets (49ms)

    ✓ Can do vi( on a matching bracket near first character

    ✓ Can do vi{ on outer pair of nested braces (40ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (44ms)

    ✓ Can do va] on multiple matching brackets (48ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (42ms)

    ✓ Repeat-prefixed vaf does not bleed below (38ms)

    ✓ vaf only expands to enclosing pairs (42ms)

    ✓ Can use . to repeat indent in visual (57ms)

    ✓ Can do v_x to delete to first char

    ✓ Can do vg_x to delete to last char with no EOL (45ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (50ms)

    ✓ Can do v$x to delete to last char including EOL (39ms)

    ✓ Can do gv to reselect previous selection (55ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (46ms)

    Vim's EOL handling is weird

      ✓ delete through eol (135ms)

      ✓ join 2 lines by deleting through eol (112ms)

      ✓ d$ doesn't delete whole line (84ms)

      ✓ vd$ does delete whole line (113ms)

      ✓ Paste over selection copies the selection (72ms)

      ✓ Paste over selection copies the selection linewise (89ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (100ms)

      ✓ Can handle <down> key

      ✓ Can handle <left> key (45ms)

      ✓ Can handle <right> key

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (47ms)

      ✓ Can handle 'gj' (40ms)

      - Preserves cursor position when handling 'gk'
      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces

      ✓ Can handle 'vawd' on word with trailing spaces (62ms)

      ✓ Can handle 'vawd' on word with leading spaces (44ms)

      ✓ Can handle 'vawd' on word with numeric prefix (43ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (39ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces (38ms)

      ✓ Can handle 'vaWd' on word with numeric prefix (40ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (89ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (40ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (40ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (50ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (46ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (38ms)

      ✓ Can handle 'vaWd' on word with leading spaces (46ms)

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (44ms)

      ✓ Can handle 'Y' in visual mode (43ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (43ms)

      ✓ Select sentence with leading spaces in visual mode (40ms)

      ✓ Select multiple sentences in visual mode (47ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (125ms)

      ✓ Select inner sentence with leading spaces in visual mode (64ms)

      ✓ Select spaces between sentences in visual mode

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (87ms)

      ✓ Can do vat on a matching tag (51ms)

    handles replace in visual mode

      ✓ Can do a single line replace (40ms)

      ✓ Can do a multi line replace

    D command will remove all selected lines

      ✓ D deletes all selected lines (44ms)

      ✓ D deletes the current line (55ms)

    handles indent blocks in visual mode

      ✓ Can do vai

      ✓ Can do vii (44ms)

      ✓ Doesn't naively select the next line (49ms)

      ✓ Searches backwards if cursor line is empty (48ms)

      ✓ Can do vaI (43ms)

    visualstar

      ✓ Works with *

      ✓ Works with # (42ms)

    search works in visual mode

      ✓ Works with / (51ms)

      ✓ Works with ? (59ms)

      ✓ Selects correct range (126ms)

    X will delete linewise

      ✓ normal selection

      ✓ normal selection

    C will delete linewise

      ✓ normal selection

      ✓ normal selection (38ms)

    R will delete linewise

      ✓ normal selection (48ms)

      ✓ normal selection (48ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (78ms)

      ✓ upward selection (96ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (60ms)

      ✓ multiline indent bottom up selection (50ms)

      ✓ repeat multiline indent top down selection (127ms)

      ✓ repeat multiline indent bottom up selection (56ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (40ms)

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (51ms)

      ✓ repeat multiline outdent bottom up selection (64ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (168ms)

    vi{ will go to end of second to last line

      ✓ select (57ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode (75ms)

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (393ms)

      ✓ gv selects the last pasted text (which is longer than original) (415ms)

      ✓ gv selects the last pasted text (multiline) (503ms)

    can handle gn

      ✓ gn selects the next match text (249ms)

      ✓ gn selects the current word at |hello (227ms)

      ✓ gn selects the current word at h|ello (249ms)

      ✓ gn selects the current word at hel|lo (264ms)

      ✓ gn selects the next word at hell|o (252ms)

      ✓ gn selects the next word at hello| (256ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (49ms)

      ✓ multiline insert from top down selection (47ms)

      ✓ skips blank lines (45ms)

    can append text with A

      ✓ multiline append from bottom up selection (38ms)

      ✓ multiline append from top down selection

      ✓ skips blank lines (39ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (57ms)

      ✓ U/gU across a selection (84ms)

      ✓ U/gU across a selection (reverse) (70ms)

      ✓ u/gu on single character (82ms)

      ✓ u/gu across a selection (76ms)

      ✓ u/gu across a selection (reverse) (65ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (115ms)

      ✓ ~/g~ across a selection (85ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (69ms)

    ✓ Can handle A backwards select (53ms)

    ✓ Can handle I forward select (60ms)

    ✓ Can handle I backwards select (58ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (61ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (78ms)

    ✓ Can handle c forward select (65ms)

    ✓ Can handle c backwards select (69ms)

    ✓ Can handle C (64ms)

    2) Can do a multi line replace

    ✓ Can handle 'D' (41ms)

    3) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (51ms)

    ✓ Properly add to end of lines $ then j (60ms)

    ✓ o works in visual block mode (47ms)

    4) d deletes block

    5) x deletes block

    6) X deletes block

    ✓ Select register using " works in visual block mode (75ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (46ms)

    ✓ Can handle 'J' when the visual block spans multiple lines (47ms)

    ✓ Can handle 'J' when start position of the visual block is below the stop (43ms)

    ✓ Can handle ~/g~ in visual block mode (84ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (184ms)

  Mode Visual Line

    ✓ can be activated

    ✓ <count>V selects <count> lines (369ms)

    ✓ Can handle w (183ms)

    ✓ Can handle wd (130ms)

    ✓ Can handle x (243ms)

    ✓ Can handle x across a selection (141ms)

    ✓ Can do vwd in middle of sentence (150ms)

    ✓ Can do vwd in middle of sentence (161ms)

    ✓ Can do vwd multiple times (217ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (157ms)

    ✓ handles case where we delete over a newline (199ms)

    ✓ handles change operator (124ms)

    ✓ Vp updates register content (67ms)

    ✓ Vp does not append unnecessary newlines (first line) (44ms)

    ✓ Vp does not append unnecessary newlines (middle line) (46ms)

    ✓ Vp does not append unnecessary newlines (last line) (49ms)

    ✓ Exiting via <Esc> returns cursor to original column

    ✓ Exiting via `VV` returns cursor to original column

    ✓ Can handle 'J' when the selected area spans multiple lines

    Vim's EOL handling is weird

      ✓ delete through eol (97ms)

      ✓ join 2 lines by deleting through eol (129ms)

      ✓ d$ doesn't delete whole line (128ms)

      ✓ vd$ does delete whole line (79ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (52ms)

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (51ms)

      ✓ Can handle 'gj' (46ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key (43ms)

      ✓ Can handle d key (38ms)

      ✓ Can handle d key (38ms)

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace

      ✓ Can do a multi visual line replace from the bottom up (44ms)

    search works in visual line mode

      ✓ Works with / (76ms)

      ✓ Works with ? (49ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (131ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (44ms)

      ✓ linewise visual put works also in the end of document (68ms)

      ✓ gv selects the last pasted text (which is shorter than original) (409ms)

      ✓ gv selects the last pasted text (which is longer than original) (432ms)

      ✓ gv selects the last pasted text (multiline) (185ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (93ms)

      ✓ multiline insert from top down selection (46ms)

      ✓ skips blank lines (40ms)

    can append text with A

      ✓ multiline append from bottom up selection (40ms)

      ✓ multiline append from top down selection

      ✓ skips blank lines (44ms)

      ✓ updates desired column correctly (44ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (63ms)

      ✓ ~/g~ on multiple lines (59ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste

    ✓ Can handle 'x' at end of line (64ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (92ms)

    ✓ Can handle 'cc' (47ms)

    ✓ Can handle 'Ncc' (42ms)

    ✓ Can handle 'yy' (42ms)

    ✓ Can handle 'D' (59ms)

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows

    ✓ Can handle 'D' with count when end position is on blank line

    ✓ Can handle 'DD' (38ms)

    ✓ Can handle 'C'

    ✓ Can handle 'NC' (43ms)

    ✓ Can handle 'NC' and put (39ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd'

    ✓ Can handle 'r
'

    ✓ Can handle '<Count>r
' (38ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (73ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~'

    ✓ Can handle '<BS>' in insert mode

    ✓ Can handle undo with P (78ms)

    7) Can handle 'ge' in multiple lines case1

    8) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (77ms)

    ✓ Can handle dot with I (69ms)

    ✓ Can repeat actions that require selections (47ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (65ms)

    ✓ Can repeat insert change and '<C-t>' (83ms)

    ✓ Can repeat change by `<C-a>` (55ms)

    ✓ Only one arrow key can be repeated in Insert Mode (56ms)

    ✓ Cached content change will be cleared by arrow keys (73ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[( (43ms)

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg'

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    9) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f'

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice

    ✓ Can handle 'F' and find back search

    ✓ Can handle 'f' and multiple back searches (45ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice (45ms)

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word (42ms)

    ✓ Can run a forward search with count 1

    ✓ Can run a forward search with count 3

    ✓ Can run a forward search with count exceeding max number of matches

    ✓ Can run a reverse search

    ✓ Can run a reverse and find next search

    ✓ Can run a reverse search with count 1

    ✓ Can run a reverse search with count 3

    ✓ Can run a reverse search with count exceeding max number of matches

    ✓ cancelled search reverts to previous search state (53ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (47ms)

    ✓ Search offsets: b2 goes 2 to the right (44ms)

    ✓ Search offsets: b+3 goes 3 to the right (39ms)

    ✓ Search offsets: e goes to the end (44ms)

    ✓ Search offsets: character offset goes across line boundaries (48ms)

    ✓ Search offsets: 2 goes 2 down (42ms)

    ✓ Search offsets: -2 goes 2 up (48ms)

    ✓ maintains column position correctly (123ms)

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'

    - Preserves cursor position when handling 'gj'

    doesn't update desiredColumn when it shouldn't

      10) Preserves desired cursor position when pressing zz

      11) Preserves desired cursor position when pressing zt

      12) Preserves desired cursor position when pressing zb

      13) Preserves desired cursor position when pressing <C-e>

      14) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line

      ✓ last WORD should move to next line skips whitespace only line

    WORD left

      ✓ move cursor WORD left across spaces

      ✓ move cursor WORD left within WORD

      ✓ first WORD should move to previous line, beginning of last WORD

      ✓ first WORD should move to previous line, stops on empty line

      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right

      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)

      ✓ move cursor word right stops at different kind of character (katakana -> ascii)

      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)

      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word

      ✓ move cursor word right recognizes a latin-1 symbol as punctuation

      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word

    word left

      ✓ move cursor word left across the different char kind
      ✓ move cursor word left within the same char kind

      ✓ move cursor word left across spaces on non-ascii text

      ✓ move cursor word left within word on non-ascii text

      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward

      ✓ next concrete sentence

      ✓ next sentence that ends with paragraph ending

      ✓ next sentence when cursor is at the end of previous paragraph

      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward

      ✓ current sentence begin

      ✓ sentence forward when cursor is at the beginning of the second sentence

      ✓ current sentence begin with no concrete sentense inside

      ✓ current sentence begin when it's not the same as current paragraph begin

      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document
    paragraph up

      ✓ move up short paragraph

      ✓ move up longer paragraph

      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line (91ms)

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (97ms)

      ✓ search wraps around the start of the file

    wrapscan disabled

      ✓ search stops at the end of the file

      ✓ search stops at the start of the file (47ms)

  Multicursor

    ✓ can add multiple cursors below (125ms)

    ✓ can add multiple cursors above (134ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (316ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (372ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (332ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (334ms)

    ✓ dd works with multi-cursor (41ms)

    ✓ Vd works with multi-cursor

    15) <C-v>d works with multi-cursor

    16) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    17) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip
    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5931) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (156ms)

    ✓ gcj comments in current and next line (114ms)

    ✓ block comment with motion (151ms)

    ✓ block comment in Visual Mode (299ms)

    ✓ comment in visual line mode (256ms)

    ✓ comment in visual block mode (245ms)

  format operator

    ✓ == formats current line (243ms)

    ✓ =$ formats entire line (174ms)

    ✓ =j formats two lines (217ms)

    ✓ 3=k formats three lines (100ms)

    18) =gg formats to top of file

    ✓ =G formats to bottom of file (101ms)

    ✓ =ip formats paragraph (145ms)

    ✓ format in visual mode (124ms)

  put operator

    ✓ basic put test (47ms)

    ✓ test yy end of line (77ms)

    ✓ test yy first line (41ms)

    ✓ test yy middle line (48ms)

    ✓ test yy with correct positon movement (45ms)

    ✓ test visual block single line yank p (65ms)

    ✓ test visual block single line yank P (46ms)

    ✓ test visual block single line delete p (54ms)

    ✓ test visual block single line delete P (53ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works

    ✓ g? in visual line mode works (133ms)

    19) g? in visual block mode works

  shift operator

    ✓ basic shift left test

    ✓ shift left goto end test

    ✓ shift left goto line test

    ✓ shift right goto end test

    ✓ shift right goto line test (43ms)

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin

    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word (143ms)

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (113ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word

    handles di<leader>w

      ✓ delete from start of camelWord

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word

      ✓ delete two words from camel_word (40ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (50ms)

    ✓ Can handle 2s move

    ✓ Can handle f move (40ms)

    ✓ Can handle 2f move (39ms)

    ✓ Can handle F move (40ms)

    ✓ Can handle 2F move (44ms)

    ✓ Can handle t move (46ms)

    ✓ Can handle bd-t move (79ms)

    ✓ Can handle 2t move (64ms)

    ✓ Can handle bd-t2 move (43ms)

    ✓ Can handle T move

    ✓ Can handle 2T move (39ms)

    ✓ Can handle w move

    ✓ Can handle bd-w move (43ms)

    ✓ Can handle b move (48ms)

    ✓ Can handle e move

    ✓ Can handle bd-e move (76ms)

    ✓ Can handle ge move (40ms)

    ✓ Can handle n-char move (59ms)

    ✓ Can handle j move (42ms)

    ✓ Can handle k move (90ms)

    ✓ Can handle bd-jk move (1) (53ms)

    ✓ Can handle bd-jk move (2) (45ms)

    ✓ Can handle lineforward move (1)

    ✓ Can handle lineforward move (2)

    20) Can handle linebackward move (1)

    21) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^)

    ✓ Can handle searching for dot (.) (39ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (53ms)

    ✓ Replaces within inner Word (63ms)

    ✓ Replaces within '' (72ms)

    ✓ Replaces within '' including spaces (54ms)

    ✓ Replaces within () (53ms)

    ✓ Replaces within () including spaces (59ms)

    ✓ Replaces within a paragraph (46ms)

    ✓ Replaces using a specified register (84ms)

    ✓ Replaces within {} over multiple lines (87ms)

    ✓ Replaces a multiline register within {} over multiple lines (47ms)

    ✓ Replaces a multiline register within {} over multiple lines (52ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (61ms)

    ✓ grr replaces the entire line with the register (82ms)

    ✓ grr can replace multiple lines (43ms)

    ✓ Replaces in visual mode (68ms)

    ✓ Replaces in visual mode using a specified register (127ms)

    ✓ Replaces in visual line mode (118ms)

    ✓ grj is linewise (43ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion (70ms)

    ✓ Can handle s; motion

    ✓ Can handle s, motion

    ✓ Can handle S; motion (38ms)

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion (40ms)

    ✓ Can handle single letter <operator>Z motion

    ✓ Can handle single letter s; motion

    ✓ Can handle single letter s, motion

    ✓ Can handle single letter S; motion (49ms)

    ✓ Can handle single letter S, motion (68ms)

    ✓ Can handle multiline single char <number>s motion

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward

    ✓ Can go back using <C-o> when repeating forward movement

    ✓ Can go back using <C-o> when repeating backward movement (59ms)

  sneakReplacesF

    ✓ sneakReplacesF forward (46ms)

    ✓ sneakReplacesF backward (47ms)

  surround plugin

    ✓ 'ysiw)' surrounds word without space (114ms)

    ✓ 'ysiw(' surrounds word with space (106ms)

    ✓ 'ysw)' surrounds word without space (66ms)

    ✓ 'ysw(' surrounds word with space (107ms)

    ✓ 'ysaw)' surrounds word without space (42ms)

    ✓ 'ysaw(' surrounds word with space (96ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (57ms)

    ✓ 'ysiw<' surrounds word with tags (49ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (63ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (72ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (61ms)

    ✓ change surround (58ms)

    ✓ change surround with two pairs of quotes (62ms)

    ✓ change surround with two pairs of parens (78ms)

    ✓ change surround with alias (85ms)

    ✓ change surround to tags (83ms)

    ✓ delete surround (41ms)

    ✓ delete surround with quotes (105ms)

    ✓ delete surround with nested of quotes

    ✓ delete surround with inconsistent quotes (46ms)

    ✓ delete surround with mixed quotes (42ms)

    ✓ delete surround with empty quotes cursor at start (82ms)

    ✓ delete surround with empty quotes cursor at end (81ms)

    ✓ don't delete surround if cursor is after closing match (83ms)

    ✓ delete surround if cursor is before opening match (39ms)

    ✓ delete surround with two pairs of parens (81ms)

    ✓ delete surround with alias (61ms)

    ✓ delete surround with tags (56ms)

    ✓ change surround brackets at end of line (45ms)

    ✓ changing brackets with surround works again (106ms)

    ✓ change surround with tags that contain an attribute and preserve them (70ms)

    ✓ change surround with tags that contain an attribute and remove them (70ms)

  register

    ✓ Can copy to a register (68ms)

    ✓ Can use two registers together (140ms)

    ✓ Can use black hole register (76ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (359ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (264ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (276ms)

    ✓ Register '1'-'9' stores delete content (313ms)

    ✓ "A appends linewise text to "a (290ms)

    ✓ "A appends character wise text to "a (338ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (302ms)

    ✓ Small deletion using Del is stored in small delete register (217ms)

    ✓ Small deletion using X is stored in small delete register (236ms)

    ✓ Search register (/) is set by forward search (409ms)

    ✓ Search register (/) is set by backward search (364ms)

    ✓ Search register (/) is set by star search (295ms)

    ✓ Command register (:) is set by command line (103ms)

    ✓ Read-only registers cannot be written to (258ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character>

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward (43ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle (42ms)

      ✓ move one sentence backward - multiline

      ✓ move one sentence backward - multiline - period

      ✓ move one sentence backward - multiline - previous line

      ✓ move one sentence backward - multiline - previous line - period

  VimState

    ✓ de-dupes cursors

    ✓ cursorStart/cursorStop should be first cursor in cursors

  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist

  util path

    separatePath

      ✓ can separate drive letter path on Windows

      ✓ can separate UNC path on Windows

      ✓ can separate relative path on Windows

      ✓ can separate absolute path on posix
      ✓ can separate relative path on posix
    resolveUri

      ✓ posix

      ✓ win32

  1383 passing (4m)

  4 pending

  21 failing
  1) Mode Normal
       can ctrl-a on an octal:

      Content does not match; Expected=010. Actual=07.
      + expected - actual

      -07
      +010
      
      at Suite.<anonymous> (test/mode/modeNormal.test.ts:1942:3)

  2) Mode Visual Block
       Can do a multi line replace:

      Content does not match; Expected=one 111111111 four five. Actual=one 111 three four five.
      + expected - actual

      -one 111 three four five
      +one 111111111 four five
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:96:3)

  3) Mode Visual Block
       Can handle 'gj':

      Content does not match; Expected=t123est. Actual=123test.
      + expected - actual

      -123test
      +t123est
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:111:3)


  4) Mode Visual Block
       d deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  5) Mode Visual Block
       x deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)

  6) Mode Visual Block
       X deletes block:

      Content does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)

  7) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  8) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:356:3)


  9) Motions in Normal Mode
       Retain same column when moving up/down:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 8
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:161:3)

  10) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zz:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:850:5)

  11) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zt:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:857:5)

  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing zb:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)

  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)

  14) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  15) Multicursor
       <C-v>d works with multi-cursor:

      Content does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  16) Multicursor
       cw works with multi-cursor:

      Content does not match; Expected=one  three | five. Actual=one  three four five.
      + expected - actual

      -one  three four five
      +one  three | five
      
      at Suite.<anonymous> (test/multicursor.test.ts:162:3)


  17) Multicursor
       o works with multi-cursor:

      Cursor #1's position is wrong.
      + expected - actual

       {
         "character": 0
      -  "line": 3
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/multicursor.test.ts:178:3)

  18) format operator
       =gg formats to top of file:

      Content does not match; Expected=let c;. Actual=  let c;.
      + expected - actual

      -  let c;
      +let c;
      
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)

  19) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)

  20) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  21) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: 5e2ba420-8824-11ea-88d0-3540a036c4cf

@J-Fields J-Fields force-pushed the multicursor-tests branch from 6d68f75 to a5c2bb6 Compare April 27, 2020 01:51
@TravisBuddy
Copy link

Travis tests have failed

Hey @J-Fields,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

Node.js: 12

View build log

if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi
The command "if [[ $(git diff-index HEAD -- *.js *.ts *.md) ]]; then git diff; echo "Prettier Failed. Run `gulp forceprettier` and commit changes to resolve."; exit 1; fi" exited with 0.
$ npm run build

> vim@1.13.1 build /home/travis/build/VSCodeVim/Vim
> gulp build

[01:53:05] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[01:53:05] Starting 'build'...
[01:53:05] Starting 'prettier'...
[01:53:05] Finished 'prettier' after 24 ms
[01:53:05] Starting 'tsc'...
[01:53:05] Starting 'tslint'...
[01:53:13] Finished 'tslint' after 7.33 s
[01:53:21] Finished 'tsc' after 16 s
[01:53:21] Starting 'commit-hash'...
[01:53:21] Finished 'commit-hash' after 44 ms
[01:53:21] Finished 'build' after 16 s
The command "npm run build" exited with 0.
$ npm test

> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-27T01:53:30.088Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6351) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6351) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (43ms)

    ✓ command <C-w> can remove word in search mode (53ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (40ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line (39ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (41ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (70ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (106ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (133ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (97ms)

    ✓ <C-p> go to previous search string

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history (38ms)

    ✓ add command that exists in history (49ms)

    ✓ file system (44ms)

    ✓ change configuration.history (63ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1302ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (543ms)

    ✓ :smile editor contains smile text (546ms)

  Basic sort

    ✓ Sort whole file, asc (117ms)

    ✓ Sort whole file, asc, ignoreCase (101ms)

    ✓ Sort whole file, dsc (108ms)

    ✓ Sort whole file, dsc, ignoreCase (149ms)

    ✓ Sort range, asc (152ms)

    ✓ Sort range, asc, ignoreCase (156ms)

    ✓ Sort range, dsc (138ms)

    ✓ Sort range, dsc, ignoreCase (135ms)

    ✓ Sort whole file, asc, unique (174ms)

  Horizontal split

    ✓ :sp creates a second split (92ms)

    ✓ :split creates a second split (81ms)

    ✓ :new creates a second split (214ms)

  :close args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !
    ✓ throws if space before !
    ✓ ignores space after !
    ✓ throws if bad input
  :quit args parser
    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'
      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (52ms)

    ✓ Replace with `g` flag (62ms)

    ✓ Replace with flags AND count (193ms)

    ✓ Replace with `c` flag (73ms)

    ✓ Replace with `gc` flag (79ms)

    ✓ Replace across all lines (102ms)

    ✓ Replace on specific single line (78ms)

    ✓ Replace on current line using dot (81ms)

    ✓ Replace single relative line using dot and plus (68ms)

    ✓ Replace across specific line range (69ms)

    ✓ Replace across relative line range using dot, plus, and minus (136ms)

    ✓ Replace across relative line range using numLines+colon shorthand (90ms)

    ✓ Repeat replacement across relative line range (128ms)

    ✓ Replace with range AND count but no flags (85ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (63ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (84ms)

    ✓ Undocumented: trailing operators use 1 as RHS (64ms)

    ✓ Replace specific single equal lines (102ms)

    ✓ Replace current line with no active selection (115ms)

    ✓ Replace text in selection (130ms)

    ✓ Substitute support marks (118ms)
    Effects of gdefault=true

      ✓ Replace all matches in the line (68ms)

      ✓ Replace with `g` flag inverts global flag (48ms)

      ✓ Replace with `c` flag inverts global flag (110ms)

      ✓ Replace multiple lines (108ms)

      ✓ Replace across specific lines (79ms)

      ✓ Replace current line with no active selection (87ms)

      ✓ Replace text in selection (120ms)

      ✓ Substitute support marks (199ms)

      ✓ Substitute with escaped delimiter (64ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (268ms)

      ✓ Substitute with previous search using # (245ms)

      ✓ Substitute with previous search using / (247ms)

      ✓ Substitute with parameters should update search state (94ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (267ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (152ms)

      ✓ Substitute repeat previous should accept flags (82ms)

      ✓ Substitute with empty search string should use last searched pattern (291ms)

      ✓ Ampersand (&) should repeat the last substitution (49ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (70ms)

    ✓ tabe with current file path does nothing (54ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (57ms)

    ✓ command line file navigate tab completion (48ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (66ms)

    ✓ command line file tab completion with space in file path (133ms)

  Vertical split

    ✓ :vs creates a second split (71ms)

    ✓ :vsp creates a second split (68ms)

    ✓ :vsplit creates a second split (90ms)

    ✓ :vnew creates a second split (206ms)

    ✓ :vne creates a second split (342ms)

  Basic write-quit

    ✓ Run write and quit (131ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (55ms)

      ✓ Can complete lines in file with different indentation (49ms)

      ✓ Returns no completions for unmatched line (47ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (73ms)

    ✓ getMatchingRemap (74ms)

    ✓ jj -> <Esc> through modehandler (99ms)

    ✓ 0 -> :wq through modehandler (104ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (102ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (169ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (79ms)

    ✓ d -> black hole register delete in normal mode through modehandler (140ms)

    ✓ d -> black hole register delete in normal mode through modehandler (131ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (150ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command
    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines
  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (38ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (53ms)

        ✓ Can track jumps for keys: /b<CR>n (53ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (261ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>%

        ✓ Can track jumps for keys: j%%<C-o>gg (45ms)

[main 2020-04-27T01:54:00.092Z] update#setState checking for updates

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (56ms)

[main 2020-04-27T01:54:00.176Z] update#setState idle

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (193ms)

        ✓ Can enter number to jump back multiple times (53ms)

        ✓ Can track one-line `` jumps (64ms)

        ✓ Can track one-line double `` jumps (61ms)

        ✓ Can track one-line '' jumps (55ms)

        ✓ Can track one-line double '' jumps (82ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (71ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (78ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (107ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (83ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (85ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (162ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (141ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (173ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (163ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (62ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (128ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (140ms)

    ✓ Can repeat last invoked macro (201ms)

    ✓ Can play back with count (398ms)

    ✓ Can play back with count, abort when a motion fails (461ms)

    ✓ Repeat change on contiguous lines (251ms)

    ✓ Append command to a macro (183ms)

    ✓ Can record Ctrl Keys and repeat (140ms)

    ✓ Can execute macros with dot commands properly (102ms)

    ✓ : (command) register can be used as a macro (94ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (148ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (48ms)

    ✓ <C-c> can exit insert (46ms)

    ✓ <Esc> can exit insert (61ms)

    ✓ Stay in insert when entering characters (101ms)

    ✓ Can handle 'O' (53ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (103ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (39ms)

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode

    ✓ Delete works at line end (42ms)

    ✓ Delete works at end of file

    ✓ Delete works with repeat (173ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (106ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (53ms)

    ✓ Can perform insert command prefixed with count (46ms)

    ✓ Can perform append command prefixed with count (49ms)

    ✓ Can perform insert at start of line command prefixed with count (50ms)

    ✓ Can perform append to end of line command prefixed with count (45ms)

    ✓ Can perform change char (s) command prefixed with count (70ms)

    ✓ Can perform command prefixed with count with <C-[> (38ms)

    ✓ Can handle 'o' with count (108ms)

    ✓ Can handle 'O' with count (91ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (87ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw (46ms)

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (54ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (38ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (51ms)

    ✓ Can handle 'dl' at end of line (59ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'd/' (56ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (42ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (54ms)

    ✓ Can handle 'cw' (156ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (45ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket (43ms)

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (62ms)

    ✓ Can handle 'ciw' on blanks (51ms)

    ✓ Can handle 'caw' (60ms)

    ✓ Can handle 'caw' on first letter (51ms)

    ✓ Can handle 'caw' on blanks (62ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'cae' (50ms)

    ✓ Can handle 'cae' with caret at document's top

    ✓ Can handle 'cae' with caret at document's end

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'cie' with leading space (39ms)

    ✓ Can handle 'cie' with trailing space

    ✓ Can handle 'cie' with both leading and trailing space

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)' (40ms)

    ✓ Can handle count prefixed 'ca)'

    ✓ Can handle 'ca(' spanning multiple lines (38ms)

    ✓ Can handle 'cab' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (39ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket (41ms)

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no () (53ms)

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (61ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word (45ms)

    ✓ Can handle 'ca"' starting on the opening quote (168ms)

    ✓ Can handle 'ci"' with escaped quotes (43ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences (49ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (46ms)

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (74ms)

    ✓ can handle ck (68ms)

    ✓ can handle c2j (120ms)

    ✓ can handle c2k (77ms)

    ✓ can handle cj on last line (73ms)

    ✓ can handle ck on first line (57ms)

    ✓ can handle c2j on last line (80ms)

    ✓ can handle c2k on first line (70ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces (38ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix

    ✓ Can handle 'daw' on word with numeric prefix and across lines (108ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (43ms)

    ✓ Can handle 'daw' on end of word (40ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (47ms)

    ✓ Can handle 'daw' around word at end of line (41ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (59ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (38ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (44ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (89ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line (41ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (45ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle 'dae'

    ✓ Can handle 'dae' with caret at document's top

    ✓ Can handle 'dae' with caret at document's end

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space

    ✓ Can handle 'die' with trailing space

    ✓ Can handle 'die' with both leading and trailing space

    ✓ Can handle 'die' on blank content

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (55ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces (60ms)

    ✓ Select sentence with leading spaces (48ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (39ms)

    ✓ I should updated desiredColumn (38ms)

    ✓ leaving insert mode should update desired column when entered with a (64ms)

    ✓ leaving insert mode should update desired column when entered with i (61ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (46ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (48ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (46ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (63ms)

    ✓ Can handle 'gP' after 'yy' (59ms)

    ✓ Can handle 'gP' after 'Nyy'

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (45ms)

    ✓ Can handle ']p' after yy (40ms)

    ✓ Can handle ']p' after 'Nyy' (43ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (38ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (48ms)

    ✓ Can handle '[p' after yy (39ms)

    ✓ Can handle '[p' after 'Nyy' (48ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (60ms)

    ✓ Can handle 'p' after y'a (61ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket (42ms)

    ✓ Can handle pasting in visual mode over selection (128ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (65ms)

    ✓ gI works correctly (52ms)

    ✓ gi works correctly (99ms)

    ✓ `. works correctly (208ms)

    ✓ '. works correctly (44ms)

    ✓ g; works correctly (87ms)

    ✓ g, works correctly (117ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly (50ms)

    ✓ gq handles spaces before single line comments correctly

    ✓ gq handles tabs before single line comments correctly

    ✓ Can handle space

    ✓ Can handle space (40ms)

    ✓ Undo 1 (86ms)

    ✓ Undo 2 (88ms)

    ✓ Undo cursor (118ms)

    ✓ Undo cursor 2 (121ms)

    ✓ Undo cursor 3 (131ms)

    ✓ Undo with movement first (95ms)

    ✓ Can handle 'U' (44ms)

    ✓ Can handle 'U' for multiple changes (73ms)

    ✓ Can handle 'U' for new line below (73ms)

    ✓ Can handle 'U' for new line above (95ms)

    ✓ Can handle 'U' for consecutive changes only (147ms)

    ✓ Can handle 'u' to undo 'U' (61ms)

    ✓ Can handle 'U' to undo 'U' (55ms)

    ✓ Can handle 'u' after :s/abc/def (67ms)

    ✓ Redo (137ms)

    ✓ Redo (122ms)

    ✓ Redo (116ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle guae

    ✓ Can handle guie

    ✓ Can handle gUw

    ✓ Can handle gUae

    ✓ Can handle gUie

    ✓ Can handle u over line breaks

    ✓ can handle s in visual mode (66ms)

    ✓ can handle p with selection (55ms)

    ✓ can handle P with selection (59ms)

    ✓ can handle p in visual to end of line (111ms)

    ✓ can repeat backspace twice (86ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number (73ms)

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal (41ms)

    ✓ can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number) (55ms)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y

    ✓ can do [count]Y if count is larger than EOF

    ✓ Can do S

    ✓ / does not affect mark (47ms)

    ✓ / can search with regex

    ✓ / can search with newline (39ms)

    ✓ / can search through multiple newlines (82ms)

    ✓ / matches ^ per line

    ✓ / matches $ per line (48ms)

    ✓ Can search for forward slash (53ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (46ms)

    ✓ /\C forces case sensitive search (66ms)

    ✓ <BS> deletes the last character in search in progress mode (39ms)

    ✓ <S-BS> deletes the last character in search in progress mode (61ms)

    ✓ <C-h> deletes the last character in search in progress mode (41ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (45ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag (45ms)

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (106ms)

    ✓ cc copies linewise (57ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (40ms)

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (82ms)

    ✓ '] go to the end of the previously operated or put text (86ms)

    ✓ `[ go to the start of the previously operated or put text (79ms)

    ✓ '[ go to the start of the previously operated or put text (60ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle (46ms)

    can handle gn

      ✓ gn selects the next match text (320ms)

      ✓ gn selects the current word at |hello (271ms)

      ✓ gn selects the current word at h|ello (263ms)

      ✓ gn selects the current word at hel|lo (285ms)

      ✓ gn selects the current word at hell|o (286ms)

      ✓ gn selects the next word at hello| (299ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (67ms)

      ✓ dgn deletes the current word when cursor is at |hello (66ms)

      ✓ dgn deletes the current word when cursor is at h|ello (65ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (62ms)

      ✓ dgn deletes the current word when cursor is at hell|o (63ms)

      ✓ dgn deletes the next word when cursor is at hello| (126ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (72ms)

      ✓ cgn deletes the current word when cursor is at |hello (66ms)

      ✓ cgn deletes the current word when cursor is at h|ello (80ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (77ms)

      ✓ cgn deletes the current word when cursor is at hell|o (66ms)

      ✓ cgn deletes the next word when cursor is at hello| (77ms)

    can handle gN

      ✓ gN selects the previous match text (247ms)

      ✓ gN selects the current word at hell|o (553ms)

      ✓ gN selects the current word at hel|lo (285ms)

      ✓ gN selects the current word at h|ello (363ms)

      ✓ gN selects the current word at |hello (371ms)

      ✓ gN selects the previous word at | hello (321ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (68ms)

      ✓ dgN deletes the current word when cursor is at hell|o (82ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (79ms)

      ✓ dgN deletes the current word when cursor is at h|ello (72ms)

      ✓ dgN deletes the current word when cursor is at |hello (70ms)

      ✓ dgN deletes the previous word when cursor is at | hello (112ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (97ms)

      ✓ cgN deletes the current word when cursor is at hell|o (80ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (82ms)

      ✓ cgN deletes the current word when cursor is at h|ello (71ms)

      ✓ cgN deletes the current word when cursor is at |hello (68ms)

      ✓ cgN deletes the previous word when cursor is at | hello (85ms)

    marks

      ✓ capital marks can change the editors active document (127ms)

      ✓ can jump to lowercase mark

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (42ms)

    ✓ Can handle R past current line (41ms)

    ✓ Can handle R and exit Replace Mode (47ms)

    ✓ Can handle R across lines (92ms)

    ✓ Can handle R across lines and exit Replace Mode (111ms)

    ✓ Can handle R with {count} (95ms)

    ✓ Can handle backspace (263ms)

    ✓ Can handle backspace (91ms)

    ✓ Can handle backspace across lines (95ms)

    ✓ Can handle arrows (49ms)

    ✓ Can handle . (83ms)

    ✓ Can handle . across lines (151ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (209ms)

    ✓ Can handle wd (126ms)

    ✓ Can handle x (118ms)

    ✓ Can handle x across a selection (130ms)

    ✓ Can do vwd in middle of sentence (182ms)

    ✓ Can do vwd in middle of sentence (148ms)

    ✓ Can do vwd multiple times (218ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (173ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (47ms)

    ✓ handles case where we delete over a newline (210ms)

    ✓ handles change operator (126ms)

    ✓ Can do vat on multiple matching tags (66ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (67ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (50ms)

    ✓ Repeat-prefixed vat does not bleed below (46ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (46ms)

    ✓ Can do vi) on a matching parenthesis (39ms)

    ✓ Can do vi) on multiple matching parens (62ms)

    ✓ Can do va) on a matching parenthesis

    ✓ Can do va) on multiple matching parens (41ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (39ms)

    ✓ Repeat-prefixed va) does not bleed below (46ms)

    ✓ Can do va} on a matching bracket as first character (60ms)

    ✓ Can do va} on multiple matching brackets (44ms)

    ✓ Can do vi( on a matching bracket near first character

    ✓ Can do vi{ on outer pair of nested braces (38ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (49ms)

    ✓ Can do va] on multiple matching brackets (49ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (45ms)

    ✓ Repeat-prefixed vaf does not bleed below (48ms)

    ✓ vaf only expands to enclosing pairs (63ms)

    ✓ Can use . to repeat indent in visual (67ms)

    ✓ Can do v_x to delete to first char (44ms)

    ✓ Can do vg_x to delete to last char with no EOL (38ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (45ms)

    ✓ Can do v$x to delete to last char including EOL (50ms)

    ✓ Can do gv to reselect previous selection (85ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (43ms)

    Vim's EOL handling is weird

      ✓ delete through eol (118ms)

      ✓ join 2 lines by deleting through eol (111ms)

      ✓ d$ doesn't delete whole line (107ms)

      ✓ vd$ does delete whole line (112ms)

      ✓ Paste over selection copies the selection (72ms)

      ✓ Paste over selection copies the selection linewise (94ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (43ms)

      ✓ Can handle <down> key (169ms)

      ✓ Can handle <left> key (42ms)

      ✓ Can handle <right> key (47ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (50ms)

      ✓ Can handle 'gj' (48ms)

      - Preserves cursor position when handling 'gk'
      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (42ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (48ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (51ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (38ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (38ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (40ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (45ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (47ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (39ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (44ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (39ms)

      ✓ Can handle 'vawd' on word with trailing spaces (54ms)

      ✓ Can handle 'vawd' on word with leading spaces (40ms)

      ✓ Can handle 'vawd' on word with numeric prefix (51ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (42ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (41ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (47ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (39ms)

      ✓ Can handle 'Y' in visual mode (45ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (54ms)

      ✓ Select sentence with leading spaces in visual mode (48ms)

      ✓ Select multiple sentences in visual mode (61ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (46ms)

      ✓ Select inner sentence with leading spaces in visual mode (56ms)

      ✓ Select spaces between sentences in visual mode (39ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (39ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (48ms)

      ✓ Can do vat on a matching tag (46ms)

    handles replace in visual mode

      ✓ Can do a single line replace (47ms)

      ✓ Can do a multi line replace (47ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines

      ✓ D deletes the current line

    handles indent blocks in visual mode

      ✓ Can do vai

      ✓ Can do vii (42ms)

      ✓ Doesn't naively select the next line (44ms)

      ✓ Searches backwards if cursor line is empty

      ✓ Can do vaI (147ms)

    visualstar

      ✓ Works with * (40ms)

      ✓ Works with # (48ms)

    search works in visual mode

      ✓ Works with / (60ms)

      ✓ Works with ? (51ms)

      ✓ Selects correct range (148ms)

    X will delete linewise

      ✓ normal selection (50ms)

      ✓ normal selection (46ms)

    C will delete linewise

      ✓ normal selection

      ✓ normal selection (108ms)

    R will delete linewise

      ✓ normal selection

      ✓ normal selection

    Linewise Registers will be inserted properly

      ✓ downward selection (84ms)

      ✓ upward selection (90ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (87ms)

      ✓ multiline indent bottom up selection (44ms)

      ✓ repeat multiline indent top down selection (141ms)

      ✓ repeat multiline indent bottom up selection (65ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (60ms)

      ✓ repeat multiline outdent bottom up selection (62ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (152ms)

    vi{ will go to end of second to last line

      ✓ select (63ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (426ms)

      ✓ gv selects the last pasted text (which is longer than original) (405ms)

      ✓ gv selects the last pasted text (multiline) (235ms)

    can handle gn

      ✓ gn selects the next match text (221ms)

      ✓ gn selects the current word at |hello (235ms)

      ✓ gn selects the current word at h|ello (262ms)

      ✓ gn selects the current word at hel|lo (295ms)

      ✓ gn selects the next word at hell|o (250ms)

      ✓ gn selects the next word at hello| (314ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (46ms)

      ✓ multiline insert from top down selection (47ms)

      ✓ skips blank lines (39ms)

    can append text with A

      ✓ multiline append from bottom up selection (38ms)

      ✓ multiline append from top down selection

      ✓ skips blank lines (43ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (60ms)

      ✓ U/gU across a selection (84ms)

      ✓ U/gU across a selection (reverse) (83ms)

      ✓ u/gu on single character (147ms)

      ✓ u/gu across a selection (80ms)

      ✓ u/gu across a selection (reverse) (77ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (112ms)

      ✓ ~/g~ across a selection (94ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (62ms)

    ✓ Can handle A backwards select (128ms)

    ✓ Can handle I forward select (66ms)

    ✓ Can handle I backwards select (65ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (65ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (82ms)

    ✓ Can handle c forward select (58ms)

    ✓ Can handle c backwards select (68ms)

    ✓ Can handle C (69ms)

    1) Can do a multi line replace

    ✓ Can handle 'D' (44ms)

    2) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (63ms)

    ✓ Properly add to end of lines $ then j (56ms)

    ✓ o works in visual block mode (38ms)

    3) d deletes block

    4) x deletes block

    5) X deletes block

    ✓ Select register using " works in visual block mode (82ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (50ms)

    ✓ Can handle 'J' when the visual block spans multiple lines (47ms)

    ✓ Can handle 'J' when start position of the visual block is below the stop

    ✓ Can handle ~/g~ in visual block mode (102ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (178ms)

  Mode Visual Line

    ✓ can be activated

    ✓ <count>V selects <count> lines (288ms)

    ✓ Can handle w (200ms)

    ✓ Can handle wd (129ms)

    ✓ Can handle x (126ms)

    ✓ Can handle x across a selection (150ms)

    ✓ Can do vwd in middle of sentence (180ms)

    ✓ Can do vwd in middle of sentence (450ms)

    ✓ Can do vwd multiple times (214ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (151ms)

    ✓ handles case where we delete over a newline (168ms)

    ✓ handles change operator (126ms)

    ✓ Vp updates register content (67ms)

    ✓ Vp does not append unnecessary newlines (first line) (48ms)

    ✓ Vp does not append unnecessary newlines (middle line) (46ms)

    ✓ Vp does not append unnecessary newlines (last line) (42ms)

    ✓ Exiting via <Esc> returns cursor to original column (42ms)

    ✓ Exiting via `VV` returns cursor to original column (41ms)

    ✓ Can handle 'J' when the selected area spans multiple lines

    Vim's EOL handling is weird

      ✓ delete through eol (119ms)

      ✓ join 2 lines by deleting through eol (123ms)

      ✓ d$ doesn't delete whole line (120ms)

      ✓ vd$ does delete whole line (121ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (43ms)

      ✓ Can handle 'gj' (43ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key (40ms)

      ✓ Can handle d key (52ms)

      ✓ Can handle d key

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace (62ms)

      ✓ Can do a multi visual line replace from the bottom up (47ms)

    search works in visual line mode

      ✓ Works with / (48ms)

      ✓ Works with ? (388ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (191ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position

      ✓ linewise visual put works also in the end of document (50ms)

      ✓ gv selects the last pasted text (which is shorter than original) (530ms)

      ✓ gv selects the last pasted text (which is longer than original) (401ms)

      ✓ gv selects the last pasted text (multiline) (228ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (45ms)

      ✓ multiline insert from top down selection (51ms)

      ✓ skips blank lines

    can append text with A

      ✓ multiline append from bottom up selection (38ms)

      ✓ multiline append from top down selection (38ms)

      ✓ skips blank lines (45ms)

      ✓ updates desired column correctly (49ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (66ms)

      ✓ ~/g~ on multiple lines (76ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (48ms)

    ✓ Can handle 'x' at end of line (84ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (81ms)

    ✓ Can handle 'cc' (48ms)

    ✓ Can handle 'Ncc' (42ms)

    ✓ Can handle 'yy' (43ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows

    ✓ Can handle 'D' with count when end position is on blank line

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put (44ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd'

    ✓ Can handle 'r
'

    ✓ Can handle '<Count>r
' (48ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (96ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~' (140ms)

    ✓ Can handle '<BS>' in insert mode (40ms)

    ✓ Can handle undo with P (85ms)

    6) Can handle 'ge' in multiple lines case1

    7) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (79ms)

    ✓ Can handle dot with I (83ms)

    ✓ Can repeat actions that require selections (62ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (59ms)

    ✓ Can repeat insert change and '<C-t>' (69ms)

    ✓ Can repeat change by `<C-a>` (68ms)

    ✓ Only one arrow key can be repeated in Insert Mode (86ms)

    ✓ Cached content change will be cleared by arrow keys (75ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg'

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    8) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f' (93ms)

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (39ms)

    ✓ Can handle 'F' and find back search (100ms)

    ✓ Can handle 'f' and multiple back searches (55ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a forward search with count 1

    ✓ Can run a forward search with count 3

    ✓ Can run a forward search with count exceeding max number of matches

    ✓ Can run a reverse search (38ms)

    ✓ Can run a reverse and find next search

    ✓ Can run a reverse search with count 1

    ✓ Can run a reverse search with count 3

    ✓ Can run a reverse search with count exceeding max number of matches

    ✓ cancelled search reverts to previous search state (67ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (47ms)

    ✓ Search offsets: b2 goes 2 to the right (47ms)

    ✓ Search offsets: b+3 goes 3 to the right

    ✓ Search offsets: e goes to the end

    ✓ Search offsets: character offset goes across line boundaries (38ms)

    ✓ Search offsets: 2 goes 2 down

    ✓ Search offsets: -2 goes 2 up (48ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix (214ms)

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      9) Preserves desired cursor position when pressing zz

      10) Preserves desired cursor position when pressing zt

      11) Preserves desired cursor position when pressing zb

      12) Preserves desired cursor position when pressing <C-e>

      13) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line
    WORD left
      ✓ move cursor WORD left across spaces
      ✓ move cursor WORD left within WORD
      ✓ first WORD should move to previous line, beginning of last WORD
      ✓ first WORD should move to previous line, stops on empty line
      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right
      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word
    word left
      ✓ move cursor word left across the different char kind
      ✓ move cursor word left within the same char kind
      ✓ move cursor word left across spaces on non-ascii text
      ✓ move cursor word left within word on non-ascii text
      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (46ms)

      ✓ search wraps around the start of the file (41ms)

    wrapscan disabled

      ✓ search stops at the end of the file (40ms)

      ✓ search stops at the start of the file (39ms)

  Multicursor

    ✓ can add multiple cursors below (95ms)

    ✓ can add multiple cursors above (137ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (285ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (369ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (404ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (379ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor

    14) <C-v>d works with multi-cursor

    15) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    16) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (143ms)

    ✓ gcj comments in current and next line (70ms)

    ✓ block comment with motion (96ms)

    ✓ block comment in Visual Mode (167ms)

    ✓ comment in visual line mode (189ms)

    ✓ comment in visual block mode (206ms)

  format operator

    ✓ == formats current line (354ms)

    ✓ =$ formats entire line (92ms)

    ✓ =j formats two lines (116ms)

    ✓ 3=k formats three lines (149ms)

    17) =gg formats to top of file

    ✓ =G formats to bottom of file (62ms)

    ✓ =ip formats paragraph (124ms)

    ✓ format in visual mode (197ms)

  put operator

    ✓ basic put test (47ms)

    ✓ test yy end of line (544ms)

    ✓ test yy first line (38ms)

    ✓ test yy middle line (55ms)

    ✓ test yy with correct positon movement (58ms)

    ✓ test visual block single line yank p (55ms)

    ✓ test visual block single line yank P (52ms)

    ✓ test visual block single line delete p (46ms)

    ✓ test visual block single line delete P (54ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works

    ✓ g? in visual line mode works (131ms)

    18) g? in visual block mode works

  shift operator

    ✓ basic shift left test (46ms)

    ✓ shift left goto end test (39ms)

    ✓ shift left goto line test (38ms)

    ✓ shift right goto end test (42ms)

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (44ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (69ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word (66ms)

      ✓ delete two words from camel_word (52ms)

    handles di<leader>w

      ✓ delete from start of camelWord (62ms)

      ✓ delete from middle of camelWord (67ms)

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word (73ms)

      ✓ delete from middle of underscore_word (54ms)

      ✓ delete two words from camel_word (44ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord (42ms)

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (44ms)

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (76ms)

    ✓ Can handle 2s move (39ms)

    ✓ Can handle f move (182ms)

    ✓ Can handle 2f move (45ms)

    ✓ Can handle F move (44ms)

    ✓ Can handle 2F move (44ms)

    ✓ Can handle t move (46ms)

    ✓ Can handle bd-t move (59ms)

    ✓ Can handle 2t move (39ms)

    ✓ Can handle bd-t2 move (55ms)

    ✓ Can handle T move (40ms)

    ✓ Can handle 2T move (83ms)

    ✓ Can handle w move (42ms)

    ✓ Can handle bd-w move (44ms)

    ✓ Can handle b move (44ms)

    ✓ Can handle e move (58ms)

    ✓ Can handle bd-e move (42ms)

    ✓ Can handle ge move (42ms)

    ✓ Can handle n-char move (67ms)

    ✓ Can handle j move (64ms)

    ✓ Can handle k move (42ms)

    ✓ Can handle bd-jk move (1) (45ms)

    ✓ Can handle bd-jk move (2) (48ms)

    ✓ Can handle lineforward move (1) (62ms)

    ✓ Can handle lineforward move (2)

    19) Can handle linebackward move (1)

    20) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^) (74ms)

    ✓ Can handle searching for dot (.) (40ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (44ms)

    ✓ Replaces within inner Word (88ms)

    ✓ Replaces within '' (67ms)

    ✓ Replaces within '' including spaces (68ms)

    ✓ Replaces within () (91ms)

    ✓ Replaces within () including spaces (45ms)

    ✓ Replaces within a paragraph (46ms)

    ✓ Replaces using a specified register (90ms)

    ✓ Replaces within {} over multiple lines (74ms)

    ✓ Replaces a multiline register within {} over multiple lines (71ms)

    ✓ Replaces a multiline register within {} over multiple lines (48ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (112ms)

    ✓ grr replaces the entire line with the register (52ms)

    ✓ grr can replace multiple lines (47ms)

    ✓ Replaces in visual mode (69ms)

    ✓ Replaces in visual mode using a specified register (63ms)

    ✓ Replaces in visual line mode (84ms)

    ✓ grj is linewise (50ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion

    ✓ Can handle s; motion (55ms)

    ✓ Can handle s, motion

    ✓ Can handle S; motion

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion

    ✓ Can handle single letter <operator>Z motion (71ms)

    ✓ Can handle single letter s; motion (144ms)

    ✓ Can handle single letter s, motion (42ms)

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward

    ✓ Can go back using <C-o> when repeating forward movement (38ms)

    ✓ Can go back using <C-o> when repeating backward movement

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (118ms)

    ✓ 'ysiw(' surrounds word with space (104ms)

    ✓ 'ysw)' surrounds word without space (99ms)

    ✓ 'ysw(' surrounds word with space (100ms)

    ✓ 'ysaw)' surrounds word without space (71ms)

    ✓ 'ysaw(' surrounds word with space (59ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (185ms)

    ✓ 'ysiw<' surrounds word with tags (104ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (74ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (59ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (61ms)

    ✓ change surround (56ms)

    ✓ change surround with two pairs of quotes (67ms)

    ✓ change surround with two pairs of parens (171ms)

    ✓ change surround with alias (172ms)

    ✓ change surround to tags (121ms)

    ✓ delete surround (42ms)

    ✓ delete surround with quotes

    ✓ delete surround with nested of quotes (71ms)

    ✓ delete surround with inconsistent quotes (63ms)

    ✓ delete surround with mixed quotes (43ms)

    ✓ delete surround with empty quotes cursor at start (47ms)

    ✓ delete surround with empty quotes cursor at end

    ✓ don't delete surround if cursor is after closing match

    ✓ delete surround if cursor is before opening match

    ✓ delete surround with two pairs of parens (81ms)

    ✓ delete surround with alias (47ms)

    ✓ delete surround with tags (88ms)

    ✓ change surround brackets at end of line (82ms)

    ✓ changing brackets with surround works again (62ms)

    ✓ change surround with tags that contain an attribute and preserve them (101ms)

    ✓ change surround with tags that contain an attribute and remove them (74ms)

  register

    ✓ Can copy to a register (41ms)

    ✓ Can use two registers together (143ms)

    ✓ Can use black hole register (65ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (359ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (283ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (220ms)

    ✓ Register '1'-'9' stores delete content (328ms)

    ✓ "A appends linewise text to "a (272ms)

    ✓ "A appends character wise text to "a (279ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (236ms)

    ✓ Small deletion using Del is stored in small delete register (178ms)

    ✓ Small deletion using X is stored in small delete register (233ms)

    ✓ Search register (/) is set by forward search (376ms)

    ✓ Search register (/) is set by backward search (894ms)

    ✓ Search register (/) is set by star search (338ms)

    ✓ Command register (:) is set by command line (237ms)

    ✓ Read-only registers cannot be written to (308ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register (64ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character>

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward (60ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle (65ms)

mous> (test/mode/modeVisualBlock.test.ts:111:3)


  3) Mode Visual Block
       d deletes block:

      Content of line 1 does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  4) Mode Visual Block
       x deletes block:

      Content of line 1 does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  5) Mode Visual Block
       X deletes block:

      Content of line 1 does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  6) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0+ expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  14) Multicursor
       <C-v>d works with multi-cursor:

      Content of line 2 does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  15) Multicursor
       cw works with multi-cursor:

      Content of line 0 does not match; Expected=one  three | five. Actual=one  three four fi[90m
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  18) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  19) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  20) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
The command "npm test" exited with 1.
store build cache
cache uploaded


Done. Your build exited with 1.
npm test
> vim@1.13.1 test /home/travis/build/VSCodeVim/Vim
> node ./node_modules/vscode/bin/test

### VS Code Extension Test Run ###

Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code 1.44.2 into .vscode-test/vscode-1.44.2.
Downloading VS Code from: https://update.code.visualstudio.com/1.44.2/linux-x64/stable
Downloaded VS Code 1.44.2
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/vscode-1.44.2/VSCode-linux-x64/code /home/travis/build/VSCodeVim/Vim/out/test --extensionDevelopmentPath=/home/travis/build/VSCodeVim/Vim --extensionTestsPath=/home/travis/build/VSCodeVim/Vim/out/test --locale=en
[main 2020-04-27T01:53:30.088Z] update#setState idle

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6351) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:6351) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information



  base action

    ✓ compare key presses

    ✓ couldActionApply 1D keys positive
    ✓ couldActionApply 1D keys negative
    ✓ couldActionApply 2D keys positive
    ✓ couldActionApply 2D keys negative

    ✓ doesActionApply 1D keys positive

    ✓ doesActionApply 1D keys negative
    ✓ doesActionApply 2D keys positive

    ✓ doesActionApply 2D keys negative

  cmd_line/search command

    ✓ command <C-w> can remove word in cmd line (43ms)

    ✓ command <C-w> can remove word in search mode (53ms)

    ✓ command <C-w> can remove word in cmd line while retrain cmd on the right of the cursor (40ms)

    ✓ command <C-w> can remove word in search mode while retrain cmd on the right of the cursor

    ✓ <C-u> deletes from cursor to first character

    ✓ <C-b> puts cursor at start of command line (39ms)

    ✓ <Home> puts cursor at start of command line

    ✓ <C-e> puts cursor at end of command line (41ms)

    ✓ <End> puts cursor at end of command line

    ✓ <C-p>/<C-n> go to the previous/next command (70ms)

    ✓ <C-r> <C-w> insert word under cursor on command line (106ms)

    ✓ <C-r> <C-w> insert word right of cursor on command line (133ms)

    ✓ <C-r> <C-w> insert word under cursor in search mode (97ms)

    ✓ <C-p> go to previous search string

  cursor location

    ✓ cursor location in command line

    ✓ cursor location in search

  HistoryFile

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history (38ms)

    ✓ add command that exists in history (49ms)

    ✓ file system (44ms)

    ✓ change configuration.history (63ms)

  command-line lexer

    ✓ can lex empty string

    ✓ can lex comma

    ✓ can lex percent

    ✓ can lex dollar

    ✓ can lex dot

    ✓ can lex one number

    ✓ can lex longer number

    ✓ can lex plus

    ✓ can lex minus

    ✓ can lex forward search

    ✓ can lex forward search escaping

    ✓ can lex reverse search

    ✓ can lex reverse search escaping

    ✓ can lex command name

    ✓ can lex command args

    ✓ can lex command args with leading whitespace

    ✓ can lex long command name and args

    ✓ can lex left and right line refs

  :only command

    ✓ Run :only (1302ms)

  command-line parser

    ✓ can parse empty string

    ✓ can parse left - dot
    ✓ can parse left - dollar
    ✓ can parse left - percent
    ✓ can parse separator - comma
    ✓ can parse right - dollar

  command line scanner

    ✓ ctor

    ✓ can detect EOF with empty input

    ✓ next() returns EOF at EOF

    ✓ can scan

    ✓ can emit

    ✓ can ignore

    ✓ can skip whitespace

    ✓ can skip whitespace with one char before EOF

    ✓ can skip whitespace at EOF

    ✓ nextWord() return EOF at EOF

    ✓ nextWord() return word before trailing spaces

    ✓ nextWord() can skip whitespaces and return word 

    ✓ nextWord() return word before EOF

    ✓ can expect one of a set

    ✓ can expect only one of a set

  Smile command

    ✓ :smile creates new tab (543ms)

    ✓ :smile editor contains smile text (546ms)

  Basic sort

    ✓ Sort whole file, asc (117ms)

    ✓ Sort whole file, asc, ignoreCase (101ms)

    ✓ Sort whole file, dsc (108ms)

    ✓ Sort whole file, dsc, ignoreCase (149ms)

    ✓ Sort range, asc (152ms)

    ✓ Sort range, asc, ignoreCase (156ms)

    ✓ Sort range, dsc (138ms)

    ✓ Sort range, dsc, ignoreCase (135ms)

    ✓ Sort whole file, asc, unique (174ms)

  Horizontal split

    ✓ :sp creates a second split (92ms)

    ✓ :split creates a second split (81ms)

    ✓ :new creates a second split (214ms)

  :close args parser

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !
    ✓ throws if space before !
    ✓ ignores space after !
    ✓ throws if bad input
  :quit args parser
    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input

  :substitute args parser

    ✓ can parse pattern, replace, and flags

    ✓ can parse count

    ✓ can parse custom delimiter

    ✓ can escape delimiter

    ✓ can parse flag KeepPreviousFlags

  :tabm[ove] args parser

    ✓ has :tabm alias

    ✓ can parse empty args

    ✓ can parse an absolute position

    ✓ can parse a relative position

    ✓ fails with invalid inputs

  getParser

    ✓ empty

    ✓ :marks

    ✓ :write

    ✓ :nohlsearch

    ✓ :quitall

    :write args parser

      ✓ can parse empty args

      ✓ can parse ++opt

      ✓ throws if bad ++opt name

      ✓ can parse bang

      ✓ can parse ' !cmd'
      ✓ can parse ' !cmd' when cmd is empty

  Basic substitute

    ✓ Replace single word once (52ms)

    ✓ Replace with `g` flag (62ms)

    ✓ Replace with flags AND count (193ms)

    ✓ Replace with `c` flag (73ms)

    ✓ Replace with `gc` flag (79ms)

    ✓ Replace across all lines (102ms)

    ✓ Replace on specific single line (78ms)

    ✓ Replace on current line using dot (81ms)

    ✓ Replace single relative line using dot and plus (68ms)

    ✓ Replace across specific line range (69ms)

    ✓ Replace across relative line range using dot, plus, and minus (136ms)

    ✓ Replace across relative line range using numLines+colon shorthand (90ms)

    ✓ Repeat replacement across relative line range (128ms)

    ✓ Replace with range AND count but no flags (85ms)

    ✓ Undocumented: operator without LHS assumes dot as LHS (63ms)

    ✓ Undocumented: multiple consecutive operators use 1 as RHS (84ms)

    ✓ Undocumented: trailing operators use 1 as RHS (64ms)

    ✓ Replace specific single equal lines (102ms)

    ✓ Replace current line with no active selection (115ms)

    ✓ Replace text in selection (130ms)

    ✓ Substitute support marks (118ms)
    Effects of gdefault=true

      ✓ Replace all matches in the line (68ms)

      ✓ Replace with `g` flag inverts global flag (48ms)

      ✓ Replace with `c` flag inverts global flag (110ms)

      ✓ Replace multiple lines (108ms)

      ✓ Replace across specific lines (79ms)

      ✓ Replace current line with no active selection (87ms)

      ✓ Replace text in selection (120ms)

      ✓ Substitute support marks (199ms)

      ✓ Substitute with escaped delimiter (64ms)

    Substitute should use various previous search/substitute states

      ✓ Substitute with previous search using * (268ms)

      ✓ Substitute with previous search using # (245ms)

      ✓ Substitute with previous search using / (247ms)

      ✓ Substitute with parameters should update search state (94ms)

      ✓ Substitute with empty replacement should delete previous substitution (all variants) and accepts flags (267ms)

      ✓ Substitute with no pattern should repeat previous substitution and not alter search state (152ms)

      ✓ Substitute repeat previous should accept flags (82ms)

      ✓ Substitute with empty search string should use last searched pattern (291ms)

      ✓ Ampersand (&) should repeat the last substitution (49ms)

  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file

    ✓ tabedit with no arguments when not in workspace opens an untitled file

    ✓ tabe with absolute path when not in workspace opens file (70ms)

    ✓ tabe with current file path does nothing (54ms)

  cmd_line tabComplete

    ✓ command line command tab completion

    ✓ command line command shift+tab

    ✓ command line file tab completion with no base path

    ✓ command line file tab completion with / as base path

    ✓ command line file tab completion with ~/ as base path

    ✓ command line file tab completion with ./ as base path

    ✓ command line file tab completion with ../ as base path

    ✓ command line file tab completion directory with / at the end (57ms)

    ✓ command line file navigate tab completion (48ms)

    ✓ command line tab completion on the content on the left of the cursor

    ✓ command line file tab completion with . (66ms)

    ✓ command line file tab completion with space in file path (133ms)

  Vertical split

    ✓ :vs creates a second split (71ms)

    ✓ :vsp creates a second split (68ms)

    ✓ :vsplit creates a second split (90ms)

    ✓ :vnew creates a second split (206ms)

    ✓ :vne creates a second split (342ms)

  Basic write-quit

    ✓ Run write and quit (131ms)

  Provide line completions

    Line Completion Provider unit tests

      ✓ Can complete lines in file, prioritizing above cursor, near cursor (55ms)

      ✓ Can complete lines in file with different indentation (49ms)

      ✓ Returns no completions for unmatched line (47ms)

  Configuration

    ✓ remappings are normalized

    ✓ whichwrap is parsed into wrapKeys

    ✓ Can handle long key chords

  Notation

    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence (73ms)

    ✓ getMatchingRemap (74ms)

    ✓ jj -> <Esc> through modehandler (99ms)

    ✓ 0 -> :wq through modehandler (104ms)

    ✓ <c-e> -> <esc> in insert mode should go to normal mode (102ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (169ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (79ms)

    ✓ d -> black hole register delete in normal mode through modehandler (140ms)

    ✓ d -> black hole register delete in normal mode through modehandler (131ms)

    ✓ jj -> <Esc> after ciw operator through modehandler (150ms)

  Neovim Validator

    ✓ neovim enabled without path

    ✓ neovim disabled

  Remapping Validator

    ✓ no remappings

    ✓ jj->esc

    ✓ remapping missing after and command
    ✓ remappings are de-duped

  Vimrc

    ✓ Can expand $HOME to user's home directory

    ✓ Can expand ~ to user's home directory

  VimrcKeyRemappingBuilder

    ✓ Build IKeyRemapping objects from .vimrc lines
  Error

    ✓ error code has message

  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  historyTracker unit tests

    addMark

      ✓ can create lowercase mark

      ✓ can create uppercase mark

      ✓ shares uppercase marks between editor instances

      ✓ does not share lower marks between editor instances

  Record and navigate jumps

    Jump Tracker unit tests

      ✓ Can record jumps between files

      ✓ Can handle file jump events sent by vscode in response to recordJumpBack

      ✓ Can record jumps between files after switching files

      ✓ Can handle jumps to the same file multiple times

      ✓ Can record up to 100 jumps, the fixed length in vanilla Vim

      ✓ Can handle text deleted from a file

    Can record jumps for actions the same as vanilla Vim
      Can track basic jumps

        ✓ Can track jumps for keys: Ggg

        ✓ Can track jumps for keys: GggG (38ms)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:14:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

rejected promise not handled within 1 second: Error: EISDIR: illegal operation on a directory, read

stack trace: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)
EISDIR: illegal operation on a directory, read: Error: EISDIR: illegal operation on a directory, read
    at Object.readSync (fs.js:513:3)
    at tryReadSync (fs.js:338:20)
    at Object.readFileSync (fs.js:375:19)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at Object.fs.readFileSync (electron/js2c/asar.js:542:40)
    at VimrcImpl.load (/home/travis/build/VSCodeVim/Vim/src/configuration/vimrc.ts:53:24)
    at Context.<anonymous> (/home/travis/build/VSCodeVim/Vim/test/configuration/vimrc.test.ts:21:11)
    at callFn (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:372:21)
    at Test.Runnable.run (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runnable.js:364:7)
    at Runner.runTest (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:455:10)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:573:12
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:369:14)
    at /home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:379:7
    at next (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:303:14)
    at Immediate.<anonymous> (/home/travis/build/VSCodeVim/Vim/node_modules/vscode/node_modules/mocha/lib/runner.js:347:5)
    at processImmediate (internal/timers.js:439:21)

        ✓ Can track jumps for keys: GggGgg (53ms)

        ✓ Can track jumps for keys: /b<CR>n (53ms)

        ✓ Can track jumps for keys: G?b<CR>ggG (261ms)

        ✓ Can track jumps for keys: j%%

      Can track jumps with back/forward

        ✓ Can track jumps for keys: j%%<C-o>

        ✓ Can track jumps for keys: j%%<C-o><C-i>

        ✓ Can track jumps for keys: j%%<C-o>%

        ✓ Can track jumps for keys: j%%<C-o>gg (45ms)

[main 2020-04-27T01:54:00.092Z] update#setState checking for updates

        ✓ Can track jumps for keys: j%%<C-o><C-o>gg (56ms)

[main 2020-04-27T01:54:00.176Z] update#setState idle

        ✓ Can track jumps for keys: /^<CR>nnn<C-o><C-o><C-o><C-i>gg (193ms)

        ✓ Can enter number to jump back multiple times (53ms)

        ✓ Can track one-line `` jumps (64ms)

        ✓ Can track one-line double `` jumps (61ms)

        ✓ Can track one-line '' jumps (55ms)

        ✓ Can track one-line double '' jumps (82ms)

        ✓ Can handle '' jumps with no previous jump

      Can shifts jump lines up after deleting a line with Visual Line Mode

        ✓ Can track jumps for keys: /^<CR>nnnkkdd (71ms)

        ✓ Can track jumps for keys: /^<CR>nnnkdd (78ms)

        ✓ Can track jumps for keys: /^<CR>nnnnn<C-o><C-o><C-o><C-o>dd (107ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkdd (83ms)

      Can shifts jump lines up after deleting a line with Visual Mode

        ✓ Can track jumps for keys: /^<CR>nnnkklvjjhx (85ms)

      Can shift jump lines down after inserting a line

        ✓ Can track jumps for keys: /^<CR>nnnkkoINSERTED<Esc>0 (162ms)

        ✓ Can track jumps for keys: /^<CR>nnnkoINSERTED<Esc>0 (141ms)

        ✓ Can track jumps for keys: /^<CR>nnnkOINSERTED<Esc>0 (173ms)

        ✓ Can track jumps for keys: /a4<CR>/a5<CR>kkkoINSERTED<Esc>0 (163ms)

      Can track jumps from substitutes

        ✓ Can track jumps for keys: :%s/a/b<CR> (62ms)

      Can track jumps from macros

        ✓ Can track jumps for keys: qq/^<CR>nq@q@q<C-o><C-o> (128ms)

      Can track jumps from marks

        ✓ Can track jumps for keys: maG`a

  Record and execute a macro

    ✓ Can record and execute (140ms)

    ✓ Can repeat last invoked macro (201ms)

    ✓ Can play back with count (398ms)

    ✓ Can play back with count, abort when a motion fails (461ms)

    ✓ Repeat change on contiguous lines (251ms)

    ✓ Append command to a macro (183ms)

    ✓ Can record Ctrl Keys and repeat (140ms)

    ✓ Can execute macros with dot commands properly (102ms)

    ✓ : (command) register can be used as a macro (94ms)

  Mode Handler

    ✓ ctor

    ✓ can set current mode

  Mode Handler Map

    ✓ getOrCreate

    ✓ get

  Mode Insert

    ✓ can be activated (148ms)

    ✓ can handle key events

    ✓ <Esc> should change cursor position (48ms)

    ✓ <C-c> can exit insert (46ms)

    ✓ <Esc> can exit insert (61ms)

    ✓ Stay in insert when entering characters (101ms)

    ✓ Can handle 'O' (53ms)

    ✓ 'i' puts you in insert mode before the cursor

    ✓ 'I' puts you in insert mode at start of line

    ✓ 'a' puts you in insert mode after the cursor

    ✓ 'A' appends to end of line

    ✓ '<C-w>' deletes a word

    ✓ Can handle <C-w> on leading whitespace

    ✓ Can handle <C-w> at beginning of line

    ✓ <C-u> deletes to start of line

    ✓ Can handle <C-u> on leading characters

    ✓ Can handle <C-u> on leading whitespace

    ✓ Correctly places the cursor after deleting the previous line break (103ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (39ms)

    ✓ Backspace works on whitespace only lines

    ✓ Backspace works on end of whitespace only lines

    ✓ Backspace works at beginning of file

    ✓ Delete works in insert mode

    ✓ Delete works at line end (42ms)

    ✓ Delete works at end of file

    ✓ Delete works with repeat (173ms)

    ✓ Can <Esc> after entering insert mode from <ctrl+o>

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (106ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (53ms)

    ✓ Can perform insert command prefixed with count (46ms)

    ✓ Can perform append command prefixed with count (49ms)

    ✓ Can perform insert at start of line command prefixed with count (50ms)

    ✓ Can perform append to end of line command prefixed with count (45ms)

    ✓ Can perform change char (s) command prefixed with count (70ms)

    ✓ Can perform command prefixed with count with <C-[> (38ms)

    ✓ Can handle 'o' with count (108ms)

    ✓ Can handle 'O' with count (91ms)

    ✓ Can handle backspace at beginning of line with all spaces

    ✓ Can handle digraph insert (87ms)

    ✓ Can handle custom digraph insert

  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw

    ✓ Can handle dw (46ms)

    ✓ Can handle dw

    ✓ Can handle dw across lines (1)

    ✓ Can handle dw across lines (2)

    ✓ Can handle dd last line

    ✓ Can handle dd single line

    ✓ Can handle dd

    ✓ Can handle 3dd

    ✓ Can handle 3dd off end of document

    ✓ Can handle d2d (54ms)

    ✓ Can handle dd empty line

    ✓ Can handle ddp (38ms)

    ✓ Can handle 'de'

    ✓ Can handle 'de' then 'de' again

    ✓ Can handle 'db'

    ✓ Can handle 'db then 'db' again (51ms)

    ✓ Can handle 'dl' at end of line (59ms)

    ✓ Can handle 'dF'

    ✓ Can handle 'dT'

    ✓ Can handle 'd3' then <enter>

    ✓ Can handle 'dj'

    ✓ Can handle 'dk'

    ✓ Can handle 'd])' without deleting closing parenthesis

    ✓ Can handle 'd]}' without deleting closing bracket

    ✓ Can handle 'd/' (56ms)

    ✓ Can handle 'd/' with count ([count]d/[word]) (42ms)

    ✓ Can handle 'd/' with count (d[count]/[word]) (54ms)

    ✓ Can handle 'cw' (156ms)

    ✓ Can handle 'cw' without deleting following white spaces

    ✓ Can handle 'c2w'

    ✓ Can handle 'cw' without removing EOL (45ms)

    ✓ Can handle 'c])' without deleting closing parenthesis

    ✓ Can handle 'c]}' without deleting closing bracket (43ms)

    ✓ Can handle 's'

    ✓ Can handle 'yiw' with correct cursor ending position

    ✓ Can handle 'ciw' (62ms)

    ✓ Can handle 'ciw' on blanks (51ms)

    ✓ Can handle 'caw' (60ms)

    ✓ Can handle 'caw' on first letter (51ms)

    ✓ Can handle 'caw' on blanks (62ms)

    ✓ Can handle 'caw' on blanks

    ✓ Can handle 'cae' (50ms)

    ✓ Can handle 'cae' with caret at document's top

    ✓ Can handle 'cae' with caret at document's end

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'cie' with leading space (39ms)

    ✓ Can handle 'cie' with trailing space

    ✓ Can handle 'cie' with both leading and trailing space

    ✓ Can handle 'cie' on blank content

    ✓ Can handle 'ci(' on first parentheses

    ✓ Can handle 'ci(' with nested parentheses

    ✓ Can handle 'ci(' backwards through nested parens

    ✓ Can handle 'cib' on first parentheses

    ✓ Can handle 'ci(' across multiple lines with last character at beginning

    ✓ Can handle count prefixed 'ci)' (40ms)

    ✓ Can handle count prefixed 'ca)'

    ✓ Can handle 'ca(' spanning multiple lines (38ms)

    ✓ Can handle 'cab' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (39ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly

    ✓ Can handle 'ci(' on the closing bracket (41ms)

    ✓ Can handle 'ciB' spanning multiple lines

    ✓ will fail when ca( with no () (53ms)

    ✓ will fail when ca{ with no {}

    ✓ will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines

    ✓ Can handle 'ci]' on first bracket

    ✓ Can handle 'ca[' on first bracket

    ✓ Can handle 'ca]' on first bracket

    ✓ Can handle 'ci'' on first quote

    ✓ Can handle 'ci'' inside quoted string (61ms)

    ✓ Can handle 'ci'' on closing quote

    ✓ Can handle 'ci'' when string is ahead

    ✓ Can handle 'ci"' on opening quote

    ✓ Can handle 'ci"' starting behind the quoted word

    ✓ Can handle 'ca"' starting behind the quoted word (45ms)

    ✓ Can handle 'ca"' starting on the opening quote (168ms)

    ✓ Can handle 'ci"' with escaped quotes (43ms)

    ✓ Can handle 'ci"' with a single escaped quote

    ✓ Can handle 'ci"' with a single escaped quote behind

    ✓ Can handle 'ci"' with an escaped backslash

    ✓ Can handle 'ci"' with an escaped backslash on closing quote

    ✓ Can handle 'ca"' starting on the closing quote

    ✓ Can handle 'ci"' with complex escape sequences (49ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (46ms)

    ✓ will fail when ca" ahead of quoted string

    ✓ Can handle 'ca`' inside word

    ✓ can handle cj (74ms)

    ✓ can handle ck (68ms)

    ✓ can handle c2j (120ms)

    ✓ can handle c2k (77ms)

    ✓ can handle cj on last line (73ms)

    ✓ can handle ck on first line (57ms)

    ✓ can handle c2j on last line (80ms)

    ✓ can handle c2k on first line (70ms)

    ✓ Can handle 'daw' on word with cursor inside spaces

    ✓ Can handle 'daw' on word with trailing spaces (38ms)

    ✓ Can handle 'daw' on word with leading spaces

    ✓ Can handle 'daw' on word with numeric prefix

    ✓ Can handle 'daw' on word with numeric prefix and across lines (108ms)

    ✓ Can handle 'daw' on word with numeric prefix and across lines

    ✓ Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.` (43ms)

    ✓ Can handle 'daw' on end of word (40ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace

    ✓ Can handle 'daw' on word at beginning of file

    ✓ Can handle 'daw' on word at beginning of line

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (47ms)

    ✓ Can handle 'daw' around word at end of line (41ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces

    ✓ Can handle 'daW' around word at whitespace

    ✓ Can handle 'daW' on word with trailing spaces

    ✓ Can handle 'daW' on word with leading spaces

    ✓ Can handle 'daW' on word with numeric prefix (59ms)

    ✓ Can handle 'daW' on word with numeric prefix and across lines (38ms)

    ✓ Can handle 'daW' on beginning of word

    ✓ Can handle 'daW' on end of one line

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (44ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (89ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">)

    ✓ Can handle 'diw' on word with cursor inside spaces

    ✓ Can handle 'diw' on word

    ✓ Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line (41ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines (45ms)

    ✓ Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'diW' on big word with cursor inside spaces

    ✓ Can handle 'diW' on word with trailing spaces

    ✓ Can handle 'diW' on word with leading spaces

    ✓ Can handle 'diW' on word with numeric prefix

    ✓ Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word

    ✓ Can handle 'dae'

    ✓ Can handle 'dae' with caret at document's top

    ✓ Can handle 'dae' with caret at document's end

    ✓ Can handle 'die' on blank content

    ✓ Can handle 'die' with leading space

    ✓ Can handle 'die' with trailing space

    ✓ Can handle 'die' with both leading and trailing space

    ✓ Can handle 'die' on blank content

    ✓ Can handle d} at beginning of line

    ✓ Can handle y} at beginning of line (55ms)

    ✓ Can handle d} when not at beginning of line

    ✓ Can handle } with operator and count, at beginning of line

    ✓ Can handle } with operator and count, and not at beginning of line

    ✓ Select sentence with trailing spaces (60ms)

    ✓ Select sentence with leading spaces (48ms)

    ✓ Select inner sentence with trailing spaces

    ✓ Select inner sentence with leading spaces

    ✓ Select spaces between sentences

    ✓ Can handle 'df'

    ✓ Can handle 'dt'

    ✓ Can handle backspace

    ✓ Can handle backspace across lines

    ✓ Can handle A and backspace

    ✓ A should update desiredColumn (39ms)

    ✓ I should updated desiredColumn (38ms)

    ✓ leaving insert mode should update desired column when entered with a (64ms)

    ✓ leaving insert mode should update desired column when entered with i (61ms)

    ✓ Can handle 'yy' without changing cursor position

    ✓ Can handle 'P' after 'yy' (46ms)

    ✓ Can handle 'p' after 'yy'

    ✓ Can handle 'P' after 'Nyy'

    ✓ Can handle 'p' after 'Nyy'

    ✓ Can handle 'p' after 'yy' with correct cursor position

    ✓ Can handle 'gp' after 'yy'

    ✓ Can handle 'gp' after 'Nyy' (48ms)

    ✓ Can handle 'gp' after 'Nyy' if pasting more than three lines (46ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (63ms)

    ✓ Can handle 'gP' after 'yy' (59ms)

    ✓ Can handle 'gP' after 'Nyy'

    ✓ Can handle 'gP' after 'Nyy' if pasting more than three lines (45ms)

    ✓ Can handle ']p' after yy (40ms)

    ✓ Can handle ']p' after 'Nyy' (43ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (38ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (48ms)

    ✓ Can handle '[p' after yy (39ms)

    ✓ Can handle '[p' after 'Nyy' (48ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (60ms)

    ✓ Can handle 'p' after y'a (61ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis

    ✓ Can handle 'p' after 'y]}' without including closing bracket (42ms)

    ✓ Can handle pasting in visual mode over selection (128ms)

    ✓ Can repeat w

    ✓ Can repeat p

    ✓ I works correctly (65ms)

    ✓ gI works correctly (52ms)

    ✓ gi works correctly (99ms)

    ✓ `. works correctly (208ms)

    ✓ '. works correctly (44ms)

    ✓ g; works correctly (87ms)

    ✓ g, works correctly (117ms)

    ✓ g_ works correctly

    ✓ 3g_ works correctly

    ✓ gq handles spaces after single line comments correctly (50ms)

    ✓ gq handles spaces before single line comments correctly

    ✓ gq handles tabs before single line comments correctly

    ✓ Can handle space

    ✓ Can handle space (40ms)

    ✓ Undo 1 (86ms)

    ✓ Undo 2 (88ms)

    ✓ Undo cursor (118ms)

    ✓ Undo cursor 2 (121ms)

    ✓ Undo cursor 3 (131ms)

    ✓ Undo with movement first (95ms)

    ✓ Can handle 'U' (44ms)

    ✓ Can handle 'U' for multiple changes (73ms)

    ✓ Can handle 'U' for new line below (73ms)

    ✓ Can handle 'U' for new line above (95ms)

    ✓ Can handle 'U' for consecutive changes only (147ms)

    ✓ Can handle 'u' to undo 'U' (61ms)

    ✓ Can handle 'U' to undo 'U' (55ms)

    ✓ Can handle 'u' after :s/abc/def (67ms)

    ✓ Redo (137ms)

    ✓ Redo (122ms)

    ✓ Redo (116ms)

    ✓ Can handle u

    ✓ Can handle guw

    ✓ Can handle guae

    ✓ Can handle guie

    ✓ Can handle gUw

    ✓ Can handle gUae

    ✓ Can handle gUie

    ✓ Can handle u over line breaks

    ✓ can handle s in visual mode (66ms)

    ✓ can handle p with selection (55ms)

    ✓ can handle P with selection (59ms)

    ✓ can handle p in visual to end of line (111ms)

    ✓ can repeat backspace twice (86ms)

    ✓ can delete linewise with d2G

    ✓ can delete with + motion and count

    ✓ can delete with - motion and count

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can dE correctly

    ✓ can ctrl-a correctly behind a word

    ✓ can ctrl-a the right word (always the one AFTER the cursor)

    ✓ can ctrl-a on word

    ✓ can ctrl-a on a hex number (73ms)

    ✓ can ctrl-a on decimal

    ✓ can ctrl-a with numeric prefix

    ✓ can ctrl-a on a decimal (41ms)

    ✓ can ctrl-a on an octal

    ✓ Correctly increments in the middle of a number

    ✓ can ctrl-x correctly behind a word

    ✓ can ctrl-a on an number with word before 

    ✓ can ctrl-a on an number with word before and after 

    ✓ can ctrl-x on a negative number with word before and after 

    ✓ can ctrl-a properly on multiple lines

    ✓ can <C-a> on word with multiple numbers (incrementing first number)

    ✓ can <C-a> on word with multiple numbers (incrementing second number) (55ms)

    ✓ can <C-a> on word with - in front of it

    ✓ can do Y

    ✓ can do [count]Y

    ✓ can do [count]Y if count is larger than EOF

    ✓ Can do S

    ✓ / does not affect mark (47ms)

    ✓ / can search with regex

    ✓ / can search with newline (39ms)

    ✓ / can search through multiple newlines (82ms)

    ✓ / matches ^ per line

    ✓ / matches $ per line (48ms)

    ✓ Can search for forward slash (53ms)

    ✓ Can search backward for question mark

    ✓ /\c forces case insensitive search (46ms)

    ✓ /\C forces case sensitive search (66ms)

    ✓ <BS> deletes the last character in search in progress mode (39ms)

    ✓ <S-BS> deletes the last character in search in progress mode (61ms)

    ✓ <C-h> deletes the last character in search in progress mode (41ms)

    ✓ Can do C

    ✓ Can do cit on a matching tag

    ✓ Ignores cit on a non-matching tag

    ✓ Ignores cit on a nested tag (45ms)

    ✓ Can do cit on a tag with an attribute tag

    ✓ Can do cat on a matching tag

    ✓ Can do cit on a multiline tag (45ms)

    ✓ Can do cit on a multiline tag with nested tags

    ✓ Can do cit inside of a tag with another non closing tag inside tags

    ✓ Can do cit inside of a tag with another empty closing tag inside tags

    ✓ Can do dit on empty tag block, cursor moves to inside

    ✓ Can do cit on empty tag block, cursor moves to inside

    ✓ can do cit with self closing tags

    ✓ Respects indentation with cc

    ✓ Resets cursor to indent end with cc

    ✓ can handle 'cc' on empty line (106ms)

    ✓ cc copies linewise (57ms)

    ✓ Indent current line with correct Vim Mode

    ✓ Can handle <Esc> and do nothing

    ✓ Can handle # on consecutive words

    ✓ Can handle # on skipped words

    ✓ Can 'D'elete the characters under the cursor until the end of the line

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line

    ✓ cc on whitespace-only treats whitespace as indent

    ✓ Can do cai (40ms)

    ✓ Can do cii

    ✓ Can do caI

    ✓ Can do dai

    ✓ Can do dii

    ✓ Can do daI

    ✓ `] go to the end of the previously operated or put text (82ms)

    ✓ '] go to the end of the previously operated or put text (86ms)

    ✓ `[ go to the start of the previously operated or put text (79ms)

    ✓ '[ go to the start of the previously operated or put text (60ms)

    ✓ can handle <C-u> when first line is visible and starting column is at the beginning

    ✓ can handle <C-u> when first line is visible and starting column is at the end

    ✓ can handle <C-u> when first line is visible and starting column is in the middle (46ms)

    can handle gn

      ✓ gn selects the next match text (320ms)

      ✓ gn selects the current word at |hello (271ms)

      ✓ gn selects the current word at h|ello (263ms)

      ✓ gn selects the current word at hel|lo (285ms)

      ✓ gn selects the current word at hell|o (286ms)

      ✓ gn selects the next word at hello| (299ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (67ms)

      ✓ dgn deletes the current word when cursor is at |hello (66ms)

      ✓ dgn deletes the current word when cursor is at h|ello (65ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (62ms)

      ✓ dgn deletes the current word when cursor is at hell|o (63ms)

      ✓ dgn deletes the next word when cursor is at hello| (126ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (72ms)

      ✓ cgn deletes the current word when cursor is at |hello (66ms)

      ✓ cgn deletes the current word when cursor is at h|ello (80ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (77ms)

      ✓ cgn deletes the current word when cursor is at hell|o (66ms)

      ✓ cgn deletes the next word when cursor is at hello| (77ms)

    can handle gN

      ✓ gN selects the previous match text (247ms)

      ✓ gN selects the current word at hell|o (553ms)

      ✓ gN selects the current word at hel|lo (285ms)

      ✓ gN selects the current word at h|ello (363ms)

      ✓ gN selects the current word at |hello (371ms)

      ✓ gN selects the previous word at | hello (321ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (68ms)

      ✓ dgN deletes the current word when cursor is at hell|o (82ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (79ms)

      ✓ dgN deletes the current word when cursor is at h|ello (72ms)

      ✓ dgN deletes the current word when cursor is at |hello (70ms)

      ✓ dgN deletes the previous word when cursor is at | hello (112ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (97ms)

      ✓ cgN deletes the current word when cursor is at hell|o (80ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (82ms)

      ✓ cgN deletes the current word when cursor is at h|ello (71ms)

      ✓ cgN deletes the current word when cursor is at |hello (68ms)

      ✓ cgN deletes the previous word when cursor is at | hello (85ms)

    marks

      ✓ capital marks can change the editors active document (127ms)

      ✓ can jump to lowercase mark

  Mode Replace

    ✓ Can activate with <Insert> from Insert mode

    ✓ Can activate with R from Normal mode

    ✓ Can handle R (42ms)

    ✓ Can handle R past current line (41ms)

    ✓ Can handle R and exit Replace Mode (47ms)

    ✓ Can handle R across lines (92ms)

    ✓ Can handle R across lines and exit Replace Mode (111ms)

    ✓ Can handle R with {count} (95ms)

    ✓ Can handle backspace (263ms)

    ✓ Can handle backspace (91ms)

    ✓ Can handle backspace across lines (95ms)

    ✓ Can handle arrows (49ms)

    ✓ Can handle . (83ms)

    ✓ Can handle . across lines (151ms)

  Mode Visual

    ✓ can be activated

    ✓ Can handle w (209ms)

    ✓ Can handle wd (126ms)

    ✓ Can handle x (118ms)

    ✓ Can handle x across a selection (130ms)

    ✓ Can do vwd in middle of sentence (182ms)

    ✓ Can do vwd in middle of sentence (148ms)

    ✓ Can do vwd multiple times (218ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (173ms)

    ✓ Can handle H key

    ✓ Can handle backspace key (47ms)

    ✓ handles case where we delete over a newline (210ms)

    ✓ handles change operator (126ms)

    ✓ Can do vat on multiple matching tags (66ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (67ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (50ms)

    ✓ Repeat-prefixed vat does not bleed below (46ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (46ms)

    ✓ Can do vi) on a matching parenthesis (39ms)

    ✓ Can do vi) on multiple matching parens (62ms)

    ✓ Can do va) on a matching parenthesis

    ✓ Can do va) on multiple matching parens (41ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (39ms)

    ✓ Repeat-prefixed va) does not bleed below (46ms)

    ✓ Can do va} on a matching bracket as first character (60ms)

    ✓ Can do va} on multiple matching brackets (44ms)

    ✓ Can do vi( on a matching bracket near first character

    ✓ Can do vi{ on outer pair of nested braces (38ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (49ms)

    ✓ Can do va] on multiple matching brackets (49ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (45ms)

    ✓ Repeat-prefixed vaf does not bleed below (48ms)

    ✓ vaf only expands to enclosing pairs (63ms)

    ✓ Can use . to repeat indent in visual (67ms)

    ✓ Can do v_x to delete to first char (44ms)

    ✓ Can do vg_x to delete to last char with no EOL (38ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (45ms)

    ✓ Can do v$x to delete to last char including EOL (50ms)

    ✓ Can do gv to reselect previous selection (85ms)

    ✓ Can handle 'J' when the selected area spans multiple lines (43ms)

    Vim's EOL handling is weird

      ✓ delete through eol (118ms)

      ✓ join 2 lines by deleting through eol (111ms)

      ✓ d$ doesn't delete whole line (107ms)

      ✓ vd$ does delete whole line (112ms)

      ✓ Paste over selection copies the selection (72ms)

      ✓ Paste over selection copies the selection linewise (94ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (43ms)

      ✓ Can handle <down> key (169ms)

      ✓ Can handle <left> key (42ms)

      ✓ Can handle <right> key (47ms)

    Screen line motions in Visual Mode

      ✓ Can handle 'gk' (50ms)

      ✓ Can handle 'gj' (48ms)

      - Preserves cursor position when handling 'gk'
      - Preserves cursor position when handling 'gj'
    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (42ms)

      ✓ Can handle 'vawd' on word with trailing spaces

      ✓ Can handle 'vawd' on word with leading spaces

      ✓ Can handle 'vawd' on word with numeric prefix (48ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (51ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (38ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces (38ms)

      ✓ Can handle 'vaWd' on word with trailing spaces

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (40ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (45ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (47ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix (39ms)

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (44ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (39ms)

      ✓ Can handle 'vawd' on word with trailing spaces (54ms)

      ✓ Can handle 'vawd' on word with leading spaces (40ms)

      ✓ Can handle 'vawd' on word with numeric prefix (51ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines (42ms)

      ✓ Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.` (41ms)

    handles aW in visual mode

      ✓ Can handle 'vaWd' on big word with cursor inside spaces

      ✓ Can handle 'vaWd' on word with trailing spaces (47ms)

      ✓ Can handle 'vaWd' on word with leading spaces

      ✓ Can handle 'vaWd' on word with numeric prefix

      ✓ Can handle 'vaWd' on word with numeric prefix and across lines (39ms)

      ✓ Can handle 'Y' in visual mode (45ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (54ms)

      ✓ Select sentence with leading spaces in visual mode (48ms)

      ✓ Select multiple sentences in visual mode (61ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (46ms)

      ✓ Select inner sentence with leading spaces in visual mode (56ms)

      ✓ Select spaces between sentences in visual mode (39ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (39ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (48ms)

      ✓ Can do vat on a matching tag (46ms)

    handles replace in visual mode

      ✓ Can do a single line replace (47ms)

      ✓ Can do a multi line replace (47ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines

      ✓ D deletes the current line

    handles indent blocks in visual mode

      ✓ Can do vai

      ✓ Can do vii (42ms)

      ✓ Doesn't naively select the next line (44ms)

      ✓ Searches backwards if cursor line is empty

      ✓ Can do vaI (147ms)

    visualstar

      ✓ Works with * (40ms)

      ✓ Works with # (48ms)

    search works in visual mode

      ✓ Works with / (60ms)

      ✓ Works with ? (51ms)

      ✓ Selects correct range (148ms)

    X will delete linewise

      ✓ normal selection (50ms)

      ✓ normal selection (46ms)

    C will delete linewise

      ✓ normal selection

      ✓ normal selection (108ms)

    R will delete linewise

      ✓ normal selection

      ✓ normal selection

    Linewise Registers will be inserted properly

      ✓ downward selection (84ms)

      ✓ upward selection (90ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (87ms)

      ✓ multiline indent bottom up selection (44ms)

      ✓ repeat multiline indent top down selection (141ms)

      ✓ repeat multiline indent bottom up selection (65ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection

      ✓ multiline outdent bottom up selection

      ✓ repeat multiline outdent top down selection (60ms)

      ✓ repeat multiline outdent bottom up selection (62ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (152ms)

    vi{ will go to end of second to last line

      ✓ select (63ms)

    Transition between visual mode

      ✓ vv will back to normal mode

      ✓ vV will transit to visual line mode

      ✓ v<C-v> will transit to visual block mode

      ✓ Vv will transit to visual (char) mode

      ✓ VV will back to normal mode

      ✓ V<C-v> will transit to visual block mode

      ✓ <C-v>v will transit to visual (char) mode

      ✓ <C-v>V will back to visual line mode

      ✓ <C-v><C-v> will back to normal mode

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (426ms)

      ✓ gv selects the last pasted text (which is longer than original) (405ms)

      ✓ gv selects the last pasted text (multiline) (235ms)

    can handle gn

      ✓ gn selects the next match text (221ms)

      ✓ gn selects the current word at |hello (235ms)

      ✓ gn selects the current word at h|ello (262ms)

      ✓ gn selects the current word at hel|lo (295ms)

      ✓ gn selects the next word at hell|o (250ms)

      ✓ gn selects the next word at hello| (314ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (46ms)

      ✓ multiline insert from top down selection (47ms)

      ✓ skips blank lines (39ms)

    can append text with A

      ✓ multiline append from bottom up selection (38ms)

      ✓ multiline append from top down selection

      ✓ skips blank lines (43ms)

    Can handle u/gu, U/gU

      ✓ U/gU on single character (60ms)

      ✓ U/gU across a selection (84ms)

      ✓ U/gU across a selection (reverse) (83ms)

      ✓ u/gu on single character (147ms)

      ✓ u/gu across a selection (80ms)

      ✓ u/gu across a selection (reverse) (77ms)

    Can handle ~/g~

      ✓ ~/g~ on single character (112ms)

      ✓ ~/g~ across a selection (94ms)

  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (62ms)

    ✓ Can handle A backwards select (128ms)

    ✓ Can handle I forward select (66ms)

    ✓ Can handle I backwards select (65ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (65ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (82ms)

    ✓ Can handle c forward select (58ms)

    ✓ Can handle c backwards select (68ms)

    ✓ Can handle C (69ms)

    1) Can do a multi line replace

    ✓ Can handle 'D' (44ms)

    2) Can handle 'gj'

    ✓ Properly add to end of lines j then $ (63ms)

    ✓ Properly add to end of lines $ then j (56ms)

    ✓ o works in visual block mode (38ms)

    3) d deletes block

    4) x deletes block

    5) X deletes block

    ✓ Select register using " works in visual block mode (82ms)

    ✓ Can handle 'J' when the entire visual block is on the same line (50ms)

    ✓ Can handle 'J' when the visual block spans multiple lines (47ms)

    ✓ Can handle 'J' when start position of the visual block is below the stop

    ✓ Can handle ~/g~ in visual block mode (102ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (178ms)

  Mode Visual Line

    ✓ can be activated

    ✓ <count>V selects <count> lines (288ms)

    ✓ Can handle w (200ms)

    ✓ Can handle wd (129ms)

    ✓ Can handle x (126ms)

    ✓ Can handle x across a selection (150ms)

    ✓ Can do vwd in middle of sentence (180ms)

    ✓ Can do vwd in middle of sentence (450ms)

    ✓ Can do vwd multiple times (214ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (151ms)

    ✓ handles case where we delete over a newline (168ms)

    ✓ handles change operator (126ms)

    ✓ Vp updates register content (67ms)

    ✓ Vp does not append unnecessary newlines (first line) (48ms)

    ✓ Vp does not append unnecessary newlines (middle line) (46ms)

    ✓ Vp does not append unnecessary newlines (last line) (42ms)

    ✓ Exiting via <Esc> returns cursor to original column (42ms)

    ✓ Exiting via `VV` returns cursor to original column (41ms)

    ✓ Can handle 'J' when the selected area spans multiple lines

    Vim's EOL handling is weird

      ✓ delete through eol (119ms)

      ✓ join 2 lines by deleting through eol (123ms)

      ✓ d$ doesn't delete whole line (120ms)

      ✓ vd$ does delete whole line (121ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key

      ✓ Can handle <down> key

    Screen line motions in Visual Line Mode

      ✓ Can handle 'gk' (43ms)

      ✓ Can handle 'gj' (43ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key

      ✓ Can handle d key (40ms)

      ✓ Can handle d key (52ms)

      ✓ Can handle d key

      ✓ can handle 'c'

    handles replace in visual line mode

      ✓ Can do a single line replace

      ✓ Can do a multi visual line replace (62ms)

      ✓ Can do a multi visual line replace from the bottom up (47ms)

    search works in visual line mode

      ✓ Works with / (48ms)

      ✓ Works with ? (388ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (191ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position

      ✓ linewise visual put works also in the end of document (50ms)

      ✓ gv selects the last pasted text (which is shorter than original) (530ms)

      ✓ gv selects the last pasted text (which is longer than original) (401ms)

      ✓ gv selects the last pasted text (multiline) (228ms)

    can prepend text with I

      ✓ multiline insert from bottom up selection (45ms)

      ✓ multiline insert from top down selection (51ms)

      ✓ skips blank lines

    can append text with A

      ✓ multiline append from bottom up selection (38ms)

      ✓ multiline append from top down selection (38ms)

      ✓ skips blank lines (45ms)

      ✓ updates desired column correctly (49ms)

    Can handle ~/g~ in visual line mode

      ✓ ~/g~ on single line (66ms)

      ✓ ~/g~ on multiple lines (76ms)

  Mode Normal

    ✓ Can handle 'x'

    ✓ Can handle 'Nx'

    ✓ Can handle 'Nx' and paste (48ms)

    ✓ Can handle 'x' at end of line (84ms)

    ✓ Can handle 'Ns'

    ✓ Can handle 'Ns' at end of line

    ✓ Can handle '<Del>'

    ✓ Can handle '<Del>' with counts, which removes the last character of the count

    ✓ Can handle '<Del>' at end of line (81ms)

    ✓ Can handle 'cc' (48ms)

    ✓ Can handle 'Ncc' (42ms)

    ✓ Can handle 'yy' (43ms)

    ✓ Can handle 'D'

    ✓ Can handle 'D' on empty lines

    ✓ Can handle 'D' with count 1

    ✓ Can handle 'D' with count 3

    ✓ Can handle 'D' with count exceeding max number of rows

    ✓ Can handle 'D' with count when end position is on blank line

    ✓ Can handle 'DD'

    ✓ Can handle 'C'

    ✓ Can handle 'NC'

    ✓ Can handle 'NC' and put (44ms)

    ✓ Can handle 'r'

    ✓ Can handle '<Count>r'

    ✓ Can handle '<Count>r'

    ✓ Can handle 'r' after 'dd'

    ✓ Can handle 'r
'

    ✓ Can handle '<Count>r
' (48ms)

    ✓ Can handle 'J' once

    ✓ Can handle 'J' twice

    ✓ Can handle 'J' with empty last line

    ✓ Can handle 'J's with multiple empty last lines (96ms)

    ✓ Can handle 'J' with leading white space on next line

    ✓ Can handle 'J' with only white space on next line

    ✓ Can handle 'J' with TWO indented lines

    ✓ Can handle 'J' with ')' first character on next line

    ✓ Can handle 'J' with a following delete

    ✓ Can handle 'J' with count

    ✓ Can handle 'J' with count if count is larger than EOF

    ✓ Can handle 'J' in Visual Line mode

    ✓ Can handle 'gJ' once

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED

    ✓ Can handle '~'

    ✓ Can handle 'g~{motion}'

    ✓ Can handle 'g~~' (140ms)

    ✓ Can handle '<BS>' in insert mode (40ms)

    ✓ Can handle undo with P (85ms)

    6) Can handle 'ge' in multiple lines case1

    7) Can handle 'ge' in multiple lines case2

  Dot Operator

    ✓ Can repeat '~' with <num>

    ✓ Can repeat '~' with dot

    ✓ Can repeat 'x'

    ✓ Can repeat 'J'

    ✓ Can handle dot with A (79ms)

    ✓ Can handle dot with I (83ms)

    ✓ Can repeat actions that require selections (62ms)

  Repeat content change

    ✓ Can repeat '<C-t>' (59ms)

    ✓ Can repeat insert change and '<C-t>' (69ms)

    ✓ Can repeat change by `<C-a>` (68ms)

    ✓ Only one arrow key can be repeated in Insert Mode (86ms)

    ✓ Cached content change will be cleared by arrow keys (75ms)

  Matching Bracket (%)

    ✓ before opening parenthesis

    ✓ inside parenthesis

    ✓ nested parenthesis beginning

    ✓ nested parenthesis end

    ✓ nested bracket and parenthesis beginning

    ✓ nested bracket, parenthesis, braces beginning

    ✓ nested bracket, parenthesis, braces end

    ✓ parentheses after >

    ✓ parentheses after "

  Motions in Normal Mode

    ✓ Can handle [(

    ✓ Can handle nested [(

    ✓ Can handle <number>[(

    ✓ Can handle [( and character under cursor exclusive

    ✓ Can handle ])

    ✓ Can handle nested ])

    ✓ Can handle <number>])

    ✓ Can handle ]) and character under cursor exclusive

    ✓ Can handle [{

    ✓ Can handle nested [{

    ✓ Can handle <number>[{

    ✓ Can handle [{ and character under cursor exclusive

    ✓ Can handle ]}

    ✓ Can handle nested ]}

    ✓ Can handle <number>]}

    ✓ Can handle ]} and character under cursor exclusive

    ✓ Can handle 'ge'

    ✓ Can handle 'gg'

    ✓ Can handle 'gg' to first non blank char on random line

    ✓ Can handle 'gg' to first non blank char on first line

    ✓ 'gg' obeys startofline

    8) Retain same column when moving up/down

    ✓ Can handle <enter>

    ✓ $ always keeps cursor on EOL

    ✓ Can handle $ with a count

    ✓ Can handle $ with a count at end of file

    ✓ Can handle <End> with a count

    ✓ Can handle <D-right> with a count

    ✓ Can handle 'f' (93ms)

    ✓ Can handle 'f' twice

    ✓ Can handle 'f' with <tab>

    ✓ Can handle 'f' and find back search

    ✓ Can handle 'F'

    ✓ Can handle 'F' twice (39ms)

    ✓ Can handle 'F' and find back search (100ms)

    ✓ Can handle 'f' and multiple back searches (55ms)

    ✓ Can handle 't'

    ✓ Can handle 't' twice

    ✓ Can handle 't' and find back search

    ✓ Can handle 'T'

    ✓ Can handle 'T' twice

    ✓ Can handle 'T' and find back search

    ✓ Can run a forward search

    ✓ Can run a forward and find next search

    ✓ Can run a forward and find previous search from end of word

    ✓ Can run a forward search with count 1

    ✓ Can run a forward search with count 3

    ✓ Can run a forward search with count exceeding max number of matches

    ✓ Can run a reverse search (38ms)

    ✓ Can run a reverse and find next search

    ✓ Can run a reverse search with count 1

    ✓ Can run a reverse search with count 3

    ✓ Can run a reverse search with count exceeding max number of matches

    ✓ cancelled search reverts to previous search state (67ms)

    ✓ Backspace on empty search cancels

    ✓ Search offsets: b does nothing (47ms)

    ✓ Search offsets: b2 goes 2 to the right (47ms)

    ✓ Search offsets: b+3 goes 3 to the right

    ✓ Search offsets: e goes to the end

    ✓ Search offsets: character offset goes across line boundaries (38ms)

    ✓ Search offsets: 2 goes 2 down

    ✓ Search offsets: -2 goes 2 up (48ms)

    ✓ maintains column position correctly

    ✓ maintains column position correctly with $

    ✓ Can handle G 

    ✓ Can handle G with number prefix

    ✓ Can handle G with number prefix

    ✓ Can handle gg

    ✓ Can handle gg with number prefix

    ✓ Can handle 0

    ✓ Can handle 0 as part of a repeat

    ✓ Can handle g*

    ✓ Can handle g*n

    ✓ Can handle *

    ✓ Can handle **

    ✓ Can handle # on whitespace

    ✓ Can handle # on EOL

    ✓ Can handle g#

    ✓ Can handle g#n

    ✓ Can handle #

    ✓ Can handle # already on the word

    ✓ Can handle ##

    ✓ * adds to search history

    ✓ # adds to search history

    ✓ Can handle |

    ✓ Can handle <number> |

    ✓ Can handle +

    ✓ Can handle + indent

    ✓ Can handle + with count prefix

    ✓ Can handle -

    ✓ Can handle - indent

    ✓ Can handle - with count prefix

    ✓ Can handle _

    ✓ Can handle _ with count prefix (214ms)

    ✓ Can handle g_

    ✓ Can handle g_ with count prefix

    ✓ Can handle <up> key

    ✓ Can handle <down> key

    ✓ Can handle <left> key

    ✓ Can handle <right> key

    ✓ Can handle 'gk'

    ✓ Can handle 'gj'

    - Preserves cursor position when handling 'gk'
    - Preserves cursor position when handling 'gj'
    doesn't update desiredColumn when it shouldn't

      9) Preserves desired cursor position when pressing zz

      10) Preserves desired cursor position when pressing zt

      11) Preserves desired cursor position when pressing zb

      12) Preserves desired cursor position when pressing <C-e>

      13) Preserves desired cursor position when pressing <C-y>

  basic motion

    ✓ char right: should move one column right

    ✓ char right

    ✓ char left: should move cursor one column left

    ✓ char left: left-most column should stay at the same location

    ✓ line down: should move cursor one line down

    ✓ line down: bottom-most line should stay at the same location

    ✓ line begin

    ✓ line end

    ✓ document begin

    ✓ document end

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character

    line up

      ✓ should move cursor one line up

      ✓ top-most line should stay at the same location

  word motion

    ✓ line begin cursor on first non-blank character

    ✓ last line begin cursor on first non-blank character
    word right
      ✓ move to word right
      ✓ last word should move to next line
      ✓ last word should move to next line stops on empty line
      ✓ last word should move to next line skips whitespace only line
      ✓ last word on last line should go to end of document (special case!)
    word left
      ✓ move cursor word left across spaces
      ✓ move cursor word left within word
      ✓ first word should move to previous line, beginning of last word
      ✓ first word should move to previous line, stops on empty line
      ✓ first word should move to previous line, skips whitespace only line
    WORD right
      ✓ move to WORD right
      ✓ last WORD should move to next line
      ✓ last WORD should move to next line stops on empty line
      ✓ last WORD should move to next line skips whitespace only line
    WORD left
      ✓ move cursor WORD left across spaces
      ✓ move cursor WORD left within WORD
      ✓ first WORD should move to previous line, beginning of last WORD
      ✓ first WORD should move to previous line, stops on empty line
      ✓ first WORD should move to previous line, skips whitespace only line

    end of word right

      ✓ move to end of current word right

      ✓ move to end of next word right

      ✓ end of last word should move to next line

      ✓ end of last word should move to next line skips empty line

      ✓ end of last word should move to next line skips whitespace only line

    end of WORD right

      ✓ move to end of current WORD right

      ✓ move to end of next WORD right

      ✓ end of last WORD should move to next line

      ✓ end of last WORD should move to next line skips empty line

      ✓ end of last WORD should move to next line skips whitespace only line

  unicode word motion

    word right
      ✓ move cursor word right stops at different kind of character (ideograph -> hiragana)
      ✓ move cursor word right stops at different kind of character (katakana -> ascii)
      ✓ move cursor word right stops at different kind of chararacter (ascii -> punctuation)
      ✓ move cursor word right on non-ascii text
      ✓ move cursor word right recognizes a latin string which has diacritics as a single word
      ✓ move cursor word right recognizes a latin-1 symbol as punctuation
      ✓ move cursor word right recognizes a sequence of latin-1 symbols and other symbols as a word
    word left
      ✓ move cursor word left across the different char kind
      ✓ move cursor word left within the same char kind
      ✓ move cursor word left across spaces on non-ascii text
      ✓ move cursor word left within word on non-ascii text
      ✓ move cursor word left recognizes a latin string which has diacritics as a single word

  sentence motion

    sentence forward
      ✓ next concrete sentence
      ✓ next sentence that ends with paragraph ending
      ✓ next sentence when cursor is at the end of previous paragraph
      ✓ next sentence when paragraph contains a line of whilte spaces
    sentence backward
      ✓ current sentence begin
      ✓ sentence forward when cursor is at the beginning of the second sentence
      ✓ current sentence begin with no concrete sentense inside
      ✓ current sentence begin when it's not the same as current paragraph begin
      ✓ current sentence begin when previous line ends with a concrete sentence

  paragraph motion

    paragraph down

      ✓ move down normally

      ✓ move down longer paragraph

      ✓ move down starting inside empty line

      ✓ paragraph at end of document
    paragraph up
      ✓ move up short paragraph
      ✓ move up longer paragraph
      ✓ move up starting inside empty line

  motion line wrapping

    whichwrap enabled

      normal mode

        ✓ h wraps to previous line

        ✓ l wraps to next line

        ✓ <left> wraps to previous line

        ✓ <right> wraps to next line

      insert mode

        ✓ <left> wraps to previous line

        ✓ <right> once goes to end of line

        ✓ <right> twice wraps to next line

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line

        ✓ l does not wrap to next line

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

      insert mode

        ✓ <left> does not wrap to previous line

        ✓ <right> does not wrap to next line

    wrapscan enabled

      ✓ search wraps around the end of the file (46ms)

      ✓ search wraps around the start of the file (41ms)

    wrapscan disabled

      ✓ search stops at the end of the file (40ms)

      ✓ search stops at the start of the file (39ms)

  Multicursor

    ✓ can add multiple cursors below (95ms)

    ✓ can add multiple cursors above (137ms)

    ✓ viwd with multicursors deletes the words and keeps the cursors (285ms)

    ✓ vibd with multicursors deletes the content between brackets and keeps the cursors (369ms)

    ✓ vi[d with multicursors deletes the content between brackets and keeps the cursors (404ms)

    ✓ vitd with multicursors deletes the content between tags and keeps the cursors (379ms)

    ✓ dd works with multi-cursor

    ✓ Vd works with multi-cursor

    14) <C-v>d works with multi-cursor

    15) cw works with multi-cursor

    ✓ <count>f<char> works with multi-cursor

    16) o works with multi-cursor

  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip

  comment operator

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

(node:5799) Electron: Loading non context-aware native modules in the renderer process is deprecated and will stop working at some point in the future, please see https://github.com/electron/electron/issues/18397 for more information

    ✓ gcc comments out current line (143ms)

    ✓ gcj comments in current and next line (70ms)

    ✓ block comment with motion (96ms)

    ✓ block comment in Visual Mode (167ms)

    ✓ comment in visual line mode (189ms)

    ✓ comment in visual block mode (206ms)

  format operator

    ✓ == formats current line (354ms)

    ✓ =$ formats entire line (92ms)

    ✓ =j formats two lines (116ms)

    ✓ 3=k formats three lines (149ms)

    17) =gg formats to top of file

    ✓ =G formats to bottom of file (62ms)

    ✓ =ip formats paragraph (124ms)

    ✓ format in visual mode (197ms)

  put operator

    ✓ basic put test (47ms)

    ✓ test yy end of line (544ms)

    ✓ test yy first line (38ms)

    ✓ test yy middle line (55ms)

    ✓ test yy with correct positon movement (58ms)

    ✓ test visual block single line yank p (55ms)

    ✓ test visual block single line yank P (52ms)

    ✓ test visual block single line delete p (46ms)

    ✓ test visual block single line delete P (54ms)

  rot13 operator

    ✓ rot13() unit test

    ✓ g?j works

    ✓ g? in visual mode works

    ✓ g? in visual line mode works (131ms)

    18) g? in visual block mode works

  shift operator

    ✓ basic shift left test (46ms)

    ✓ shift left goto end test (39ms)

    ✓ shift left goto line test (38ms)

    ✓ shift right goto end test (42ms)

    ✓ shift right goto line test

  camelCaseMotion plugin if not enabled

    ✓ basic motion doesn't work

  camelCaseMotion plugin
    handles <leader>w for camelCaseText

      ✓ step over whitespace

      ✓ step to Camel word

      ✓ step to CAP word

      ✓ step after CAP word

      ✓ step from middle of word to Camel word

      ✓ step to number word

      ✓ step to operator word

      ✓ step from inside operator word

      ✓ step to operator and then over

    handles <leader>w for underscore_var

      ✓ step to _word

      ✓ step over whitespace to word

      ✓ step from inside word to _word

      ✓ step form _word to number

      ✓ step from nubmer word to _word

      ✓ step from in whitespace to word

      ✓ step in ALL_CAPS_WORD

    handles d<leader>w

      ✓ delete from start of camelWord (44ms)

      ✓ delete from middle of camelWord

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord (69ms)

      ✓ delete from start of underscore_word

      ✓ delete from middle of underscore_word (66ms)

      ✓ delete two words from camel_word (52ms)

    handles di<leader>w

      ✓ delete from start of camelWord (62ms)

      ✓ delete from middle of camelWord (67ms)

      ✓ delete from start of CamelWord

      ✓ delete two words from camelWord

      ✓ delete from start of underscore_word (73ms)

      ✓ delete from middle of underscore_word (54ms)

      ✓ delete two words from camel_word (44ms)

    handles <leader>b

      ✓ back from middle of word

      ✓ back over whitespace to camelWord (42ms)

      ✓ back twice over operator

    handles <leader>e

      ✓ from start to middle of underscore_word

      ✓ from middle to end of underscore_word (44ms)

      ✓ twice to end of word over operator

  easymotion plugin

    ✓ Can handle s move (76ms)

    ✓ Can handle 2s move (39ms)

    ✓ Can handle f move (182ms)

    ✓ Can handle 2f move (45ms)

    ✓ Can handle F move (44ms)

    ✓ Can handle 2F move (44ms)

    ✓ Can handle t move (46ms)

    ✓ Can handle bd-t move (59ms)

    ✓ Can handle 2t move (39ms)

    ✓ Can handle bd-t2 move (55ms)

    ✓ Can handle T move (40ms)

    ✓ Can handle 2T move (83ms)

    ✓ Can handle w move (42ms)

    ✓ Can handle bd-w move (44ms)

    ✓ Can handle b move (44ms)

    ✓ Can handle e move (58ms)

    ✓ Can handle bd-e move (42ms)

    ✓ Can handle ge move (42ms)

    ✓ Can handle n-char move (67ms)

    ✓ Can handle j move (64ms)

    ✓ Can handle k move (42ms)

    ✓ Can handle bd-jk move (1) (45ms)

    ✓ Can handle bd-jk move (2) (48ms)

    ✓ Can handle lineforward move (1) (62ms)

    ✓ Can handle lineforward move (2)

    19) Can handle linebackward move (1)

    20) Can handle linebackward move (2)

    ✓ Can handle searching for backslash (\)

    ✓ Can handle searching for carat (^) (74ms)

    ✓ Can handle searching for dot (.) (40ms)

  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode

  replaceWithRegister plugin

    ✓ Replaces within inner word (44ms)

    ✓ Replaces within inner Word (88ms)

    ✓ Replaces within '' (67ms)

    ✓ Replaces within '' including spaces (68ms)

    ✓ Replaces within () (91ms)

    ✓ Replaces within () including spaces (45ms)

    ✓ Replaces within a paragraph (46ms)

    ✓ Replaces using a specified register (90ms)

    ✓ Replaces within {} over multiple lines (74ms)

    ✓ Replaces a multiline register within {} over multiple lines (71ms)

    ✓ Replaces a multiline register within {} over multiple lines (48ms)

    ✓ Yanking inside {} then replacing inside {} in a noop, besides the cursor movement (112ms)

    ✓ grr replaces the entire line with the register (52ms)

    ✓ grr can replace multiple lines (47ms)

    ✓ Replaces in visual mode (69ms)

    ✓ Replaces in visual mode using a specified register (63ms)

    ✓ Replaces in visual line mode (84ms)

    ✓ grj is linewise (50ms)

  sneak plugin

    ✓ Can handle s motion

    ✓ Can handle S motion

    ✓ Can handle <operator>z motion

    ✓ Can handle <operator>Z motion

    ✓ Can handle s; motion (55ms)

    ✓ Can handle s, motion

    ✓ Can handle S; motion

    ✓ Can handle S, motion

    ✓ Can handle single letter s motion

    ✓ Can handle single letter S motion

    ✓ Can handle single letter <operator>z motion

    ✓ Can handle single letter <operator>Z motion (71ms)

    ✓ Can handle single letter s; motion (144ms)

    ✓ Can handle single letter s, motion (42ms)

    ✓ Can handle single letter S; motion

    ✓ Can handle single letter S, motion

    ✓ Can handle multiline single char <number>s motion

    ✓ Can go back using <C-o> once when going forward

    ✓ Can go back using <C-o> once when going backward

    ✓ Can go back using <C-o> when repeating forward movement (38ms)

    ✓ Can go back using <C-o> when repeating backward movement

  sneakReplacesF

    ✓ sneakReplacesF forward

    ✓ sneakReplacesF backward

  surround plugin

    ✓ 'ysiw)' surrounds word without space (118ms)

    ✓ 'ysiw(' surrounds word with space (104ms)

    ✓ 'ysw)' surrounds word without space (99ms)

    ✓ 'ysw(' surrounds word with space (100ms)

    ✓ 'ysaw)' surrounds word without space (71ms)

    ✓ 'ysaw(' surrounds word with space (59ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (185ms)

    ✓ 'ysiw<' surrounds word with tags (104ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (74ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (59ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (61ms)

    ✓ change surround (56ms)

    ✓ change surround with two pairs of quotes (67ms)

    ✓ change surround with two pairs of parens (171ms)

    ✓ change surround with alias (172ms)

    ✓ change surround to tags (121ms)

    ✓ delete surround (42ms)

    ✓ delete surround with quotes

    ✓ delete surround with nested of quotes (71ms)

    ✓ delete surround with inconsistent quotes (63ms)

    ✓ delete surround with mixed quotes (43ms)

    ✓ delete surround with empty quotes cursor at start (47ms)

    ✓ delete surround with empty quotes cursor at end

    ✓ don't delete surround if cursor is after closing match

    ✓ delete surround if cursor is before opening match

    ✓ delete surround with two pairs of parens (81ms)

    ✓ delete surround with alias (47ms)

    ✓ delete surround with tags (88ms)

    ✓ change surround brackets at end of line (82ms)

    ✓ changing brackets with surround works again (62ms)

    ✓ change surround with tags that contain an attribute and preserve them (101ms)

    ✓ change surround with tags that contain an attribute and remove them (74ms)

  register

    ✓ Can copy to a register (41ms)

    ✓ Can use two registers together (143ms)

    ✓ Can use black hole register (65ms)

    ✓ System clipboard works with chinese characters

    ✓ Yank stores text in Register '0' (359ms)

    ✓ Multiline yank (`[count]yy`) stores text in Register '0' (283ms)

    ✓ Multiline yank (`[count]Y`) stores text in Register '0' (220ms)

    ✓ Register '1'-'9' stores delete content (328ms)

    ✓ "A appends linewise text to "a (272ms)

    ✓ "A appends character wise text to "a (279ms)

    ✓ Can put and get to register

    ✓ Small deletion using x is stored in small delete register (236ms)

    ✓ Small deletion using Del is stored in small delete register (178ms)

    ✓ Small deletion using X is stored in small delete register (233ms)

    ✓ Search register (/) is set by forward search (376ms)

    ✓ Search register (/) is set by backward search (894ms)

    ✓ Search register (/) is set by star search (338ms)

    ✓ Command register (:) is set by command line (237ms)

    ✓ Read-only registers cannot be written to (308ms)

    clipboard

      ✓ Can access '*' (clipboard) register

      ✓ Can access '+' (clipboard) register (64ms)

  Repeatable movements with f and t

    ✓ Can repeat f<character>

    ✓ Can repeat reversed F<character>

    ✓ Can repeat t<character>

    ✓ Can repeat N times reversed t<character>

  sentence motion
    [count] sentences backward

      ✓ move one sentence backward

      ✓ move one sentence backward

      ✓ move [count] sentences backward (60ms)

      ✓ move one sentence backward single line - middle

      ✓ move one sentence backward no space

      ✓ move one sentence backward no space - middle (65ms)

mous> (test/mode/modeVisualBlock.test.ts:111:3)


  3) Mode Visual Block
       d deletes block:

      Content of line 1 does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:165:3)


  4) Mode Visual Block
       x deletes block:

      Content of line 1 does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:172:3)


  5) Mode Visual Block
       X deletes block:

      Content of line 1 does not match; Expected=22. Actual=222.
      + expected - actual

      -222
      +22
      
      at Suite.<anonymous> (test/mode/modeVisualBlock.test.ts:179:3)


  6) Mode Normal
       Can handle 'ge' in multiple lines case1:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 3
      -  "line": 2
      +  "character": 4
      +  "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/commands.test.ts:349:3)


  7) Mode Normal
       Can handle 'ge' in multiple lines case2:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 2
      +  "character": 0+ expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:864:5)


  12) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-e>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 0
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:871:5)


  13) Motions in Normal Mode
       doesn't update desiredColumn when it shouldn't
         Preserves desired cursor position when pressing <C-y>:

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 0
      +  "character": 26
         "line": 1
       }
      
      at Suite.<anonymous> (test/mode/normalModeTests/motions.test.ts:878:5)


  14) Multicursor
       <C-v>d works with multi-cursor:

      Content of line 2 does not match; Expected=tee. Actual=three.
      + expected - actual

      -three
      +tee
      
      at Suite.<anonymous> (test/multicursor.test.ts:154:3)


  15) Multicursor
       cw works with multi-cursor:

      Content of line 0 does not match; Expected=one  three | five. Actual=one  three four fi[90m
      at Suite.<anonymous> (test/operator/format.test.ts:41:3)


  18) rot13 operator
       g? in visual block mode works:

      Wrong number of cursors
      + expected - actual

      -2
      +1
      
      at Suite.<anonymous> (test/operator/rot13.test.ts:50:3)


  19) easymotion plugin
       Can handle linebackward move (1):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 6
      +  "character": 3
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:200:3)


  20) easymotion plugin
       Can handle linebackward move (2):

      Cursor #1's position is wrong.
      + expected - actual

       {
      -  "character": 8
      +  "character": 6
         "line": 0
       }
      
      at Suite.<anonymous> (test/plugins/easymotion.test.ts:207:3)


Tests exited with code: 1
npm ERR! Test failed.  See above for more details.
TravisBuddy Request Identifier: 6ca29620-882a-11ea-88d0-3540a036c4cf

Now you can just put multiple cursors into the 'start' or 'end' of a test, a few examples are in multicursor.test.ts.
I've also done some general refactor of testSimplifier.ts to make it more straightforward.
ALSO, a slight refactor in VimState (making isMultiCursor a function of cursors.length)
Fixes #4582
@J-Fields
Copy link
Member Author

Closing as this is very out of date. I still want to do this, but I'll probably start from scratch.

@J-Fields J-Fields closed this Mar 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support multi-cursor in test harness
2 participants