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: ensure cursor is in bounds. closes #3441 #3442

Merged
merged 3 commits into from
Feb 2, 2019
Merged

fix: ensure cursor is in bounds. closes #3441 #3442

merged 3 commits into from
Feb 2, 2019

Conversation

jpoon
Copy link
Member

@jpoon jpoon commented Feb 2, 2019

What this PR does / why we need it:
It's best to review this PR by the individual commits:

Which issue(s) this PR fixes
#3441, #2925

Special notes for your reviewer:

@TravisBuddy
Copy link

Travis tests have failed

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

Node.js: 8

View build log

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

$ npm run build

> [email protected] build /home/travis/build/VSCodeVim/Vim
> gulp build

[05:13:50] Using gulpfile ~/build/VSCodeVim/Vim/gulpfile.js
[05:13:50] Starting 'build'...
[05:13:50] Starting 'prettier'...
[05:13:52] Finished 'prettier' after 2.67 s
[05:13:52] Starting 'tsc'...
[05:13:52] Starting 'tslint'...
[05:14:00] Finished 'tslint' after 7.86 s
[05:14:07] Finished 'tsc' after 15 s
[05:14:07] Starting 'commit-hash'...
[05:14:08] Finished 'commit-hash' after 28 ms
[05:14:08] Finished 'build' after 18 s
The command "npm run build" exited with 0.

$ 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.30.2/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 --locale=en
Xlib:  extension "RANDR" missing on display ":99.0".

[main 5:14:14 AM] 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.15.0"

Run `unset npm_config_prefix` to unset it.

[vscodevim.vim] Accessing a resource scoped configuration without providing a resource is not expected. To get the effective value for 'editor.wordSeparators', provide the URI of a resource or 'null' for any resource.





  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



  HistoryFile

    ✓ add command (116ms)

    ✓ add empty command (49ms)

    ✓ add command over configuration.history (48ms)

    ✓ add command that exists in history (49ms)

    ✓ file system (48ms)

    ✓ change configuration.history (82ms)



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

    ✓ Sort whole file, dsc (103ms)

    ✓ Sort range, asc (143ms)

    ✓ Sort range, dsc (169ms)



  Horizontal split

    ✓ Run :sp (80ms)

    ✓ Run :split (72ms)

    ✓ Run :new (68ms)



  :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 (65ms)

    ✓ Replace with `g` flag (70ms)

    1) Replace with flags AND count

    2) Replace with `c` flag

    3) Replace with `gc` flag

TextEditor is closed/disposed

    4) Replace across all lines

    5) Replace on specific single line

    6) Replace on current line using dot

    7) Replace single relative line using dot and plus

    8) Replace across specific line range

    9) Replace across relative line range using dot, plus, and minus

    10) Replace across relative line range using numLines+colon shorthand

    11) Repeat replacement across relative line range

    12) Replace with range AND count but no flags

    13) Undocumented: operator without LHS assumes dot as LHS

    14) Undocumented: multiple consecutive operators use 1 as RHS

    15) Undocumented: trailing operators use 1 as RHS

    16) Replace specific single equal lines

    17) Replace current line with no active selection

    18) Replace current line with no active selection

    19) Replace current line with no active selection

    Effects of substituteGlobalFlag=true

      20) Replace all matches in the line

      Substitute should use various previous search/substitute states

        21) Substitute with previous search using *

        22) Substitute with previous search using *

        23) Replace with `g` flag inverts global flag

        24) Substitute with previous search using /

        25) Replace with `c` flag inverts global flag

        26) Substitute with parameters should update search state

        27) Substitute with empty replacement should delete previous substitution (all variants) and accepts flags

        28) Replace multiple lines

        29) Substitute with no pattern should repeat previous substitution and not alter search state
        30) Substitute with no pattern should repeat previous substitution and not alter search state

rejected promise not handled within 1 second

        31) Replace across specific lines

        32) Substitute with empty search string should use last searched pattern

      33) "before each" hook

TextEditor is closed/disposed

    cmd_line tab

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

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

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

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

    Vertical split

      ✓ Run :vs (100ms)

      ✓ Run :vsp (67ms)

      ✓ Run :vsplit (72ms)

rejected promise not handled within 1 second

rejected promise not handled within 1 second

      ✓ Run :vnew (230ms)

      ✓ Run :vne (218ms)

    Basic write-quit

      ✓ Run write and quit (99ms)

    Provide line completions

      Line Completion Provider unit tests

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

        ✓ Can complete lines in file with different indentation (90ms)

        ✓ Returns no completions for unmatched line (55ms)

    Configuration

      ✓ remappings are normalized

      ✓ remappings are de-duped

      ✓ invalid remappings are ignored

      ✓ whichwrap is parsed into wrapKeys

      ✓ neovim disabled on missing path

      34) Can handle long key chords

    Notation
      ✓ Normalize
    Remapper

      35) getLongestedRemappedKeySequence

      Error

        ✓ error code has message

      package.json

        ✓ all keys have handlers

        ✓ all defined configurations in package.json have handlers

      Record and navigate jumps

        Jump Tracker unit tests

          ✓ Can record jumps between files

          ✓ Can record jumps between files

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

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

          36) jj -> <Esc> through modehandler

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

          ✓ Can handle jumps to the same file multiple times

          ✓ Can handle jumps to the same file multiple times

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

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

          ✓ Can handle text deleted from a file

          ✓ Can handle text deleted from a file

        Can record jumps for actions the same as vanilla Vim

          Can track basic jumps

            37) Can track jumps for keys: Ggg

            38) Can track jumps for keys: Ggg

            39) d -> black hole register delete in normal mode through modehandler

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

            40) Can track jumps for keys: GggGgg

            41) Can track jumps for keys: GggGgg

            42) Can track jumps for keys: GggGgg

            43) Can track jumps for keys: G?b<CR>ggG

            44) Can track jumps for keys: G?b<CR>ggG

            45) Can track jumps for keys: G?b<CR>ggG

            46) Can track jumps for keys: G?b<CR>ggG

          Can track jumps with back/forward

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

            Record and execute a macro

              47) Can record and execute

              48) Can record and execute

              49) Can record and execute

              50) Can repeat last invoked macro

              51) "before each" hook for "Can repeat last invoked macro"

              52) "before each" hook for "Can repeat last invoked macro"



  123 passing (12s)

  52 failing



  1) Basic substitute
       Replace with flags AND count:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  2) Basic substitute
       Replace with `c` flag:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:40:3)


  3) Basic substitute
       Replace with `gc` flag:
     TypeError: Attempted to wrap confirmReplacement which is already wrapped
      at checkWrappedMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:39:21)
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:87:13)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>
  --------------
  Error: Stack Trace for original
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:112:30)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>


  4) Basic substitute
       Replace across all lines:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=foofoobarfoo. Actual=.
      + expected - actual

      +foofoobarfoo
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:65:5)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  5) Basic substitute
       Replace on specific single line:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:76:3)


  6) Basic substitute
       Replace on current line using dot:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:76:3)


  7) Basic substitute
       Replace single relative line using dot and plus:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  8) Basic substitute
       Replace across specific line range:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:90:3)


  9) Basic substitute
       Replace across relative line range using dot, plus, and minus:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:90:3)


  10) Basic substitute
       Replace across relative line range using numLines+colon shorthand:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  11) Basic substitute
       Repeat replacement across relative line range:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:111:3)


  12) Basic substitute
       Replace with rate (test/cmd_line/substitute.test.ts:146:3)


  18) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)


  19) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)


  20) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace all matches in the line:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:139:3)


  21) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using *:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=fighters. Actual=irbfighterso.
      + expected - actual

      -irbfighterso
      +fighters
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:365:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  22) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using *:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=fighters. Actual=irbfighterso.
      + expected - actual

      -irbfighterso
      +fighters
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:365:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  23) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace with `g` flag inverts global flag:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dba. Actual=ddda.
      + expected - actual

      -ddda
      +dba
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:239:7)
      ce for original
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:112:30)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>


  26) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with parameters should update search state:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  27) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with empty replacement should delete previous substitution (all variants) and accepts flags:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:427:5)


  28) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace multiple lines:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:437:5)

  29) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with no pattern should repeat previous substitution and not alter search state:
     Failed to handle key=<Esc>. Cannot read property 'getLeft' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:477:5)

  30) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with no pattern should repeat previous substitution and not alter search state:
     Failed to handle key=<Esc>. Cannot read property 'getLeft' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:477:5)

  31) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace across specific lines:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dbd. Actual=dbbaaoaaabb.
      + expected - actual

      -dbbaaoaaabb
      +dbd
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:264:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  32) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with empty search string should use last searched pattern:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dbd. Actual=dbbdaoaaabb.
      + expected - actual

      -dbbdaoaaabb
      +dbd
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:264:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  33) Basic substitute
       "before each" hook:
     Error: Failed to show text document file:///tmp/wgxjbqrplp, should show in editor #undefined
      at .vscode-test/stable/VSCode-linux-x64/resources/app/out/vs/workbench/node/extensionHostProcess.js:635:499
      at <anonymous>

  34) Configuration
       Can handle long key chords:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)

  35) Remapper
       getLongestedRemappedKeySequence:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/configuration/configuration.test.ts:84:3)

  36) Remapper
       jj -> <Esc> through modehandler:

      AssertionError [ERR_ASSERTION]: 0 == 1
      + expected - actual

      -0
      +1
      
      at Object.assertEqual (test/testUtils.ts:74:10)
      at Object.<anonymous> (test/configuration/remapper.test.ts:264:5)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/configuration/remapper.test.js:4:58)
      at <anonymous>

  37) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: Ggg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  38) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: Ggg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  39) Remapper
       d -> black hole register delete in normal mode through modehandler:

      AssertionError [ERR_ASSERTION]: '' == 'text-to-put-on-register'
      + expected - actual

      +text-to-put-on-register
      
      at Object.<anonymous> (test/configuration/remapper.test.ts:416:12)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/configuration/remapper.test.js:4:58)
      at <anonymous>

  40) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  41) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  42) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  43) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  44) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  45) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  46) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  47) Record and execute a macro
       Can record and execute:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/macro.test.ts:13:3)


  48) Record and execute a macro
       Can record and execute:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/macro.test.ts:13:3)


  49) Record and execute a macro
       Can record and execute:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/macro.test.ts:13:3)


  50) Record and execute a macro
       Can repeat last invoked macro:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  51) Record and navigate jumps
       "before each" hook for "Can repeat last invoked macro":
     TypeError: Cannot read property 'options' of undefined
      at ModeHandler.<anonymous> (src/mode/modeHand[as _onImmediate] (src/mode/modeHandler.ts:83:42)

  2) Basic substitute
       Replace with `c` flag:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:40:3)


  3) Basic substitute
       Replace with `gc` flag:
     TypeError: Attempted to wrap confirmReplacement which is already wrapped
      at checkWrappedMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:39:21)
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:87:13)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>
  --------------
  Error: Stack Trace for original
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:112:30)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>


  4) Basic substitute
       Replace across all lines:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=foofoobarfoo. Actual=.
      + expected - actual

      +foofoobarfoo
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:65:5)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  5) Basic substitute
       Replace on specific single line:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:76:3)


  6) Basic substitute
       Replace on current line using dot:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:76:3)


  7) Basic substitute
       Replace single relative line using dot and plus:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  8) Basic substitute
       Replace across specific line range:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:90:3)


  9) Basic substitute
       Replace across relative line range using dot, plus, and minus:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:90:3)


  10) Basic substitute
       Replace across relative line range using numLines+colon shorthand:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  11) Basic substitute
       Repeat replacement across relative line range:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:111:3)


  12) Basic substitute
       Replace with range AND count but no flags:
     TextEditor(vs.editor.ICodeEditor:1,$model28) has been disposed
      at Suite.suite (test/cmd_line/substitute.test.ts:118:3)


  13) Basic substitute
       Undocumented: operator without LHS assumes dot as LHS:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  14) Basic substitute
       Undocumented: multiple consecutive operators use 1 as RHS:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:118:3)


  15) Basic substitute
       Undocumented: trailing operators use 1 as RHS:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:132:3)


  16) Basic substitute
       Replace specific single equal lines:
     Error: Failed to handle key=a. Cannot read property 'isValid' of undefined
      at ModeHandler.<anonymous> (src/mode/modeHandler.ts:305:13)
      at Generator.throw (<anonymous>)
      at rejected (out/src/mode/modeHandler.js:5:65)
      at <anonymous>


  17) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)


  18) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)


  19) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)

  20) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace all matches in the line:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:139:3)

  21) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using *:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=fighters. Actual=irbfighterso.
      + expected - actual

      -irbfighterso
      +fighters
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:365:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  22) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using *:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=fighters. Actual=irbfighterso.
      + expected - actual

      -irbfighterso
      +fighters
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:365:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  23) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace with `g` flag inverts global flag:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dba. Actual=ddda.
      + expected - actual

      -ddda
      +dba
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:239:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  24) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using /:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dba. Actual=dddd.
      + expected - actual

      -dddd
      +dba
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:239:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  25) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace with `c` flag inverts global flag:
     TypeError: Attempted to wrap confirmReplacement which is already wrapped
      at checkWrappedMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:39:21)
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:87:13)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:244:10)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:242:66)
  --------------
  Error: Stack Trace for original
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:112:30)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>


  26) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with parameters should update search state:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  27) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with empty replacement should delete previous substitution (all variants) and accepts flags:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:427:5)


  28) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace multiple lines:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:437:5)


  29) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with no pattern should repeat previous substitution and not alter search state:
     Failed to handle key=<Esc>. Cannot read property 'getLeft' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:477:5)


  30) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with no pattern should repeat previous substitution and not alter search state:
     Failed to handle key=<Esc>. Cannot read property 'getLeft' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:477:5)


  31) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace across specific lines:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dbd. Actual=dbbaaoaaabb.
      + expected - actual

      -dbbaaoaaabb
      +dbd
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:264:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  32) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with empty search string should use last searched pattern:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dbd. Actual=dbbdaoaaabb.
      + expected - actual

      -dbbdaoaaabb
      +dbd
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:264:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  33) Basic substitute
       "before each" hook:
     Error: Failed to show text document file:///tmp/wgxjbqrplp, should show in editor #undefined
      at .vscode-test/stable/VSCode-linux-x64/resources/app/out/vs/workbench/node/extensionHostProcess.js:635:499
      at <anonymous>


  34) Configuration
       Can handle long key chords:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  35) Remapper
       getLongestedRemappedKeySequence:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/configuration/configuration.test.ts:84:3)


  36) Remapper
       jj -> <Esc> through modehandler:

      AssertionError [ERR_ASSERTION]: 0 == 1
      + expected - actual

      -0
      +1
      
      at Object.assertEqual (test/testUtils.ts:74:10)
      at Object.<anonymous> (test/configuration/remapper.test.ts:264:5)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/configuration/remapper.test.js:4:58)
      at <anonymous>


  37) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: Ggg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  38) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: Ggg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  39) Remapper
       d -> black hole register delete in normal mode through modehandler:

      AssertionError [ERR_ASSERTION]: '' == 'text-to-put-on-register'
      + expected - actual

      +text-to-put-on-register
      
      at Object.<anonymous> (test/configuration/remapper.test.ts:416:12)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/configuration/remapper.test.js:4:58)
      at <anonymous>


  40) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  41) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  42) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  43) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  44) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTrackert Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  51) Record and navigate jumps
       "before each" hook for "Can repeat last invoked macro":
     TypeError: Cannot read property 'options' of undefined
      at ModeHandler.<anonymous> (src/mode/modeHandler.ts:1314:26)
      at Generator.next (<anonymous>)
      at __awaiter (out/src/mode/modeHandler.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/src/mode/modeHandler.js:3:12)
      at ModeHandler.updateView (out/src/mode/modeHandler.js:919:16)
      at Object.<anonymous> (extension.ts:53:22)
      at Generator.next (<anonymous>)
      at fulfilled (out/extension.js:4:58)
      at <anonymous>


  52) Record and navigate jumps
       "before each" hook for "Can repeat last invoked macro":
     TypeError: Cannot read property 'options' of undefined
      at ModeHandler.<anonymous> (src/mode/modeHandler.ts:1314:26)
      at Generator.next (<anonymous>)
      at __awaiter (out/src/mode/modeHandler.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/src/mode/modeHandler.js:3:12)
      at ModeHandler.updateView (out/src/mode/modeHandler.js:919:16)
      at Object.<anonymous> (extension.ts:53:22)
      at Generator.next (<anonymous>)
      at fulfilled (out/extension.js:4:58)
      at <anonymous>


  53) Mode Handler
       ctor:
     TypeError: Cannot read property 'currentMode' of undefined
      at Context.test (test/mode/modeHandler.test.ts:19:30)
      at <anonymous>


  54) Record and navigate jumps
       "after each" hook: cleanUpWorkspace for "ctor":
     TypeError: Cannot read property 'call' of undefined
  






Tests exited with code: 1
The command "npm test --silent" exited with 1.



Done. Your build exited with 1.
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.30.2/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 --locale=en
Xlib:  extension "RANDR" missing on display ":99.0".

[main 5:14:14 AM] 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.15.0"

Run `unset npm_config_prefix` to unset it.

[vscodevim.vim] Accessing a resource scoped configuration without providing a resource is not expected. To get the effective value for 'editor.wordSeparators', provide the URI of a resource or 'null' for any resource.





  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



  HistoryFile

    ✓ add command (116ms)

    ✓ add empty command (49ms)

    ✓ add command over configuration.history (48ms)

    ✓ add command that exists in history (49ms)

    ✓ file system (48ms)

    ✓ change configuration.history (82ms)



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

    ✓ Sort whole file, dsc (103ms)

    ✓ Sort range, asc (143ms)

    ✓ Sort range, dsc (169ms)



  Horizontal split

    ✓ Run :sp (80ms)

    ✓ Run :split (72ms)

    ✓ Run :new (68ms)



  :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 (65ms)

    ✓ Replace with `g` flag (70ms)

    1) Replace with flags AND count

    2) Replace with `c` flag

    3) Replace with `gc` flag

TextEditor is closed/disposed

    4) Replace across all lines

    5) Replace on specific single line

    6) Replace on current line using dot

    7) Replace single relative line using dot and plus

    8) Replace across specific line range

    9) Replace across relative line range using dot, plus, and minus

    10) Replace across relative line range using numLines+colon shorthand

    11) Repeat replacement across relative line range

    12) Replace with range AND count but no flags

    13) Undocumented: operator without LHS assumes dot as LHS

    14) Undocumented: multiple consecutive operators use 1 as RHS

    15) Undocumented: trailing operators use 1 as RHS

    16) Replace specific single equal lines

    17) Replace current line with no active selection

    18) Replace current line with no active selection

    19) Replace current line with no active selection

    Effects of substituteGlobalFlag=true

      20) Replace all matches in the line

      Substitute should use various previous search/substitute states

        21) Substitute with previous search using *

        22) Substitute with previous search using *

        23) Replace with `g` flag inverts global flag

        24) Substitute with previous search using /

        25) Replace with `c` flag inverts global flag

        26) Substitute with parameters should update search state

        27) Substitute with empty replacement should delete previous substitution (all variants) and accepts flags

        28) Replace multiple lines

        29) Substitute with no pattern should repeat previous substitution and not alter search state
        30) Substitute with no pattern should repeat previous substitution and not alter search state

rejected promise not handled within 1 second

        31) Replace across specific lines

        32) Substitute with empty search string should use last searched pattern

      33) "before each" hook

TextEditor is closed/disposed

    cmd_line tab

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

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

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

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

    Vertical split

      ✓ Run :vs (100ms)

      ✓ Run :vsp (67ms)

      ✓ Run :vsplit (72ms)

rejected promise not handled within 1 second

rejected promise not handled within 1 second

      ✓ Run :vnew (230ms)

      ✓ Run :vne (218ms)

    Basic write-quit

      ✓ Run write and quit (99ms)

    Provide line completions

      Line Completion Provider unit tests

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

        ✓ Can complete lines in file with different indentation (90ms)

        ✓ Returns no completions for unmatched line (55ms)

    Configuration

      ✓ remappings are normalized

      ✓ remappings are de-duped

      ✓ invalid remappings are ignored

      ✓ whichwrap is parsed into wrapKeys

      ✓ neovim disabled on missing path

      34) Can handle long key chords

    Notation
      ✓ Normalize
    Remapper

      35) getLongestedRemappedKeySequence

      Error

        ✓ error code has message

      package.json

        ✓ all keys have handlers

        ✓ all defined configurations in package.json have handlers

      Record and navigate jumps

        Jump Tracker unit tests

          ✓ Can record jumps between files

          ✓ Can record jumps between files

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

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

          36) jj -> <Esc> through modehandler

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

          ✓ Can handle jumps to the same file multiple times

          ✓ Can handle jumps to the same file multiple times

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

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

          ✓ Can handle text deleted from a file

          ✓ Can handle text deleted from a file

        Can record jumps for actions the same as vanilla Vim

          Can track basic jumps

            37) Can track jumps for keys: Ggg

            38) Can track jumps for keys: Ggg

            39) d -> black hole register delete in normal mode through modehandler

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

            40) Can track jumps for keys: GggGgg

            41) Can track jumps for keys: GggGgg

            42) Can track jumps for keys: GggGgg

            43) Can track jumps for keys: G?b<CR>ggG

            44) Can track jumps for keys: G?b<CR>ggG

            45) Can track jumps for keys: G?b<CR>ggG

            46) Can track jumps for keys: G?b<CR>ggG

          Can track jumps with back/forward

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

            Record and execute a macro

              47) Can record and execute

              48) Can record and execute

              49) Can record and execute

              50) Can repeat last invoked macro

              51) "before each" hook for "Can repeat last invoked macro"

              52) "before each" hook for "Can repeat last invoked macro"



  123 passing (12s)

  52 failing



  1) Basic substitute
       Replace with flags AND count:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  2) Basic substitute
       Replace with `c` flag:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:40:3)


  3) Basic substitute
       Replace with `gc` flag:
     TypeError: Attempted to wrap confirmReplacement which is already wrapped
      at checkWrappedMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:39:21)
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:87:13)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>
  --------------
  Error: Stack Trace for original
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:112:30)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>


  4) Basic substitute
       Replace across all lines:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=foofoobarfoo. Actual=.
      + expected - actual

      +foofoobarfoo
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:65:5)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  5) Basic substitute
       Replace on specific single line:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:76:3)


  6) Basic substitute
       Replace on current line using dot:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:76:3)


  7) Basic substitute
       Replace single relative line using dot and plus:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  8) Basic substitute
       Replace across specific line range:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:90:3)


  9) Basic substitute
       Replace across relative line range using dot, plus, and minus:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:90:3)


  10) Basic substitute
       Replace across relative line range using numLines+colon shorthand:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  11) Basic substitute
       Repeat replacement across relative line range:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:111:3)


  12) Basic substitute
       Replace with rate (test/cmd_line/substitute.test.ts:146:3)


  18) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)


  19) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)


  20) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace all matches in the line:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:139:3)


  21) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using *:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=fighters. Actual=irbfighterso.
      + expected - actual

      -irbfighterso
      +fighters
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:365:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  22) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using *:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=fighters. Actual=irbfighterso.
      + expected - actual

      -irbfighterso
      +fighters
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:365:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  23) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace with `g` flag inverts global flag:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dba. Actual=ddda.
      + expected - actual

      -ddda
      +dba
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:239:7)
      ce for original
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:112:30)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>


  26) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with parameters should update search state:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  27) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with empty replacement should delete previous substitution (all variants) and accepts flags:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:427:5)


  28) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace multiple lines:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:437:5)

  29) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with no pattern should repeat previous substitution and not alter search state:
     Failed to handle key=<Esc>. Cannot read property 'getLeft' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:477:5)

  30) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with no pattern should repeat previous substitution and not alter search state:
     Failed to handle key=<Esc>. Cannot read property 'getLeft' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:477:5)

  31) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace across specific lines:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dbd. Actual=dbbaaoaaabb.
      + expected - actual

      -dbbaaoaaabb
      +dbd
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:264:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  32) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with empty search string should use last searched pattern:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dbd. Actual=dbbdaoaaabb.
      + expected - actual

      -dbbdaoaaabb
      +dbd
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:264:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  33) Basic substitute
       "before each" hook:
     Error: Failed to show text document file:///tmp/wgxjbqrplp, should show in editor #undefined
      at .vscode-test/stable/VSCode-linux-x64/resources/app/out/vs/workbench/node/extensionHostProcess.js:635:499
      at <anonymous>

  34) Configuration
       Can handle long key chords:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)

  35) Remapper
       getLongestedRemappedKeySequence:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/configuration/configuration.test.ts:84:3)

  36) Remapper
       jj -> <Esc> through modehandler:

      AssertionError [ERR_ASSERTION]: 0 == 1
      + expected - actual

      -0
      +1
      
      at Object.assertEqual (test/testUtils.ts:74:10)
      at Object.<anonymous> (test/configuration/remapper.test.ts:264:5)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/configuration/remapper.test.js:4:58)
      at <anonymous>

  37) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: Ggg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  38) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: Ggg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  39) Remapper
       d -> black hole register delete in normal mode through modehandler:

      AssertionError [ERR_ASSERTION]: '' == 'text-to-put-on-register'
      + expected - actual

      +text-to-put-on-register
      
      at Object.<anonymous> (test/configuration/remapper.test.ts:416:12)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/configuration/remapper.test.js:4:58)
      at <anonymous>

  40) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  41) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  42) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  43) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  44) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  45) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)

  46) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  47) Record and execute a macro
       Can record and execute:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/macro.test.ts:13:3)


  48) Record and execute a macro
       Can record and execute:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/macro.test.ts:13:3)


  49) Record and execute a macro
       Can record and execute:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/macro.test.ts:13:3)


  50) Record and execute a macro
       Can repeat last invoked macro:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  51) Record and navigate jumps
       "before each" hook for "Can repeat last invoked macro":
     TypeError: Cannot read property 'options' of undefined
      at ModeHandler.<anonymous> (src/mode/modeHand[as _onImmediate] (src/mode/modeHandler.ts:83:42)

  2) Basic substitute
       Replace with `c` flag:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:40:3)


  3) Basic substitute
       Replace with `gc` flag:
     TypeError: Attempted to wrap confirmReplacement which is already wrapped
      at checkWrappedMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:39:21)
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:87:13)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>
  --------------
  Error: Stack Trace for original
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:112:30)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>


  4) Basic substitute
       Replace across all lines:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=foofoobarfoo. Actual=.
      + expected - actual

      +foofoobarfoo
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:65:5)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  5) Basic substitute
       Replace on specific single line:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:76:3)


  6) Basic substitute
       Replace on current line using dot:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:76:3)


  7) Basic substitute
       Replace single relative line using dot and plus:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  8) Basic substitute
       Replace across specific line range:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:90:3)


  9) Basic substitute
       Replace across relative line range using dot, plus, and minus:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:90:3)


  10) Basic substitute
       Replace across relative line range using numLines+colon shorthand:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  11) Basic substitute
       Repeat replacement across relative line range:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:111:3)


  12) Basic substitute
       Replace with range AND count but no flags:
     TextEditor(vs.editor.ICodeEditor:1,$model28) has been disposed
      at Suite.suite (test/cmd_line/substitute.test.ts:118:3)


  13) Basic substitute
       Undocumented: operator without LHS assumes dot as LHS:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  14) Basic substitute
       Undocumented: multiple consecutive operators use 1 as RHS:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:118:3)


  15) Basic substitute
       Undocumented: trailing operators use 1 as RHS:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:132:3)


  16) Basic substitute
       Replace specific single equal lines:
     Error: Failed to handle key=a. Cannot read property 'isValid' of undefined
      at ModeHandler.<anonymous> (src/mode/modeHandler.ts:305:13)
      at Generator.throw (<anonymous>)
      at rejected (out/src/mode/modeHandler.js:5:65)
      at <anonymous>


  17) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)


  18) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)


  19) Basic substitute
       Replace current line with no active selection:
     Failed to handle key=g. Cannot read property 'isValid' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:146:3)

  20) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace all matches in the line:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:139:3)

  21) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using *:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=fighters. Actual=irbfighterso.
      + expected - actual

      -irbfighterso
      +fighters
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:365:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  22) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using *:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=fighters. Actual=irbfighterso.
      + expected - actual

      -irbfighterso
      +fighters
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:365:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  23) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace with `g` flag inverts global flag:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dba. Actual=ddda.
      + expected - actual

      -ddda
      +dba
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:239:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  24) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with previous search using /:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dba. Actual=dddd.
      + expected - actual

      -dddd
      +dba
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:239:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>

  25) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace with `c` flag inverts global flag:
     TypeError: Attempted to wrap confirmReplacement which is already wrapped
      at checkWrappedMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:39:21)
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:87:13)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:244:10)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:242:66)
  --------------
  Error: Stack Trace for original
      at wrapMethod (node_modules/sinon/lib/sinon/util/core/wrap-method.js:112:30)
      at stub (node_modules/sinon/lib/sinon/stub.js:73:44)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:291:33)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:60:8)
      at Generator.next (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/test/cmd_line/substitute.test.js:3:12)
      at Context.test (test/cmd_line/substitute.test.ts:58:45)
      at <anonymous>


  26) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with parameters should update search state:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  27) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with empty replacement should delete previous substitution (all variants) and accepts flags:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:427:5)


  28) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace multiple lines:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:437:5)


  29) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with no pattern should repeat previous substitution and not alter search state:
     Failed to handle key=<Esc>. Cannot read property 'getLeft' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:477:5)


  30) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with no pattern should repeat previous substitution and not alter search state:
     Failed to handle key=<Esc>. Cannot read property 'getLeft' of undefined
      at Suite.suite (test/cmd_line/substitute.test.ts:477:5)


  31) Basic substitute
       Effects of substituteGlobalFlag=true
         Replace across specific lines:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dbd. Actual=dbbaaoaaabb.
      + expected - actual

      -dbbaaoaaabb
      +dbd
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:264:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  32) Basic substitute
       Substitute should use various previous search/substitute states
         Substitute with empty search string should use last searched pattern:

      AssertionError [ERR_ASSERTION]: Content does not match; Expected=dbd. Actual=dbbdaoaaabb.
      + expected - actual

      -dbbdaoaaabb
      +dbd
      
      at Object.assertEqualLines (test/testUtils.ts:57:12)
      at Object.<anonymous> (test/cmd_line/substitute.test.ts:264:7)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/cmd_line/substitute.test.js:4:58)
      at <anonymous>


  33) Basic substitute
       "before each" hook:
     Error: Failed to show text document file:///tmp/wgxjbqrplp, should show in editor #undefined
      at .vscode-test/stable/VSCode-linux-x64/resources/app/out/vs/workbench/node/extensionHostProcess.js:635:499
      at <anonymous>


  34) Configuration
       Can handle long key chords:
     Uncaught TypeError: this.cursors[0].withNewStart is not a function
      at VimState.set cursorStartPosition [as cursorStartPosition] (src/state/vimState.ts:144:39)
      at Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  35) Remapper
       getLongestedRemappedKeySequence:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at Suite.suite (test/configuration/configuration.test.ts:84:3)


  36) Remapper
       jj -> <Esc> through modehandler:

      AssertionError [ERR_ASSERTION]: 0 == 1
      + expected - actual

      -0
      +1
      
      at Object.assertEqual (test/testUtils.ts:74:10)
      at Object.<anonymous> (test/configuration/remapper.test.ts:264:5)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/configuration/remapper.test.js:4:58)
      at <anonymous>


  37) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: Ggg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  38) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: Ggg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  39) Remapper
       d -> black hole register delete in normal mode through modehandler:

      AssertionError [ERR_ASSERTION]: '' == 'text-to-put-on-register'
      + expected - actual

      +text-to-put-on-register
      
      at Object.<anonymous> (test/configuration/remapper.test.ts:416:12)
      at Generator.next (<anonymous>)
      at fulfilled (out/test/configuration/remapper.test.js:4:58)
      at <anonymous>


  40) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  41) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  42) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: GggGgg:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  43) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTracker.test.ts:20:12)


  44) Record and navigate jumps
       Can record jumps for actions the same as vanilla Vim
         Can track basic jumps
           Can track jumps for keys: G?b<CR>ggG:
     Failed to handle key=<Esc>. Cannot read property 'character' of undefined
      at newJumpTest (test/jumpTrackert Immediate.__dirname.syncCursors.setImmediate [as _onImmediate] (src/mode/modeHandler.ts:83:42)


  51) Record and navigate jumps
       "before each" hook for "Can repeat last invoked macro":
     TypeError: Cannot read property 'options' of undefined
      at ModeHandler.<anonymous> (src/mode/modeHandler.ts:1314:26)
      at Generator.next (<anonymous>)
      at __awaiter (out/src/mode/modeHandler.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/src/mode/modeHandler.js:3:12)
      at ModeHandler.updateView (out/src/mode/modeHandler.js:919:16)
      at Object.<anonymous> (extension.ts:53:22)
      at Generator.next (<anonymous>)
      at fulfilled (out/extension.js:4:58)
      at <anonymous>


  52) Record and navigate jumps
       "before each" hook for "Can repeat last invoked macro":
     TypeError: Cannot read property 'options' of undefined
      at ModeHandler.<anonymous> (src/mode/modeHandler.ts:1314:26)
      at Generator.next (<anonymous>)
      at __awaiter (out/src/mode/modeHandler.js:7:71)
      at new Promise (<anonymous>)
      at __awaiter (out/src/mode/modeHandler.js:3:12)
      at ModeHandler.updateView (out/src/mode/modeHandler.js:919:16)
      at Object.<anonymous> (extension.ts:53:22)
      at Generator.next (<anonymous>)
      at fulfilled (out/extension.js:4:58)
      at <anonymous>


  53) Mode Handler
       ctor:
     TypeError: Cannot read property 'currentMode' of undefined
      at Context.test (test/mode/modeHandler.test.ts:19:30)
      at <anonymous>


  54) Record and navigate jumps
       "after each" hook: cleanUpWorkspace for "ctor":
     TypeError: Cannot read property 'call' of undefined
  






Tests exited with code: 1
TravisBuddy Request Identifier: 70c46b40-26a9-11e9-bc23-1df458ae209a

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.

Illegal value for line error using command-mode range deletion
2 participants