# HG changeset patch # User Bram Moolenaar # Date 1592855103 -7200 # Node ID 2c3e7a6bd6c6b57f2e0be3b22de99e5d3ad7e235 # Parent 6953733825a7ef7815834d0b7ff6b0296c3af314 patch 8.2.1040: not enough testing for movement commands Commit: https://github.com/vim/vim/commit/bdd2c290d3cda69e0046c42f0c651f60bc510a16 Author: Bram Moolenaar Date: Mon Jun 22 21:34:30 2020 +0200 patch 8.2.1040: not enough testing for movement commands Problem: Not enough testing for movement commands. Solution: Add more tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/6313) diff --git a/src/testdir/test_cursor_func.vim b/src/testdir/test_cursor_func.vim --- a/src/testdir/test_cursor_func.vim +++ b/src/testdir/test_cursor_func.vim @@ -99,6 +99,7 @@ func Test_screenpos() \ 'curscol': wincol + 9, \ 'endcol': wincol + 9}, screenpos(winid, 2, 22)) close + call assert_equal({}, screenpos(999, 1, 1)) bwipe! endfunc diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -475,6 +475,11 @@ func Test_simplify() call assert_equal('./file', simplify('./dir/../file')) call assert_equal('../dir/file', simplify('dir/../../dir/file')) call assert_equal('./file', simplify('dir/.././file')) + call assert_equal('../dir', simplify('./../dir')) + call assert_equal('..', simplify('../testdir/..')) + call mkdir('Xdir') + call assert_equal('.', simplify('Xdir/../.')) + call delete('Xdir', 'd') call assert_fails('call simplify({->0})', 'E729:') call assert_fails('call simplify([])', 'E730:') diff --git a/src/testdir/test_gf.vim b/src/testdir/test_gf.vim --- a/src/testdir/test_gf.vim +++ b/src/testdir/test_gf.vim @@ -1,3 +1,4 @@ +" Test for the gf and gF (goto file) commands " This is a test if a URL is recognized by "gf", with the cursor before and " after the "://". Also test ":\\". @@ -38,6 +39,13 @@ func Test_gf_url() call search("URL") call assert_equal("URL://machine.name:1234?q=vim", expand("")) + %d + call setline(1, "demo://remote_file") + wincmd f + call assert_equal('demo://remote_file', @%) + call assert_equal(2, winnr('$')) + close! + set isf&vim enew! endfunc @@ -118,6 +126,11 @@ func Test_gf_visual() norm! ttvtXgf call assert_equal('Xtest_gf_visual', bufname('%')) + " if multiple lines are selected, then gf should fail + call setline(1, ["one", "two"]) + normal VGgf + call assert_equal('Xtest_gf_visual', @%) + bwipe! call delete('Xtest_gf_visual') set hidden& @@ -146,4 +159,21 @@ func Test_gf_error() bwipe! endfunc +" If a file is not found by 'gf', then 'includeexpr' should be used to locate +" the file. +func Test_gf_includeexpr() + new + let g:Inc_fname = '' + func IncFunc() + let g:Inc_fname = v:fname + return v:fname + endfunc + setlocal includeexpr=IncFunc() + call setline(1, 'somefile.java') + call assert_fails('normal gf', 'E447:') + call assert_equal('somefile.java', g:Inc_fname) + close! + delfunc IncFunc +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -754,8 +754,9 @@ func Test_normal17_z_scroll_hor2() bw! endfunc -" Test for H, M and L commands with folds -func Test_scroll_cmds() +" Test for commands that scroll the window horizontally. Test with folds. +" H, M, L, CTRL-E, CTRL-Y, CTRL-U, CTRL-D, PageUp, PageDown commands +func Test_vert_scroll_cmds() 15new call setline(1, range(1, 100)) exe "normal! 30ggz\" @@ -764,6 +765,8 @@ func Test_scroll_cmds() 40,43fold 46,49fold let h = winheight(0) + + " Test for H, M and L commands " Top of the screen = 30 " Folded lines = 9 " Bottom of the screen = 30 + h + 9 - 1 @@ -771,10 +774,104 @@ func Test_scroll_cmds() call assert_equal(35 + h, line('.')) normal! 4H call assert_equal(33, line('.')) + + " Test for the CTRL-E and CTRL-Y commands with folds + %d + call setline(1, range(1, 10)) + 3,5fold + exe "normal 6G3\" + call assert_equal(6, line('w0')) + exe "normal 2\" + call assert_equal(2, line('w0')) + + " Test for CTRL-Y on a folded line + %d + call setline(1, range(1, 100)) + exe (h + 2) .. "," .. (h + 4) .. "fold" + exe h + 5 + normal z- + exe "normal \\" + call assert_equal(h + 1, line('w$')) + + " Using and in an empty buffer should beep + %d + call assert_beeps('exe "normal \"') + call assert_beeps('exe "normal \"') + call assert_beeps('exe "normal \"') + call assert_beeps('exe "normal \"') + + " Test for and with fold + %d + call setline(1, range(1, 100)) + 10,35fold + set scroll=10 + exe "normal \" + call assert_equal(36, line('.')) + exe "normal \" + call assert_equal(46, line('.')) + exe "normal \" + call assert_equal(36, line('.')) + exe "normal \" + call assert_equal(10, line('.')) + exe "normal \" + call assert_equal(1, line('.')) + set scroll& + + " Test for scrolling to the top of the file with and a fold + 10 + normal ztL + exe "normal \\" + call assert_equal(1, line('w0')) + + " Test for CTRL-D on a folded line + %d + call setline(1, range(1, 100)) + 50,100fold + 75 + normal z- + exe "normal \" + call assert_equal(50, line('.')) + call assert_equal(100, line('w$')) + normal z. + let lnum = winline() + exe "normal \" + call assert_equal(lnum, winline()) + call assert_equal(50, line('.')) + normal zt + exe "normal \" + call assert_equal(50, line('w0')) + set foldenable& close! endfunc +" Test for the 'sidescroll' option +func Test_sidescroll_opt() + new + 20vnew + + " scroll by 2 characters horizontally + set sidescroll=2 nowrap + call setline(1, repeat('a', 40)) + normal g$l + call assert_equal(19, screenpos(0, 1, 21).col) + normal l + call assert_equal(20, screenpos(0, 1, 22).col) + normal g0h + call assert_equal(2, screenpos(0, 1, 2).col) + call assert_equal(20, screenpos(0, 1, 20).col) + + " when 'sidescroll' is 0, cursor positioned at the center + set sidescroll=0 + normal g$l + call assert_equal(11, screenpos(0, 1, 21).col) + normal g0h + call assert_equal(10, screenpos(0, 1, 10).col) + + %bw! + set wrap& sidescroll& +endfunc + " basic tests for foldopen/folddelete func Test_normal18_z_fold() CheckFeature folding @@ -2962,4 +3059,40 @@ func Test_normal_word_move() close! endfunc +" Test for 'scrolloff' with a long line that doesn't fit in the screen +func Test_normal_scroloff() + 10new + 80vnew + call setline(1, repeat('a', 1000)) + set scrolloff=10 + normal gg10gj + call assert_equal(8, winline()) + normal 10gj + call assert_equal(10, winline()) + normal 10gk + call assert_equal(3, winline()) + set scrolloff& + close! +endfunc + +" Test for vertical scrolling with CTRL-F and CTRL-B with a long line +func Test_normal_vert_scroll_longline() + 10new + 80vnew + call setline(1, range(1, 10)) + call append(5, repeat('a', 1000)) + exe "normal gg\" + call assert_equal(6, line('.')) + exe "normal \\" + call assert_equal(11, line('.')) + call assert_equal(1, winline()) + exe "normal \" + call assert_equal(10, line('.')) + call assert_equal(3, winline()) + exe "normal \\" + call assert_equal(5, line('.')) + call assert_equal(5, winline()) + close! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -513,6 +513,7 @@ func Test_set_one_column() endfunc func Test_set_values() + " opt_test.vim is generated from ../optiondefs.h using gen_opt_test.vim if filereadable('opt_test.vim') source opt_test.vim else @@ -921,4 +922,35 @@ func Test_opt_boolean() set number& endfunc +" Test for the 'window' option +func Test_window_opt() + " Needs only one open widow + %bw! + call setline(1, range(1, 8)) + set window=5 + exe "normal \" + call assert_equal(4, line('w0')) + exe "normal \" + call assert_equal(7, line('w0')) + exe "normal \" + call assert_equal(8, line('w0')) + exe "normal \" + call assert_equal(5, line('w0')) + exe "normal \" + call assert_equal(2, line('w0')) + exe "normal \" + call assert_equal(1, line('w0')) + set window=1 + exe "normal gg\" + call assert_equal(2, line('w0')) + exe "normal \" + call assert_equal(3, line('w0')) + exe "normal \" + call assert_equal(2, line('w0')) + exe "normal \" + call assert_equal(1, line('w0')) + enew! + set window& +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -488,10 +488,10 @@ func Xtest_browse(cchar) call assert_fails('Xprev', 'E553') call assert_fails('Xpfile', 'E553') Xnfile - call assert_equal('Xqftestfile2', bufname('%')) + call assert_equal('Xqftestfile2', @%) call assert_equal(10, line('.')) Xpfile - call assert_equal('Xqftestfile1', bufname('%')) + call assert_equal('Xqftestfile1', @%) call assert_equal(6, line('.')) 5Xcc call assert_equal(5, g:Xgetlist({'idx':0}).idx) @@ -507,7 +507,7 @@ func Xtest_browse(cchar) call assert_equal(6, g:Xgetlist({'idx':0}).idx) Xlast Xprev - call assert_equal('Xqftestfile2', bufname('%')) + call assert_equal('Xqftestfile2', @%) call assert_equal(11, line('.')) call assert_fails('Xnext', 'E553') call assert_fails('Xnfile', 'E553') @@ -520,14 +520,14 @@ func Xtest_browse(cchar) endif call assert_equal(6, g:Xgetlist({'idx':0}).idx) Xrewind - call assert_equal('Xqftestfile1', bufname('%')) + call assert_equal('Xqftestfile1', @%) call assert_equal(5, line('.')) 10Xnext - call assert_equal('Xqftestfile2', bufname('%')) + call assert_equal('Xqftestfile2', @%) call assert_equal(11, line('.')) 10Xprev - call assert_equal('Xqftestfile1', bufname('%')) + call assert_equal('Xqftestfile1', @%) call assert_equal(5, line('.')) " Jumping to an error from the error window using cc command @@ -538,7 +538,7 @@ func Xtest_browse(cchar) Xopen 10Xcc call assert_equal(11, line('.')) - call assert_equal('Xqftestfile2', bufname('%')) + call assert_equal('Xqftestfile2', @%) Xopen call cursor(2, 1) if a:cchar == 'c' @@ -547,14 +547,14 @@ func Xtest_browse(cchar) .ll endif call assert_equal(6, line('.')) - call assert_equal('Xqftestfile1', bufname('%')) + call assert_equal('Xqftestfile1', @%) " Jumping to an error from the error window (when only the error window is " present) Xopen | only Xlast 1 call assert_equal(5, line('.')) - call assert_equal('Xqftestfile1', bufname('%')) + call assert_equal('Xqftestfile1', @%) Xexpr "" call assert_fails('Xnext', 'E42:') @@ -1859,7 +1859,7 @@ func Test_switchbuf() copen | only cfirst call assert_equal(1, tabpagenr()) - call assert_equal('Xqftestfile1', bufname('')) + call assert_equal('Xqftestfile1', @%) " If opening a file changes 'switchbuf', then the new value should be " retained. @@ -2679,7 +2679,7 @@ func Test_cwindow_jump() wincmd b cfirst call assert_equal(2, winnr()) - call assert_equal('F1', bufname('')) + call assert_equal('F1', @%) enew | only exe 'sb' bnum exe 'botright sb' bnum @@ -2768,7 +2768,7 @@ func XvimgrepTests(cchar) edit +3 Xtestfile2 Xvimgrep +\cemacs+j Xtestfile1 let l = g:Xgetlist() - call assert_equal('Xtestfile2', bufname('')) + call assert_equal('Xtestfile2', @%) call assert_equal('Editor:Emacs EmAcS', l[0].text) " Test for unloading a buffer after vimgrep searched the buffer @@ -3394,7 +3394,7 @@ func Xqfjump_tests(cchar) Xopen | only 2Xnext call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) - call assert_equal('F3', bufname('%')) + call assert_equal('F3', @%) Xnext call assert_equal(7, col('.')) Xnext @@ -4043,20 +4043,20 @@ func Xjumpto_first_error_test(cchar) " Test for cexpr/lexpr enew Xexpr l - call assert_equal('Xtestfile1', bufname('')) + call assert_equal('Xtestfile1', @%) call assert_equal(2, line('.')) " Test for cfile/lfile enew call writefile(l, 'Xerr') Xfile Xerr - call assert_equal('Xtestfile1', bufname('')) + call assert_equal('Xtestfile1', @%) call assert_equal(2, line('.')) " Test for cbuffer/lbuffer edit Xerr Xbuffer - call assert_equal('Xtestfile1', bufname('')) + call assert_equal('Xtestfile1', @%) call assert_equal(2, line('.')) call delete('Xerr') @@ -4081,7 +4081,7 @@ func Xautocmd_changelist(cchar) autocmd QuickFixCmdPost * Xolder call writefile(['Xtestfile2:4:Line4'], 'Xerr') Xfile Xerr - call assert_equal('Xtestfile2', bufname('')) + call assert_equal('Xtestfile2', @%) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost @@ -4092,7 +4092,7 @@ func Xautocmd_changelist(cchar) call writefile(['Xtestfile2:4:Line4'], 'Xerr') edit Xerr Xbuffer - call assert_equal('Xtestfile2', bufname('')) + call assert_equal('Xtestfile2', @%) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost @@ -4101,7 +4101,7 @@ func Xautocmd_changelist(cchar) Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder Xexpr 'Xtestfile2:4:Line4' - call assert_equal('Xtestfile2', bufname('')) + call assert_equal('Xtestfile2', @%) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost @@ -4112,7 +4112,7 @@ func Xautocmd_changelist(cchar) Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder silent Xgrep Line5 Xtestfile2 - call assert_equal('Xtestfile2', bufname('')) + call assert_equal('Xtestfile2', @%) call assert_equal(5, line('.')) autocmd! QuickFixCmdPost endif @@ -4122,7 +4122,7 @@ func Xautocmd_changelist(cchar) Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder silent Xvimgrep Line5 Xtestfile2 - call assert_equal('Xtestfile2', bufname('')) + call assert_equal('Xtestfile2', @%) call assert_equal(5, line('.')) autocmd! QuickFixCmdPost @@ -4415,7 +4415,7 @@ func Test_winonly_autocmd() " positioned correctly. ll 3 call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) - call assert_equal('Xtest1', bufname('')) + call assert_equal('Xtest1', @%) call assert_equal(15, line('.')) " Cleanup autocmd! WinEnter @@ -4476,51 +4476,51 @@ func Xtest_below(cchar) Xexpr ["X1:5:3:L5", "X2:5:2:L5", "X2:10:3:L10", "X2:15:4:L15", "X3:3:5:L3"] edit +7 X2 Xabove - call assert_equal(['X2', 5], [bufname(''), line('.')]) + call assert_equal(['X2', 5], [@%, line('.')]) call assert_fails('Xabove', 'E553:') normal 7G Xbefore - call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) call assert_fails('Xbefore', 'E553:') normal 2j Xbelow - call assert_equal(['X2', 10], [bufname(''), line('.')]) + call assert_equal(['X2', 10], [@%, line('.')]) normal 7G Xafter - call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) " Last error in this file Xbelow 99 - call assert_equal(['X2', 15], [bufname(''), line('.')]) + call assert_equal(['X2', 15], [@%, line('.')]) call assert_fails('Xbelow', 'E553:') normal gg Xafter 99 - call assert_equal(['X2', 15, 4], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 15, 4], [@%, line('.'), col('.')]) call assert_fails('Xafter', 'E553:') " First error in this file Xabove 99 - call assert_equal(['X2', 5], [bufname(''), line('.')]) + call assert_equal(['X2', 5], [@%, line('.')]) call assert_fails('Xabove', 'E553:') normal G Xbefore 99 - call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) call assert_fails('Xbefore', 'E553:') normal gg Xbelow 2 - call assert_equal(['X2', 10], [bufname(''), line('.')]) + call assert_equal(['X2', 10], [@%, line('.')]) normal gg Xafter 2 - call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) normal G Xabove 2 - call assert_equal(['X2', 10], [bufname(''), line('.')]) + call assert_equal(['X2', 10], [@%, line('.')]) normal G Xbefore 2 - call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) edit X4 call assert_fails('Xabove', 'E42:') @@ -4544,45 +4544,45 @@ func Xtest_below(cchar) \ "X2:15:1:L15_1", "X2:15:2:L15_2", "X2:15:3:L15_3", "X3:3:L3"] edit +1 X2 Xbelow 2 - call assert_equal(['X2', 10, 1], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) normal 1G Xafter 2 - call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) normal gg Xbelow 99 - call assert_equal(['X2', 15, 1], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) normal gg Xafter 99 - call assert_equal(['X2', 15, 3], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 15, 3], [@%, line('.'), col('.')]) normal G Xabove 2 - call assert_equal(['X2', 10, 1], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) normal G Xbefore 2 - call assert_equal(['X2', 15, 2], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) normal G Xabove 99 - call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) normal G Xbefore 99 - call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) normal 10G Xabove - call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) normal 10G$ 2Xbefore - call assert_equal(['X2', 10, 2], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 10, 2], [@%, line('.'), col('.')]) normal 10G Xbelow - call assert_equal(['X2', 15, 1], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) normal 9G 5Xafter - call assert_equal(['X2', 15, 2], [bufname(''), line('.'), col('.')]) + call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) " Invalid range if a:cchar == 'c' diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1040, +/**/ 1039, /**/ 1038,