aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-11-25 01:26:52 -0500
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-11-25 01:31:38 -0500
commita9186501f6070a655f96207881a54bf509bd79ce (patch)
treec81898396e8481507e7c0b8654fb3340335de6b0
parentb0d3f47e9044988e433a7e299e3080b0f33a21bc (diff)
downloadrneovim-a9186501f6070a655f96207881a54bf509bd79ce.tar.gz
rneovim-a9186501f6070a655f96207881a54bf509bd79ce.tar.bz2
rneovim-a9186501f6070a655f96207881a54bf509bd79ce.zip
vim-patch:8.1.2390: test94 is old style, fix 7.4.441 not tested
Problem: Test94 is old style, fix 7.4.441 not tested. Solution: Turn test94 into a new style test. Add tests for the fix in patch 7.4.441. (Yegappan Lakshmanan, closes vim/vim#5316) https://github.com/vim/vim/commit/309976ec1f033c68480bbc8cc363db5b5ea944f9
-rw-r--r--src/nvim/testdir/test_cmdline.vim21
-rw-r--r--src/nvim/testdir/test_visual.vim298
2 files changed, 319 insertions, 0 deletions
diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim
index e3c42a4fe3..400e53d009 100644
--- a/src/nvim/testdir/test_cmdline.vim
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -796,6 +796,27 @@ func Test_cmdwin_feedkeys()
call feedkeys("q:\<CR>", 'x')
endfunc
+" Tests for the issues fixed in 7.4.441.
+" When 'cedit' is set to Ctrl-C, opening the command window hangs Vim
+func Test_cmdwin_cedit()
+ exe "set cedit=\<C-c>"
+ normal! :
+ call assert_equal(1, winnr('$'))
+
+ let g:cmd_wintype = ''
+ func CmdWinType()
+ let g:cmd_wintype = getcmdwintype()
+ return ''
+ endfunc
+
+ call feedkeys("\<C-c>a\<C-R>=CmdWinType()\<CR>\<CR>")
+ echo input('')
+ call assert_equal('@', g:cmd_wintype)
+
+ set cedit&vim
+ delfunc CmdWinType
+endfunc
+
func Test_buffers_lastused()
" check that buffers are sorted by time when wildmode has lastused
edit bufc " oldest
diff --git a/src/nvim/testdir/test_visual.vim b/src/nvim/testdir/test_visual.vim
index 734f264672..7f50894f66 100644
--- a/src/nvim/testdir/test_visual.vim
+++ b/src/nvim/testdir/test_visual.vim
@@ -442,4 +442,302 @@ func Test_visual_put_in_block()
bwipe!
endfunc
+" Visual modes (v V CTRL-V) followed by an operator; count; repeating
+func Test_visual_mode_op()
+ new
+ call append(0, '')
+
+ call setline(1, 'apple banana cherry')
+ call cursor(1, 1)
+ normal lvld.l3vd.
+ call assert_equal('a y', getline(1))
+
+ call setline(1, ['line 1 line 1', 'line 2 line 2', 'line 3 line 3',
+ \ 'line 4 line 4', 'line 5 line 5', 'line 6 line 6'])
+ call cursor(1, 1)
+ exe "normal Vcnewline\<Esc>j.j2Vd."
+ call assert_equal(['newline', 'newline'], getline(1, '$'))
+
+ call deletebufline('', 1, '$')
+ call setline(1, ['xxxxxxxxxxxxx', 'xxxxxxxxxxxxx', 'xxxxxxxxxxxxx',
+ \ 'xxxxxxxxxxxxx'])
+ exe "normal \<C-V>jlc \<Esc>l.l2\<C-V>c----\<Esc>l."
+ call assert_equal([' --------x',
+ \ ' --------x',
+ \ 'xxxx--------x',
+ \ 'xxxx--------x'], getline(1, '$'))
+
+ bwipe!
+endfunc
+
+" Visual mode maps (movement and text object)
+" Visual mode maps; count; repeating
+" - Simple
+" - With an Ex command (custom text object)
+func Test_visual_mode_maps()
+ new
+ call append(0, '')
+
+ func SelectInCaps()
+ let [line1, col1] = searchpos('\u', 'bcnW')
+ let [line2, col2] = searchpos('.\u', 'nW')
+ call setpos("'<", [0, line1, col1, 0])
+ call setpos("'>", [0, line2, col2, 0])
+ normal! gv
+ endfunction
+
+ vnoremap W /\u/s-1<CR>
+ vnoremap iW :<C-U>call SelectInCaps()<CR>
+
+ call setline(1, 'KiwiRaspberryDateWatermelonPeach')
+ call cursor(1, 1)
+ exe "normal vWcNo\<Esc>l.fD2vd."
+ call assert_equal('NoNoberryach', getline(1))
+
+ call setline(1, 'JambuRambutanBananaTangerineMango')
+ call cursor(1, 1)
+ exe "normal llviWc-\<Esc>l.l2vdl."
+ call assert_equal('--ago', getline(1))
+
+ vunmap W
+ vunmap iW
+ bwipe!
+ delfunc SelectInCaps
+endfunc
+
+" Operator-pending mode maps (movement and text object)
+" - Simple
+" - With Ex command moving the cursor
+" - With Ex command and Visual selection (custom text object)
+func Test_visual_oper_pending_mode_maps()
+ new
+ call append(0, '')
+
+ func MoveToCap()
+ call search('\u', 'W')
+ endfunction
+
+ func SelectInCaps()
+ let [line1, col1] = searchpos('\u', 'bcnW')
+ let [line2, col2] = searchpos('.\u', 'nW')
+ call setpos("'<", [0, line1, col1, 0])
+ call setpos("'>", [0, line2, col2, 0])
+ normal! gv
+ endfunction
+
+ onoremap W /\u/<CR>
+ onoremap <Leader>W :<C-U>call MoveToCap()<CR>
+ onoremap iW :<C-U>call SelectInCaps()<CR>
+
+ call setline(1, 'PineappleQuinceLoganberryOrangeGrapefruitKiwiZ')
+ call cursor(1, 1)
+ exe "normal cW-\<Esc>l.l2.l."
+ call assert_equal('----Z', getline(1))
+
+ call setline(1, 'JuniperDurianZ')
+ call cursor(1, 1)
+ exe "normal g?\WfD."
+ call assert_equal('WhavcreQhevnaZ', getline(1))
+
+ call setline(1, 'LemonNectarineZ')
+ call cursor(1, 1)
+ exe "normal yiWPlciWNew\<Esc>fr."
+ call assert_equal('LemonNewNewZ', getline(1))
+
+ ounmap W
+ ounmap <Leader>W
+ ounmap iW
+ bwipe!
+ delfunc MoveToCap
+ delfunc SelectInCaps
+endfunc
+
+" Patch 7.3.879: Properly abort Operator-pending mode for "dv:<Esc>" etc.
+func Test_op_pend_mode_abort()
+ new
+ call append(0, '')
+
+ call setline(1, ['zzzz', 'zzzz'])
+ call cursor(1, 1)
+
+ exe "normal dV:\<CR>dv:\<CR>"
+ call assert_equal(['zzz'], getline(1, 2))
+ set nomodifiable
+ call assert_fails('exe "normal d:\<CR>"', 'E21:')
+ set modifiable
+ call feedkeys("dv:\<Esc>dV:\<Esc>", 'xt')
+ call assert_equal(['zzz'], getline(1, 2))
+ set nomodifiable
+ let v:errmsg = ''
+ call feedkeys("d:\<Esc>", 'xt')
+ call assert_true(v:errmsg !~# '^E21:')
+ set modifiable
+
+ bwipe!
+endfunc
+
+func Test_characterwise_visual_mode()
+ new
+
+ " characterwise visual mode: replace last line
+ $put ='a'
+ let @" = 'x'
+ normal v$p
+ call assert_equal('x', getline('$'))
+
+ " characterwise visual mode: delete middle line
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ normal G
+ normal kkv$d
+ call assert_equal(['', 'b', 'c'], getline(1, '$'))
+
+ " characterwise visual mode: delete middle two lines
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ normal Gkkvj$d
+ call assert_equal(['', 'c'], getline(1, '$'))
+
+ " characterwise visual mode: delete last line
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ normal Gv$d
+ call assert_equal(['', 'a', 'b', ''], getline(1, '$'))
+
+ " characterwise visual mode: delete last two lines
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ normal Gkvj$d
+ call assert_equal(['', 'a', ''], getline(1, '$'))
+
+ bwipe!
+endfunc
+
+func Test_characterwise_select_mode()
+ new
+
+ " Select mode maps
+ snoremap <lt>End> <End>
+ snoremap <lt>Down> <Down>
+ snoremap <lt>Del> <Del>
+
+ " characterwise select mode: delete middle line
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ exe "normal Gkkgh\<End>\<Del>"
+ call assert_equal(['', 'b', 'c'], getline(1, '$'))
+
+ " characterwise select mode: delete middle two lines
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ exe "normal Gkkgh\<Down>\<End>\<Del>"
+ call assert_equal(['', 'c'], getline(1, '$'))
+
+ " characterwise select mode: delete last line
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ exe "normal Ggh\<End>\<Del>"
+ call assert_equal(['', 'a', 'b', ''], getline(1, '$'))
+
+ " characterwise select mode: delete last two lines
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ exe "normal Gkgh\<Down>\<End>\<Del>"
+ call assert_equal(['', 'a', ''], getline(1, '$'))
+
+ sunmap <lt>End>
+ sunmap <lt>Down>
+ sunmap <lt>Del>
+ bwipe!
+endfunc
+
+func Test_linewise_select_mode()
+ new
+
+ " linewise select mode: delete middle line
+ call append('$', ['a', 'b', 'c'])
+ exe "normal GkkgH\<Del>"
+ call assert_equal(['', 'b', 'c'], getline(1, '$'))
+
+
+ " linewise select mode: delete middle two lines
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ exe "normal GkkgH\<Down>\<Del>"
+ call assert_equal(['', 'c'], getline(1, '$'))
+
+ " linewise select mode: delete last line
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ exe "normal GgH\<Del>"
+ call assert_equal(['', 'a', 'b'], getline(1, '$'))
+
+ " linewise select mode: delete last two lines
+ call deletebufline('', 1, '$')
+ call append('$', ['a', 'b', 'c'])
+ exe "normal GkgH\<Down>\<Del>"
+ call assert_equal(['', 'a'], getline(1, '$'))
+
+ bwipe!
+endfunc
+
+func Test_visual_mode_put()
+ new
+
+ " v_p: replace last character with line register at middle line
+ call append('$', ['aaa', 'bbb', 'ccc'])
+ normal G
+ -2yank
+ normal k$vp
+ call assert_equal(['', 'aaa', 'bb', 'aaa', '', 'ccc'], getline(1, '$'))
+
+ " v_p: replace last character with line register at middle line selecting
+ " newline
+ call deletebufline('', 1, '$')
+ call append('$', ['aaa', 'bbb', 'ccc'])
+ normal G
+ -2yank
+ normal k$v$p
+ call assert_equal(['', 'aaa', 'bb', 'aaa', 'ccc'], getline(1, '$'))
+
+ " v_p: replace last character with line register at last line
+ call deletebufline('', 1, '$')
+ call append('$', ['aaa', 'bbb', 'ccc'])
+ normal G
+ -2yank
+ normal $vp
+ call assert_equal(['', 'aaa', 'bbb', 'cc', 'aaa', ''], getline(1, '$'))
+
+ " v_p: replace last character with line register at last line selecting
+ " newline
+ call deletebufline('', 1, '$')
+ call append('$', ['aaa', 'bbb', 'ccc'])
+ normal G
+ -2yank
+ normal $v$p
+ call assert_equal(['', 'aaa', 'bbb', 'cc', 'aaa', ''], getline(1, '$'))
+
+ bwipe!
+endfunc
+
+func Test_select_mode_gv()
+ new
+
+ " gv in exclusive select mode after operation
+ call append('$', ['zzz ', 'äà '])
+ set selection=exclusive
+ normal Gkv3lyjv3lpgvcxxx
+ call assert_equal(['', 'zzz ', 'xxx '], getline(1, '$'))
+
+ " gv in exclusive select mode without operation
+ call deletebufline('', 1, '$')
+ call append('$', 'zzz ')
+ set selection=exclusive
+ exe "normal G0v3l\<Esc>gvcxxx"
+ call assert_equal(['', 'xxx '], getline(1, '$'))
+
+ set selection&vim
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab