# HG changeset patch # User Bram Moolenaar # Date 1575567004 -3600 # Node ID 2d41b63f52de34f59d5ce2be8832a7d7d25fa1df # Parent 931c46f7f2488d6218aada5cdfa8e9f3bb11edee patch 8.1.2390: test94 is old style, fix 7.4.441 not tested Commit: https://github.com/vim/vim/commit/309976ec1f033c68480bbc8cc363db5b5ea944f9 Author: Bram Moolenaar Date: Thu Dec 5 18:16:33 2019 +0100 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 #5316) diff --git a/src/Makefile b/src/Makefile --- a/src/Makefile +++ b/src/Makefile @@ -2257,7 +2257,7 @@ test1 \ test64 test69 \ test70 test72 \ test86 test87 test88 \ - test94 test95 test99: + test95 test99: cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE) # Run individual NEW style test. diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -20,7 +20,6 @@ SCRIPTS_ALL = \ test69.out \ test70.out \ test88.out \ - test94.out \ test95.out \ test99.out \ test_eval.out diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms --- a/src/testdir/Make_vms.mms +++ b/src/testdir/Make_vms.mms @@ -78,7 +78,7 @@ SCRIPT = test1.out \ test42.out test44.out test49.out \ test64.out test69.out \ test72.out test77a.out test88.out \ - test94.out test95.out test99.out \ + test95.out test99.out \ test_eval.out # Known problems: diff --git a/src/testdir/test94.in b/src/testdir/test94.in deleted file mode 100644 --- a/src/testdir/test94.in +++ /dev/null @@ -1,257 +0,0 @@ -Test for Visual mode and operators - -Tests for the two kinds of operations: Those executed with Visual mode -followed by an operator and those executed via Operator-pending mode. Also -part of the test are mappings, counts, and repetition with the . command. - -Test cases: -- Visual modes (v V CTRL-V) followed by an operator; count; repeating -- Visual mode maps; count; repeating - - Simple - - With an Ex command (custom text object) -- Operator-pending mode maps - - Simple - - With Ex command moving the cursor - - With Ex command and Visual selection (custom text object) -- Patch 7.3.879: Properly abort Ex command in Operator-pending mode - -STARTTEST -:so small.vim -:set belloff=all -:set enc=utf-8 nocp viminfo+=nviminfo -: -:" User functions -:function MoveToCap() -: call search('\u', 'W') -:endfunction -:function 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 -: -:" Visual modes followed by operator -/^apple -lvld.l3vd.: -/^line 1 -Vcnewlinej.j2Vd.: -/^xxxx -jlc l.l2c----l.: -: -:" Visual mode maps (movement and text object) -:vnoremap W /\u/s-1 -:vnoremap iW :call SelectInCaps() -/^Kiwi -vWcNol.fD2vd.: -/^Jambu -llviWc-l.l2vdl.: -: -:" Operator-pending mode maps (movement and text object) -:onoremap W /\u/ -:onoremap W :call MoveToCap() -:onoremap iW :call SelectInCaps() -/^Pineapple -cW-l.l2.l.: -/^Juniper -g?\WfD.: -/^Lemon -yiWPlciWNewfr.: -: -:" Patch 7.3.879: Properly abort Operator-pending mode for "dv:" etc. -/^zzzz -dV: dv: :set noma | let v:errmsg = '' -d: :set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed' -dv:dV::set noma | let v:errmsg = '' -d::set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok' -: -:$put ='' -:$put ='characterwise visual mode: replace last line' -:$put ='a' -:let @" = 'x' -:let v:errmsg = '' -v$p -:$put ='---' -:$put ='v:errmsg='.v:errmsg -: -:$put ='' -:$put ='characterwise visual mode: delete middle line' -:$put ='a' -:$put ='b' -:$put ='c' -kkv$d -:$put ='---' -: -:$put ='' -:$put ='characterwise visual mode: delete middle two line' -:$put ='a' -:$put ='b' -:$put ='c' -kkvj$d -:$put ='---' -: -:$put ='' -:$put ='characterwise visual mode: delete last line' -:$put ='a' -:$put ='b' -:$put ='c' -v$d -:$put ='---' -: -:$put ='' -:$put ='characterwise visual mode: delete last two line' -:$put ='a' -:$put ='b' -:$put ='c' -kvj$d -:$put ='---' -: -:" Select mode maps -:snoremap End> -:snoremap Down> -:snoremap Del> -: -:$put ='' -:$put ='characterwise select mode: delete middle line' -:$put ='a' -:$put ='b' -:$put ='c' -kkgh -:$put ='---' -: -:$put ='' -:$put ='characterwise select mode: delete middle two line' -:$put ='a' -:$put ='b' -:$put ='c' -kkgh -:$put ='---' -: -:$put ='' -:$put ='characterwise select mode: delete last line' -:$put ='a' -:$put ='b' -:$put ='c' -gh -:$put ='---' -: -:$put ='' -:$put ='characterwise select mode: delete last two line' -:$put ='a' -:$put ='b' -:$put ='c' -kgh -:$put ='---' -: -:$put ='' -:$put ='linewise select mode: delete middle line' -:$put ='a' -:$put ='b' -:$put ='c' -kkgH -:$put ='---' -: -:$put ='' -:$put ='linewise select mode: delete middle two line' -:$put ='a' -:$put ='b' -:$put ='c' -kkgH -:$put ='---' -: -:$put ='' -:$put ='linewise select mode: delete last line' -:$put ='a' -:$put ='b' -:$put ='c' -gH -:$put ='---' -: -:$put ='' -:$put ='linewise select mode: delete last two line' -:$put ='a' -:$put ='b' -:$put ='c' -kgH -:$put ='---' -: -:$put ='' -:$put ='v_p: replace last character with line register at middle line' -:$put ='aaa' -:$put ='bbb' -:$put ='ccc' -:-2yank -k$vp -:$put ='---' -: -:$put ='' -:$put ='v_p: replace last character with line register at middle line selecting newline' -:$put ='aaa' -:$put ='bbb' -:$put ='ccc' -:-2yank -k$v$p -:$put ='---' -: -:$put ='' -:$put ='v_p: replace last character with line register at last line' -:$put ='aaa' -:$put ='bbb' -:$put ='ccc' -:-2yank -$vp -:$put ='---' -: -:$put ='' -:$put ='v_p: replace last character with line register at last line selecting newline' -:$put ='aaa' -:$put ='bbb' -:$put ='ccc' -:-2yank -$v$p -:$put ='---' -: -:$put ='' -:$put ='gv in exclusive select mode after operation' -:$put ='zzz ' -:$put ='äà ' -:set selection=exclusive -kv3lyjv3lpgvcxxx -:$put ='---' -: -:$put ='' -:$put ='gv in exclusive select mode without operation' -:$put ='zzz ' -:set selection=exclusive -0v3lgvcxxx -:$put ='---' -:/^start:/+2,$w! test.out -:q! -ENDTEST - -start: - -apple banana cherry - -line 1 line 1 -line 2 line 2 -line 3 line 3 -line 4 line 4 -line 5 line 5 -line 6 line 6 - -xxxxxxxxxxxxx -xxxxxxxxxxxxx -xxxxxxxxxxxxx -xxxxxxxxxxxxx - -KiwiRaspberryDateWatermelonPeach -JambuRambutanBananaTangerineMango - -PineappleQuinceLoganberryOrangeGrapefruitKiwiZ -JuniperDurianZ -LemonNectarineZ - -zzzz -zzzz diff --git a/src/testdir/test94.ok b/src/testdir/test94.ok deleted file mode 100644 --- a/src/testdir/test94.ok +++ /dev/null @@ -1,123 +0,0 @@ -a y - -newline -newline - - --------x - --------x -xxxx--------x -xxxx--------x - -NoNoberryach ---ago - -----Z -WhavcreQhevnaZ -LemonNewNewZ - -zzz -ok -ok - -characterwise visual mode: replace last line -x ---- -v:errmsg= - -characterwise visual mode: delete middle line -b -c ---- - -characterwise visual mode: delete middle two line -c ---- - -characterwise visual mode: delete last line -a -b - ---- - -characterwise visual mode: delete last two line -a - ---- - -characterwise select mode: delete middle line -b -c ---- - -characterwise select mode: delete middle two line -c ---- - -characterwise select mode: delete last line -a -b - ---- - -characterwise select mode: delete last two line -a - ---- - -linewise select mode: delete middle line -b -c ---- - -linewise select mode: delete middle two line -c ---- - -linewise select mode: delete last line -a -b ---- - -linewise select mode: delete last two line -a ---- - -v_p: replace last character with line register at middle line -aaa -bb -aaa - -ccc ---- - -v_p: replace last character with line register at middle line selecting newline -aaa -bb -aaa -ccc ---- - -v_p: replace last character with line register at last line -aaa -bbb -cc -aaa - ---- - -v_p: replace last character with line register at last line selecting newline -aaa -bbb -cc -aaa - ---- - -gv in exclusive select mode after operation -zzz -xxx ---- - -gv in exclusive select mode without operation -xxx ---- diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -848,3 +848,26 @@ func Test_cmdwin_feedkeys() " This should not generate E488 call feedkeys("q:\", '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=\" + normal! : + call assert_equal(1, winnr('$')) + + let g:cmd_wintype = '' + func CmdWinType() + let g:cmd_wintype = getcmdwintype() + return '' + endfunc + + call feedkeys("\a\=CmdWinType()\\") + echo input('') + call assert_equal('@', g:cmd_wintype) + + set cedit&vim + delfunc CmdWinType +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim --- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -442,4 +442,302 @@ func Test_visual_block_put() enew! 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\j.j2Vd." + call assert_equal(['newline', 'newline'], getline(1, '$')) + + call deletebufline('', 1, '$') + call setline(1, ['xxxxxxxxxxxxx', 'xxxxxxxxxxxxx', 'xxxxxxxxxxxxx', + \ 'xxxxxxxxxxxxx']) + exe "normal \jlc \l.l2\c----\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 + vnoremap iW :call SelectInCaps() + + call setline(1, 'KiwiRaspberryDateWatermelonPeach') + call cursor(1, 1) + exe "normal vWcNo\l.fD2vd." + call assert_equal('NoNoberryach', getline(1)) + + call setline(1, 'JambuRambutanBananaTangerineMango') + call cursor(1, 1) + exe "normal llviWc-\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/ + onoremap W :call MoveToCap() + onoremap iW :call SelectInCaps() + + call setline(1, 'PineappleQuinceLoganberryOrangeGrapefruitKiwiZ') + call cursor(1, 1) + exe "normal cW-\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\fr." + call assert_equal('LemonNewNewZ', getline(1)) + + ounmap W + ounmap W + ounmap iW + bwipe! + delfunc MoveToCap + delfunc SelectInCaps +endfunc + +" Patch 7.3.879: Properly abort Operator-pending mode for "dv:" etc. +func Test_op_pend_mode_abort() + new + call append(0, '') + + call setline(1, ['zzzz', 'zzzz']) + call cursor(1, 1) + + exe "normal dV:\dv:\" + call assert_equal(['zzz'], getline(1, 2)) + set nomodifiable + call assert_fails('exe "normal d:\"', 'E21:') + set modifiable + call feedkeys("dv:\dV:\", 'xt') + call assert_equal(['zzz'], getline(1, 2)) + set nomodifiable + let v:errmsg = '' + call feedkeys("d:\", '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 End> + snoremap Down> + snoremap Del> + + " characterwise select mode: delete middle line + call deletebufline('', 1, '$') + call append('$', ['a', 'b', 'c']) + exe "normal Gkkgh\\" + 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\\\" + call assert_equal(['', 'c'], getline(1, '$')) + + " characterwise select mode: delete last line + call deletebufline('', 1, '$') + call append('$', ['a', 'b', 'c']) + exe "normal Ggh\\" + 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\\\" + call assert_equal(['', 'a', ''], getline(1, '$')) + + sunmap End> + sunmap Down> + sunmap Del> + bwipe! +endfunc + +func Test_linewise_select_mode() + new + + " linewise select mode: delete middle line + call append('$', ['a', 'b', 'c']) + exe "normal GkkgH\" + 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\\" + call assert_equal(['', 'c'], getline(1, '$')) + + " linewise select mode: delete last line + call deletebufline('', 1, '$') + call append('$', ['a', 'b', 'c']) + exe "normal GgH\" + 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\\" + 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\gvcxxx" + call assert_equal(['', 'xxx '], getline(1, '$')) + + set selection&vim + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -743,6 +743,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2390, +/**/ 2389, /**/ 2388,