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

Fix multiple issues with expand selection commands and pair/block movement #2921

Merged
merged 33 commits into from
Sep 5, 2018

Conversation

xmbhasin
Copy link
Contributor

@xmbhasin xmbhasin commented Jul 31, 2018

What this PR does / why we need it:
Fixes multiple issues with bracket, tag, and other pair movement and selection commands. Adds backtick and angle brackets support to af command. Fixes af jumping to nonenclosing blocks. Adds af expanding over multiple types of blocks in succession. Fixes afd commands deleting and then returning cursor to the wrong position. Fixes expanding repeatedly over the same type of block ( eg using v3a} over {{{|}}} ). Adds a number of new tests around the behaviour of these changes.

Refactors matcher.ts and improves its performance.

Should get us closer to implementing more of the wildfire plugin as requested in #2834 in the form of af.
Which issue(s) this PR fixes
Should fix #2907 and fix #2506.

Special notes for your reviewer:
You can test out the difference these commits make in a file such as this:

<div>
  <ul>
    <li>
      <p>Lorem!</p>
    </li>
  </ul>
</div> 

do not delete

(
[
(
  {
    {
      (blah((foo))blah)
    }
  }
)
]
)

do not delete

test <div><p>[[{{((|))}}]]</p></div> test;

xmbhasin added 17 commits July 29, 2018 19:18
…name symbols for compatibility with `matcher` changes
…n `tagMatcher.ts`. This fixes expanding selection over multiple tags. Maintain selection start position in `MoveTagMatch` of `motion.ts` on failure.
…by passing `vimState` to `findPairedChar` method of `PairMatcher`
…t for changes in `tagMatcher.ts` and `matcher.ts`
…mmutable as possible when dry-running multiple block selection movements
@xmbhasin xmbhasin changed the title Fix expand select Fix multiple issues with expand selection commands and pair/block movement Jul 31, 2018
let recordedState = vimState.recordedState;
let result: Position | IMovement = new Position(0, 0); // bogus init to satisfy typechecker

if (count < 1) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know we've had this pattern but we should really move this sort of check somewhere outside this function (on a different PR).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking of abstracting more of the code in this function to private methods. This would probably allow us to add a couple of classes between BaseMovement and its subclasses and reduce duplication. That might also help in the future to refactor how count-prefixes are handled before reaching BaseMovement.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were you thinking of doing that in this PR or sometime later?

Copy link
Contributor Author

@xmbhasin xmbhasin Aug 6, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll try to cleanup some of the changes in this PR and sprinkle in some more comments. If you have any other concerns or suggestions I'd like to organize what I need to do so I can plan some time to get to it. I think the refactor I proposed fits well with this PR since I ended up duplicating execActionWithCount a couple times where I needed to override it.

@@ -3817,7 +3817,7 @@ class ActionChangeChar extends BaseCommand {

public couldActionApply(vimState: VimState, keysPressed: string[]): boolean {
return (
super.doesActionApply(vimState, keysPressed) &&
super.couldActionApply(vimState, keysPressed) &&
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch.

@TravisBuddy
Copy link

Travis tests have failed

Hey @xmbhasin,
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

npm test --silent
### VS Code Extension Test Run ###
Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code into "/home/travis/build/VSCodeVim/Vim/.vscode-test/stable" from: https://vscode-update.azurewebsites.net/1.25.1/linux-x64/stable
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/stable/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
Xlib:  extension "RANDR" missing on display ":99.0".

Xlib:  extension "RANDR" missing on display ":99.0".

[main 6:19:27 PM] update#setState idle

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

bash: no job control in this shell

nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/home/travis/.nvm/versions/node/v8.11.3"
Run `unset npm_config_prefix` to unset it.





  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



  command-line history

    ✓ add command (40ms)

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ load and save history

    ✓ change configuration.history (44ms)



  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



  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



  Basic sort

    ✓ Sort whole file, asc (203ms)

    ✓ Sort whole file, dsc (205ms)

    ✓ Sort range, asc (218ms)

    ✓ Sort range, dsc (186ms)



  :close args parser

    ✓ has all aliases

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !
    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input



  :quit args parser

    ✓ has all aliases

    ✓ 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



  :write args parser

    ✓ has all aliases

    ✓ 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 (99ms)

    ✓ Replace with `g` flag (78ms)

    ✓ Replace multiple lines (170ms)

    ✓ Replace across specific lines (149ms)

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

    ✓ Replace text in selection (215ms)

    ✓ Substitute support marks (196ms)
    Effects of substituteGlobalFlag=true

      ✓ Replace all matches in the line (111ms)

      ✓ Replace with `g` flag inverts global flag (94ms)

      ✓ Replace multiple lines (129ms)

      ✓ Replace across specific lines (135ms)

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

      ✓ Replace text in selection (210ms)

      ✓ Substitute support marks (214ms)

      ✓ Substitute with escaped delimiter (87ms)

    Substitute with empty search string should use previous search

      ✓ Substitute with previous search using * (278ms)

      ✓ Substitute with previous search using # (260ms)

      ✓ Substitute with previous search using / (325ms)

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



  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file (53ms)

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

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

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


  Vertical split

    ✓ Run :vs (126ms)

    ✓ Run :vsp (82ms)



  Basic write-quit

    ✓ Run write and quit (127ms)



  Configuration

    ✓ remappings are normalized

    ✓ Can handle long key chords (78ms)

    ✓ whichwrap is parsed into wrapKeys


  Notation
    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence

    ✓ getMatchingRemap

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

TextEditor is closed/disposed
TextEditor is closed/disposed
TextEditor is closed/disposed
TextEditor is closed/disposed
TextEditor is closed/disposed

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

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler

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

  Error
    ✓ error code has message


  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers



  Record and execute a macro

    ✓ Can record and execute (267ms)

    ✓ Can repeat last invoked macro (289ms)

    ✓ Can play back with count (420ms)

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

    ✓ Repeat change on contiguous lines (255ms)

    ✓ Append command to a macro (250ms)

    ✓ Can record Ctrl Keys and repeat (178ms)

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



  Mode Handler

    ✓ ctor

    ✓ can set current mode



  Mode Handler Map

    ✓ getOrCreate



  Mode Insert

    ✓ can be activated (89ms)

    ✓ can handle key events

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

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

    ✓ <Esc> can exit insert (82ms)

    ✓ Stay in insert when entering characters (189ms)

    ✓ Can handle 'O' (94ms)

    ✓ Can handle 'i' (140ms)

    ✓ Can handle 'I' (91ms)

    ✓ Can handle 'a' (117ms)

    ✓ Can handle 'A' (78ms)

    ✓ Can handle '<C-w>' (117ms)

    ✓ Can handle <C-w> on leading whitespace (89ms)

    ✓ Can handle <C-w> at beginning of line (58ms)

    ✓ Can handle <C-u> (121ms)

    ✓ Can handle <C-u> on leading characters (211ms)

    ✓ Can handle <C-u> on leading whitespace (70ms)

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

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (51ms)

    ✓ Backspace works on whitespace only lines (90ms)

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

    ✓ Backspace works at beginning of file (72ms)

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

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

    ✓ Can perform insert command prefixed with count (82ms)

    ✓ Can perform append command prefixed with count (89ms)

    ✓ Can perform insert at start of line command prefixed with count (72ms)

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

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

    ✓ Can perform command prefixed with count with <C-[> (62ms)

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

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



  Mode Normal

    ✓ Can be activated

    ✓ Can handle dw (83ms)

    ✓ Can handle dw (96ms)

    ✓ Can handle dw (82ms)

    ✓ Can handle dw across lines (1) (93ms)

    ✓ Can handle dw across lines (2) (89ms)

    ✓ Can handle dd last line (65ms)

    ✓ Can handle dd single line (80ms)

    ✓ Can handle dd (53ms)

    ✓ Can handle 3dd (80ms)

    ✓ Can handle 3dd off end of document (104ms)

    ✓ Can handle d2d (80ms)

    ✓ Can handle dd empty line (83ms)

    ✓ Can handle ddp (100ms)

    ✓ Can handle 'de' (151ms)

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

    ✓ Can handle 'db' (84ms)

    ✓ Can handle 'db then 'db' again (118ms)

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

    ✓ Can handle 'dF' (94ms)

    ✓ Can handle 'dT' (90ms)

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

    ✓ Can handle 'dj' (56ms)

    ✓ Can handle 'dk' (89ms)

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

[main 6:19:57 PM] update#setState checking for updates

    ✓ Can handle 'd]}' without deleting closing bracket (91ms)

    ✓ Can handle 'cw' (187ms)

[main 6:19:57 PM] update#setState idle

    ✓ Can handle 'cw' without deleting following white spaces (55ms)

    ✓ Can handle 'c2w' (65ms)

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

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

    ✓ Can handle 'c]}' without deleting closing bracket (93ms)

    ✓ Can handle 's' (103ms)

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

    ✓ Can handle 'ciw' (149ms)

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

    ✓ Can handle 'caw' (136ms)

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

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

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

    ✓ Can handle 'ci(' on first parentheses (95ms)

    ✓ Can handle 'ci(' with nested parentheses (100ms)

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

    ✓ Can handle 'cib' on first parentheses (104ms)

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

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

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

    ✓ Can handle 'ci{' spanning multiple lines (80ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (82ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (68ms)

    ✓ Can handle 'ci(' on the closing bracket (95ms)

    ✓ Can handle 'ciB' spanning multiple lines (61ms)

    ✓ will fail when ca( with no () (45ms)

    ✓ will fail when ca{ with no {} (62ms)

    ✓ will fail when caB with no {} (67ms)

    ✓ Can handle 'ci[' spanning multiple lines (74ms)

    ✓ Can handle 'ci]' on first bracket (79ms)

    ✓ Can handle 'ca[' on first bracket (79ms)

    ✓ Can handle 'ca]' on first bracket (92ms)

    ✓ Can handle 'ci'' on first quote (64ms)

    ✓ Can handle 'ci'' inside quoted string (147ms)

    ✓ Can handle 'ci'' on closing quote (97ms)

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

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

    ✓ Can handle 'ci"' starting behind the quoted word (59ms)

    ✓ Can handle 'ca"' starting behind the quoted word (93ms)

    ✓ Can handle 'ca"' starting on the opening quote (104ms)

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

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

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

    ✓ Can handle 'ci"' with an escaped backslash (94ms)

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

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

    ✓ Can handle 'ci"' with complex escape sequences (90ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (109ms)

    ✓ will fail when ca" ahead of quoted string (128ms)

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

    ✓ Can handle 'daw' on word with cursor inside spaces (116ms)

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

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

    1) Can handle 'daw' on word with numeric prefix

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

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

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

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

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (77ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (128ms)

    ✓ Can handle 'daw' on word at beginning of file (68ms)

    ✓ Can handle 'daw' on word at beginning of line (81ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (102ms)

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

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

    ✓ Can handle 'daW' around word at whitespace (100ms)

    ✓ Can handle 'daW' on word with trailing spaces (123ms)

    ✓ Can handle 'daW' on word with leading spaces (121ms)

    5) Can handle 'daW' on word with numeric prefix

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

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

    ✓ Can handle 'daW' on end of one line (84ms)

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

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

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

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

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

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

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

    ✓ Can handle 'diw' on word (153ms)

    7) Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line (152ms)

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

    9) 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 (98ms)

    ✓ Can handle 'diW' on word with trailing spaces (102ms)

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

    10) Can handle 'diW' on word with numeric prefix

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

    ✓ Can handle 'diW' on beginning of word (103ms)

    ✓ Can handle d} (70ms)

    ✓ Can handle y} at beginning of line (104ms)

    ✓ Select sentence with trailing spaces (118ms)

    ✓ Select sentence with leading spaces (188ms)

    ✓ Select inner sentence with trailing spaces (99ms)

    ✓ Select inner sentence with leading spaces (179ms)

    ✓ Select spaces between sentences (192ms)

    ✓ Can handle 'df' (123ms)

    ✓ Can handle 'dt' (86ms)

    ✓ Can handle backspace (80ms)

    ✓ Can handle backspace across lines (61ms)

    ✓ Can handle A and backspace (69ms)

    ✓ Can handle 'yy' without changing cursor position (62ms)

    ✓ Can handle 'P' after 'yy' (93ms)

    ✓ Can handle 'p' after 'yy' (153ms)

    ✓ Can handle 'P' after 'Nyy' (84ms)

    ✓ Can handle 'p' after 'Nyy' (116ms)

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

    ✓ Can handle 'gp' after 'yy' (150ms)

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

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

    ✓ Can handle 'gP' after 'yy' (99ms)

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

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

    ✓ Can handle ']p' after 'Nyy' (86ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (99ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (87ms)

    ✓ Can handle '[p' after yy (85ms)

    ✓ Can handle '[p' after 'Nyy' (83ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (102ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (90ms)

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

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

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

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

    ✓ Can repeat w (42ms)

    ✓ Can repeat p (62ms)

    ✓ I works correctly (107ms)

    ✓ gI works correctly (84ms)

    ✓ gi works correctly (162ms)

    ✓ `. works correctly (86ms)

    ✓ '. works correctly (83ms)

    ✓ g; works correctly (114ms)

    ✓ g, works correctly (166ms)

    ✓ g_ works correctly (60ms)

    ✓ 3g_ works correctly (98ms)

    ✓ Can handle space (75ms)

    ✓ Can handle space (109ms)

    ✓ Undo 1 (151ms)

    ✓ Undo 2 (124ms)

    ✓ Undo cursor (238ms)

    ✓ Undo cursor 2 (208ms)

    ✓ Undo cursor 3 (136ms)

    ✓ Undo with movement first (124ms)

    ✓ Can handle 'U' (64ms)

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

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

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

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

    ✓ Can handle 'u' to undo 'U' (111ms)

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

    ✓ Redo (113ms)

    ✓ Redo (141ms)

    ✓ Redo (165ms)

    ✓ Can handle u (54ms)

    ✓ Can handle guw (74ms)

    ✓ Can handle gUw (71ms)

    ✓ Can handle u over line breaks (81ms)

    ✓ can handle s in visual mode (100ms)

    ✓ can handle p with selection (68ms)

    ✓ can handle P with selection (76ms)

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

    ✓ can repeat backspace twice (171ms)

    ✓ can delete linewise with d2G (94ms)

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

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

    ✓ can dE correctly (50ms)

    ✓ can dE correctly (71ms)

    ✓ can dE correctly (88ms)

    ✓ can ctrl-a correctly behind a word (61ms)

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

    ✓ can ctrl-a on word (56ms)

    ✓ can ctrl-a on a hex number (38ms)

    ✓ can ctrl-a on decimal (64ms)

    ✓ can ctrl-a with numeric prefix (63ms)

    ✓ can ctrl-a on a decimal (86ms)

    ✓ can ctrl-a on an octal  (66ms)

    ✓ Correctly increments in the middle of a number (56ms)

    ✓ can ctrl-x correctly behind a word (46ms)

    ✓ can ctrl-a on an number with word before  (51ms)

    ✓ can ctrl-a on an number with word before and after  (44ms)

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

    ✓ can ctrl-a properly on multiple lines (86ms)

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

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

    ✓ can do Y (54ms)

    ✓ Can do S (103ms)

    ✓ / does not affect mark (113ms)

    ✓ / can search with regex (117ms)

    ✓ / can search with newline (89ms)

    ✓ / can search through multiple newlines (141ms)

    ✓ / matches ^ per line (146ms)

    ✓ / matches $ per line (62ms)

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

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

    ✓ <BS> deletes the last character in search in progress mode (69ms)

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

    ✓ <C-h> deletes the last character in search in progress mode (67ms)

    ✓ Can do C (83ms)

    ✓ Can do cit on a matching tag (114ms)

    ✓ Ignores cit on a non-matching tag (168ms)

    ✓ Ignores cit on a nested tag (107ms)

    ✓ Can do cit on a tag with an attribute tag (108ms)

    ✓ Can do cat on a matching tag (126ms)

    ✓ Can do cit on a multiline tag (164ms)

    ✓ Can do cit on a multiline tag with nested tags (168ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (145ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (114ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (90ms)

    ✓ Can do cit on empty tag block, cursor moves to inside (120ms)

    ✓ can do cit with self closing tags (172ms)

    ✓ Respects indentation with cc (82ms)

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

    ✓ can handle 'cc' on empty line (80ms)

    ✓ cc copies linewise (85ms)

    ✓ Indent current line with correct Vim Mode (74ms)

    ✓ Can handle <Esc> and do nothing (97ms)

    ✓ Can handle # on consecutive words (160ms)

    ✓ Can handle # on skipped words (369ms)

    ✓ Can 'D'elete the characters under the cursor until the end of the line (192ms)

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line (395ms)

    ✓ cc on whitespace-only treats whitespace as indent (54ms)

    ✓ Can do cai (180ms)

    ✓ Can do cii (82ms)

    ✓ Can do caI (176ms)

    ✓ Can do dai (232ms)

    ✓ Can do dii (113ms)

    ✓ Can do daI (186ms)

    can handle gn

      ✓ gn selects the next match text (318ms)

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

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

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

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

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

    can handle dgn

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

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

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

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

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

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

    can handle cgn

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

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

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

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

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

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

    can handle gN

      ✓ gN selects the previous match text (512ms)

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

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

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

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

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

    can handle dgN

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

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

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

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

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

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

    can handle cgN

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

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

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

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

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

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



  Mode Replace

    ✓ Can activate with <insert> from Insert mode (79ms)

    ✓ Can activate with R from Normal mode (71ms)

    ✓ Can handle R (95ms)

    ✓ Can handle R past current line (90ms)

    ✓ Can handle R and exit Replace Mode (83ms)

    ✓ Can handle R across lines (164ms)

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

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

    ✓ Can handle backspace (131ms)

    ✓ Can handle backspace (167ms)

    ✓ Can handle backspace across lines (266ms)

    ✓ Can handle arrows (119ms)

    ✓ Can handle . (126ms)

    ✓ Can handle . across lines (189ms)



  Mode Visual

    ✓ can be activated

    ✓ Can handle w (343ms)

    ✓ Can handle wd (194ms)

    ✓ Can handle x (212ms)

    ✓ Can handle x across a selection (193ms)

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

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

    ✓ Can do vwd multiple times (266ms)

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

    ✓ Can handle H key (70ms)

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

    ✓ handles change operator (145ms)

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

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

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

    13) Repeat-prefixed vat does not bleed below

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

    ✓ Can do vi) on a matching parenthesis (128ms)

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

    ✓ Can do va) on a matching parenthesis (120ms)

    ✓ Can do va) on multiple matching parens (126ms)

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

    14) Repeat-prefixed va) does not bleed below

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

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

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

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

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

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

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

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

    ✓ vaf only expands to enclosing pairs (87ms)

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

    ✓ Can do v_x to delete to first char (114ms)

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

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

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

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

    Vim's EOL handling is weird

      ✓ delete through eol (179ms)

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

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

      ✓ vd$ does delete whole line (134ms)

      ✓ Paste over selection copies the selection (122ms)

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

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (65ms)

      ✓ Can handle <down> key (103ms)

      ✓ Can handle <left> key (116ms)

      ✓ Can handle <right> key (107ms)

    handles aw in visual mode

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

      ✓ Can handle 'vawd' on word with trailing spaces (118ms)

      ✓ Can handle 'vawd' on word with leading spaces (153ms)

      15) Can handle 'vawd' on word with numeric prefix

      16) Can handle 'vawd' on word with numeric prefix and across lines

      17) 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 (111ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (204ms)

      18) Can handle 'vaWd' on word with numeric prefix

      19) 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 (104ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (127ms)

      20) Can handle 'vaWd' on word with numeric prefix

      21) 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 (98ms)

      ✓ Can handle 'vawd' on word with trailing spaces (116ms)

      ✓ Can handle 'vawd' on word with leading spaces (130ms)

      22) Can handle 'vawd' on word with numeric prefix

      23) Can handle 'vawd' on word with numeric prefix and across lines

      24) 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 (100ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (146ms)

      25) Can handle 'vaWd' on word with numeric prefix

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

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

    handles as in visual mode

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

      ✓ Select sentence with leading spaces in visual mode (233ms)

      ✓ Select multiple sentences in visual mode (212ms)

    handles is in visual mode

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

      ✓ Select inner sentence with leading spaces in visual mode (229ms)

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

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (236ms)

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

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

    handles replace in visual mode

      ✓ Can do a single line replace (111ms)

      ✓ Can do a multi line replace (156ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (131ms)

      ✓ D deletes the current line (113ms)

    handles indent blocks in visual mode

      ✓ Can do vai (214ms)

      ✓ Can do vii (201ms)

      ✓ Doesn't naively select the next line (182ms)

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

      ✓ Can do vaI (213ms)

    visualstar

      ✓ Works with * (117ms)

      ✓ Works with # (126ms)

    search works in visual mode

      ✓ Works with / (127ms)

      ✓ Works with ? (129ms)

      ✓ Selects correct range (284ms)

    X will delete linewise

      ✓ normal selection (110ms)

      ✓ normal selection (119ms)

    C will delete linewise

      ✓ normal selection (248ms)

      ✓ normal selection (101ms)

    R will delete linewise

      ✓ normal selection (114ms)

      ✓ normal selection (114ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (180ms)

      ✓ upward selection (147ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (139ms)

      ✓ multiline indent bottom up selection (113ms)

      ✓ repeat multiline indent top down selection (169ms)

      ✓ repeat multiline indent bottom up selection (153ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (188ms)

      ✓ multiline outdent bottom up selection (147ms)

      ✓ repeat multiline outdent top down selection (232ms)

      ✓ repeat multiline outdent bottom up selection (135ms)

    Non-darwin <C-c> tests

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

    vi{ will go to end of second to last line

      ✓ select (144ms)

    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 (42ms)

      ✓ 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) (740ms)

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

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

    can handle gn

      ✓ gn selects the next match text (346ms)

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

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

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

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

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



  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (114ms)

    ✓ Can handle A backwards select (110ms)

    ✓ Can handle I forward select (240ms)

    ✓ Can handle I backwards select (129ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (158ms)

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

    ✓ Can handle c forward select (127ms)

    ✓ Can handle c backwards select (116ms)

    ✓ Can handle C (143ms)

    ✓ Can do a multi line replace (116ms)

    ✓ Can handle 'D' (108ms)

    ✓ Can handle 'gj' (147ms)

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

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

    ✓ o works in visual block mode (116ms)

    Non-darwin <C-c> tests

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



  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (234ms)

    ✓ Can handle wd (228ms)

    ✓ Can handle x (186ms)

    ✓ Can handle U (173ms)

    ✓ Can handle x across a selection (173ms)

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

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

    ✓ Can do vwd multiple times (303ms)

    ✓ Can handle U across a selection (251ms)

    ✓ Can handle U across a selection in reverse order (209ms)

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

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

    ✓ handles change operator (204ms)

    ✓ Vp updates register content (93ms)

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

    ✓ Vp does not append unnecessary newlines (middle line) (87ms)

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

    Vim's EOL handling is weird

      ✓ delete through eol (199ms)

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

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

      ✓ vd$ does delete whole line (220ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (104ms)

      ✓ Can handle <down> key (115ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (82ms)

      ✓ Can handle d key (82ms)

      ✓ Can handle d key (106ms)

      ✓ Can handle d key (133ms)

      ✓ can handle 'c' (93ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (186ms)

      ✓ Can do a multi visual line replace (103ms)

      ✓ Can do a multi visual line replace from the bottom up (111ms)

    search works in visual line mode

      ✓ Works with / (83ms)

      ✓ Works with ? (139ms)

    Non-darwin <C-c> tests

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

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (118ms)

      ✓ linewise visual put works also in the end of document (112ms)

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

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

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


  Mode Normal

    ✓ Can handle 'x' (69ms)

    ✓ Can handle 'Nx' (112ms)

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

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

    ✓ Can handle 'Ns' (160ms)

    ✓ Can handle 'Ns' at end of line (73ms)

    ✓ Can handle '<Del>' (90ms)

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

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

    ✓ Can handle 'cc' (97ms)

    ✓ Can handle 'Ncc' (80ms)

    ✓ Can handle 'yy' (97ms)

    ✓ Can handle 'D' (91ms)

    ✓ Can handle 'D' on empty lines (71ms)

    ✓ Can handle 'DD' (100ms)

    ✓ Can handle 'C' (104ms)

    ✓ Can handle 'NC' (101ms)

    ✓ Can handle 'r' (86ms)

    ✓ Can handle '<Count>r' (82ms)

    ✓ Can handle '<Count>r' (96ms)

    ✓ Can handle 'r' after 'dd' (140ms)

    ✓ Can handle 'J' once (87ms)

    ✓ Can handle 'J' twice (123ms)

    ✓ Can handle 'J' with empty last line (76ms)

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

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

    ✓ Can handle 'J' with only white space on next line (80ms)

    ✓ Can handle 'J' with TWO indented lines (139ms)

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

    ✓ Can handle 'J' with a following delete (82ms)

    ✓ Can handle 'J' in Visual Line mode (108ms)

    ✓ Can handle 'gJ' once (81ms)

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

    ✓ Can handle '~' (102ms)

    ✓ Can handle 'g~{motion}' (78ms)

    ✓ Can handle '<BS>' in insert mode (134ms)

    ✓ Can handle undo with P (165ms)



  Dot Operator

    ✓ Can repeat '~' with <num> (83ms)

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

    ✓ Can repeat 'x' (78ms)

    ✓ Can repeat 'J' (116ms)

    ✓ Can handle dot with A (145ms)

    ✓ Can handle dot with I (146ms)

    ✓ Can repeat actions that require selections (144ms)



  Repeat content change

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

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

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

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

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



  Matching Bracket (%)

    ✓ before opening parenthesis (79ms)

    ✓ inside parenthesis (95ms)

    ✓ nested parenthesis beginning (58ms)

    ✓ nested parenthesis end (100ms)

    ✓ nested bracket and parenthesis beginning (53ms)

    ✓ nested bracket, parenthesis, braces beginning (82ms)

    ✓ nested bracket, parenthesis, braces end (111ms)


  Motions in Normal Mode

    ✓ Can handle [( (104ms)

    ✓ Can handle nested [( (89ms)

    ✓ Can handle <number>[( (107ms)

    ✓ Can handle [( and character under cursor exclusive (92ms)

    ✓ Can handle ]) (76ms)

    ✓ Can handle nested ]) (80ms)

    ✓ Can handle <number>]) (119ms)

    ✓ Can handle ]) and character under cursor exclusive (81ms)

    ✓ Can handle [{ (86ms)

    ✓ Can handle nested [{ (80ms)

    ✓ Can handle <number>[{ (112ms)

    ✓ Can handle [{ and character under cursor exclusive (88ms)

    ✓ Can handle ]} (96ms)

    ✓ Can handle nested ]} (88ms)

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

    ✓ Can handle ]} and character under cursor exclusive (95ms)

    ✓ Can handle 'ge' (142ms)

    ✓ Can handle 'gg' (187ms)

    ✓ Can handle 'gg' to first non blank char on random line (135ms)

    ✓ Can handle 'gg' to first non blank char on first line (93ms)

    ✓ Retain same column when moving up/down (118ms)

    ✓ Can handle <enter> (105ms)

    ✓ $ always keeps cursor on EOL (172ms)

    ✓ Can handle $ with a count (79ms)

    ✓ Can handle $ with a count at end of file (75ms)

    ✓ Can handle <end> with a count (90ms)

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

    ✓ Can handle 'f' (112ms)

    ✓ Can handle 'f' twice (225ms)

    ✓ Can handle 'F' (129ms)

    ✓ Can handle 'F' twice (139ms)

    ✓ Can handle 't' (112ms)

    ✓ Can handle 't' twice (131ms)

    ✓ Can handle 'T' (131ms)

    ✓ Can handle 'T' twice (153ms)

    ✓ Can run a forward search (85ms)

    ✓ Can run a forward and find next search (100ms)

    ✓ Can run a reverse search (149ms)

    ✓ Can run a reverse and find next search (185ms)

    ✓ maintains column position correctly (89ms)

    ✓ maintains column position correctly with $ (49ms)

    ✓ Can handle G  (67ms)

    ✓ Can handle G with number prefix (59ms)

    ✓ Can handle G with number prefix (45ms)

    ✓ Can handle gg (62ms)

    ✓ Can handle gg with number prefix (110ms)

    ✓ Can handle 0 (133ms)

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

    ✓ Can handle g* (64ms)

    ✓ Can handle g*n (80ms)

    ✓ Can handle * (55ms)

    ✓ Can handle ** (62ms)

    ✓ Can handle # on whitespace (95ms)

    ✓ Can handle # on EOL (246ms)

    ✓ Can handle g# (209ms)

    ✓ Can handle g#n (226ms)

    ✓ Can handle # (232ms)

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

    ✓ Can handle ## (165ms)

    ✓ Can handle | (141ms)

    ✓ Can handle <number> | (154ms)

    ✓ Can handle + (55ms)

    ✓ Can handle + indent (56ms)

    ✓ Can handle + with count prefix (65ms)

    ✓ Can handle - (66ms)

    ✓ Can handle - indent (65ms)

    ✓ Can handle - with count prefix (96ms)

    ✓ Can handle _ (52ms)

    ✓ Can handle _ with count prefix (92ms)

    ✓ Can handle g_ (72ms)

    ✓ Can handle g_ with count prefix (100ms)

    ✓ Can handle <up> key (79ms)

    ✓ Can handle <down> key (53ms)

    ✓ Can handle <left> key (49ms)

    ✓ Can handle <right> key (103ms)



  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



  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 (56ms)

        ✓ l wraps to next line (91ms)

        ✓ <left> wraps to previous line (59ms)

        ✓ <right> wraps to next line (85ms)

      insert mode

        ✓ <left> wraps to previous line (82ms)

        ✓ <right> once goes to end of line (97ms)

        ✓ <right> twice wraps to next line (95ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (71ms)

        ✓ l does not wrap to next line (80ms)

        ✓ <left> does not wrap to previous line (52ms)

        ✓ <right> does not wrap to next line (86ms)

      insert mode

        ✓ <left> does not wrap to previous line (49ms)

        ✓ <right> does not wrap to next line (153ms)


  Multicursor

    ✓ can add multiple cursors below (135ms)

    ✓ can add multiple cursors above (191ms)


  numeric string
    ✓ fails on non-string
    ✓ handles hex round trip
    ✓ handles decimal round trip
    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (373ms)

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

    ✓ block comment with motion (596ms)

    ✓ block comment in Visual Mode (235ms)



  put operator

    ✓ basic put test (425ms)

    ✓ test yy end of line (162ms)

    ✓ test yy first line (240ms)

    ✓ test yy middle line (162ms)

    ✓ test yy with correct positon movement (149ms)



  shift operator

    ✓ basic shift left test (117ms)

    ✓ shift left goto end test (117ms)

    ✓ shift left goto line test (89ms)

    ✓ shift right goto end test (82ms)

    ✓ shift right goto line test (78ms)



  easymotion plugin

    ✓ Can handle s move (112ms)

    ✓ Can handle 2s move (130ms)

    ✓ Can handle f move (251ms)

    ✓ Can handle 2f move (90ms)

    ✓ Can handle F move (114ms)

    ✓ Can handle 2F move (171ms)

    ✓ Can handle t move (119ms)

    ✓ Can handle bd-t move (133ms)

    ✓ Can handle 2t move (100ms)

    ✓ Can handle bd-t2 move (146ms)

    ✓ Can handle T move (121ms)

    ✓ Can handle 2T move (124ms)

    ✓ Can handle w move (127ms)

    ✓ Can handle bd-w move (103ms)

    ✓ Can handle b move (111ms)

    ✓ Can handle e move (111ms)

    ✓ Can handle bd-e move (215ms)

    ✓ Can handle ge move (153ms)

    ✓ Can handle n-char move (126ms)

    ✓ Can handle j move (100ms)

    ✓ Can handle k move (100ms)

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

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

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

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

    ✓ Can handle linebackward move (1) (149ms)

    ✓ Can handle linebackward move (2) (132ms)


  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode



  sneak plugin

    ✓ Can handle s motion (67ms)

    ✓ Can handle S motion (85ms)

    ✓ Can handle <operator>z motion (87ms)

    ✓ Can handle <operator>Z motion (101ms)

    ✓ Can handle s; motion (77ms)

    ✓ Can handle s, motion (115ms)

    ✓ Can handle S; motion (102ms)

    ✓ Can handle S, motion (129ms)


  surround plugin

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

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

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

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

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

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

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

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

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

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

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

    ✓ change surround (145ms)

    ✓ change surround with alias (184ms)

    ✓ change surround to tags (272ms)

    ✓ delete surround (123ms)

    ✓ delete surround with alias (118ms)

    ✓ delete surround with tags (183ms)

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

    ✓ changing brackets with surround works again (111ms)


  register

    ✓ Can copy to a register (101ms)

    ✓ Can use two registers together (161ms)

    ✓ Can use black hole register (91ms)

    ✓ System clipboard works with chinese characters (148ms)

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

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

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

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

    ✓ Can put and get to register

    clipboard

      ✓ Can access '*' (clipboard) register (113ms)

      ✓ Can access '+' (clipboard) register (128ms)



  Repeatable movements with f and t

    ✓ Can repeat f<character> (57ms)

    ✓ Can repeat reversed F<character> (58ms)

    ✓ Can repeat t<character> (57ms)

    ✓ Can repeat N times reversed t<character> (69ms)



  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist





  938 passing (3m)

  27 failing



  1) Mode Normal
       Can handle 'daw' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:647:3)


  2) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:655:3)

  3) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one two six. Actual=one two .
      + expected - actual

      -one two 
      +one two six
      
      at Suite.suite (test/mode/modeNormal.test.ts:663:3)


  4) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:671:3)


  5) Mode Normal
       Can handle 'daW' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:761:3)

  6) Mode Normal
       Can handle 'daW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   ive.  six.
      + expected - actual

      -one   two   three,   ive.  six
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:769:3)


  7) Mode Normal
       Can handle 'diw' on word with numeric prefix:

      Content does not match; Expected=   three,   four  . Actual=   two   three,   four  .
      + expected - actual

      -   two   three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:851:3)

  8) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,     .
      + expected - actual

      -one   two   three,     
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:867:3)


  9) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,     .
      + expected - actual

      -one   two   three,     
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:875:3)


  10) Mode Normal
       Can handle 'diW' on word with numeric prefix:

      Content does not match; Expected=   three,   four  . Actual=   two   three,   four  .
      + expected - actual

      -   two   three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:908:3)

  11) Mode Normal
       Can handle 'diW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,     .
      + expected - actual

      -one   two   three,     
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:916:3)


  12) Mode Visual
       Can maintain selection on failure with repeat-prefixed vat on multiple matching tags:

      Content does not match; Expected=one  four. Actual=one lo</blink> three</blank> four.
      + expected - actual

      -one lo</blink> three</blank> four
      +one  four
      
      at Suite.suite (test/mode/modeVisual.test.ts:560:3)


  13) Mode Visual
       Repeat-prefixed vat does not bleed below:

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

      -est
      
      at Suite.suite (test/mode/modeVisual.test.ts:568:3)

  14) Mode Visual
       Repeat-prefixed va) does not bleed below:

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

      -	)
      
      at Suite.suite (test/mode/modeVisual.test.ts:624:3)


  15) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:254:5)

  16) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:262:5)


  17) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:270:5)

  18) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:305:5)


  19) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   ive.  six.
      + expected - actual

      -one   two   three,   ive.  six
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:313:5)

  20) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:347:5)


  21) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   ive.  six.
      + expected - actual

      -one   two   three,   ive.  six
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:355:5)

  22) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:389:5)

  23) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:397:5)


  24) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:405:5)

  25) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:440:5)

  26) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   ive.  six.
      + expected - actual

      -one   two   three,   ive.  six
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:448:5)


  27) Mode Visual
       handles tag blocks in visual mode
         Count-prefixed vit alternates expanding selection between inner and outer tag brackets:

      Content does not match; Expected=<div></div>. Actual=<div> one <p></p> three </div>.
      + expected - actual

      -<div> one <p></p> three </div>
      +<div></div>
      
      at Suite.suite (test/mode/modeVisual.test.ts:526:5)




Tests exited with code: 1

@TravisBuddy
Copy link

Travis tests have failed

Hey @xmbhasin,
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

npm test --silent
### VS Code Extension Test Run ###
Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code into "/home/travis/build/VSCodeVim/Vim/.vscode-test/stable" from: https://vscode-update.azurewebsites.net/1.25.1/linux-x64/stable
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/stable/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
Xlib:  extension "RANDR" missing on display ":99.0".

Xlib:  extension "RANDR" missing on display ":99.0".

[main 7:13:01 PM] update#setState idle

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

bash: no job control in this shell

nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/home/travis/.nvm/versions/node/v8.11.3"
Run `unset npm_config_prefix` to unset it.





  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


  command-line history

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ load and save history

    ✓ change configuration.history

  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


  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



  Basic sort

    ✓ Sort whole file, asc (192ms)

    ✓ Sort whole file, dsc (146ms)

    ✓ Sort range, asc (209ms)

    ✓ Sort range, dsc (175ms)



  :close args parser

    ✓ has all aliases

    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !
    ✓ throws if space before !
    ✓ ignores space after !

    ✓ throws if bad input



  :quit args parser

    ✓ has all aliases

    ✓ 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



  :write args parser

    ✓ has all aliases

    ✓ 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 (88ms)

    ✓ Replace with `g` flag (95ms)

    ✓ Replace multiple lines (178ms)

    ✓ Replace across specific lines (108ms)

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

    ✓ Replace text in selection (194ms)

    ✓ Substitute support marks (214ms)
    Effects of substituteGlobalFlag=true

      ✓ Replace all matches in the line (106ms)

      ✓ Replace with `g` flag inverts global flag (110ms)

      ✓ Replace multiple lines (129ms)

      ✓ Replace across specific lines (104ms)

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

      ✓ Replace text in selection (203ms)

      ✓ Substitute support marks (172ms)

      ✓ Substitute with escaped delimiter (94ms)
    Substitute with empty search string should use previous search

      ✓ Substitute with previous search using * (292ms)

      ✓ Substitute with previous search using # (342ms)

      ✓ Substitute with previous search using / (347ms)

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



  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file (63ms)

    ✓ tabedit with no arguments when not in workspace opens an untitled file (38ms)

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

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



  Vertical split

    ✓ Run :vs (124ms)

    ✓ Run :vsp (103ms)



  Basic write-quit

    ✓ Run write and quit (4097ms)



  Configuration

    ✓ remappings are normalized

    ✓ Can handle long key chords (75ms)

    ✓ whichwrap is parsed into wrapKeys



  Notation

    ✓ Normalize



  Remapper

    ✓ getLongestedRemappedKeySequence

    ✓ getMatchingRemap

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

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

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

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler


  Error

    ✓ error code has message



  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers



  Record and execute a macro

    ✓ Can record and execute (244ms)

    ✓ Can repeat last invoked macro (310ms)

    ✓ Can play back with count (409ms)

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

    ✓ Repeat change on contiguous lines (265ms)

    ✓ Append command to a macro (225ms)

    ✓ Can record Ctrl Keys and repeat (188ms)

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


  Mode Handler

    ✓ ctor

    ✓ can set current mode



  Mode Handler Map
    ✓ getOrCreate



  Mode Insert

    ✓ can be activated (109ms)

    ✓ can handle key events

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

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

    ✓ <Esc> can exit insert (74ms)

    ✓ Stay in insert when entering characters (112ms)

    ✓ Can handle 'O' (84ms)

    ✓ Can handle 'i' (111ms)

    ✓ Can handle 'I' (77ms)

    ✓ Can handle 'a' (154ms)

    ✓ Can handle 'A' (83ms)

    ✓ Can handle '<C-w>' (112ms)

    ✓ Can handle <C-w> on leading whitespace (85ms)

    ✓ Can handle <C-w> at beginning of line (68ms)

    ✓ Can handle <C-u> (70ms)

    ✓ Can handle <C-u> on leading characters (229ms)

    ✓ Can handle <C-u> on leading whitespace (87ms)

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

    ✓ will not remove leading spaces input by user (53ms)

    ✓ will remove closing bracket

    ✓ Backspace works on whitespace only lines (112ms)

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

    ✓ Backspace works at beginning of file (56ms)

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

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

    ✓ Can perform insert command prefixed with count (77ms)

    ✓ Can perform append command prefixed with count (103ms)

    ✓ Can perform insert at start of line command prefixed with count (75ms)

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

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

    ✓ Can perform command prefixed with count with <C-[> (45ms)

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

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



  Mode Normal

    ✓ Can be activated (43ms)

    ✓ Can handle dw (80ms)

[main 7:13:31 PM] update#setState checking for updates

    ✓ Can handle dw (85ms)

    ✓ Can handle dw (71ms)

[main 7:13:32 PM] update#setState idle

    ✓ Can handle dw across lines (1) (182ms)

    ✓ Can handle dw across lines (2) (84ms)

    ✓ Can handle dd last line (84ms)

    ✓ Can handle dd single line (80ms)

    ✓ Can handle dd (52ms)

    ✓ Can handle 3dd (80ms)

    ✓ Can handle 3dd off end of document (101ms)

    ✓ Can handle d2d (91ms)

    ✓ Can handle dd empty line (63ms)

    ✓ Can handle ddp (122ms)

    ✓ Can handle 'de' (170ms)

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

    ✓ Can handle 'db' (148ms)

    ✓ Can handle 'db then 'db' again (141ms)

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

    ✓ Can handle 'dF' (81ms)

    ✓ Can handle 'dT' (118ms)

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

    ✓ Can handle 'dj' (80ms)

    ✓ Can handle 'dk' (98ms)

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

    ✓ Can handle 'd]}' without deleting closing bracket (98ms)

    ✓ Can handle 'cw' (226ms)

    ✓ Can handle 'cw' without deleting following white spaces (123ms)

    ✓ Can handle 'c2w' (71ms)

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

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

    ✓ Can handle 'c]}' without deleting closing bracket (119ms)

    ✓ Can handle 's' (69ms)

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

    ✓ Can handle 'ciw' (190ms)

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

    ✓ Can handle 'caw' (205ms)

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

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

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

    ✓ Can handle 'ci(' on first parentheses (100ms)

    ✓ Can handle 'ci(' with nested parentheses (128ms)

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

    ✓ Can handle 'cib' on first parentheses (105ms)

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

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

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

    ✓ Can handle 'ci{' spanning multiple lines (91ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (162ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (95ms)

    ✓ Can handle 'ci(' on the closing bracket (110ms)

    ✓ Can handle 'ciB' spanning multiple lines (69ms)

error: ModeHandler: error handling key=(. err=Error: what in god's name.

    1) will fail when ca( with no ()

error: ModeHandler: error handling key={. err=Error: what in god's name.

    2) will fail when ca{ with no {}

error: ModeHandler: error handling key=B. err=Error: what in god's name.

    3) will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines (120ms)

    ✓ Can handle 'ci]' on first bracket (94ms)

    ✓ Can handle 'ca[' on first bracket (88ms)

    ✓ Can handle 'ca]' on first bracket (95ms)

    ✓ Can handle 'ci'' on first quote (88ms)

    ✓ Can handle 'ci'' inside quoted string (97ms)

    ✓ Can handle 'ci'' on closing quote (112ms)

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

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

    ✓ Can handle 'ci"' starting behind the quoted word (96ms)

    ✓ Can handle 'ca"' starting behind the quoted word (88ms)

    ✓ Can handle 'ca"' starting on the opening quote (183ms)

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

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

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

    ✓ Can handle 'ci"' with an escaped backslash (99ms)

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

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

    ✓ Can handle 'ci"' with complex escape sequences (140ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (103ms)

    ✓ will fail when ca" ahead of quoted string (93ms)

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

    ✓ Can handle 'daw' on word with cursor inside spaces (152ms)

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

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

    4) Can handle 'daw' on word with numeric prefix

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

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

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

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

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (118ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (150ms)

    ✓ Can handle 'daw' on word at beginning of file (95ms)

    ✓ Can handle 'daw' on word at beginning of line (90ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (134ms)

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

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

    ✓ Can handle 'daW' around word at whitespace (125ms)

    ✓ Can handle 'daW' on word with trailing spaces (130ms)

    ✓ Can handle 'daW' on word with leading spaces (150ms)

    8) Can handle 'daW' on word with numeric prefix

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

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

    ✓ Can handle 'daW' on end of one line (111ms)

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

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

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

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

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

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

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

    ✓ Can handle 'diw' on word (102ms)

    10) Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line (221ms)

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

    12) 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 (136ms)

    ✓ Can handle 'diW' on word with trailing spaces (107ms)

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

    13) Can handle 'diW' on word with numeric prefix

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

    ✓ Can handle 'diW' on beginning of word (85ms)

    ✓ Can handle d} (69ms)

    ✓ Can handle y} at beginning of line (167ms)

    ✓ Select sentence with trailing spaces (200ms)

    ✓ Select sentence with leading spaces (211ms)

    ✓ Select inner sentence with trailing spaces (188ms)

    ✓ Select inner sentence with leading spaces (252ms)

    ✓ Select spaces between sentences (256ms)

    ✓ Can handle 'df' (115ms)

    ✓ Can handle 'dt' (113ms)

    ✓ Can handle backspace (81ms)

    ✓ Can handle backspace across lines (67ms)

    ✓ Can handle A and backspace (78ms)

    ✓ Can handle 'yy' without changing cursor position (100ms)

    ✓ Can handle 'P' after 'yy' (91ms)

    ✓ Can handle 'p' after 'yy' (170ms)

    ✓ Can handle 'P' after 'Nyy' (86ms)

    ✓ Can handle 'p' after 'Nyy' (145ms)

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

    ✓ Can handle 'gp' after 'yy' (131ms)

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

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

    ✓ Can handle 'gP' after 'yy' (103ms)

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

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

    ✓ Can handle ']p' after 'Nyy' (106ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (138ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (130ms)

    ✓ Can handle '[p' after yy (106ms)

    ✓ Can handle '[p' after 'Nyy' (79ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (97ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (153ms)

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

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

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

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

    ✓ Can repeat w (64ms)

    ✓ Can repeat p (63ms)

    ✓ I works correctly (161ms)

    ✓ gI works correctly (68ms)

    ✓ gi works correctly (192ms)

    ✓ `. works correctly (99ms)

    ✓ '. works correctly (94ms)

    ✓ g; works correctly (135ms)

    ✓ g, works correctly (109ms)

    ✓ g_ works correctly (92ms)

    ✓ 3g_ works correctly (79ms)

    ✓ Can handle space (66ms)

    ✓ Can handle space (84ms)

    ✓ Undo 1 (184ms)

    ✓ Undo 2 (114ms)

    ✓ Undo cursor (149ms)

    ✓ Undo cursor 2 (141ms)

    ✓ Undo cursor 3 (112ms)

    ✓ Undo with movement first (109ms)

    ✓ Can handle 'U' (70ms)

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

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

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

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

    ✓ Can handle 'u' to undo 'U' (83ms)

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

    ✓ Redo (182ms)

    ✓ Redo (108ms)

    ✓ Redo (194ms)

    ✓ Can handle u (75ms)

    ✓ Can handle guw (49ms)

    ✓ Can handle gUw (52ms)

    ✓ Can handle u over line breaks (58ms)

    ✓ can handle s in visual mode (86ms)

    ✓ can handle p with selection (88ms)

    ✓ can handle P with selection (87ms)

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

    ✓ can repeat backspace twice (84ms)

    ✓ can delete linewise with d2G (65ms)

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

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

    ✓ can dE correctly (47ms)

    ✓ can dE correctly (64ms)

    ✓ can dE correctly (94ms)

    ✓ can ctrl-a correctly behind a word (49ms)

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

    ✓ can ctrl-a on word (82ms)

    ✓ can ctrl-a on a hex number (51ms)

    ✓ can ctrl-a on decimal (66ms)

    ✓ can ctrl-a with numeric prefix (65ms)

    ✓ can ctrl-a on a decimal (69ms)

    ✓ can ctrl-a on an octal  (51ms)

    ✓ Correctly increments in the middle of a number (85ms)

    ✓ can ctrl-x correctly behind a word (157ms)

    ✓ can ctrl-a on an number with word before  (60ms)

    ✓ can ctrl-a on an number with word before and after  (106ms)

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

    ✓ can ctrl-a properly on multiple lines (79ms)

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

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

    ✓ can do Y (59ms)

    ✓ Can do S (122ms)

    ✓ / does not affect mark (73ms)

    ✓ / can search with regex (96ms)

    ✓ / can search with newline (89ms)

    ✓ / can search through multiple newlines (129ms)

    ✓ / matches ^ per line (73ms)

    ✓ / matches $ per line (114ms)

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

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

    ✓ <BS> deletes the last character in search in progress mode (51ms)

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

    ✓ <C-h> deletes the last character in search in progress mode (74ms)

    ✓ Can do C (62ms)

    15) Can do cit on a matching tag

error: ModeHandler: error handling key=t. err=Error: what in god's name.

    16) Ignores cit on a non-matching tag

    17) Ignores cit on a nested tag

    18) Can do cit on a tag with an attribute tag

    19) Can do cat on a matching tag

    20) Can do cit on a multiline tag

    21) Can do cit on a multiline tag with nested tags

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

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

error: ModeHandler: error handling key=t. err=Error: what in god's name.

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

error: ModeHandler: error handling key=t. err=Error: what in god's name.

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

    26) can do cit with self closing tags

    ✓ Respects indentation with cc (108ms)

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

    ✓ can handle 'cc' on empty line (65ms)

    ✓ cc copies linewise (81ms)

    ✓ Indent current line with correct Vim Mode (62ms)

    ✓ Can handle <Esc> and do nothing (83ms)

    ✓ Can handle # on consecutive words (142ms)

    ✓ Can handle # on skipped words (189ms)

    ✓ Can 'D'elete the characters under the cursor until the end of the line (174ms)

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line (293ms)

    ✓ cc on whitespace-only treats whitespace as indent (65ms)

    ✓ Can do cai (190ms)

    ✓ Can do cii (93ms)

    ✓ Can do caI (207ms)

    ✓ Can do dai (180ms)

    ✓ Can do dii (74ms)

    ✓ Can do daI (177ms)

    can handle gn

      ✓ gn selects the next match text (306ms)

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

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

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

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

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

    can handle dgn

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

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

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

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

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

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

    can handle cgn

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

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

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

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

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

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

    can handle gN

      ✓ gN selects the previous match text (327ms)

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

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

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

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

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

    can handle dgN

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

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

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

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

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

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

    can handle cgN

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

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

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

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

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

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


  Mode Replace

    ✓ Can activate with <insert> from Insert mode (70ms)

    ✓ Can activate with R from Normal mode (90ms)

    ✓ Can handle R (93ms)

    ✓ Can handle R past current line (103ms)

    ✓ Can handle R and exit Replace Mode (83ms)

    ✓ Can handle R across lines (134ms)

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

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

    ✓ Can handle backspace (129ms)

    ✓ Can handle backspace (219ms)

    ✓ Can handle backspace across lines (188ms)

    ✓ Can handle arrows (141ms)

    ✓ Can handle . (151ms)

    ✓ Can handle . across lines (184ms)


  Mode Visual

    ✓ can be activated

    ✓ Can handle w (252ms)

    ✓ Can handle wd (134ms)

    ✓ Can handle x (163ms)

    ✓ Can handle x across a selection (254ms)

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

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

    ✓ Can do vwd multiple times (264ms)

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

    ✓ Can handle H key (80ms)

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

    ✓ handles change operator (155ms)

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

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

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

    28) Repeat-prefixed vat does not bleed below

    29) Failed vat does not expand or move selection, remains in visual mode

    ✓ Can do vi) on a matching parenthesis (127ms)

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

    ✓ Can do va) on a matching parenthesis (138ms)

    ✓ Can do va) on multiple matching parens (175ms)

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

    31) Repeat-prefixed va) does not bleed below

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

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

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

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

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

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

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

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

    ✓ vaf only expands to enclosing pairs (113ms)

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

    ✓ Can do v_x to delete to first char (158ms)

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

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

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

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

    Vim's EOL handling is weird

      ✓ delete through eol (210ms)

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

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

      ✓ vd$ does delete whole line (114ms)

      ✓ Paste over selection copies the selection (103ms)

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

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (97ms)

      ✓ Can handle <down> key (99ms)

      ✓ Can handle <left> key (138ms)

      ✓ Can handle <right> key (85ms)

    handles aw in visual mode

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

      ✓ Can handle 'vawd' on word with trailing spaces (126ms)

      ✓ Can handle 'vawd' on word with leading spaces (120ms)

      32) Can handle 'vawd' on word with numeric prefix

      33) Can handle 'vawd' on word with numeric prefix and across lines

      34) 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 (130ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (126ms)

      35) Can handle 'vaWd' on word with numeric prefix

      36) 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 (115ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (180ms)

      37) Can handle 'vaWd' on word with numeric prefix

      38) 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 (166ms)

      ✓ Can handle 'vawd' on word with trailing spaces (133ms)

      ✓ Can handle 'vawd' on word with leading spaces (202ms)

      39) Can handle 'vawd' on word with numeric prefix

      40) Can handle 'vawd' on word with numeric prefix and across lines

      41) 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 (151ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (254ms)

      42) Can handle 'vaWd' on word with numeric prefix

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

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

    handles as in visual mode

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

      ✓ Select sentence with leading spaces in visual mode (198ms)

      ✓ Select multiple sentences in visual mode (185ms)

    handles is in visual mode

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

      ✓ Select inner sentence with leading spaces in visual mode (188ms)

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

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (154ms)

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

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

    handles replace in visual mode

      ✓ Can do a single line replace (106ms)

      ✓ Can do a multi line replace (115ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (199ms)

      ✓ D deletes the current line (90ms)

    handles indent blocks in visual mode

      ✓ Can do vai (150ms)

      ✓ Can do vii (121ms)

      ✓ Doesn't naively select the next line (115ms)

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

      ✓ Can do vaI (153ms)

    visualstar

      ✓ Works with * (110ms)

      ✓ Works with # (85ms)

    search works in visual mode

      ✓ Works with / (76ms)

      ✓ Works with ? (115ms)

      ✓ Selects correct range (162ms)

    X will delete linewise

      ✓ normal selection (95ms)

      ✓ normal selection (113ms)

    C will delete linewise

      ✓ normal selection (85ms)

      ✓ normal selection (85ms)

    R will delete linewise

      ✓ normal selection (85ms)

      ✓ normal selection (111ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (144ms)

      ✓ upward selection (238ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (73ms)

      ✓ multiline indent bottom up selection (99ms)

      ✓ repeat multiline indent top down selection (105ms)

      ✓ repeat multiline indent bottom up selection (120ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (93ms)

      ✓ multiline outdent bottom up selection (93ms)

      ✓ repeat multiline outdent top down selection (132ms)

      ✓ repeat multiline outdent bottom up selection (143ms)

    Non-darwin <C-c> tests

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

    vi{ will go to end of second to last line

      ✓ select (99ms)

    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) (506ms)

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

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

    can handle gn

      ✓ gn selects the next match text (320ms)

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

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

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

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

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



  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (106ms)

    ✓ Can handle A backwards select (90ms)

    ✓ Can handle I forward select (109ms)

    ✓ Can handle I backwards select (115ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (80ms)

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

    ✓ Can handle c forward select (95ms)

    ✓ Can handle c backwards select (199ms)

    ✓ Can handle C (92ms)

    ✓ Can do a multi line replace (112ms)

    ✓ Can handle 'D' (81ms)

    ✓ Can handle 'gj' (71ms)

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

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

    ✓ o works in visual block mode (91ms)

    Non-darwin <C-c> tests

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


  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (214ms)

    ✓ Can handle wd (163ms)

    ✓ Can handle x (153ms)

    ✓ Can handle U (113ms)

    ✓ Can handle x across a selection (128ms)

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

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

    ✓ Can do vwd multiple times (417ms)

    ✓ Can handle U across a selection (181ms)

    ✓ Can handle U across a selection in reverse order (178ms)

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

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

    ✓ handles change operator (142ms)

    ✓ Vp updates register content (73ms)

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

    ✓ Vp does not append unnecessary newlines (middle line) (74ms)

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

    Vim's EOL handling is weird

      ✓ delete through eol (121ms)

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

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

      ✓ vd$ does delete whole line (81ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (85ms)

      ✓ Can handle <down> key (73ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (87ms)

      ✓ Can handle d key (106ms)

      ✓ Can handle d key (96ms)

      ✓ Can handle d key (79ms)

      ✓ can handle 'c' (146ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (74ms)

      ✓ Can do a multi visual line replace (93ms)

      ✓ Can do a multi visual line replace from the bottom up (75ms)

    search works in visual line mode

      ✓ Works with / (84ms)

      ✓ Works with ? (100ms)

    Non-darwin <C-c> tests

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

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (93ms)

      ✓ linewise visual put works also in the end of document (98ms)

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

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

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



  Mode Normal

    ✓ Can handle 'x' (107ms)

    ✓ Can handle 'Nx' (76ms)

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

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

    ✓ Can handle 'Ns' (69ms)

    ✓ Can handle 'Ns' at end of line (68ms)

    ✓ Can handle '<Del>' (79ms)

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

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

    ✓ Can handle 'cc' (88ms)

    ✓ Can handle 'Ncc' (102ms)

    ✓ Can handle 'yy' (93ms)

    ✓ Can handle 'D' (66ms)

    ✓ Can handle 'D' on empty lines (169ms)

    ✓ Can handle 'DD' (75ms)

    ✓ Can handle 'C' (88ms)

    ✓ Can handle 'NC' (74ms)

    ✓ Can handle 'r' (101ms)

    ✓ Can handle '<Count>r' (82ms)

    ✓ Can handle '<Count>r' (75ms)

    ✓ Can handle 'r' after 'dd' (133ms)

    ✓ Can handle 'J' once (87ms)

    ✓ Can handle 'J' twice (119ms)

    ✓ Can handle 'J' with empty last line (63ms)

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

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

    ✓ Can handle 'J' with only white space on next line (73ms)

    ✓ Can handle 'J' with TWO indented lines (85ms)

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

    ✓ Can handle 'J' with a following delete (101ms)

    ✓ Can handle 'J' in Visual Line mode (85ms)

    ✓ Can handle 'gJ' once (96ms)

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

    ✓ Can handle '~' (63ms)

    ✓ Can handle 'g~{motion}' (69ms)

    ✓ Can handle '<BS>' in insert mode (79ms)

    ✓ Can handle undo with P (224ms)



  Dot Operator

    ✓ Can repeat '~' with <num> (152ms)

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

    ✓ Can repeat 'x' (70ms)

    ✓ Can repeat 'J' (80ms)

    ✓ Can handle dot with A (131ms)

    ✓ Can handle dot with I (144ms)

    ✓ Can repeat actions that require selections (104ms)


  Repeat content change

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

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

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

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

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



  Matching Bracket (%)

    ✓ before opening parenthesis (77ms)

    ✓ inside parenthesis (50ms)

    ✓ nested parenthesis beginning (44ms)

    ✓ nested parenthesis end (113ms)

    ✓ nested bracket and parenthesis beginning (68ms)

    ✓ nested bracket, parenthesis, braces beginning (59ms)

    ✓ nested bracket, parenthesis, braces end (101ms)



  Motions in Normal Mode

    ✓ Can handle [( (75ms)

    ✓ Can handle nested [( (114ms)

    ✓ Can handle <number>[( (97ms)

    ✓ Can handle [( and character under cursor exclusive (79ms)

    ✓ Can handle ]) (89ms)

    ✓ Can handle nested ]) (77ms)

    ✓ Can handle <number>]) (88ms)

    ✓ Can handle ]) and character under cursor exclusive (102ms)

    ✓ Can handle [{ (192ms)

    ✓ Can handle nested [{ (96ms)

    ✓ Can handle <number>[{ (89ms)

    ✓ Can handle [{ and character under cursor exclusive (73ms)

    ✓ Can handle ]} (78ms)

    ✓ Can handle nested ]} (89ms)

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

    ✓ Can handle ]} and character under cursor exclusive (94ms)

    ✓ Can handle 'ge' (151ms)

    ✓ Can handle 'gg' (113ms)

    ✓ Can handle 'gg' to first non blank char on random line (94ms)

    ✓ Can handle 'gg' to first non blank char on first line (89ms)

    ✓ Retain same column when moving up/down (172ms)

    ✓ Can handle <enter> (101ms)

    ✓ $ always keeps cursor on EOL (159ms)

    ✓ Can handle $ with a count (92ms)

    ✓ Can handle $ with a count at end of file (84ms)

    ✓ Can handle <end> with a count (95ms)

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

    ✓ Can handle 'f' (126ms)

    ✓ Can handle 'f' twice (151ms)

    ✓ Can handle 'F' (140ms)

    ✓ Can handle 'F' twice (123ms)

    ✓ Can handle 't' (132ms)

    ✓ Can handle 't' twice (203ms)

    ✓ Can handle 'T' (106ms)

    ✓ Can handle 'T' twice (120ms)

    ✓ Can run a forward search (105ms)

    ✓ Can run a forward and find next search (66ms)

    ✓ Can run a reverse search (134ms)

    ✓ Can run a reverse and find next search (185ms)

    ✓ maintains column position correctly (113ms)

    ✓ maintains column position correctly with $ (74ms)

    ✓ Can handle G  (71ms)

    ✓ Can handle G with number prefix (66ms)

    ✓ Can handle G with number prefix (51ms)

    ✓ Can handle gg (74ms)

    ✓ Can handle gg with number prefix (79ms)

    ✓ Can handle 0 (163ms)

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

    ✓ Can handle g* (60ms)

    ✓ Can handle g*n (77ms)

    ✓ Can handle * (66ms)

    ✓ Can handle ** (55ms)

    ✓ Can handle # on whitespace (113ms)

    ✓ Can handle # on EOL (134ms)

    ✓ Can handle g# (202ms)

    ✓ Can handle g#n (182ms)

    ✓ Can handle # (254ms)

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

    ✓ Can handle ## (212ms)

    ✓ Can handle | (158ms)

    ✓ Can handle <number> | (196ms)

    ✓ Can handle + (74ms)

    ✓ Can handle + indent (81ms)

    ✓ Can handle + with count prefix (79ms)

    ✓ Can handle - (85ms)

    ✓ Can handle - indent (99ms)

    ✓ Can handle - with count prefix (79ms)

    ✓ Can handle _ (71ms)

    ✓ Can handle _ with count prefix (68ms)

    ✓ Can handle g_ (90ms)

    ✓ Can handle g_ with count prefix (95ms)

    ✓ Can handle <up> key (76ms)

    ✓ Can handle <down> key (70ms)

    ✓ Can handle <left> key (119ms)

    ✓ Can handle <right> key (64ms)



  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



  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 (54ms)

        ✓ l wraps to next line (86ms)

        ✓ <left> wraps to previous line (62ms)

        ✓ <right> wraps to next line (99ms)

      insert mode

        ✓ <left> wraps to previous line (69ms)

        ✓ <right> once goes to end of line (83ms)

        ✓ <right> twice wraps to next line (87ms)

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line (87ms)

        ✓ l does not wrap to next line (74ms)

        ✓ <left> does not wrap to previous line (54ms)

        ✓ <right> does not wrap to next line (92ms)

      insert mode

        ✓ <left> does not wrap to previous line (71ms)

        ✓ <right> does not wrap to next line (142ms)


  Multicursor

    ✓ can add multiple cursors below (146ms)

    ✓ can add multiple cursors above (189ms)


  numeric string
    ✓ fails on non-string
    ✓ handles hex round trip
    ✓ handles decimal round trip
    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (321ms)

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

    ✓ block comment with motion (271ms)

    ✓ block comment in Visual Mode (213ms)



  put operator

    ✓ basic put test (182ms)

    ✓ test yy end of line (167ms)

    ✓ test yy first line (129ms)

    ✓ test yy middle line (91ms)

    ✓ test yy with correct positon movement (110ms)



  shift operator

    ✓ basic shift left test (106ms)

    ✓ shift left goto end test (106ms)

    ✓ shift left goto line test (117ms)

    ✓ shift right goto end test (76ms)

    ✓ shift right goto line test (78ms)



  easymotion plugin

    ✓ Can handle s move (101ms)

    ✓ Can handle 2s move (120ms)

    ✓ Can handle f move (189ms)

    ✓ Can handle 2f move (100ms)

    ✓ Can handle F move (124ms)

    ✓ Can handle 2F move (137ms)

    ✓ Can handle t move (107ms)

    ✓ Can handle bd-t move (188ms)

    ✓ Can handle 2t move (91ms)

    ✓ Can handle bd-t2 move (109ms)

    ✓ Can handle T move (112ms)

    ✓ Can handle 2T move (114ms)

    ✓ Can handle w move (95ms)

    ✓ Can handle bd-w move (147ms)

    ✓ Can handle b move (113ms)

    ✓ Can handle e move (80ms)

    ✓ Can handle bd-e move (121ms)

    ✓ Can handle ge move (140ms)

    ✓ Can handle n-char move (118ms)

    ✓ Can handle j move (106ms)

    ✓ Can handle k move (126ms)

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

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

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

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

    ✓ Can handle linebackward move (1) (247ms)

    ✓ Can handle linebackward move (2) (157ms)



  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode


  sneak plugin

    ✓ Can handle s motion (84ms)

    ✓ Can handle S motion (92ms)

    ✓ Can handle <operator>z motion (85ms)

    ✓ Can handle <operator>Z motion (97ms)

    ✓ Can handle s; motion (88ms)

    ✓ Can handle s, motion (126ms)

    ✓ Can handle S; motion (149ms)

    ✓ Can handle S, motion (108ms)


  surround plugin

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

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

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

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

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

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

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

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

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

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

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

    ✓ change surround (151ms)

    ✓ change surround with alias (175ms)

    ✓ change surround to tags (138ms)

    ✓ delete surround (147ms)

    ✓ delete surround with alias (259ms)

    ✓ delete surround with tags (176ms)

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

    ✓ changing brackets with surround works again (183ms)


  register

    ✓ Can copy to a register (102ms)

    ✓ Can use two registers together (192ms)

    ✓ Can use black hole register (113ms)

    ✓ System clipboard works with chinese characters (227ms)

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

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

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

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

    ✓ Can put and get to register

    clipboard

      ✓ Can access '*' (clipboard) register (101ms)

      ✓ Can access '+' (clipboard) register (115ms)



  Repeatable movements with f and t

    ✓ Can repeat f<character> (72ms)

    ✓ Can repeat reversed F<character> (67ms)

    ✓ Can repeat t<character> (65ms)

    ✓ Can repeat N times reversed t<character> (64ms)



  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line
    ✓ try to read lines that don't exist





  921 passing (3m)

  44 failing



  1) Mode Normal
       will fail when ca( with no ():
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:423:3)


  2) Mode Normal
       will fail when ca{ with no {}:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:431:3)


  3) Mode Normal
       will fail when caB with no {}:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:439:3)


  4) Mode Normal
       Can handle 'daw' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:647:3)


  5) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:655:3)


  6) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one two six. Actual=one two four.
      + expected - actual

      -one two four
      +one two six
      
      at Suite.suite (test/mode/modeNormal.test.ts:663:3)


  7) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:671:3)


  8) Mode Normal
       Can handle 'daW' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:761:3)


  9) Mode Normal
       Can handle 'daW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:769:3)


  10) Mode Normal
       Can handle 'diw' on word with numeric prefix:

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

      -one      three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:851:3)


  11) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:867:3)


  12) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:875:3)


  13) Mode Normal
       Can handle 'diW' on word with numeric prefix:

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

      -one      three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:908:3)


  14) Mode Normal
       Can handle 'diW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:916:3)


  15) Mode Normal
       Can do cit on a matching tag:

      Content does not match; Expected=<blink></blink>. Actual=<blink>o</blink>.
      + expected - actual

      -<blink>o</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1731:3)


  16) Mode Normal
       Ignores cit on a non-matching tag:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1739:3)


  17) Mode Normal
       Ignores cit on a nested tag:

      Content does not match; Expected=<blink></blink>. Actual=<blink>></blink>.
      + expected - actual

      -<blink>></blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1747:3)


  18) Mode Normal
       Can do cit on a tag with an attribute tag:

      Content does not match; Expected=<blink level="extreme"></blink>. Actual=<blink level="extreme">o</blink>.
      + expected - actual

      -<blink level="extreme">o</blink>
      +<blink level="extreme"></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1755:3)


  19) Mode Normal
       Can do cat on a matching tag:

      Content does not match; Expected=one  two. Actual=one > two.
      + expected - actual

      -one > two
      +one  two
      
      at Suite.suite (test/mode/modeNormal.test.ts:1763:3)


  20) Mode Normal
       Can do cit on a multiline tag:

      Content does not match; Expected= <blink></blink>. Actual= <blink>t</blink>.
      + expected - actual

      - <blink>t</blink>
      + <blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1771:3)


  21) Mode Normal
       Can do cit on a multiline tag with nested tags:

      Content does not match; Expected= <blink></blink>. Actual= <blink>t</blink>.
      + expected - actual

      - <blink>t</blink>
      + <blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1779:3)


  22) Mode Normal
       Can do cit inside of a tag with another non closing tag inside tags:

      Content does not match; Expected=<blink></blink>. Actual=<blink>d</blink>.
      + expected - actual

      -<blink>d</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1787:3)


  23) Mode Normal
       Can do cit inside of a tag with another empty closing tag inside tags:

      Content does not match; Expected=<blink></blink>. Actual=<blink>d</blink>.
      + expected - actual

      -<blink>d</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1795:3)


  24) Mode Normal
       Can do dit on empty tag block, cursor moves to inside:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1803:3)


  25) Mode Normal
       Can do cit on empty tag block, cursor moves to inside:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1811:3)


  26) Mode Normal
       can do cit with self closing tags:

      Content does not match; Expected=<div></div>. Actual=<div>}</div>.
      + expected - actual

      -<div>}</div>
      +<div></div>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1819:3)


  27) Mode Visual
       Can maintain selection on failure with repeat-prefixed vat on multiple matching tags:

      Content does not match; Expected=one  four. Actual=one our.
      + expected - actual

      -one our
      +one  four
      
      at Suite.suite (test/mode/modeVisual.test.ts:560:3)


  28) Mode Visual
       Repeat-prefixed vat does not bleed below:

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

      -t delete
      
      at Suite.suite (test/mode/modeVisual.test.ts:568:3)


  29) Mode Visual
       Failed vat does not expand or move selection, remains in visual mode:

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

      -one 
      +one two
      
      at Suite.suite (test/mode/modeVisual.test.ts:576:3)


  30) Mode Visual
       Failed va) does not expand or move selection, remains in visual mode:

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

      -one 
      +one two
      
      at Suite.suite (test/mode/modeVisual.test.ts:616:3)


  31) Mode Visual
       Repeat-prefixed va) does not bleed below:

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

      -(
      
      at Suite.suite (test/mode/modeVisual.test.ts:624:3)


  32) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:254:5)


  33) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:262:5)


  34) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:270:5)


  35) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:305:5)


  36) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:313:5)


  37) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:347:5)


  38) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:355:5)


  39) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:389:5)


  40) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:397:5)


  41) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:405:5)


  42) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:440:5)


  43) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:448:5)


  44) Mode Visual
       handles tag blocks in visual mode
         Count-prefixed vit alternates expanding selection between inner and outer tag brackets:

      Content does not match; Expected=<div></div>. Actual=<div> one <p></p> three </div>.
      + expected - actual

      -<div> one <p></p> three </div>
      +<div></div>
      
      at Suite.suite (test/mode/modeVisual.test.ts:526:5)






Tests exited with code: 1

@TravisBuddy
Copy link

Travis tests have failed

Hey @xmbhasin,
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

npm test --silent
### VS Code Extension Test Run ###
Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code into "/home/travis/build/VSCodeVim/Vim/.vscode-test/stable" from: https://vscode-update.azurewebsites.net/1.25.1/linux-x64/stable
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/stable/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
Xlib:  extension "RANDR" missing on display ":99.0".

Xlib:  extension "RANDR" missing on display ":99.0".

[main 7:21:15 PM] update#setState idle

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

bash: no job control in this shell

nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/home/travis/.nvm/versions/node/v8.11.3"
Run `unset npm_config_prefix` to unset it.





  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


  command-line history

    ✓ add command (344ms)

    ✓ add empty command

    ✓ add command over configuration.history (51ms)

    ✓ add command that exists in history

    ✓ load and save history (41ms)

    ✓ change configuration.history (79ms)

  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



  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



  Basic sort

    ✓ Sort whole file, asc (277ms)

    ✓ Sort whole file, dsc (317ms)

    ✓ Sort range, asc (369ms)

    ✓ Sort range, dsc (412ms)


  :close args parser
    ✓ has all aliases
    ✓ can parse empty args
    ✓ ignores trailing white space
    ✓ can parse !
    ✓ throws if space before !
    ✓ ignores space after !
    ✓ throws if bad input

  :quit args parser
    ✓ has all aliases
    ✓ 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



  :write args parser

    ✓ has all aliases

    ✓ 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 (184ms)

    ✓ Replace with `g` flag (186ms)

    ✓ Replace multiple lines (260ms)

    ✓ Replace across specific lines (262ms)

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

    ✓ Replace text in selection (354ms)

    ✓ Substitute support marks (342ms)
    Effects of substituteGlobalFlag=true

      ✓ Replace all matches in the line (187ms)

      ✓ Replace with `g` flag inverts global flag (180ms)

      ✓ Replace multiple lines (251ms)

      ✓ Replace across specific lines (222ms)

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

      ✓ Replace text in selection (341ms)

      ✓ Substitute support marks (282ms)

      ✓ Substitute with escaped delimiter (173ms)

    Substitute with empty search string should use previous search

      ✓ Substitute with previous search using * (507ms)

      ✓ Substitute with previous search using # (569ms)

      ✓ Substitute with previous search using / (532ms)

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



  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file (100ms)

    ✓ tabedit with no arguments when not in workspace opens an untitled file (70ms)

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

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



  Vertical split

    ✓ Run :vs (154ms)

    ✓ Run :vsp (119ms)


  Basic write-quit

    ✓ Run write and quit (247ms)



  Configuration

    ✓ remappings are normalized

    ✓ Can handle long key chords (151ms)

    ✓ whichwrap is parsed into wrapKeys


  Notation
    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence

    ✓ getMatchingRemap

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

TextEditor is closed/disposed
TextEditor is closed/disposed
TextEditor is closed/disposed
TextEditor is closed/disposed
TextEditor is closed/disposed

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

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler

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



  Error

    ✓ error code has message



  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers



  Record and execute a macro

    ✓ Can record and execute (515ms)

    ✓ Can repeat last invoked macro (608ms)

    ✓ Can play back with count (870ms)

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

    ✓ Repeat change on contiguous lines (446ms)

[main 7:21:45 PM] update#setState checking for updates

    ✓ Append command to a macro (448ms)

[main 7:21:46 PM] update#setState idle

    ✓ Can record Ctrl Keys and repeat (438ms)

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



  Mode Handler

    ✓ ctor

    ✓ can set current mode



  Mode Handler Map

    ✓ getOrCreate



  Mode Insert

    ✓ can be activated (163ms)

    ✓ can handle key events (58ms)

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

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

    ✓ <Esc> can exit insert (143ms)

    ✓ Stay in insert when entering characters (183ms)

    ✓ Can handle 'O' (140ms)

    ✓ Can handle 'i' (210ms)

    ✓ Can handle 'I' (188ms)

    ✓ Can handle 'a' (250ms)

    ✓ Can handle 'A' (187ms)

    ✓ Can handle '<C-w>' (203ms)

    ✓ Can handle <C-w> on leading whitespace (123ms)

    ✓ Can handle <C-w> at beginning of line (190ms)

    ✓ Can handle <C-u> (223ms)

    ✓ Can handle <C-u> on leading characters (175ms)

    ✓ Can handle <C-u> on leading whitespace (158ms)

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

    ✓ will not remove leading spaces input by user (64ms)

    ✓ will remove closing bracket (76ms)

    ✓ Backspace works on whitespace only lines (189ms)

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

    ✓ Backspace works at beginning of file (98ms)

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

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

    ✓ Can perform insert command prefixed with count (147ms)

    ✓ Can perform append command prefixed with count (170ms)

    ✓ Can perform insert at start of line command prefixed with count (309ms)

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

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

    ✓ Can perform command prefixed with count with <C-[> (120ms)

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

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



  Mode Normal

    ✓ Can be activated (52ms)

    ✓ Can handle dw (194ms)

    ✓ Can handle dw (186ms)

    ✓ Can handle dw (127ms)

    ✓ Can handle dw across lines (1) (163ms)

    ✓ Can handle dw across lines (2) (210ms)

    ✓ Can handle dd last line (161ms)

    ✓ Can handle dd single line (102ms)

    ✓ Can handle dd (136ms)

    ✓ Can handle 3dd (154ms)

    ✓ Can handle 3dd off end of document (168ms)

    ✓ Can handle d2d (168ms)

    ✓ Can handle dd empty line (162ms)

    ✓ Can handle ddp (161ms)

    ✓ Can handle 'de' (280ms)

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

    ✓ Can handle 'db' (298ms)

    ✓ Can handle 'db then 'db' again (360ms)

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

    ✓ Can handle 'dF' (158ms)

    ✓ Can handle 'dT' (285ms)

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

    ✓ Can handle 'dj' (132ms)

    ✓ Can handle 'dk' (205ms)

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

    ✓ Can handle 'd]}' without deleting closing bracket (240ms)

    ✓ Can handle 'cw' (467ms)

    ✓ Can handle 'cw' without deleting following white spaces (167ms)

    ✓ Can handle 'c2w' (150ms)

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

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

    ✓ Can handle 'c]}' without deleting closing bracket (272ms)

    ✓ Can handle 's' (146ms)

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

    ✓ Can handle 'ciw' (324ms)

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

    ✓ Can handle 'caw' (387ms)

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

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

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

    ✓ Can handle 'ci(' on first parentheses (209ms)

    ✓ Can handle 'ci(' with nested parentheses (226ms)

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

    ✓ Can handle 'cib' on first parentheses (208ms)

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

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

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

    ✓ Can handle 'ci{' spanning multiple lines (200ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (183ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (191ms)

    ✓ Can handle 'ci(' on the closing bracket (227ms)

    ✓ Can handle 'ciB' spanning multiple lines (201ms)

error: ModeHandler: error handling key=(. err=Error: what in god's name.

    1) will fail when ca( with no ()

error: ModeHandler: error handling key={. err=Error: what in god's name.

    2) will fail when ca{ with no {}

error: ModeHandler: error handling key=B. err=Error: what in god's name.

    3) will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines (149ms)

    ✓ Can handle 'ci]' on first bracket (239ms)

    ✓ Can handle 'ca[' on first bracket (225ms)

    ✓ Can handle 'ca]' on first bracket (196ms)

    ✓ Can handle 'ci'' on first quote (151ms)

    ✓ Can handle 'ci'' inside quoted string (193ms)

    ✓ Can handle 'ci'' on closing quote (196ms)

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

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

    ✓ Can handle 'ci"' starting behind the quoted word (200ms)

    ✓ Can handle 'ca"' starting behind the quoted word (163ms)

    ✓ Can handle 'ca"' starting on the opening quote (244ms)

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

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

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

    ✓ Can handle 'ci"' with an escaped backslash (273ms)

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

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

    ✓ Can handle 'ci"' with complex escape sequences (223ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (230ms)

    ✓ will fail when ca" ahead of quoted string (343ms)

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

    ✓ Can handle 'daw' on word with cursor inside spaces (299ms)

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

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

    4) Can handle 'daw' on word with numeric prefix

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

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

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

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

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (158ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (208ms)

    ✓ Can handle 'daw' on word at beginning of file (121ms)

    ✓ Can handle 'daw' on word at beginning of line (178ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (168ms)

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

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

    ✓ Can handle 'daW' around word at whitespace (203ms)

    ✓ Can handle 'daW' on word with trailing spaces (297ms)

    ✓ Can handle 'daW' on word with leading spaces (313ms)

    8) Can handle 'daW' on word with numeric prefix

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

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

    ✓ Can handle 'daW' on end of one line (216ms)

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

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

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

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

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

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

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

    ✓ Can handle 'diw' on word (285ms)

    10) Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line (470ms)

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

    12) 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 (351ms)

    ✓ Can handle 'diW' on word with trailing spaces (248ms)

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

    13) Can handle 'diW' on word with numeric prefix

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

    ✓ Can handle 'diW' on beginning of word (180ms)

    ✓ Can handle d} (130ms)

    ✓ Can handle y} at beginning of line (172ms)

    ✓ Select sentence with trailing spaces (275ms)

    ✓ Select sentence with leading spaces (439ms)

    ✓ Select inner sentence with trailing spaces (254ms)

    ✓ Select inner sentence with leading spaces (556ms)

    ✓ Select spaces between sentences (465ms)

    ✓ Can handle 'df' (290ms)

    ✓ Can handle 'dt' (225ms)

    ✓ Can handle backspace (192ms)

    ✓ Can handle backspace across lines (125ms)

    ✓ Can handle A and backspace (130ms)

    ✓ Can handle 'yy' without changing cursor position (189ms)

    ✓ Can handle 'P' after 'yy' (202ms)

    ✓ Can handle 'p' after 'yy' (205ms)

    ✓ Can handle 'P' after 'Nyy' (238ms)

    ✓ Can handle 'p' after 'Nyy' (169ms)

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

    ✓ Can handle 'gp' after 'yy' (216ms)

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

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

    ✓ Can handle 'gP' after 'yy' (234ms)

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

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

    ✓ Can handle ']p' after 'Nyy' (182ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (321ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (271ms)

    ✓ Can handle '[p' after yy (252ms)

    ✓ Can handle '[p' after 'Nyy' (284ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (214ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (332ms)

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

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

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

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

    ✓ Can repeat w (111ms)

    ✓ Can repeat p (147ms)

    ✓ I works correctly (275ms)

    ✓ gI works correctly (198ms)

    ✓ gi works correctly (286ms)

    ✓ `. works correctly (192ms)

    ✓ '. works correctly (231ms)

    ✓ g; works correctly (284ms)

    ✓ g, works correctly (328ms)

    ✓ g_ works correctly (137ms)

    ✓ 3g_ works correctly (292ms)

    ✓ Can handle space (133ms)

    ✓ Can handle space (146ms)

    ✓ Undo 1 (303ms)

    ✓ Undo 2 (210ms)

    ✓ Undo cursor (265ms)

    ✓ Undo cursor 2 (414ms)

    ✓ Undo cursor 3 (413ms)

    ✓ Undo with movement first (382ms)

    ✓ Can handle 'U' (190ms)

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

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

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

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

    ✓ Can handle 'u' to undo 'U' (220ms)

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

    ✓ Redo (335ms)

    ✓ Redo (224ms)

    ✓ Redo (312ms)

    ✓ Can handle u (167ms)

    ✓ Can handle guw (166ms)

    ✓ Can handle gUw (147ms)

    ✓ Can handle u over line breaks (288ms)

    ✓ can handle s in visual mode (226ms)

    ✓ can handle p with selection (174ms)

    ✓ can handle P with selection (191ms)

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

    ✓ can repeat backspace twice (261ms)

    ✓ can delete linewise with d2G (166ms)

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

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

    ✓ can dE correctly (149ms)

    ✓ can dE correctly (140ms)

    ✓ can dE correctly (236ms)

    ✓ can ctrl-a correctly behind a word (79ms)

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

    ✓ can ctrl-a on word (184ms)

    ✓ can ctrl-a on a hex number (106ms)

    ✓ can ctrl-a on decimal (109ms)

    ✓ can ctrl-a with numeric prefix (156ms)

    ✓ can ctrl-a on a decimal (194ms)

    ✓ can ctrl-a on an octal  (129ms)

    ✓ Correctly increments in the middle of a number (147ms)

    ✓ can ctrl-x correctly behind a word (143ms)

    ✓ can ctrl-a on an number with word before  (106ms)

    ✓ can ctrl-a on an number with word before and after  (114ms)

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

    ✓ can ctrl-a properly on multiple lines (226ms)

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

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

    ✓ can do Y (215ms)

    ✓ Can do S (225ms)

    ✓ / does not affect mark (142ms)

    ✓ / can search with regex (212ms)

    ✓ / can search with newline (182ms)

    ✓ / can search through multiple newlines (281ms)

    ✓ / matches ^ per line (213ms)

    ✓ / matches $ per line (194ms)

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

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

    ✓ <BS> deletes the last character in search in progress mode (201ms)

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

    ✓ <C-h> deletes the last character in search in progress mode (162ms)

    ✓ Can do C (74ms)

    15) Can do cit on a matching tag

error: ModeHandler: error handling key=t. err=Error: what in god's name.

    16) Ignores cit on a non-matching tag

    17) Ignores cit on a nested tag

    18) Can do cit on a tag with an attribute tag

    19) Can do cat on a matching tag

    20) Can do cit on a multiline tag

    21) Can do cit on a multiline tag with nested tags

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

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

error: ModeHandler: error handling key=t. err=Error: what in god's name.

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

error: ModeHandler: error handling key=t. err=Error: what in god's name.

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

    26) can do cit with self closing tags

    ✓ Respects indentation with cc (226ms)

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

    ✓ can handle 'cc' on empty line (162ms)

    ✓ cc copies linewise (209ms)

    ✓ Indent current line with correct Vim Mode (157ms)

    ✓ Can handle <Esc> and do nothing (78ms)

    ✓ Can handle # on consecutive words (314ms)

    ✓ Can handle # on skipped words (442ms)

    ✓ Can 'D'elete the characters under the cursor until the end of the line (453ms)

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line (605ms)

    ✓ cc on whitespace-only treats whitespace as indent (114ms)

    ✓ Can do cai (532ms)

    ✓ Can do cii (160ms)

    ✓ Can do caI (433ms)

    ✓ Can do dai (441ms)

    ✓ Can do dii (224ms)

    ✓ Can do daI (409ms)

    can handle gn

      ✓ gn selects the next match text (651ms)

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

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

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

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

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

    can handle dgn

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

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

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

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

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

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

    can handle cgn

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

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

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

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

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

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

    can handle gN

      ✓ gN selects the previous match text (700ms)

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

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

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

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

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

    can handle dgN

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

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

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

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

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

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

    can handle cgN

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

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

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

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

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

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



  Mode Replace

    ✓ Can activate with <insert> from Insert mode (116ms)

    ✓ Can activate with R from Normal mode (203ms)

    ✓ Can handle R (234ms)

    ✓ Can handle R past current line (240ms)

    ✓ Can handle R and exit Replace Mode (170ms)

    ✓ Can handle R across lines (282ms)

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

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

    ✓ Can handle backspace (289ms)

    ✓ Can handle backspace (277ms)

    ✓ Can handle backspace across lines (315ms)

    ✓ Can handle arrows (258ms)

    ✓ Can handle . (289ms)

    ✓ Can handle . across lines (444ms)



  Mode Visual

    ✓ can be activated

    ✓ Can handle w (463ms)

    ✓ Can handle wd (350ms)

    ✓ Can handle x (373ms)

    ✓ Can handle x across a selection (391ms)

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

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

    ✓ Can do vwd multiple times (600ms)

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

    ✓ Can handle H key (169ms)

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

    ✓ handles change operator (386ms)

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

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

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

    28) Repeat-prefixed vat does not bleed below

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

    ✓ Can do vi) on a matching parenthesis (251ms)

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

    ✓ Can do va) on a matching parenthesis (353ms)

    ✓ Can do va) on multiple matching parens (296ms)

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

    29) Repeat-prefixed va) does not bleed below

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

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

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

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

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

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

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

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

    ✓ vaf only expands to enclosing pairs (252ms)

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

    ✓ Can do v_x to delete to first char (202ms)

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

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

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

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

    Vim's EOL handling is weird

      ✓ delete through eol (394ms)

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

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

      ✓ vd$ does delete whole line (244ms)

      ✓ Paste over selection copies the selection (247ms)

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

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (186ms)

      ✓ Can handle <down> key (145ms)

      ✓ Can handle <left> key (218ms)

      ✓ Can handle <right> key (206ms)

    handles aw in visual mode

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

      ✓ Can handle 'vawd' on word with trailing spaces (240ms)

      ✓ Can handle 'vawd' on word with leading spaces (465ms)

      30) Can handle 'vawd' on word with numeric prefix

      31) Can handle 'vawd' on word with numeric prefix and across lines

      32) 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 (278ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (237ms)

      33) Can handle 'vaWd' on word with numeric prefix

      34) 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 (301ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (311ms)

      35) Can handle 'vaWd' on word with numeric prefix

      36) 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 (326ms)

      ✓ Can handle 'vawd' on word with trailing spaces (286ms)

      ✓ Can handle 'vawd' on word with leading spaces (366ms)

      37) Can handle 'vawd' on word with numeric prefix

      38) Can handle 'vawd' on word with numeric prefix and across lines

      39) 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 (337ms)

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

      ✓ Can handle 'vaWd' on word with leading spaces (332ms)

      40) Can handle 'vaWd' on word with numeric prefix

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

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

    handles as in visual mode

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

      ✓ Select sentence with leading spaces in visual mode (470ms)

      ✓ Select multiple sentences in visual mode (320ms)

    handles is in visual mode

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

      ✓ Select inner sentence with leading spaces in visual mode (463ms)

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

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (176ms)

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

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

    handles replace in visual mode

      ✓ Can do a single line replace (133ms)

      ✓ Can do a multi line replace (126ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (246ms)

      ✓ D deletes the current line (195ms)

    handles indent blocks in visual mode

      ✓ Can do vai (269ms)

      ✓ Can do vii (212ms)

      ✓ Doesn't naively select the next line (202ms)

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

      ✓ Can do vaI (356ms)

    visualstar

      ✓ Works with * (195ms)

      ✓ Works with # (224ms)

    search works in visual mode

      ✓ Works with / (249ms)

      ✓ Works with ? (214ms)

      ✓ Selects correct range (346ms)

    X will delete linewise

      ✓ normal selection (200ms)

      ✓ normal selection (188ms)

    C will delete linewise

      ✓ normal selection (177ms)

      ✓ normal selection (178ms)

    R will delete linewise

      ✓ normal selection (219ms)

      ✓ normal selection (135ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (177ms)

      ✓ upward selection (196ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (87ms)

      ✓ multiline indent bottom up selection (154ms)

      ✓ repeat multiline indent top down selection (198ms)

      ✓ repeat multiline indent bottom up selection (201ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (177ms)

      ✓ multiline outdent bottom up selection (201ms)

      ✓ repeat multiline outdent top down selection (167ms)

      ✓ repeat multiline outdent bottom up selection (135ms)

    Non-darwin <C-c> tests

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

    vi{ will go to end of second to last line

      ✓ select (148ms)

    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) (1027ms)

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

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

    can handle gn

      ✓ gn selects the next match text (420ms)

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

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

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

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

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


  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (249ms)

    ✓ Can handle A backwards select (177ms)

    ✓ Can handle I forward select (107ms)

    ✓ Can handle I backwards select (197ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (161ms)

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

    ✓ Can handle c forward select (138ms)

    ✓ Can handle c backwards select (165ms)

    ✓ Can handle C (188ms)

    ✓ Can do a multi line replace (109ms)

    ✓ Can handle 'D' (110ms)

    ✓ Can handle 'gj' (189ms)

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

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

    ✓ o works in visual block mode (161ms)

    Non-darwin <C-c> tests

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



  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (286ms)

    ✓ Can handle wd (290ms)

    ✓ Can handle x (365ms)

    ✓ Can handle U (246ms)

    ✓ Can handle x across a selection (321ms)

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

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

    ✓ Can do vwd multiple times (551ms)

    ✓ Can handle U across a selection (288ms)

    ✓ Can handle U across a selection in reverse order (202ms)

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

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

    ✓ handles change operator (235ms)

    ✓ Vp updates register content (157ms)

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

    ✓ Vp does not append unnecessary newlines (middle line) (140ms)

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

    Vim's EOL handling is weird

      ✓ delete through eol (229ms)

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

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

      ✓ vd$ does delete whole line (164ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (132ms)

      ✓ Can handle <down> key (94ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (120ms)

      ✓ Can handle d key (80ms)

      ✓ Can handle d key (121ms)

      ✓ Can handle d key (220ms)

      ✓ can handle 'c' (95ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (155ms)

      ✓ Can do a multi visual line replace (123ms)

      ✓ Can do a multi visual line replace from the bottom up (114ms)

    search works in visual line mode

      ✓ Works with / (251ms)

      ✓ Works with ? (279ms)

    Non-darwin <C-c> tests

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

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (186ms)

      ✓ linewise visual put works also in the end of document (132ms)

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

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

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



  Mode Normal

    ✓ Can handle 'x' (100ms)

    ✓ Can handle 'Nx' (126ms)

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

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

    ✓ Can handle 'Ns' (95ms)

    ✓ Can handle 'Ns' at end of line (219ms)

    ✓ Can handle '<Del>' (130ms)

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

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

    ✓ Can handle 'cc' (152ms)

    ✓ Can handle 'Ncc' (137ms)

    ✓ Can handle 'yy' (117ms)

    ✓ Can handle 'D' (129ms)

    ✓ Can handle 'D' on empty lines (79ms)

    ✓ Can handle 'DD' (169ms)

    ✓ Can handle 'C' (107ms)

    ✓ Can handle 'NC' (237ms)

    ✓ Can handle 'r' (107ms)

    ✓ Can handle '<Count>r' (127ms)

    ✓ Can handle '<Count>r' (146ms)

    ✓ Can handle 'r' after 'dd' (221ms)

    ✓ Can handle 'J' once (109ms)

    ✓ Can handle 'J' twice (175ms)

    ✓ Can handle 'J' with empty last line (121ms)

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

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

    ✓ Can handle 'J' with only white space on next line (92ms)

    ✓ Can handle 'J' with TWO indented lines (139ms)

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

    ✓ Can handle 'J' with a following delete (95ms)

    ✓ Can handle 'J' in Visual Line mode (142ms)

    ✓ Can handle 'gJ' once (106ms)

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

    ✓ Can handle '~' (105ms)

    ✓ Can handle 'g~{motion}' (108ms)

    ✓ Can handle '<BS>' in insert mode (111ms)

    ✓ Can handle undo with P (220ms)



  Dot Operator

    ✓ Can repeat '~' with <num> (81ms)

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

    ✓ Can repeat 'x' (88ms)

    ✓ Can repeat 'J' (226ms)

    ✓ Can handle dot with A (183ms)

    ✓ Can handle dot with I (308ms)

    ✓ Can repeat actions that require selections (178ms)



  Repeat content change

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

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

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

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

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


  Matching Bracket (%)

    ✓ before opening parenthesis (83ms)

    ✓ inside parenthesis (108ms)

    ✓ nested parenthesis beginning (68ms)

    ✓ nested parenthesis end (121ms)

    ✓ nested bracket and parenthesis beginning (149ms)

    ✓ nested bracket, parenthesis, braces beginning (75ms)

    ✓ nested bracket, parenthesis, braces end (173ms)



  Motions in Normal Mode

    ✓ Can handle [( (89ms)

    ✓ Can handle nested [( (111ms)

    ✓ Can handle <number>[( (122ms)

    ✓ Can handle [( and character under cursor exclusive (112ms)

    ✓ Can handle ]) (87ms)

    ✓ Can handle nested ]) (113ms)

    ✓ Can handle <number>]) (257ms)

    ✓ Can handle ]) and character under cursor exclusive (112ms)

    ✓ Can handle [{ (142ms)

    ✓ Can handle nested [{ (147ms)

    ✓ Can handle <number>[{ (176ms)

    ✓ Can handle [{ and character under cursor exclusive (88ms)

    ✓ Can handle ]} (101ms)

    ✓ Can handle nested ]} (128ms)

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

    ✓ Can handle ]} and character under cursor exclusive (211ms)

    ✓ Can handle 'ge' (307ms)

    ✓ Can handle 'gg' (241ms)

    ✓ Can handle 'gg' to first non blank char on random line (145ms)

    ✓ Can handle 'gg' to first non blank char on first line (146ms)

    ✓ Retain same column when moving up/down (213ms)

    ✓ Can handle <enter> (131ms)

    ✓ $ always keeps cursor on EOL (210ms)

    ✓ Can handle $ with a count (116ms)

    ✓ Can handle $ with a count at end of file (123ms)

    ✓ Can handle <end> with a count (82ms)

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

    ✓ Can handle 'f' (355ms)

    ✓ Can handle 'f' twice (262ms)

    ✓ Can handle 'F' (190ms)

    ✓ Can handle 'F' twice (169ms)

    ✓ Can handle 't' (155ms)

    ✓ Can handle 't' twice (170ms)

    ✓ Can handle 'T' (203ms)

    ✓ Can handle 'T' twice (126ms)

    ✓ Can run a forward search (133ms)

    ✓ Can run a forward and find next search (86ms)

    ✓ Can run a reverse search (186ms)

    ✓ Can run a reverse and find next search (182ms)

    ✓ maintains column position correctly (108ms)

    ✓ maintains column position correctly with $ (87ms)

    ✓ Can handle G  (98ms)

    ✓ Can handle G with number prefix (122ms)

    ✓ Can handle G with number prefix (79ms)

    ✓ Can handle gg (119ms)

    ✓ Can handle gg with number prefix (72ms)

    ✓ Can handle 0 (194ms)

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

    ✓ Can handle g* (81ms)

    ✓ Can handle g*n (205ms)

    ✓ Can handle * (67ms)

    ✓ Can handle ** (58ms)

    ✓ Can handle # on whitespace (190ms)

    ✓ Can handle # on EOL (188ms)

    ✓ Can handle g# (223ms)

    ✓ Can handle g#n (227ms)

    ✓ Can handle # (227ms)

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

    ✓ Can handle ## (233ms)

    ✓ Can handle | (178ms)

    ✓ Can handle <number> | (221ms)

    ✓ Can handle + (74ms)

    ✓ Can handle + indent (97ms)

    ✓ Can handle + with count prefix (80ms)

    ✓ Can handle - (83ms)

    ✓ Can handle - indent (109ms)

    ✓ Can handle - with count prefix (127ms)

    ✓ Can handle _ (117ms)

    ✓ Can handle _ with count prefix (103ms)

    ✓ Can handle g_ (119ms)

    ✓ Can handle g_ with count prefix (117ms)

    ✓ Can handle <up> key (248ms)

    ✓ Can handle <down> key (123ms)

    ✓ Can handle <left> key (140ms)

    ✓ Can handle <right> key (118ms)



  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



  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 (102ms)

        ✓ l wraps to next line (140ms)

        ✓ <left> wraps to previous line (79ms)

        ✓ <right> wraps to next line (138ms)

      insert mode

        ✓ <left> wraps to previous line (110ms)

        ✓ <right> once goes to end of line (131ms)

        ✓ <right> twice wraps to next line (131ms)

    whichwrap disabled
      normal mode

        ✓ h does not wrap to previous line (112ms)

        ✓ l does not wrap to next line (100ms)

        ✓ <left> does not wrap to previous line (96ms)

        ✓ <right> does not wrap to next line (146ms)

      insert mode

        ✓ <left> does not wrap to previous line (102ms)

        ✓ <right> does not wrap to next line (189ms)



  Multicursor

    ✓ can add multiple cursors below (348ms)

    ✓ can add multiple cursors above (294ms)



  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip



  comment operator

    ✓ gcc comments out current line (499ms)

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

    ✓ block comment with motion (525ms)

    ✓ block comment in Visual Mode (344ms)



  put operator

    ✓ basic put test (542ms)

    ✓ test yy end of line (393ms)

    ✓ test yy first line (361ms)

    ✓ test yy middle line (191ms)

    ✓ test yy with correct positon movement (179ms)



  shift operator

    ✓ basic shift left test (143ms)

    ✓ shift left goto end test (212ms)

    ✓ shift left goto line test (141ms)

    ✓ shift right goto end test (99ms)

    ✓ shift right goto line test (104ms)


  easymotion plugin

    ✓ Can handle s move (189ms)

    ✓ Can handle 2s move (192ms)

    ✓ Can handle f move (138ms)

    ✓ Can handle 2f move (181ms)

    ✓ Can handle F move (218ms)

    ✓ Can handle 2F move (207ms)

    ✓ Can handle t move (171ms)

    ✓ Can handle bd-t move (209ms)

    ✓ Can handle 2t move (161ms)

    ✓ Can handle bd-t2 move (188ms)

    ✓ Can handle T move (156ms)

    ✓ Can handle 2T move (209ms)

    ✓ Can handle w move (143ms)

    ✓ Can handle bd-w move (303ms)

    ✓ Can handle b move (150ms)

    ✓ Can handle e move (172ms)

    ✓ Can handle bd-e move (158ms)

    ✓ Can handle ge move (218ms)

    ✓ Can handle n-char move (151ms)

    ✓ Can handle j move (126ms)

    ✓ Can handle k move (132ms)

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

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

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

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

    ✓ Can handle linebackward move (1) (207ms)

    ✓ Can handle linebackward move (2) (275ms)


  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode


  sneak plugin

    ✓ Can handle s motion (168ms)

    ✓ Can handle S motion (297ms)

    ✓ Can handle <operator>z motion (161ms)

    ✓ Can handle <operator>Z motion (130ms)

    ✓ Can handle s; motion (111ms)

    ✓ Can handle s, motion (205ms)

    ✓ Can handle S; motion (189ms)

    ✓ Can handle S, motion (219ms)



  surround plugin

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

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

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

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

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

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

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

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

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

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

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

    ✓ change surround (220ms)

    ✓ change surround with alias (266ms)

    ✓ change surround to tags (222ms)

    ✓ delete surround (234ms)

    ✓ delete surround with alias (247ms)

    ✓ delete surround with tags (285ms)

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

    ✓ changing brackets with surround works again (290ms)



  register

    ✓ Can copy to a register (221ms)

    ✓ Can use two registers together (253ms)

    ✓ Can use black hole register (243ms)

    ✓ System clipboard works with chinese characters (284ms)

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

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

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

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

    ✓ Can put and get to register

    clipboard

      ✓ Can access '*' (clipboard) register (126ms)

      ✓ Can access '+' (clipboard) register (156ms)


  Repeatable movements with f and t

    ✓ Can repeat f<character> (100ms)

    ✓ Can repeat reversed F<character> (88ms)

    ✓ Can repeat t<character> (89ms)

    ✓ Can repeat N times reversed t<character> (117ms)



  text editor

    ✓ insert 'Hello World'

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

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist





  923 passing (6m)

  42 failing



  1) Mode Normal
       will fail when ca( with no ():
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:423:3)


  2) Mode Normal
       will fail when ca{ with no {}:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:431:3)


  3) Mode Normal
       will fail when caB with no {}:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:439:3)


  4) Mode Normal
       Can handle 'daw' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:647:3)


  5) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:655:3)

  6) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one two six. Actual=one two .
      + expected - actual

      -one two 
      +one two six
      
      at Suite.suite (test/mode/modeNormal.test.ts:663:3)

  7) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:671:3)


  8) Mode Normal
       Can handle 'daW' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:761:3)


  9) Mode Normal
       Can handle 'daW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   ive.  six.
      + expected - actual

      -one   two   three,   ive.  six
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:769:3)


  10) Mode Normal
       Can handle 'diw' on word with numeric prefix:

      Content does not match; Expected=   three,   four  . Actual=   two   three,   four  .
      + expected - actual

      -   two   three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:851:3)


  11) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,     .
      + expected - actual

      -one   two   three,     
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:867:3)


  12) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,     .
      + expected - actual

      -one   two   three,     
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:875:3)


  13) Mode Normal
       Can handle 'diW' on word with numeric prefix:

      Content does not match; Expected=   three,   four  . Actual=   two   three,   four  .
      + expected - actual

      -   two   three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:908:3)


  14) Mode Normal
       Can handle 'diW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,     .
      + expected - actual

      -one   two   three,     
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:916:3)


  15) Mode Normal
       Can do cit on a matching tag:

      Content does not match; Expected=<blink></blink>. Actual=<blink>o</blink>.
      + expected - actual

      -<blink>o</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1731:3)


  16) Mode Normal
       Ignores cit on a non-matching tag:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1739:3)


  17) Mode Normal
       Ignores cit on a nested tag:

      Content does not match; Expected=<blink></blink>. Actual=<blink>></blink>.
      + expected - actual

      -<blink>></blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1747:3)


  18) Mode Normal
       Can do cit on a tag with an attribute tag:

      Content does not match; Expected=<blink level="extreme"></blink>. Actual=<blink level="extreme">o</blink>.
      + expected - actual

      -<blink level="extreme">o</blink>
      +<blink level="extreme"></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1755:3)


  19) Mode Normal
       Can do cat on a matching tag:

      Content does not match; Expected=one  two. Actual=one > two.
      + expected - actual

      -one > two
      +one  two
      
      at Suite.suite (test/mode/modeNormal.test.ts:1763:3)


  20) Mode Normal
       Can do cit on a multiline tag:

      Content does not match; Expected= <blink></blink>. Actual= <blink>t</blink>.
      + expected - actual

      - <blink>t</blink>
      + <blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1771:3)


  21) Mode Normal
       Can do cit on a multiline tag with nested tags:

      Content does not match; Expected= <blink></blink>. Actual= <blink>t</blink>.
      + expected - actual

      - <blink>t</blink>
      + <blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1779:3)


  22) Mode Normal
       Can do cit inside of a tag with another non closing tag inside tags:

      Content does not match; Expected=<blink></blink>. Actual=<blink>d</blink>.
      + expected - actual

      -<blink>d</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1787:3)


  23) Mode Normal
       Can do cit inside of a tag with another empty closing tag inside tags:

      Content does not match; Expected=<blink></blink>. Actual=<blink>d</blink>.
      + expected - actual

      -<blink>d</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1795:3)


  24) Mode Normal
       Can do dit on empty tag block, cursor moves to inside:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1803:3)


  25) Mode Normal
       Can do cit on empty tag block, cursor moves to inside:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1811:3)


  26) Mode Normal
       can do cit with self closing tags:

      Content does not match; Expected=<div></div>. Actual=<div>}</div>.
      + expected - actual

      -<div>}</div>
      +<div></div>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1819:3)


  27) Mode Visual
       Can maintain selection on failure with repeat-prefixed vat on multiple matching tags:

      Content does not match; Expected=one  four. Actual=one lo</blink> three</blank> four.
      + expected - actual

      -one lo</blink> three</blank> four
      +one  four
      
      at Suite.suite (test/mode/modeVisual.test.ts:560:3)


  28) Mode Visual
       Repeat-prefixed vat does not bleed below:

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

      -est
      
      at Suite.suite (test/mode/modeVisual.test.ts:568:3)


  29) Mode Visual
       Repeat-prefixed va) does not bleed below:

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

      -	)
      
      at Suite.suite (test/mode/modeVisual.test.ts:624:3)


  30) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:254:5)


  31) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:262:5)


  32) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:270:5)


  33) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:305:5)


  34) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   ive.  six.
      + expected - actual

      -one   two   three,   ive.  six
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:313:5)


  35) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:347:5)


  36) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   ive.  six.
      + expected - actual

      -one   two   three,   ive.  six
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:355:5)


  37) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:389:5)


  38) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:397:5)


  39) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   .
      + expected - actual

      -one   two   three,   
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:405:5)


  40) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=two   three,   four  .
      + expected - actual

      -two   three,   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:440:5)


  41) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   ive.  six.
      + expected - actual

      -one   two   three,   ive.  six
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:448:5)


  42) Mode Visual
       handles tag blocks in visual mode
         Count-prefixed vit alternates expanding selection between inner and outer tag brackets:

      Content does not match; Expected=<div></div>. Actual=<div> one <p></p> three </div>.
      + expected - actual

      -<div> one <p></p> three </div>
      +<div></div>
      
      at Suite.suite (test/mode/modeVisual.test.ts:526:5)






Tests exited with code: 1

@TravisBuddy
Copy link

Travis tests have failed

Hey @xmbhasin,
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

npm test --silent
### VS Code Extension Test Run ###
Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code into "/home/travis/build/VSCodeVim/Vim/.vscode-test/stable" from: https://vscode-update.azurewebsites.net/1.25.1/linux-x64/stable
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/stable/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
Xlib:  extension "RANDR" missing on display ":99.0".

Xlib:  extension "RANDR" missing on display ":99.0".

[main 8:01:32 PM] update#setState idle

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

bash: no job control in this shell

nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/home/travis/.nvm/versions/node/v8.11.3"
Run `unset npm_config_prefix` to unset it.





  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



  command-line history

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history

    ✓ load and save history

    ✓ change configuration.history

  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



  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



  Basic sort

    ✓ Sort whole file, asc (207ms)

    ✓ Sort whole file, dsc (160ms)

    ✓ Sort range, asc (206ms)

    ✓ Sort range, dsc (178ms)



  :close args parser

    ✓ has all aliases

    ✓ can parse empty args

    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input



  :quit args parser

    ✓ has all aliases

    ✓ 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



  :write args parser

    ✓ has all aliases

    ✓ 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 (106ms)

    ✓ Replace with `g` flag (89ms)

    ✓ Replace multiple lines (140ms)

    ✓ Replace across specific lines (147ms)

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

    ✓ Replace text in selection (209ms)

    ✓ Substitute support marks (196ms)

    Effects of substituteGlobalFlag=true

      ✓ Replace all matches in the line (120ms)

      ✓ Replace with `g` flag inverts global flag (70ms)

      ✓ Replace multiple lines (109ms)

      ✓ Replace across specific lines (117ms)

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

      ✓ Replace text in selection (205ms)

      ✓ Substitute support marks (188ms)

      ✓ Substitute with escaped delimiter (89ms)

    Substitute with empty search string should use previous search

      ✓ Substitute with previous search using * (241ms)

      ✓ Substitute with previous search using # (307ms)

      ✓ Substitute with previous search using / (355ms)

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



  cmd_line tab

    ✓ tabe with no arguments when not in workspace opens an untitled file (52ms)

    ✓ tabedit with no arguments when not in workspace opens an untitled file (47ms)

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

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



  Vertical split

    ✓ Run :vs (113ms)

    ✓ Run :vsp (96ms)


  Basic write-quit

    ✓ Run write and quit (155ms)

  Configuration

    ✓ remappings are normalized

    ✓ Can handle long key chords (73ms)

    ✓ whichwrap is parsed into wrapKeys



  Notation

    ✓ Normalize



  Remapper

    ✓ getLongestedRemappedKeySequence

    ✓ getMatchingRemap

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

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

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

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler



  Error

    ✓ error code has message



  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers



  Record and execute a macro

    ✓ Can record and execute (263ms)

    ✓ Can repeat last invoked macro (355ms)

    ✓ Can play back with count (440ms)

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

    ✓ Repeat change on contiguous lines (244ms)

    ✓ Append command to a macro (269ms)

    ✓ Can record Ctrl Keys and repeat (250ms)

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



  Mode Handler

    ✓ ctor

    ✓ can set current mode



  Mode Handler Map

    ✓ getOrCreate



  Mode Insert

    ✓ can be activated (108ms)

    ✓ can handle key events (39ms)

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

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

    ✓ <Esc> can exit insert (67ms)

    ✓ Stay in insert when entering characters (204ms)

    ✓ Can handle 'O' (57ms)

    ✓ Can handle 'i' (128ms)

    ✓ Can handle 'I' (85ms)

    ✓ Can handle 'a' (132ms)

    ✓ Can handle 'A' (103ms)

    ✓ Can handle '<C-w>' (150ms)

    ✓ Can handle <C-w> on leading whitespace (65ms)

    ✓ Can handle <C-w> at beginning of line (70ms)

    ✓ Can handle <C-u> (178ms)

    ✓ Can handle <C-u> on leading characters (158ms)

    ✓ Can handle <C-u> on leading whitespace (50ms)

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

    ✓ will not remove leading spaces input by user (39ms)

    ✓ will remove closing bracket (62ms)

    ✓ Backspace works on whitespace only lines (134ms)

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

    ✓ Backspace works at beginning of file (72ms)

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

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

    ✓ Can perform insert command prefixed with count (72ms)

    ✓ Can perform append command prefixed with count (93ms)

    ✓ Can perform insert at start of line command prefixed with count (91ms)

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

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

    ✓ Can perform command prefixed with count with <C-[> (68ms)

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

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


  Mode Normal

    ✓ Can be activated (140ms)

    ✓ Can handle dw (100ms)

    ✓ Can handle dw (79ms)

    ✓ Can handle dw (86ms)

    ✓ Can handle dw across lines (1) (108ms)

    ✓ Can handle dw across lines (2) (98ms)

    ✓ Can handle dd last line (72ms)

    ✓ Can handle dd single line (86ms)

    ✓ Can handle dd (85ms)

    ✓ Can handle 3dd (60ms)

    ✓ Can handle 3dd off end of document (93ms)

    ✓ Can handle d2d (135ms)

    ✓ Can handle dd empty line (83ms)

    ✓ Can handle ddp (109ms)

    ✓ Can handle 'de' (160ms)

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

    ✓ Can handle 'db' (145ms)

    ✓ Can handle 'db then 'db' again (101ms)

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

    ✓ Can handle 'dF' (93ms)

    ✓ Can handle 'dT' (124ms)

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

    ✓ Can handle 'dj' (70ms)

[main 8:02:02 PM] update#setState checking for updates

    ✓ Can handle 'dk' (123ms)

[main 8:02:02 PM] update#setState idle

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

    ✓ Can handle 'd]}' without deleting closing bracket (110ms)

    ✓ Can handle 'cw' (196ms)

    ✓ Can handle 'cw' without deleting following white spaces (63ms)

    ✓ Can handle 'c2w' (83ms)

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

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

    ✓ Can handle 'c]}' without deleting closing bracket (100ms)

    ✓ Can handle 's' (66ms)

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

    ✓ Can handle 'ciw' (159ms)

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

    ✓ Can handle 'caw' (147ms)

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

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

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

    ✓ Can handle 'ci(' on first parentheses (189ms)

    ✓ Can handle 'ci(' with nested parentheses (90ms)

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

    ✓ Can handle 'cib' on first parentheses (105ms)

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

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

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

    ✓ Can handle 'ci{' spanning multiple lines (74ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (135ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (74ms)

    ✓ Can handle 'ci(' on the closing bracket (85ms)

    ✓ Can handle 'ciB' spanning multiple lines (72ms)

error: ModeHandler: error handling key=(. err=Error: what in god's name.

    1) will fail when ca( with no ()

error: ModeHandler: error handling key={. err=Error: what in god's name.

    2) will fail when ca{ with no {}

error: ModeHandler: error handling key=B. err=Error: what in god's name.

    3) will fail when caB with no {}

    ✓ Can handle 'ci[' spanning multiple lines (97ms)

    ✓ Can handle 'ci]' on first bracket (98ms)

    ✓ Can handle 'ca[' on first bracket (96ms)

    ✓ Can handle 'ca]' on first bracket (99ms)

    ✓ Can handle 'ci'' on first quote (72ms)

    ✓ Can handle 'ci'' inside quoted string (93ms)

    ✓ Can handle 'ci'' on closing quote (99ms)

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

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

    ✓ Can handle 'ci"' starting behind the quoted word (80ms)

    ✓ Can handle 'ca"' starting behind the quoted word (69ms)

    ✓ Can handle 'ca"' starting on the opening quote (91ms)

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

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

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

    ✓ Can handle 'ci"' with an escaped backslash (117ms)

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

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

    ✓ Can handle 'ci"' with complex escape sequences (96ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (99ms)

    ✓ will fail when ca" ahead of quoted string (121ms)

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

    ✓ Can handle 'daw' on word with cursor inside spaces (162ms)

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

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

    4) Can handle 'daw' on word with numeric prefix

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

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

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

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

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (85ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (136ms)

    ✓ Can handle 'daw' on word at beginning of file (73ms)

    ✓ Can handle 'daw' on word at beginning of line (75ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (91ms)

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

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

    ✓ Can handle 'daW' around word at whitespace (102ms)

    ✓ Can handle 'daW' on word with trailing spaces (101ms)

    ✓ Can handle 'daW' on word with leading spaces (130ms)

    8) Can handle 'daW' on word with numeric prefix

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

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

    ✓ Can handle 'daW' on end of one line (76ms)

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

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

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

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

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

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

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

    ✓ Can handle 'diw' on word (97ms)

    10) Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line (150ms)

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

    12) 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 (106ms)

    ✓ Can handle 'diW' on word with trailing spaces (113ms)

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

    13) Can handle 'diW' on word with numeric prefix

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

    ✓ Can handle 'diW' on beginning of word (96ms)

    ✓ Can handle d} (57ms)

    ✓ Can handle y} at beginning of line (81ms)

    ✓ Select sentence with trailing spaces (182ms)

    ✓ Select sentence with leading spaces (219ms)

    ✓ Select inner sentence with trailing spaces (117ms)

    ✓ Select inner sentence with leading spaces (202ms)

    ✓ Select spaces between sentences (227ms)

    ✓ Can handle 'df' (138ms)

    ✓ Can handle 'dt' (101ms)

    ✓ Can handle backspace (87ms)

    ✓ Can handle backspace across lines (59ms)

    ✓ Can handle A and backspace (65ms)

    ✓ Can handle 'yy' without changing cursor position (84ms)

    ✓ Can handle 'P' after 'yy' (174ms)

    ✓ Can handle 'p' after 'yy' (84ms)

    ✓ Can handle 'P' after 'Nyy' (86ms)

    ✓ Can handle 'p' after 'Nyy' (175ms)

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

    ✓ Can handle 'gp' after 'yy' (102ms)

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

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

    ✓ Can handle 'gP' after 'yy' (132ms)

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

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

    ✓ Can handle ']p' after 'Nyy' (108ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (108ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (131ms)

    ✓ Can handle '[p' after yy (112ms)

    ✓ Can handle '[p' after 'Nyy' (102ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (133ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (135ms)

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

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

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

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

    ✓ Can repeat w (49ms)

    ✓ Can repeat p (215ms)

    ✓ I works correctly (104ms)

    ✓ gI works correctly (101ms)

    ✓ gi works correctly (228ms)

    ✓ `. works correctly (103ms)

    ✓ '. works correctly (116ms)

    ✓ g; works correctly (138ms)

    ✓ g, works correctly (140ms)

    ✓ g_ works correctly (123ms)

    ✓ 3g_ works correctly (149ms)

    ✓ Can handle space (62ms)

    ✓ Can handle space (102ms)

    ✓ Undo 1 (191ms)

    ✓ Undo 2 (164ms)

    ✓ Undo cursor (228ms)

    ✓ Undo cursor 2 (241ms)

    ✓ Undo cursor 3 (164ms)

    ✓ Undo with movement first (131ms)

    ✓ Can handle 'U' (103ms)

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

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

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

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

    ✓ Can handle 'u' to undo 'U' (132ms)

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

    ✓ Redo (170ms)

    ✓ Redo (178ms)

    ✓ Redo (189ms)

    ✓ Can handle u (94ms)

    ✓ Can handle guw (77ms)

    ✓ Can handle gUw (177ms)

    ✓ Can handle u over line breaks (96ms)

    ✓ can handle s in visual mode (156ms)

    ✓ can handle p with selection (125ms)

    ✓ can handle P with selection (116ms)

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

    ✓ can repeat backspace twice (109ms)

    ✓ can delete linewise with d2G (94ms)

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

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

    ✓ can dE correctly (81ms)

    ✓ can dE correctly (100ms)

    ✓ can dE correctly (114ms)

    ✓ can ctrl-a correctly behind a word (60ms)

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

    ✓ can ctrl-a on word (168ms)

    ✓ can ctrl-a on a hex number (45ms)

    ✓ can ctrl-a on decimal (63ms)

    ✓ can ctrl-a with numeric prefix (70ms)

    ✓ can ctrl-a on a decimal (81ms)

    ✓ can ctrl-a on an octal  (72ms)

    ✓ Correctly increments in the middle of a number (73ms)

    ✓ can ctrl-x correctly behind a word (72ms)

    ✓ can ctrl-a on an number with word before  (59ms)

    ✓ can ctrl-a on an number with word before and after  (43ms)

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

    ✓ can ctrl-a properly on multiple lines (74ms)

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

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

    ✓ can do Y (124ms)

    ✓ Can do S (112ms)

    ✓ / does not affect mark (86ms)

    ✓ / can search with regex (109ms)

    ✓ / can search with newline (153ms)

    ✓ / can search through multiple newlines (132ms)

    ✓ / matches ^ per line (81ms)

    ✓ / matches $ per line (123ms)

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

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

    ✓ <BS> deletes the last character in search in progress mode (97ms)

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

    ✓ <C-h> deletes the last character in search in progress mode (85ms)

    ✓ Can do C (77ms)

    15) Can do cit on a matching tag

error: ModeHandler: error handling key=t. err=Error: what in god's name.

    16) Ignores cit on a non-matching tag

    17) Ignores cit on a nested tag

    18) Can do cit on a tag with an attribute tag

    19) Can do cat on a matching tag

    20) Can do cit on a multiline tag

    21) Can do cit on a multiline tag with nested tags

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

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

error: ModeHandler: error handling key=t. err=Error: what in god's name.

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

error: ModeHandler: error handling key=t. err=Error: what in god's name.

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

    26) can do cit with self closing tags

    ✓ Respects indentation with cc (127ms)

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

    ✓ can handle 'cc' on empty line (87ms)

    ✓ cc copies linewise (108ms)

    ✓ Indent current line with correct Vim Mode (76ms)

    ✓ Can handle <Esc> and do nothing (61ms)

    ✓ Can handle # on consecutive words (150ms)

    ✓ Can handle # on skipped words (372ms)

    ✓ Can 'D'elete the characters under the cursor until the end of the line (261ms)

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line (335ms)

    ✓ cc on whitespace-only treats whitespace as indent (80ms)

    ✓ Can do cai (234ms)

    ✓ Can do cii (106ms)

    ✓ Can do caI (204ms)

    ✓ Can do dai (227ms)

    ✓ Can do dii (101ms)

    ✓ Can do daI (185ms)

    can handle gn

      ✓ gn selects the next match text (386ms)

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

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

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

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

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

    can handle dgn

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

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

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

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

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

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

    can handle cgn

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

      ✓ cgn deletes the current word when cursor is at |hello (107ms)

      ✓ cgn deletes the current word when cursor is at h|ello (113ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (114ms)

      ✓ cgn deletes the current word when cursor is at hell|o (145ms)

      ✓ cgn deletes the next word when cursor is at hello| (109ms)

    can handle gN

      ✓ gN selects the previous match text (510ms)

      ✓ gN selects the current word at hell|o (405ms)

      ✓ gN selects the current word at hel|lo (346ms)

      ✓ gN selects the current word at h|ello (390ms)

      ✓ gN selects the current word at |hello (340ms)

      ✓ gN selects the previous word at | hello (452ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (164ms)

      ✓ dgN deletes the current word when cursor is at hell|o (139ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (136ms)

      ✓ dgN deletes the current word when cursor is at h|ello (136ms)

      ✓ dgN deletes the current word when cursor is at |hello (146ms)

      ✓ dgN deletes the previous word when cursor is at | hello (130ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (114ms)

      ✓ cgN deletes the current word when cursor is at hell|o (266ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (168ms)

      ✓ cgN deletes the current word when cursor is at h|ello (165ms)

      ✓ cgN deletes the current word when cursor is at |hello (115ms)

      ✓ cgN deletes the previous word when cursor is at | hello (147ms)


  Mode Replace

    ✓ Can activate with <insert> from Insert mode (71ms)

    ✓ Can activate with R from Normal mode (97ms)

    ✓ Can handle R (97ms)

    ✓ Can handle R past current line (87ms)

    ✓ Can handle R and exit Replace Mode (100ms)

    ✓ Can handle R across lines (176ms)

    ✓ Can handle R across lines and exit Replace Mode (212ms)

    ✓ Can handle R with {count} (156ms)

    ✓ Can handle backspace (152ms)

    ✓ Can handle backspace (161ms)

    ✓ Can handle backspace across lines (160ms)

    ✓ Can handle arrows (131ms)

    ✓ Can handle . (190ms)

    ✓ Can handle . across lines (230ms)



  Mode Visual

    ✓ can be activated

    ✓ Can handle w (408ms)

    ✓ Can handle wd (255ms)

    ✓ Can handle x (194ms)

    ✓ Can handle x across a selection (139ms)

    ✓ Can do vwd in middle of sentence (231ms)

    ✓ Can do vwd in middle of sentence (239ms)

    ✓ Can do vwd multiple times (219ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (222ms)

    ✓ Can handle H key (83ms)

    ✓ handles case where we delete over a newline (269ms)

    ✓ handles change operator (157ms)

    ✓ Can do vat on multiple matching tags (194ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (223ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (190ms)

    ✓ Repeat-prefixed vat does not bleed below (140ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (193ms)

    ✓ Can do vi) on a matching parenthesis (116ms)

    ✓ Can do vi) on multiple matching parens (125ms)

    ✓ Can do va) on a matching parenthesis (136ms)

    ✓ Can do va) on multiple matching parens (141ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (131ms)

    ✓ Repeat-prefixed va) does not bleed below (122ms)

    ✓ Can do va} on a matching bracket as first character (95ms)

    ✓ Can do va} on multiple matching brackets (134ms)

    ✓ Can do vi( on a matching bracket near first character (94ms)

    ✓ Can do vi{ on outer pair of nested braces (122ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (118ms)

    ✓ Can do va] on multiple matching brackets (164ms)

    ✓ Can do repeat-prefixed vaf on multiple matching pairs of different types (245ms)

    ✓ Repeat-prefixed vaf does not bleed below (147ms)

    ✓ vaf only expands to enclosing pairs (109ms)

    ✓ Can use . to repeat indent in visual (129ms)

    ✓ Can do v_x to delete to first char (133ms)

    ✓ Can do vg_x to delete to last char with no EOL (227ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (108ms)

    ✓ Can do v$x to delete to last char including EOL (138ms)

    ✓ Can do gv to reselect previous selection (149ms)

    Vim's EOL handling is weird

      ✓ delete through eol (177ms)

      ✓ join 2 lines by deleting through eol (191ms)

      ✓ d$ doesn't delete whole line (125ms)

      ✓ vd$ does delete whole line (209ms)

      ✓ Paste over selection copies the selection (143ms)

      ✓ Paste over selection copies the selection linewise (139ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (98ms)

      ✓ Can handle <down> key (141ms)

      ✓ Can handle <left> key (143ms)

      ✓ Can handle <right> key (119ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (151ms)

      ✓ Can handle 'vawd' on word with trailing spaces (155ms)

      ✓ Can handle 'vawd' on word with leading spaces (156ms)

      27) Can handle 'vawd' on word with numeric prefix

      28) Can handle 'vawd' on word with numeric prefix and across lines

      29) 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 (142ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (167ms)

      ✓ Can handle 'vaWd' on word with leading spaces (159ms)

      30) Can handle 'vaWd' on word with numeric prefix

      31) 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 (120ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (172ms)

      ✓ Can handle 'vaWd' on word with leading spaces (243ms)

      32) Can handle 'vaWd' on word with numeric prefix

      33) 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 (167ms)

      ✓ Can handle 'vawd' on word with trailing spaces (166ms)

      ✓ Can handle 'vawd' on word with leading spaces (172ms)

      34) Can handle 'vawd' on word with numeric prefix

      35) Can handle 'vawd' on word with numeric prefix and across lines

      36) 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 (158ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (155ms)

      ✓ Can handle 'vaWd' on word with leading spaces (146ms)

      37) Can handle 'vaWd' on word with numeric prefix

      38) Can handle 'vaWd' on word with numeric prefix and across lines

      ✓ Can handle 'Y' in visual mode (105ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (208ms)

      ✓ Select sentence with leading spaces in visual mode (258ms)

      ✓ Select multiple sentences in visual mode (265ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (153ms)

      ✓ Select inner sentence with leading spaces in visual mode (283ms)

      ✓ Select spaces between sentences in visual mode (326ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (133ms)

      ✓ Count-prefixed vit alternates expanding selection between inner and outer tag brackets (176ms)

      ✓ Can do vat on a matching tag (146ms)

    handles replace in visual mode

      ✓ Can do a single line replace (108ms)

      ✓ Can do a multi line replace (159ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (127ms)

      ✓ D deletes the current line (163ms)

    handles indent blocks in visual mode

      ✓ Can do vai (242ms)

      ✓ Can do vii (180ms)

      ✓ Doesn't naively select the next line (147ms)

      ✓ Searches backwards if cursor line is empty (85ms)

      ✓ Can do vaI (257ms)

    visualstar

      ✓ Works with * (111ms)

      ✓ Works with # (140ms)

    search works in visual mode

      ✓ Works with / (136ms)

      ✓ Works with ? (135ms)

      ✓ Selects correct range (196ms)

    X will delete linewise

      ✓ normal selection (113ms)

      ✓ normal selection (98ms)

    C will delete linewise

      ✓ normal selection (120ms)

      ✓ normal selection (125ms)

    R will delete linewise

      ✓ normal selection (107ms)

      ✓ normal selection (109ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (170ms)

      ✓ upward selection (171ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (138ms)

      ✓ multiline indent bottom up selection (153ms)

      ✓ repeat multiline indent top down selection (172ms)

      ✓ repeat multiline indent bottom up selection (153ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (149ms)

      ✓ multiline outdent bottom up selection (141ms)

      ✓ repeat multiline outdent top down selection (136ms)

      ✓ repeat multiline outdent bottom up selection (172ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (299ms)

    vi{ will go to end of second to last line

      ✓ select (142ms)

    Transition between visual mode

      ✓ vv will back to normal mode (41ms)

      ✓ 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) (705ms)

      ✓ gv selects the last pasted text (which is longer than original) (621ms)

      ✓ gv selects the last pasted text (multiline) (395ms)

    can handle gn

      ✓ gn selects the next match text (619ms)

      ✓ gn selects the current word at |hello (375ms)

      ✓ gn selects the current word at h|ello (400ms)

      ✓ gn selects the current word at hel|lo (429ms)

      ✓ gn selects the next word at hell|o (324ms)

      ✓ gn selects the next word at hello| (367ms)



  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (159ms)

    ✓ Can handle A backwards select (222ms)

    ✓ Can handle I forward select (142ms)

    ✓ Can handle I backwards select (155ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (166ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (134ms)

    ✓ Can handle c forward select (134ms)

    ✓ Can handle c backwards select (188ms)

    ✓ Can handle C (141ms)

    ✓ Can do a multi line replace (140ms)

    ✓ Can handle 'D' (105ms)

    ✓ Can handle 'gj' (125ms)

    ✓ Properly add to end of lines j then $ (127ms)

    ✓ Properly add to end of lines $ then j (104ms)

    ✓ o works in visual block mode (186ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (340ms)



  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (293ms)

    ✓ Can handle wd (173ms)

    ✓ Can handle x (192ms)

    ✓ Can handle U (203ms)

    ✓ Can handle x across a selection (253ms)

    ✓ Can do vwd in middle of sentence (294ms)

    ✓ Can do vwd in middle of sentence (356ms)

    ✓ Can do vwd multiple times (325ms)

    ✓ Can handle U across a selection (240ms)

    ✓ Can handle U across a selection in reverse order (231ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (327ms)

    ✓ handles case where we delete over a newline (323ms)

    ✓ handles change operator (219ms)

    ✓ Vp updates register content (165ms)

    ✓ Vp does not append unnecessary newlines (first line) (73ms)

    ✓ Vp does not append unnecessary newlines (middle line) (115ms)

    ✓ Vp does not append unnecessary newlines (last line) (105ms)

    Vim's EOL handling is weird

      ✓ delete through eol (155ms)

      ✓ join 2 lines by deleting through eol (175ms)

      ✓ d$ doesn't delete whole line (234ms)

      ✓ vd$ does delete whole line (179ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (99ms)

      ✓ Can handle <down> key (101ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (90ms)

      ✓ Can handle d key (94ms)

      ✓ Can handle d key (116ms)

      ✓ Can handle d key (167ms)

      ✓ can handle 'c' (187ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (98ms)

      ✓ Can do a multi visual line replace (96ms)

      ✓ Can do a multi visual line replace from the bottom up (114ms)

    search works in visual line mode

      ✓ Works with / (82ms)

      ✓ Works with ? (133ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (272ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (87ms)

      ✓ linewise visual put works also in the end of document (109ms)

      ✓ gv selects the last pasted text (which is shorter than original) (515ms)

      ✓ gv selects the last pasted text (which is longer than original) (479ms)

      ✓ gv selects the last pasted text (multiline) (249ms)


  Mode Normal

    ✓ Can handle 'x' (69ms)

    ✓ Can handle 'Nx' (71ms)

    ✓ Can handle 'Nx' and paste (97ms)

    ✓ Can handle 'x' at end of line (167ms)

    ✓ Can handle 'Ns' (69ms)

    ✓ Can handle 'Ns' at end of line (130ms)

    ✓ Can handle '<Del>' (132ms)

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (82ms)

    ✓ Can handle '<Del>' at end of line (158ms)

    ✓ Can handle 'cc' (111ms)

    ✓ Can handle 'Ncc' (128ms)

    ✓ Can handle 'yy' (108ms)

    ✓ Can handle 'D' (101ms)

    ✓ Can handle 'D' on empty lines (66ms)

    ✓ Can handle 'DD' (96ms)

    ✓ Can handle 'C' (88ms)

    ✓ Can handle 'NC' (95ms)

    ✓ Can handle 'r' (83ms)

    ✓ Can handle '<Count>r' (109ms)

    ✓ Can handle '<Count>r' (85ms)

    ✓ Can handle 'r' after 'dd' (135ms)

    ✓ Can handle 'J' once (80ms)

    ✓ Can handle 'J' twice (160ms)

    ✓ Can handle 'J' with empty last line (98ms)

    ✓ Can handle 'J's with multiple empty last lines (170ms)

    ✓ Can handle 'J' with leading white space on next line (73ms)

    ✓ Can handle 'J' with only white space on next line (57ms)

    ✓ Can handle 'J' with TWO indented lines (102ms)

    ✓ Can handle 'J' with ')' first character on next line (85ms)

    ✓ Can handle 'J' with a following delete (106ms)

    ✓ Can handle 'J' in Visual Line mode (172ms)

    ✓ Can handle 'gJ' once (101ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (59ms)

    ✓ Can handle '~' (67ms)

    ✓ Can handle 'g~{motion}' (84ms)

    ✓ Can handle '<BS>' in insert mode (57ms)

    ✓ Can handle undo with P (124ms)


  Dot Operator

    ✓ Can repeat '~' with <num> (52ms)

    ✓ Can repeat '~' with dot (62ms)

    ✓ Can repeat 'x' (70ms)

    ✓ Can repeat 'J' (59ms)

    ✓ Can handle dot with A (132ms)

    ✓ Can handle dot with I (117ms)

    ✓ Can repeat actions that require selections (127ms)


  Repeat content change

    ✓ Can repeat '<C-t>' (127ms)

    ✓ Can repeat insert change and '<C-t>' (100ms)

    ✓ Can repeat change by `<C-a>` (120ms)

    ✓ Only one arrow key can be repeated in Insert Mode (112ms)

    ✓ Cached content change will be cleared by arrow keys (132ms)


  Matching Bracket (%)

    ✓ before opening parenthesis (63ms)

    ✓ inside parenthesis (67ms)

    ✓ nested parenthesis beginning (54ms)

    ✓ nested parenthesis end (89ms)

    ✓ nested bracket and parenthesis beginning (80ms)

    ✓ nested bracket, parenthesis, braces beginning (52ms)

    ✓ nested bracket, parenthesis, braces end (91ms)



  Motions in Normal Mode

    ✓ Can handle [( (61ms)

    ✓ Can handle nested [( (80ms)

    ✓ Can handle <number>[( (212ms)

    ✓ Can handle [( and character under cursor exclusive (71ms)

    ✓ Can handle ]) (74ms)

    ✓ Can handle nested ]) (71ms)

    ✓ Can handle <number>]) (83ms)

    ✓ Can handle ]) and character under cursor exclusive (111ms)

    ✓ Can handle [{ (58ms)

    ✓ Can handle nested [{ (75ms)

    ✓ Can handle <number>[{ (87ms)

    ✓ Can handle [{ and character under cursor exclusive (55ms)

    ✓ Can handle ]} (79ms)

    ✓ Can handle nested ]} (80ms)

    ✓ Can handle <number>]} (91ms)

    ✓ Can handle ]} and character under cursor exclusive (89ms)

    ✓ Can handle 'ge' (115ms)

    ✓ Can handle 'gg' (134ms)

    ✓ Can handle 'gg' to first non blank char on random line (87ms)

    ✓ Can handle 'gg' to first non blank char on first line (93ms)

    ✓ Retain same column when moving up/down (104ms)

    ✓ Can handle <enter> (98ms)

    ✓ $ always keeps cursor on EOL (152ms)

    ✓ Can handle $ with a count (86ms)

    ✓ Can handle $ with a count at end of file (62ms)

    ✓ Can handle <end> with a count (60ms)

    ✓ Can handle <D-right> with a count (56ms)

    ✓ Can handle 'f' (104ms)

    ✓ Can handle 'f' twice (261ms)

    ✓ Can handle 'F' (167ms)

    ✓ Can handle 'F' twice (127ms)

    ✓ Can handle 't' (120ms)

    ✓ Can handle 't' twice (86ms)

    ✓ Can handle 'T' (119ms)

    ✓ Can handle 'T' twice (109ms)

    ✓ Can run a forward search (74ms)

    ✓ Can run a forward and find next search (92ms)

    ✓ Can run a reverse search (123ms)

    ✓ Can run a reverse and find next search (143ms)

    ✓ maintains column position correctly (99ms)

    ✓ maintains column position correctly with $ (89ms)

    ✓ Can handle G  (64ms)

    ✓ Can handle G with number prefix (62ms)

    ✓ Can handle G with number prefix (49ms)

    ✓ Can handle gg (65ms)

    ✓ Can handle gg with number prefix (71ms)

    ✓ Can handle 0 (104ms)

    ✓ Can handle 0 as part of a repeat (65ms)

    ✓ Can handle g* (75ms)

    ✓ Can handle g*n (65ms)

    ✓ Can handle * (42ms)

    ✓ Can handle ** (65ms)

    ✓ Can handle # on whitespace (93ms)

    ✓ Can handle # on EOL (114ms)

    ✓ Can handle g# (188ms)

    ✓ Can handle g#n (158ms)

    ✓ Can handle # (166ms)

    ✓ Can handle # already on the word (109ms)

    ✓ Can handle ## (170ms)

    ✓ Can handle | (123ms)

    ✓ Can handle <number> | (133ms)

    ✓ Can handle + (64ms)

    ✓ Can handle + indent (63ms)

    ✓ Can handle + with count prefix (59ms)

    ✓ Can handle - (61ms)

    ✓ Can handle - indent (64ms)

    ✓ Can handle - with count prefix (80ms)

    ✓ Can handle _ (75ms)

    ✓ Can handle _ with count prefix (85ms)

    ✓ Can handle g_ (97ms)

    ✓ Can handle g_ with count prefix (96ms)

    ✓ Can handle <up> key (89ms)

    ✓ Can handle <down> key (90ms)

    ✓ Can handle <left> key (91ms)

    ✓ Can handle <right> key (74ms)



  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



  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 (71ms)

        ✓ l wraps to next line (95ms)

        ✓ <left> wraps to previous line (84ms)

        ✓ <right> wraps to next line (84ms)

      insert mode

        ✓ <left> wraps to previous line (76ms)

        ✓ <right> once goes to end of line (117ms)

        ✓ <right> twice wraps to next line (132ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (77ms)

        ✓ l does not wrap to next line (101ms)

        ✓ <left> does not wrap to previous line (66ms)

        ✓ <right> does not wrap to next line (117ms)

      insert mode

        ✓ <left> does not wrap to previous line (78ms)

        ✓ <right> does not wrap to next line (89ms)


  Multicursor

    ✓ can add multiple cursors below (155ms)

    ✓ can add multiple cursors above (273ms)


  numeric string
    ✓ fails on non-string
    ✓ handles hex round trip
    ✓ handles decimal round trip
    ✓ handles octal trip

  comment operator

    ✓ gcc comments out current line (375ms)

    ✓ gcj comments in current and next line (236ms)

    ✓ block comment with motion (407ms)

    ✓ block comment in Visual Mode (319ms)



  put operator

    ✓ basic put test (229ms)

    ✓ test yy end of line (268ms)

    ✓ test yy first line (147ms)

    ✓ test yy middle line (156ms)

    ✓ test yy with correct positon movement (244ms)



  shift operator

    ✓ basic shift left test (123ms)

    ✓ shift left goto end test (77ms)

    ✓ shift left goto line test (111ms)

    ✓ shift right goto end test (89ms)

    ✓ shift right goto line test (103ms)


  easymotion plugin

    ✓ Can handle s move (152ms)

    ✓ Can handle 2s move (99ms)

    ✓ Can handle f move (98ms)

    ✓ Can handle 2f move (120ms)

    ✓ Can handle F move (158ms)

    ✓ Can handle 2F move (130ms)

    ✓ Can handle t move (106ms)

    ✓ Can handle bd-t move (119ms)

    ✓ Can handle 2t move (115ms)

    ✓ Can handle bd-t2 move (139ms)

    ✓ Can handle T move (235ms)

    ✓ Can handle 2T move (155ms)

    ✓ Can handle w move (128ms)

    ✓ Can handle bd-w move (99ms)

    ✓ Can handle b move (138ms)

    ✓ Can handle e move (122ms)

    ✓ Can handle bd-e move (107ms)

    ✓ Can handle ge move (122ms)

    ✓ Can handle n-char move (139ms)

    ✓ Can handle j move (81ms)

    ✓ Can handle k move (131ms)

    ✓ Can handle bd-jk move (1) (119ms)

    ✓ Can handle bd-jk move (2) (108ms)

    ✓ Can handle lineforward move (1) (100ms)

    ✓ Can handle lineforward move (2) (205ms)

    ✓ Can handle linebackward move (1) (150ms)

    ✓ Can handle linebackward move (2) (173ms)



  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode



  sneak plugin

    ✓ Can handle s motion (74ms)

    ✓ Can handle S motion (103ms)

    ✓ Can handle <operator>z motion (74ms)

    ✓ Can handle <operator>Z motion (102ms)

    ✓ Can handle s; motion (71ms)

    ✓ Can handle s, motion (103ms)

    ✓ Can handle S; motion (117ms)

    ✓ Can handle S, motion (126ms)



  surround plugin

    ✓ 'ysiw)' surrounds word without space (136ms)

    ✓ 'ysiw(' surrounds word with space (146ms)

    ✓ 'ysw)' surrounds word without space (142ms)

    ✓ 'ysw(' surrounds word with space (120ms)

    ✓ 'ysaw)' surrounds word without space (232ms)

    ✓ 'ysaw(' surrounds word with space (158ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (168ms)

    ✓ 'ysiw<' surrounds word with tags (173ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (183ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (205ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (181ms)

    ✓ change surround (174ms)

    ✓ change surround with alias (182ms)

    ✓ change surround to tags (183ms)

    ✓ delete surround (167ms)

    ✓ delete surround with alias (160ms)

    ✓ delete surround with tags (221ms)

    ✓ change surround brackets at end of line (193ms)

    ✓ changing brackets with surround works again (249ms)


  register

    ✓ Can copy to a register (139ms)

    ✓ Can use two registers together (199ms)

    ✓ Can use black hole register (118ms)

    ✓ System clipboard works with chinese characters (170ms)

    ✓ Yank stores text in Register '0' (331ms)

    ✓ Register '1'-'9' stores delete content (305ms)

    ✓ "A appends linewise text to "a (354ms)

    ✓ "A appends character wise text to "a (303ms)

    ✓ Can put and get to register

    clipboard

      ✓ Can access '*' (clipboard) register (145ms)

      ✓ Can access '+' (clipboard) register (96ms)


  Repeatable movements with f and t

    ✓ Can repeat f<character> (197ms)

    ✓ Can repeat reversed F<character> (110ms)

    ✓ Can repeat t<character> (67ms)

    ✓ Can repeat N times reversed t<character> (84ms)



  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist





  927 passing (4m)
  38 failing



  1) Mode Normal
       will fail when ca( with no ():
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:423:3)


  2) Mode Normal
       will fail when ca{ with no {}:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:431:3)

  3) Mode Normal
       will fail when caB with no {}:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:439:3)


  4) Mode Normal
       Can handle 'daw' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:647:3)

  5) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:655:3)


  6) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one two six. Actual=one two four.
      + expected - actual

      -one two four
      +one two six
      
      at Suite.suite (test/mode/modeNormal.test.ts:663:3)


  7) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:671:3)

  8) Mode Normal
       Can handle 'daW' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:761:3)


  9) Mode Normal
       Can handle 'daW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:769:3)


  10) Mode Normal
       Can handle 'diw' on word with numeric prefix:

      Content does not match; Expected=   three,   four  . Actual=one      three,   four  .
      + expected - actual

      -one      three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:851:3)


  11) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:867:3)

  12) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:875:3)


  13) Mode Normal
       Can handle 'diW' on word with numeric prefix:

      Content does not match; Expected=   three,   four  . Actual=one      three,   four  .
      + expected - actual

      -one      three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:908:3)

  14) Mode Normal
       Can handle 'diW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:916:3)

  15) Mode Normal
       Can do cit on a matching tag:

      Content does not match; Expected=<blink></blink>. Actual=<blink>o</blink>.
      + expected - actual

      -<blink>o</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1731:3)

  16) Mode Normal
       Ignores cit on a non-matching tag:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1739:3)

  17) Mode Normal
       Ignores cit on a nested tag:

      Content does not match; Expected=<blink></blink>. Actual=<blink>></blink>.
      + expected - actual

      -<blink>></blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1747:3)

  18) Mode Normal
       Can do cit on a tag with an attribute tag:

      Content does not match; Expected=<blink level="extreme"></blink>. Actual=<blink level="extreme">o</blink>.
      + expected - actual

      -<blink level="extreme">o</blink>
      +<blink level="extreme"></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1755:3)

  19) Mode Normal
       Can do cat on a matching tag:

      Content does not match; Expected=one  two. Actual=one > two.
      + expected - actual

      -one > two
      +one  two
      
      at Suite.suite (test/mode/modeNormal.test.ts:1763:3)

  20) Mode Normal
       Can do cit on a multiline tag:

      Content does not match; Expected= <blink></blink>. Actual= <blink>t</blink>.
      + expected - actual

      - <blink>t</blink>
      + <blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1771:3)


  21) Mode Normal
       Can do cit on a multiline tag with nested tags:

      Content does not match; Expected= <blink></blink>. Actual= <blink>t</blink>.
      + expected - actual

      - <blink>t</blink>
      + <blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1779:3)

  22) Mode Normal
       Can do cit inside of a tag with another non closing tag inside tags:

      Content does not match; Expected=<blink></blink>. Actual=<blink>d</blink>.
      + expected - actual

      -<blink>d</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1787:3)


  23) Mode Normal
       Can do cit inside of a tag with another empty closing tag inside tags:

      Content does not match; Expected=<blink></blink>. Actual=<blink>d</blink>.
      + expected - actual

      -<blink>d</blink>
      +<blink></blink>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1795:3)

  24) Mode Normal
       Can do dit on empty tag block, cursor moves to inside:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1803:3)

  25) Mode Normal
       Can do cit on empty tag block, cursor moves to inside:
     what in god's name
      at Suite.suite (test/mode/modeNormal.test.ts:1811:3)


  26) Mode Normal
       can do cit with self closing tags:

      Content does not match; Expected=<div></div>. Actual=<div>}</div>.
      + expected - actual

      -<div>}</div>
      +<div></div>
      
      at Suite.suite (test/mode/modeNormal.test.ts:1819:3)

  27) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:254:5)


  28) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:262:5)

  29) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:270:5)

  30) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:305:5)


  31) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:313:5)

  32) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:347:5)

  33) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:355:5)


  34) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:389:5)


  35) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:397:5)


  36) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:405:5)


  37) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:440:5)


  38) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:448:5)





Tests exited with code: 1

@xmbhasin
Copy link
Contributor Author

xmbhasin commented Aug 11, 2018

I think I'm ready for a final review of this PR. I would have liked to fix count-prefixed actions with inner tag (it) movements. But it may have been a bit awkward with the way it alternates between selecting inner and outer tag content when repeated. Additionally, I'm not actually sure if vim even supports count-prefixed actions with pairs/blocks. I only realized that after having added it in this PR, but it is quite useful.

@TravisBuddy
Copy link

Travis tests have failed

Hey @xmbhasin,
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

npm test --silent
### VS Code Extension Test Run ###
Current working directory: /home/travis/build/VSCodeVim/Vim
Downloading VS Code into "/home/travis/build/VSCodeVim/Vim/.vscode-test/stable" from: https://vscode-update.azurewebsites.net/1.26.1/linux-x64/stable
Running extension tests: /home/travis/build/VSCodeVim/Vim/.vscode-test/stable/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
Xlib:  extension "RANDR" missing on display ":99.0".

[main 7:04:58 PM] update#setState idle

xdg-settings: unknown desktop environment

bash: cannot set terminal process group (-1): Inappropriate ioctl for device

bash: no job control in this shell

nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/home/travis/.nvm/versions/node/v8.11.4"
Run `unset npm_config_prefix` to unset it.





  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


  command-line history

    ✓ add command

    ✓ add empty command

    ✓ add command over configuration.history

    ✓ add command that exists in history (643ms)

    ✓ load and save history

    ✓ change configuration.history



  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



  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



  Basic sort

    ✓ Sort whole file, asc (207ms)

    ✓ Sort whole file, dsc (162ms)

    ✓ Sort range, asc (172ms)

    ✓ Sort range, dsc (138ms)


  :close args parser
    ✓ has all aliases
    ✓ can parse empty args
    ✓ ignores trailing white space

    ✓ can parse !

    ✓ throws if space before !

    ✓ ignores space after !

    ✓ throws if bad input



  :quit args parser

    ✓ has all aliases

    ✓ 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



  :write args parser

    ✓ has all aliases

    ✓ 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 (107ms)

    ✓ Replace with `g` flag (89ms)

    ✓ Replace multiple lines (108ms)

    ✓ Replace across specific lines (189ms)

    ✓ Replace current line with no active selection (196ms)

    ✓ Replace text in selection (321ms)

    ✓ Substitute support marks (231ms)

    Effects of substituteGlobalFlag=true

      ✓ Replace all matches in the line (86ms)

      ✓ Replace with `g` flag inverts global flag (108ms)

      ✓ Replace multiple lines (118ms)

      ✓ Replace across specific lines (151ms)

      ✓ Replace current line with no active selection (293ms)

      ✓ Replace text in selection (308ms)

      ✓ Substitute support marks (165ms)

      ✓ Substitute with escaped delimiter (60ms)

    Substitute with empty search string should use previous search

      ✓ Substitute with previous search using * (290ms)

      ✓ Substitute with previous search using # (198ms)

      ✓ Substitute with previous search using / (295ms)

      ✓ Substitute with empty search string should use last searched pattern (227ms)


  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 (79ms)

    ✓ tabe with current file path does nothing (73ms)



  Vertical split

    ✓ Run :vs (80ms)

    ✓ Run :vsp (92ms)



  Basic write-quit

    ✓ Run write and quit (160ms)



  Configuration

    ✓ remappings are normalized

    ✓ Can handle long key chords (100ms)

    ✓ whichwrap is parsed into wrapKeys


  Notation
    ✓ Normalize

  Remapper

    ✓ getLongestedRemappedKeySequence

    ✓ getMatchingRemap

    ✓ jj -> <Esc> through modehandler (38ms)

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

TextEditor is closed/disposed

    ✓ 0 -> :wq through modehandler (53ms)

    ✓ leader, w -> closeActiveEditor in normal mode through modehandler (40ms)

    ✓ leader, c -> closeActiveEditor in visual mode through modehandler (40ms)



  Error

    ✓ error code has message



  package.json

    ✓ all keys have handlers

    ✓ all defined configurations in package.json have handlers

  Record and execute a macro

    ✓ Can record and execute (296ms)

    ✓ Can repeat last invoked macro (282ms)

    ✓ Can play back with count (637ms)

    ✓ Can play back with count, abort when a motion fails (803ms)

    ✓ Repeat change on contiguous lines (396ms)

    ✓ Append command to a macro (371ms)

    ✓ Can record Ctrl Keys and repeat (312ms)

    ✓ Can execute macros with dot commands properly (200ms)



  Mode Handler

    ✓ ctor

    ✓ can set current mode


  Mode Handler Map
    ✓ getOrCreate

  Mode Insert

    ✓ can be activated (108ms)

    ✓ can handle key events (44ms)

    ✓ <Esc> should change cursor position (92ms)

    ✓ <C-c> can exit insert (153ms)

    ✓ <Esc> can exit insert (111ms)

    ✓ Stay in insert when entering characters (125ms)

    ✓ Can handle 'O' (114ms)

    ✓ Can handle 'i' (154ms)

    ✓ Can handle 'I' (131ms)

    ✓ Can handle 'a' (176ms)

    ✓ Can handle 'A' (107ms)

    ✓ Can handle '<C-w>' (154ms)

    ✓ Can handle <C-w> on leading whitespace (126ms)

    ✓ Can handle <C-w> at beginning of line (86ms)

    ✓ Can handle <C-u> (100ms)

    ✓ Can handle <C-u> on leading characters (102ms)

    ✓ Can handle <C-u> on leading whitespace (251ms)

    ✓ Correctly places the cursor after deleting the previous line break (150ms)

    ✓ will not remove leading spaces input by user

    ✓ will remove closing bracket (58ms)

    ✓ Backspace works on whitespace only lines (135ms)

    ✓ Backspace works on end of whitespace only lines (119ms)

    ✓ Backspace works at beginning of file (104ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal (272ms)

    ✓ Can perform <ctrl+o> to exit and perform one command in normal at the beginning of a row (103ms)

    ✓ Can perform insert command prefixed with count (111ms)

    ✓ Can perform append command prefixed with count (144ms)

    ✓ Can perform insert at start of line command prefixed with count (190ms)

    ✓ Can perform append to end of line command prefixed with count (148ms)

    ✓ Can perform change char (s) command prefixed with count (257ms)

    ✓ Can perform command prefixed with count with <C-[> (122ms)

    ✓ Can handle 'o' with count (267ms)

    ✓ Can handle 'O' with count (175ms)



  Mode Normal

    ✓ Can be activated (78ms)

    ✓ Can handle dw (155ms)

    ✓ Can handle dw (132ms)

    ✓ Can handle dw (121ms)

    ✓ Can handle dw across lines (1) (107ms)

    ✓ Can handle dw across lines (2) (109ms)

    ✓ Can handle dd last line (108ms)

    ✓ Can handle dd single line (76ms)

    ✓ Can handle dd (85ms)

    ✓ Can handle 3dd (176ms)

    ✓ Can handle 3dd off end of document (160ms)

    ✓ Can handle d2d (154ms)

    ✓ Can handle dd empty line (91ms)

    ✓ Can handle ddp (137ms)

[main 7:05:28 PM] update#setState checking for updates

    ✓ Can handle 'de' (98ms)

[main 7:05:28 PM] update#setState idle

    ✓ Can handle 'de' then 'de' again (227ms)

    ✓ Can handle 'db' (153ms)

    ✓ Can handle 'db then 'db' again (142ms)

    ✓ Can handle 'dl' at end of line (192ms)

    ✓ Can handle 'dF' (154ms)

    ✓ Can handle 'dT' (142ms)

    ✓ Can handle 'd3' then <enter> (104ms)

    ✓ Can handle 'dj' (97ms)

    ✓ Can handle 'dk' (129ms)

    ✓ Can handle 'd])' without deleting closing parenthesis (92ms)

    ✓ Can handle 'd]}' without deleting closing bracket (85ms)

    ✓ Can handle 'cw' (157ms)

    ✓ Can handle 'cw' without deleting following white spaces (70ms)

    ✓ Can handle 'c2w' (72ms)

    ✓ Can handle 'cw' without removing EOL (120ms)

    ✓ Can handle 'c])' without deleting closing parenthesis (96ms)

    ✓ Can handle 'c]}' without deleting closing bracket (131ms)

    ✓ Can handle 's' (81ms)

    ✓ Can handle 'yiw' with correct cursor ending position (91ms)

    ✓ Can handle 'ciw' (225ms)

    ✓ Can handle 'ciw' on blanks (253ms)

    ✓ Can handle 'caw' (228ms)

    ✓ Can handle 'caw' on first letter (230ms)

    ✓ Can handle 'caw' on blanks (207ms)

    ✓ Can handle 'caw' on blanks (132ms)

    ✓ Can handle 'ci(' on first parentheses (111ms)

    ✓ Can handle 'ci(' with nested parentheses (117ms)

    ✓ Can handle 'ci(' backwards through nested parens (145ms)

    ✓ Can handle 'cib' on first parentheses (130ms)

    ✓ Can handle 'ci(' across multiple lines with last character at beginning (118ms)

    1) Can handle count prefixed 'ci)'

    2) Can handle count prefixed 'ca)'

    ✓ Can handle 'ca(' spanning multiple lines (102ms)

    ✓ Can handle 'cab' spanning multiple lines (81ms)

    ✓ Can handle 'ci{' spanning multiple lines (100ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (81ms)

    ✓ Can handle 'ci{' spanning multiple lines and handle whitespaces correctly (96ms)

    ✓ Can handle 'ci(' on the closing bracket (118ms)

    ✓ Can handle 'ciB' spanning multiple lines (81ms)

    ✓ will fail when ca( with no () (103ms)

    ✓ will fail when ca{ with no {} (97ms)

    ✓ will fail when caB with no {} (115ms)

    ✓ Can handle 'ci[' spanning multiple lines (108ms)

    ✓ Can handle 'ci]' on first bracket (134ms)

    ✓ Can handle 'ca[' on first bracket (100ms)

    ✓ Can handle 'ca]' on first bracket (100ms)

    ✓ Can handle 'ci'' on first quote (66ms)

    ✓ Can handle 'ci'' inside quoted string (112ms)

    ✓ Can handle 'ci'' on closing quote (98ms)

    ✓ Can handle 'ci'' when string is ahead (116ms)

    ✓ Can handle 'ci"' on opening quote (104ms)

    ✓ Can handle 'ci"' starting behind the quoted word (86ms)

    ✓ Can handle 'ca"' starting behind the quoted word (76ms)

    ✓ Can handle 'ca"' starting on the opening quote (89ms)

    ✓ Can handle 'ci"' with escaped quotes (135ms)

    ✓ Can handle 'ci"' with a single escaped quote (77ms)

    ✓ Can handle 'ci"' with a single escaped quote behind (155ms)

    ✓ Can handle 'ci"' with an escaped backslash (137ms)

    ✓ Can handle 'ci"' with an escaped backslash on closing quote (119ms)

    ✓ Can handle 'ca"' starting on the closing quote (150ms)

    ✓ Can handle 'ci"' with complex escape sequences (140ms)

    ✓ Can pick the correct open quote between two strings for 'ci"' (130ms)

    ✓ will fail when ca" ahead of quoted string (93ms)

    ✓ Can handle 'ca`' inside word (103ms)

    ✓ Can handle 'daw' on word with cursor inside spaces (140ms)

    ✓ Can handle 'daw' on word with trailing spaces (114ms)

    ✓ Can handle 'daw' on word with leading spaces (145ms)

    3) Can handle 'daw' on word with numeric prefix

    4) Can handle 'daw' on word with numeric prefix and across lines

    5) Can handle 'daw' on word with numeric prefix and across lines

    6) Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`

    ✓ Can handle 'daw' on end of word (168ms)

    ✓ Can handle 'daw' on words at beginning of line with leading whitespace (93ms)

    ✓ Can handle 'daw' on words at ends of lines in the middle of whitespace (122ms)

    ✓ Can handle 'daw' on word at beginning of file (66ms)

    ✓ Can handle 'daw' on word at beginning of line (91ms)

    ✓ Can handle 'daw' on word at end of line with trailing whitespace (115ms)

    ✓ Can handle 'daw' around word at end of line (116ms)

    ✓ Can handle 'daW' on big word with cursor inside spaces (167ms)

    ✓ Can handle 'daW' around word at whitespace (161ms)

    ✓ Can handle 'daW' on word with trailing spaces (189ms)

    ✓ Can handle 'daW' on word with leading spaces (136ms)

    7) Can handle 'daW' on word with numeric prefix

    8) Can handle 'daW' on word with numeric prefix and across lines

    ✓ Can handle 'daW' on beginning of word (138ms)

    ✓ Can handle 'daW' on end of one line (90ms)

    ✓ Can handle 'daW' around word at the last WORD (t|wo) (81ms)

    ✓ Can handle 'daW' around word at the last WORD (tw|o) (111ms)

    ✓ Can handle 'daW' around word at the last WORD (class="btn"|>) (161ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (class="btn"|>) (183ms)

    ✓ Can handle 'daW' around word at the last WORD (c|lass="btn">) (144ms)

    ✓ Can handle 'daW' around word at the last WORD of the end of document (c|lass="btn">) (207ms)

    ✓ Can handle 'diw' on word with cursor inside spaces (129ms)

    ✓ Can handle 'diw' on word (97ms)

    9) Can handle 'diw' on word with numeric prefix

    ✓ Can handle 'diw' on trailing spaces at the end of line (186ms)

    10) Can handle 'diw' on word with numeric prefix and across lines

    11) 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 (146ms)

    ✓ Can handle 'diW' on word with trailing spaces (120ms)

    ✓ Can handle 'diW' on word with leading spaces (139ms)

    12) Can handle 'diW' on word with numeric prefix

    13) Can handle 'diW' on word with numeric prefix and across lines

    ✓ Can handle 'diW' on beginning of word (97ms)

    ✓ Can handle d} (88ms)

    ✓ Can handle y} at beginning of line (107ms)

    ✓ Select sentence with trailing spaces (177ms)

    ✓ Select sentence with leading spaces (294ms)

    ✓ Select inner sentence with trailing spaces (165ms)

    ✓ Select inner sentence with leading spaces (302ms)

    ✓ Select spaces between sentences (248ms)

    ✓ Can handle 'df' (134ms)

    ✓ Can handle 'dt' (155ms)

    ✓ Can handle backspace (92ms)

    ✓ Can handle backspace across lines (107ms)

    ✓ Can handle A and backspace (91ms)

    ✓ Can handle 'yy' without changing cursor position (75ms)

    ✓ Can handle 'P' after 'yy' (132ms)

    ✓ Can handle 'p' after 'yy' (91ms)

    ✓ Can handle 'P' after 'Nyy' (97ms)

    ✓ Can handle 'p' after 'Nyy' (70ms)

    ✓ Can handle 'p' after 'yy' with correct cursor position (74ms)

    ✓ Can handle 'gp' after 'yy' (103ms)

    ✓ Can handle 'gp' after 'Nyy' (113ms)

    ✓ Can handle 'gp' after 'Nyy' if cursor is on the last line (131ms)

    ✓ Can handle 'gP' after 'yy' (93ms)

    ✓ Can handle 'gP' after 'Nyy' (112ms)

    ✓ Can handle ']p' after yy (103ms)

    ✓ Can handle ']p' after 'Nyy' (142ms)

    ✓ Can handle ']p' after 'Nyy' and indent with tabs first (110ms)

    ✓ Can handle ']p' after 'Nyy' and decrease indents if possible (139ms)

    ✓ Can handle '[p' after yy (87ms)

    ✓ Can handle '[p' after 'Nyy' (90ms)

    ✓ Can handle '[p' after 'Nyy' and indent with tabs first (135ms)

    ✓ Can handle '[p' after 'Nyy' and decrease indents if possible (91ms)

    ✓ Can handle 'p' after y'a (74ms)

    ✓ Can handle 'p' after 'y])' without including closing parenthesis (79ms)

    ✓ Can handle 'p' after 'y]}' without including closing bracket (109ms)

    ✓ Can handle pasting in visual mode over selection (200ms)

    ✓ Can repeat w (67ms)

    ✓ Can repeat p (121ms)

    ✓ I works correctly (176ms)

    ✓ gI works correctly (197ms)

    ✓ gi works correctly (267ms)

    ✓ `. works correctly (219ms)

    ✓ '. works correctly (133ms)

    ✓ g; works correctly (170ms)

    ✓ g, works correctly (296ms)

    ✓ g_ works correctly (113ms)

    ✓ 3g_ works correctly (92ms)

    ✓ Can handle space (86ms)

    ✓ Can handle space (67ms)

    ✓ Undo 1 (119ms)

    ✓ Undo 2 (73ms)

    ✓ Undo cursor (205ms)

    ✓ Undo cursor 2 (163ms)

    ✓ Undo cursor 3 (185ms)

    ✓ Undo with movement first (99ms)

    ✓ Can handle 'U' (82ms)

    ✓ Can handle 'U' for multiple changes (154ms)

    ✓ Can handle 'U' for new line below (136ms)

    ✓ Can handle 'U' for new line above (167ms)

    ✓ Can handle 'U' for consecutive changes only (204ms)

    ✓ Can handle 'u' to undo 'U' (103ms)

    ✓ Can handle 'U' to undo 'U' (91ms)

    ✓ Redo (171ms)

    ✓ Redo (186ms)

    ✓ Redo (190ms)

    ✓ Can handle u (79ms)

    ✓ Can handle guw (58ms)

    ✓ Can handle gUw (55ms)

    ✓ Can handle u over line breaks (90ms)

    ✓ can handle s in visual mode (149ms)

    ✓ can handle p with selection (139ms)

    ✓ can handle P with selection (90ms)

    ✓ can handle p in visual to end of line (143ms)

    ✓ can repeat backspace twice (152ms)

    ✓ can delete linewise with d2G (87ms)

    ✓ can delete with + motion and count (118ms)

    ✓ can delete with - motion and count (147ms)

    ✓ can dE correctly (80ms)

    ✓ can dE correctly (91ms)

    ✓ can dE correctly (121ms)

    ✓ can ctrl-a correctly behind a word (70ms)

    ✓ can ctrl-a the right word (always the one AFTER the cursor) (87ms)

    ✓ can ctrl-a on word (91ms)

    ✓ can ctrl-a on a hex number (80ms)

    ✓ can ctrl-a on decimal (64ms)

    ✓ can ctrl-a with numeric prefix (73ms)

    ✓ can ctrl-a on a decimal (103ms)

    ✓ can ctrl-a on an octal  (82ms)

    ✓ Correctly increments in the middle of a number (52ms)

    ✓ can ctrl-x correctly behind a word (103ms)

    ✓ can ctrl-a on an number with word before  (69ms)

    ✓ can ctrl-a on an number with word before and after  (56ms)

    ✓ can ctrl-x on a negative number with word before and after  (115ms)

    ✓ can ctrl-a properly on multiple lines (109ms)

    ✓ can <C-a> on word with multiple numbers (incrementing first number) (69ms)

    ✓ can <C-a> on word with multiple numbers (incrementing second number) (125ms)

    ✓ can do Y (97ms)

    ✓ Can do S (115ms)

    ✓ / does not affect mark (108ms)

    ✓ / can search with regex (104ms)

    ✓ / can search with newline (144ms)

    ✓ / can search through multiple newlines (170ms)

    ✓ / matches ^ per line (97ms)

    ✓ / matches $ per line (101ms)

    ✓ /\c forces case insensitive search (81ms)

    ✓ /\C forces case sensitive search (64ms)

    ✓ <BS> deletes the last character in search in progress mode (71ms)

    ✓ <S-BS> deletes the last character in search in progress mode (81ms)

    ✓ <C-h> deletes the last character in search in progress mode (118ms)

    ✓ Can do C (70ms)

    ✓ Can do cit on a matching tag (128ms)

    ✓ Ignores cit on a non-matching tag (128ms)

    ✓ Ignores cit on a nested tag (255ms)

    ✓ Can do cit on a tag with an attribute tag (162ms)

    ✓ Can do cat on a matching tag (171ms)

    ✓ Can do cit on a multiline tag (127ms)

    ✓ Can do cit on a multiline tag with nested tags (139ms)

    ✓ Can do cit inside of a tag with another non closing tag inside tags (195ms)

    ✓ Can do cit inside of a tag with another empty closing tag inside tags (146ms)

    ✓ Can do dit on empty tag block, cursor moves to inside (65ms)

    ✓ Can do cit on empty tag block, cursor moves to inside (177ms)

    ✓ can do cit with self closing tags (156ms)

    ✓ Respects indentation with cc (100ms)

    ✓ Resets cursor to indent end with cc (61ms)

    ✓ can handle 'cc' on empty line (63ms)

    ✓ cc copies linewise (100ms)

    ✓ Indent current line with correct Vim Mode (61ms)

    ✓ Can handle <Esc> and do nothing (63ms)

    ✓ Can handle # on consecutive words (164ms)

    ✓ Can handle # on skipped words (225ms)

    ✓ Can 'D'elete the characters under the cursor until the end of the line (187ms)

    ✓ Can 'D'elete the characters under multiple cursors until the end of the line (314ms)

    ✓ cc on whitespace-only treats whitespace as indent (71ms)

    ✓ Can do cai (193ms)

    ✓ Can do cii (86ms)

    ✓ Can do caI (204ms)

    ✓ Can do dai (148ms)

    ✓ Can do dii (126ms)

    ✓ Can do daI (365ms)

    can handle gn

      ✓ gn selects the next match text (403ms)

      ✓ gn selects the current word at |hello (392ms)

      ✓ gn selects the current word at h|ello (272ms)

      ✓ gn selects the current word at hel|lo (352ms)

      ✓ gn selects the current word at hell|o (588ms)

      ✓ gn selects the next word at hello| (316ms)

    can handle dgn

      ✓ dgn deletes the next match text (from first line) (72ms)

      ✓ dgn deletes the current word when cursor is at |hello (96ms)

      ✓ dgn deletes the current word when cursor is at h|ello (108ms)

      ✓ dgn deletes the current word when cursor is at hel|lo (102ms)

      ✓ dgn deletes the current word when cursor is at hell|o (134ms)

      ✓ dgn deletes the next word when cursor is at hello| (123ms)

    can handle cgn

      ✓ cgn deletes the next match text (from first line) (130ms)

      ✓ cgn deletes the current word when cursor is at |hello (123ms)

      ✓ cgn deletes the current word when cursor is at h|ello (94ms)

      ✓ cgn deletes the current word when cursor is at hel|lo (260ms)

      ✓ cgn deletes the current word when cursor is at hell|o (113ms)

      ✓ cgn deletes the next word when cursor is at hello| (153ms)

    can handle gN

      ✓ gN selects the previous match text (289ms)

      ✓ gN selects the current word at hell|o (271ms)

      ✓ gN selects the current word at hel|lo (306ms)

      ✓ gN selects the current word at h|ello (368ms)

      ✓ gN selects the current word at |hello (357ms)

      ✓ gN selects the previous word at | hello (348ms)

    can handle dgN

      ✓ dgN deletes the previous match text (from first line) (190ms)

      ✓ dgN deletes the current word when cursor is at hell|o (141ms)

      ✓ dgN deletes the current word when cursor is at hel|lo (118ms)

      ✓ dgN deletes the current word when cursor is at h|ello (222ms)

      ✓ dgN deletes the current word when cursor is at |hello (194ms)

      ✓ dgN deletes the previous word when cursor is at | hello (170ms)

    can handle cgN

      ✓ cgN deletes the previous match text (from first line) (146ms)

      ✓ cgN deletes the current word when cursor is at hell|o (123ms)

      ✓ cgN deletes the current word when cursor is at hel|lo (119ms)

      ✓ cgN deletes the current word when cursor is at h|ello (160ms)

      ✓ cgN deletes the current word when cursor is at |hello (160ms)

      ✓ cgN deletes the previous word when cursor is at | hello (218ms)



  Mode Replace

    ✓ Can activate with <insert> from Insert mode (127ms)

    ✓ Can activate with R from Normal mode (80ms)

    ✓ Can handle R (117ms)

    ✓ Can handle R past current line (117ms)

    ✓ Can handle R and exit Replace Mode (77ms)

    ✓ Can handle R across lines (141ms)

    ✓ Can handle R across lines and exit Replace Mode (129ms)

    ✓ Can handle R with {count} (189ms)

    ✓ Can handle backspace (126ms)

    ✓ Can handle backspace (160ms)

    ✓ Can handle backspace across lines (321ms)

    ✓ Can handle arrows (153ms)

    ✓ Can handle . (243ms)

    ✓ Can handle . across lines (307ms)



  Mode Visual

    ✓ can be activated

    ✓ Can handle w (350ms)

    ✓ Can handle wd (365ms)

    ✓ Can handle x (284ms)

    ✓ Can handle x across a selection (148ms)

    ✓ Can do vwd in middle of sentence (249ms)

    ✓ Can do vwd in middle of sentence (222ms)

    ✓ Can do vwd multiple times (356ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (234ms)

    ✓ Can handle H key (102ms)

    ✓ handles case where we delete over a newline (254ms)

    ✓ handles change operator (213ms)

    ✓ Can do vat on multiple matching tags (189ms)

    ✓ Can maintain selection on failure with vat on multiple matching tags (256ms)

    ✓ Can maintain selection on failure with repeat-prefixed vat on multiple matching tags (302ms)

    ✓ Repeat-prefixed vat does not bleed below (148ms)

    ✓ Failed vat does not expand or move selection, remains in visual mode (207ms)

    ✓ Can do vi) on a matching parenthesis (206ms)

    ✓ Can do vi) on multiple matching parens (211ms)

    ✓ Can do va) on a matching parenthesis (185ms)

    ✓ Can do va) on multiple matching parens (289ms)

    ✓ Failed va) does not expand or move selection, remains in visual mode (147ms)

    ✓ Repeat-prefixed va) does not bleed below (137ms)

    ✓ Can do va} on a matching bracket as first character (95ms)

    ✓ Can do va} on multiple matching brackets (213ms)

    ✓ Can do vi( on a matching bracket near first character (123ms)

    ✓ Can do vi{ on outer pair of nested braces (115ms)

    ✓ Can do vi{ on braces indented by 1 and preserve indent (162ms)

    ✓ Can do va] on multiple matching brackets (164ms)

    14) Can do repeat-prefixed vaf on multiple matching pairs of different types

    15) Repeat-prefixed vaf does not bleed below

    ✓ vaf only expands to enclosing pairs (119ms)

    ✓ Can use . to repeat indent in visual (154ms)

    ✓ Can do v_x to delete to first char (148ms)

    ✓ Can do vg_x to delete to last char with no EOL (168ms)

    ✓ Can do v3g_x to delete to last char with no EOL with count (159ms)

    ✓ Can do v$x to delete to last char including EOL (176ms)

    ✓ Can do gv to reselect previous selection (184ms)

    Vim's EOL handling is weird

      ✓ delete through eol (196ms)

      ✓ join 2 lines by deleting through eol (171ms)

      ✓ d$ doesn't delete whole line (143ms)

      ✓ vd$ does delete whole line (242ms)

      ✓ Paste over selection copies the selection (98ms)

      ✓ Paste over selection copies the selection linewise (105ms)

    Arrow keys work perfectly in Visual Mode

      ✓ Can handle <up> key (122ms)

      ✓ Can handle <down> key (87ms)

      ✓ Can handle <left> key (79ms)

      ✓ Can handle <right> key (126ms)

    handles aw in visual mode

      ✓ Can handle 'vawd' on word with cursor inside spaces (233ms)

      ✓ Can handle 'vawd' on word with trailing spaces (345ms)

      ✓ Can handle 'vawd' on word with leading spaces (166ms)

      16) Can handle 'vawd' on word with numeric prefix

      17) Can handle 'vawd' on word with numeric prefix and across lines

      18) 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 (154ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (156ms)

      ✓ Can handle 'vaWd' on word with leading spaces (164ms)

      19) Can handle 'vaWd' on word with numeric prefix

      20) 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 (317ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (180ms)

      ✓ Can handle 'vaWd' on word with leading spaces (202ms)

      21) Can handle 'vaWd' on word with numeric prefix

      22) 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 (183ms)

      ✓ Can handle 'vawd' on word with trailing spaces (299ms)

      ✓ Can handle 'vawd' on word with leading spaces (191ms)

      23) Can handle 'vawd' on word with numeric prefix

      24) Can handle 'vawd' on word with numeric prefix and across lines

      25) 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 (147ms)

      ✓ Can handle 'vaWd' on word with trailing spaces (138ms)

      ✓ Can handle 'vaWd' on word with leading spaces (195ms)

      26) Can handle 'vaWd' on word with numeric prefix

      27) Can handle 'vaWd' on word with numeric prefix and across lines

      ✓ Can handle 'Y' in visual mode (126ms)

    handles as in visual mode

      ✓ Select sentence with trailing spaces in visual mode (375ms)

      ✓ Select sentence with leading spaces in visual mode (378ms)

      ✓ Select multiple sentences in visual mode (222ms)

    handles is in visual mode

      ✓ Select inner sentence with trailing spaces in visual mode (230ms)

      ✓ Select inner sentence with leading spaces in visual mode (300ms)

      ✓ Select spaces between sentences in visual mode (137ms)

    handles tag blocks in visual mode

      ✓ Can do vit on a matching tag (149ms)

      28) Count-prefixed vit alternates expanding selection between inner and outer tag brackets

      ✓ Can do vat on a matching tag (153ms)

    handles replace in visual mode

      ✓ Can do a single line replace (151ms)

      ✓ Can do a multi line replace (97ms)

    D command will remove all selected lines

      ✓ D deletes all selected lines (108ms)

      ✓ D deletes the current line (89ms)

    handles indent blocks in visual mode

      ✓ Can do vai (162ms)

      ✓ Can do vii (132ms)

      ✓ Doesn't naively select the next line (221ms)

      ✓ Searches backwards if cursor line is empty (109ms)

      ✓ Can do vaI (236ms)

    visualstar

      ✓ Works with * (157ms)

      ✓ Works with # (129ms)

    search works in visual mode

      ✓ Works with / (94ms)

      ✓ Works with ? (121ms)

      ✓ Selects correct range (150ms)

    X will delete linewise

      ✓ normal selection (79ms)

      ✓ normal selection (120ms)

    C will delete linewise

      ✓ normal selection (192ms)

      ✓ normal selection (119ms)

    R will delete linewise

      ✓ normal selection (76ms)

      ✓ normal selection (108ms)

    Linewise Registers will be inserted properly

      ✓ downward selection (124ms)

      ✓ upward selection (151ms)

    Indent Tests using > on visual selections

      ✓ multiline indent top down selection (125ms)

      ✓ multiline indent bottom up selection (148ms)

      ✓ repeat multiline indent top down selection (199ms)

      ✓ repeat multiline indent bottom up selection (228ms)

    Outdent Tests using < on visual selections

      ✓ multiline outdent top down selection (154ms)

      ✓ multiline outdent bottom up selection (159ms)

      ✓ repeat multiline outdent top down selection (232ms)

      ✓ repeat multiline outdent bottom up selection (293ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (268ms)

    vi{ will go to end of second to last line

      ✓ select (150ms)

    Transition between visual mode

      ✓ vv will back to normal mode (44ms)

      ✓ vV will transit to visual line mode (45ms)

      ✓ 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 (44ms)

      ✓ <C-v><C-v> will back to normal mode (42ms)

    replace text in characterwise visual-mode with characterwise register content

      ✓ gv selects the last pasted text (which is shorter than original) (579ms)

      ✓ gv selects the last pasted text (which is longer than original) (848ms)

      ✓ gv selects the last pasted text (multiline) (315ms)

    can handle gn

      ✓ gn selects the next match text (441ms)

      ✓ gn selects the current word at |hello (308ms)

      ✓ gn selects the current word at h|ello (296ms)

      ✓ gn selects the current word at hel|lo (299ms)

      ✓ gn selects the next word at hell|o (429ms)

      ✓ gn selects the next word at hello| (248ms)



  Mode Visual Block

    ✓ can be activated

    ✓ Can handle A forward select (109ms)

    ✓ Can handle A backwards select (85ms)

    ✓ Can handle I forward select (122ms)

    ✓ Can handle I backwards select (82ms)

    ✓ Can handle I with empty lines on first character (inserts on empty line) (113ms)

    ✓ Can handle I with empty lines on non-first character (does not insert on empty line) (110ms)

    ✓ Can handle c forward select (114ms)

    ✓ Can handle c backwards select (97ms)

    ✓ Can handle C (129ms)

    ✓ Can do a multi line replace (113ms)

    ✓ Can handle 'D' (99ms)

    ✓ Can handle 'gj' (113ms)

    ✓ Properly add to end of lines j then $ (132ms)

    ✓ Properly add to end of lines $ then j (83ms)

    ✓ o works in visual block mode (128ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (247ms)



  Mode Visual Line

    ✓ can be activated

    ✓ Can handle w (288ms)

    ✓ Can handle wd (310ms)

    ✓ Can handle x (237ms)

    ✓ Can handle U (127ms)

    ✓ Can handle x across a selection (239ms)

    ✓ Can do vwd in middle of sentence (216ms)

    ✓ Can do vwd in middle of sentence (240ms)

    ✓ Can do vwd multiple times (324ms)

    ✓ Can handle U across a selection (192ms)

    ✓ Can handle U across a selection in reverse order (170ms)

    ✓ handles case where we go from selecting on right side to selecting on left side (176ms)

    ✓ handles case where we delete over a newline (200ms)

    ✓ handles change operator (148ms)

    ✓ Vp updates register content (77ms)

    ✓ Vp does not append unnecessary newlines (first line) (88ms)

    ✓ Vp does not append unnecessary newlines (middle line) (75ms)

    ✓ Vp does not append unnecessary newlines (last line) (97ms)

    Vim's EOL handling is weird

      ✓ delete through eol (158ms)

      ✓ join 2 lines by deleting through eol (136ms)

      ✓ d$ doesn't delete whole line (152ms)

      ✓ vd$ does delete whole line (97ms)

    Arrow keys work perfectly in Visual Line Mode

      ✓ Can handle <up> key (63ms)

      ✓ Can handle <down> key (118ms)

    Can handle d/c correctly in Visual Line Mode

      ✓ Can handle d key (115ms)

      ✓ Can handle d key (63ms)

      ✓ Can handle d key (73ms)

      ✓ Can handle d key (73ms)

      ✓ can handle 'c' (275ms)

    handles replace in visual line mode

      ✓ Can do a single line replace (114ms)

      ✓ Can do a multi visual line replace (87ms)

      ✓ Can do a multi visual line replace from the bottom up (115ms)

    search works in visual line mode

      ✓ Works with / (62ms)

      ✓ Works with ? (83ms)

    Non-darwin <C-c> tests

      ✓ <C-c> copies and sets mode to normal (216ms)

    replace text in linewise visual-mode with linewise register content

      ✓ yyVp does not change the content but changes cursor position (112ms)

      ✓ linewise visual put works also in the end of document (159ms)

      ✓ gv selects the last pasted text (which is shorter than original) (760ms)

      ✓ gv selects the last pasted text (which is longer than original) (587ms)

      ✓ gv selects the last pasted text (multiline) (365ms)



  Mode Normal

    ✓ Can handle 'x' (113ms)

    ✓ Can handle 'Nx' (123ms)

    ✓ Can handle 'Nx' and paste (180ms)

    ✓ Can handle 'x' at end of line (213ms)

    ✓ Can handle 'Ns' (94ms)

    ✓ Can handle 'Ns' at end of line (113ms)

    ✓ Can handle '<Del>' (88ms)

    ✓ Can handle '<Del>' with counts, which removes the last character of the count (109ms)

    ✓ Can handle '<Del>' at end of line (180ms)

    ✓ Can handle 'cc' (305ms)

    ✓ Can handle 'Ncc' (148ms)

    ✓ Can handle 'yy' (129ms)

    ✓ Can handle 'D' (105ms)

    ✓ Can handle 'D' on empty lines (107ms)

    ✓ Can handle 'DD' (151ms)

    ✓ Can handle 'C' (131ms)

    ✓ Can handle 'NC' (138ms)

    ✓ Can handle 'r' (129ms)

    ✓ Can handle '<Count>r' (99ms)

    ✓ Can handle '<Count>r' (86ms)

    ✓ Can handle 'r' after 'dd' (122ms)

    ✓ Can handle 'J' once (120ms)

    ✓ Can handle 'J' twice (131ms)

    ✓ Can handle 'J' with empty last line (97ms)

    ✓ Can handle 'J's with multiple empty last lines (322ms)

    ✓ Can handle 'J' with leading white space on next line (100ms)

    ✓ Can handle 'J' with only white space on next line (110ms)

    ✓ Can handle 'J' with TWO indented lines (123ms)

    ✓ Can handle 'J' with ')' first character on next line (85ms)

    ✓ Can handle 'J' with a following delete (100ms)

    ✓ Can handle 'J' in Visual Line mode (101ms)

    ✓ Can handle 'gJ' once (91ms)

    ✓ Can handle 'gJ' once and ALL WHITESPACE IS ELIMINATED (84ms)

    ✓ Can handle '~' (129ms)

    ✓ Can handle 'g~{motion}' (111ms)

    ✓ Can handle '<BS>' in insert mode (85ms)

    ✓ Can handle undo with P (125ms)



  Dot Operator

    ✓ Can repeat '~' with <num> (64ms)

    ✓ Can repeat '~' with dot (60ms)

    ✓ Can repeat 'x' (178ms)

    ✓ Can repeat 'J' (151ms)

    ✓ Can handle dot with A (225ms)

    ✓ Can handle dot with I (168ms)

    ✓ Can repeat actions that require selections (141ms)



  Repeat content change

    ✓ Can repeat '<C-t>' (180ms)

    ✓ Can repeat insert change and '<C-t>' (261ms)

    ✓ Can repeat change by `<C-a>` (256ms)

    ✓ Only one arrow key can be repeated in Insert Mode (207ms)

    ✓ Cached content change will be cleared by arrow keys (211ms)



  Matching Bracket (%)

    ✓ before opening parenthesis (149ms)

    ✓ inside parenthesis (188ms)

    ✓ nested parenthesis beginning (85ms)

    ✓ nested parenthesis end (164ms)

    ✓ nested bracket and parenthesis beginning (145ms)

    ✓ nested bracket, parenthesis, braces beginning (138ms)

    ✓ nested bracket, parenthesis, braces end (179ms)



  Motions in Normal Mode

    ✓ Can handle [( (172ms)

    ✓ Can handle nested [( (112ms)

    ✓ Can handle <number>[( (125ms)

    ✓ Can handle [( and character under cursor exclusive (92ms)

    ✓ Can handle ]) (84ms)

    ✓ Can handle nested ]) (79ms)

    ✓ Can handle <number>]) (191ms)

    ✓ Can handle ]) and character under cursor exclusive (159ms)

    ✓ Can handle [{ (91ms)

    ✓ Can handle nested [{ (125ms)

    ✓ Can handle <number>[{ (79ms)

    ✓ Can handle [{ and character under cursor exclusive (77ms)

    ✓ Can handle ]} (68ms)

    ✓ Can handle nested ]} (121ms)

    ✓ Can handle <number>]} (100ms)

    ✓ Can handle ]} and character under cursor exclusive (93ms)

    ✓ Can handle 'ge' (111ms)

    ✓ Can handle 'gg' (97ms)

    ✓ Can handle 'gg' to first non blank char on random line (142ms)

    ✓ Can handle 'gg' to first non blank char on first line (128ms)

    ✓ Retain same column when moving up/down (127ms)

    ✓ Can handle <enter> (105ms)

    ✓ $ always keeps cursor on EOL (121ms)

    ✓ Can handle $ with a count (93ms)

    ✓ Can handle $ with a count at end of file (94ms)

    ✓ Can handle <end> with a count (76ms)

    ✓ Can handle <D-right> with a count (118ms)

    ✓ Can handle 'f' (148ms)

    ✓ Can handle 'f' twice (122ms)

    ✓ Can handle 'F' (97ms)

    ✓ Can handle 'F' twice (109ms)

    ✓ Can handle 't' (102ms)

    ✓ Can handle 't' twice (119ms)

    ✓ Can handle 'T' (186ms)

    ✓ Can handle 'T' twice (124ms)

    ✓ Can run a forward search (59ms)

    ✓ Can run a forward and find next search (86ms)

    ✓ Can run a reverse search (137ms)

    ✓ Can run a reverse and find next search (144ms)

    ✓ maintains column position correctly (76ms)

    ✓ maintains column position correctly with $ (65ms)

    ✓ Can handle G  (55ms)

    ✓ Can handle G with number prefix (86ms)

    ✓ Can handle G with number prefix (115ms)

    ✓ Can handle gg (68ms)

    ✓ Can handle gg with number prefix (50ms)

    ✓ Can handle 0 (84ms)

    ✓ Can handle 0 as part of a repeat (77ms)

    ✓ Can handle g* (51ms)

    ✓ Can handle g*n (54ms)

    ✓ Can handle * (57ms)

    ✓ Can handle ** (53ms)

    ✓ Can handle # on whitespace (72ms)

    ✓ Can handle # on EOL (125ms)

    ✓ Can handle g# (240ms)

    ✓ Can handle g#n (166ms)

    ✓ Can handle # (141ms)

    ✓ Can handle # already on the word (149ms)

    ✓ Can handle ## (126ms)

    ✓ Can handle | (149ms)

    ✓ Can handle <number> | (106ms)

    ✓ Can handle +

    ✓ Can handle + indent (53ms)

    ✓ Can handle + with count prefix (75ms)

    ✓ Can handle - (78ms)

    ✓ Can handle - indent (97ms)

    ✓ Can handle - with count prefix (56ms)

    ✓ Can handle _ (58ms)

    ✓ Can handle _ with count prefix (81ms)

    ✓ Can handle g_ (98ms)

    ✓ Can handle g_ with count prefix (89ms)

    ✓ Can handle <up> key (82ms)

    ✓ Can handle <down> key (69ms)

    ✓ Can handle <left> key (60ms)

    ✓ Can handle <right> key (96ms)



  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



  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 (51ms)

        ✓ l wraps to next line (44ms)

        ✓ <left> wraps to previous line (54ms)

        ✓ <right> wraps to next line (81ms)

      insert mode

        ✓ <left> wraps to previous line (51ms)

        ✓ <right> once goes to end of line (114ms)

        ✓ <right> twice wraps to next line (166ms)

    whichwrap disabled

      normal mode

        ✓ h does not wrap to previous line (65ms)

        ✓ l does not wrap to next line (109ms)

        ✓ <left> does not wrap to previous line (49ms)

        ✓ <right> does not wrap to next line (56ms)

      insert mode

        ✓ <left> does not wrap to previous line (160ms)

        ✓ <right> does not wrap to next line (74ms)



  Multicursor

    ✓ can add multiple cursors below (155ms)

    ✓ can add multiple cursors above (157ms)



  numeric string

    ✓ fails on non-string

    ✓ handles hex round trip

    ✓ handles decimal round trip

    ✓ handles octal trip



  comment operator

    ✓ gcc comments out current line (203ms)

    ✓ gcj comments in current and next line (217ms)

    ✓ block comment with motion (241ms)

    ✓ block comment in Visual Mode (233ms)


  put operator

    ✓ basic put test (146ms)

    ✓ test yy end of line (168ms)

    ✓ test yy first line (305ms)

    ✓ test yy middle line (166ms)

    ✓ test yy with correct positon movement (268ms)



  shift operator

    ✓ basic shift left test (166ms)

    ✓ shift left goto end test (84ms)

    ✓ shift left goto line test (194ms)

    ✓ shift right goto end test (207ms)

    ✓ shift right goto line test (210ms)



  easymotion plugin

    ✓ Can handle s move (149ms)

    ✓ Can handle 2s move (286ms)

    ✓ Can handle f move (76ms)

    ✓ Can handle 2f move (96ms)

    ✓ Can handle F move (123ms)

    ✓ Can handle 2F move (115ms)

    ✓ Can handle t move (109ms)

    ✓ Can handle bd-t move (150ms)

    ✓ Can handle 2t move (106ms)

    ✓ Can handle bd-t2 move (131ms)

    ✓ Can handle T move (110ms)

    ✓ Can handle 2T move (187ms)

    ✓ Can handle w move (92ms)

    ✓ Can handle bd-w move (130ms)

    ✓ Can handle b move (129ms)

    ✓ Can handle e move (91ms)

    ✓ Can handle bd-e move (180ms)

    ✓ Can handle ge move (134ms)

    ✓ Can handle n-char move (123ms)

    ✓ Can handle j move (86ms)

    ✓ Can handle k move (98ms)

    ✓ Can handle bd-jk move (1) (130ms)

    ✓ Can handle bd-jk move (2) (120ms)

    ✓ Can handle lineforward move (1) (95ms)

    ✓ Can handle lineforward move (2) (83ms)

    ✓ Can handle linebackward move (1) (134ms)

    ✓ Can handle linebackward move (2) (105ms)


  Input method plugin

    ✓ use default im in insert mode

    ✓ use other im in insert mode


  sneak plugin

    ✓ Can handle s motion (75ms)

    ✓ Can handle S motion (169ms)

    ✓ Can handle <operator>z motion (57ms)

    ✓ Can handle <operator>Z motion (102ms)

    ✓ Can handle s; motion (79ms)

    ✓ Can handle s, motion (115ms)

    ✓ Can handle S; motion (136ms)

    ✓ Can handle S, motion (106ms)



  surround plugin

    ✓ 'ysiw)' surrounds word without space (144ms)

    ✓ 'ysiw(' surrounds word with space (183ms)

    ✓ 'ysw)' surrounds word without space (188ms)

    ✓ 'ysw(' surrounds word with space (249ms)

    ✓ 'ysaw)' surrounds word without space (191ms)

    ✓ 'ysaw(' surrounds word with space (168ms)

    ✓ 'ysiw(' surrounds word with space and ignores punctuation (134ms)

    ✓ 'ysiw<' surrounds word with tags (213ms)

    ✓ 'ysiw<' surrounds word with tags and attributes (155ms)

    ✓ 'cst<' surrounds word with tags that have a dot in them (190ms)

    ✓ 'yss)' surrounds entire line respecting whitespace (362ms)

    ✓ change surround (150ms)

    ✓ change surround with alias (171ms)

    ✓ change surround to tags (179ms)

    ✓ delete surround (219ms)

    ✓ delete surround with alias (170ms)

    ✓ delete surround with tags (189ms)

    ✓ change surround brackets at end of line (154ms)

    ✓ changing brackets with surround works again (161ms)



  register

    ✓ Can copy to a register (107ms)

    ✓ Can use two registers together (175ms)

    ✓ Can use black hole register (111ms)

    ✓ System clipboard works with chinese characters (176ms)

    ✓ Yank stores text in Register '0' (278ms)

    ✓ Register '1'-'9' stores delete content (317ms)

    ✓ "A appends linewise text to "a (329ms)

    ✓ "A appends character wise text to "a (407ms)

    ✓ Can put and get to register

    clipboard

      ✓ Can access '*' (clipboard) register (134ms)

      ✓ Can access '+' (clipboard) register (102ms)



  Repeatable movements with f and t

    ✓ Can repeat f<character> (70ms)

    ✓ Can repeat reversed F<character> (105ms)

    ✓ Can repeat t<character> (66ms)

    ✓ Can repeat N times reversed t<character> (105ms)



  text editor

    ✓ insert 'Hello World'

    ✓ replace 'World' with 'Foo Bar'

    ✓ delete `Hello`

    ✓ delete the whole line

    ✓ try to read lines that don't exist





  939 passing (4m)

  28 failing



  1) Mode Normal
       Can handle count prefixed 'ci)':

      Content does not match; Expected= b()h . Actual= b(l(baz()h .
      + expected - actual

      - b(l(baz()h 
      + b()h 
      
      at Suite.suite (test/mode/modeNormal.test.ts:367:3)


  2) Mode Normal
       Can handle count prefixed 'ca)':

      Content does not match; Expected= bh . Actual= b(l(bazh .
      + expected - actual

      - b(l(bazh 
      + bh 
      
      at Suite.suite (test/mode/modeNormal.test.ts:375:3)


  3) Mode Normal
       Can handle 'daw' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:663:3)


  4) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:671:3)


  5) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines:

      Content does not match; Expected=one two six. Actual=one two four.
      + expected - actual

      -one two four
      +one two six
      
      at Suite.suite (test/mode/modeNormal.test.ts:679:3)


  6) Mode Normal
       Can handle 'daw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:687:3)


  7) Mode Normal
       Can handle 'daW' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:777:3)


  8) Mode Normal
       Can handle 'daW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeNormal.test.ts:785:3)


  9) Mode Normal
       Can handle 'diw' on word with numeric prefix:

      Content does not match; Expected=   three,   four  . Actual=one      three,   four  .
      + expected - actual

      -one      three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:867:3)


  10) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:883:3)


  11) Mode Normal
       Can handle 'diw' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeNormal.test.ts:891:3)


  12) Mode Normal
       Can handle 'diW' on word with numeric prefix:

      Content does not match; Expected=   three,   four  . Actual=one      three,   four  .
      + expected - actual

      -one      three,   four  
      +   three,   four  
      
      at Suite.suite (test/mode/modeNormal.test.ts:924:3)


  13) Mode Normal
       Can handle 'diW' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,     six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,     six
      
      at Suite.suite (test/mode/modeNormal.test.ts:932:3)


  14) Mode Visual
       Can do repeat-prefixed vaf on multiple matching pairs of different types:

      Content does not match; Expected=test  test;. Actual=test <div><p>[[{ test;.
      + expected - actual

      -test <div><p>[[{ test;
      +test  test;
      
      at Suite.suite (test/mode/modeVisual.test.ts:680:3)


  15) Mode Visual
       Repeat-prefixed vaf does not bleed below:

      Content does not match; Expected=. Actual=<p>.
      + expected - actual

      -<p>
      
      at Suite.suite (test/mode/modeVisual.test.ts:688:3)


  16) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:254:5)


  17) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:262:5)


  18) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:270:5)


  19) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:305:5)


  20) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:313:5)


  21) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:347:5)


  22) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:355:5)


  23) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix:

      Content does not match; Expected=,   four  . Actual=one   two   ,   four  .
      + expected - actual

      -one   two   ,   four  
      +,   four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:389:5)


  24) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:397:5)


  25) Mode Visual
       handles aw in visual mode
         Can handle 'vawd' on word with numeric prefix and across lines, containing words end with `.`:

      Content does not match; Expected=one   two   three,   .  six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   .  six
      
      at Suite.suite (test/mode/modeVisual.test.ts:405:5)


  26) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix:

      Content does not match; Expected=four  . Actual=one   two   four  .
      + expected - actual

      -one   two   four  
      +four  
      
      at Suite.suite (test/mode/modeVisual.test.ts:440:5)


  27) Mode Visual
       handles aW in visual mode
         Can handle 'vaWd' on word with numeric prefix and across lines:

      Content does not match; Expected=one   two   three,   six. Actual=one   two   three,   four  .
      + expected - actual

      -one   two   three,   four  
      +one   two   three,   six
      
      at Suite.suite (test/mode/modeVisual.test.ts:448:5)


  28) Mode Visual
       handles tag blocks in visual mode
         Count-prefixed vit alternates expanding selection between inner and outer tag brackets:

      Content does not match; Expected=<div></div>. Actual=<div> one <p></div>.
      + expected - actual

      -<div> one <p></div>
      +<div></div>
      
      at Suite.suite (test/mode/modeVisual.test.ts:526:5)






Tests exited with code: 1

@jpoon
Copy link
Member

jpoon commented Sep 5, 2018

I'll merge when build finishes.

@jpoon jpoon merged commit 30d4008 into VSCodeVim:master Sep 5, 2018
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.

Expand selection with inner tag selection command va{a{ doesn't work
3 participants