To: vim_dev@googlegroups.com Subject: Patch 8.2.1040 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1040 Problem: Not enough testing for movement commands. Solution: Add more tests. (Yegappan Lakshmanan, closes #6313) Files: src/testdir/test_cursor_func.vim, src/testdir/test_functions.vim, src/testdir/test_gf.vim, src/testdir/test_normal.vim, src/testdir/test_options.vim, src/testdir/test_quickfix.vim *** ../vim-8.2.1039/src/testdir/test_cursor_func.vim 2020-04-25 15:24:40.551354115 +0200 --- src/testdir/test_cursor_func.vim 2020-06-22 21:31:44.936162704 +0200 *************** *** 99,104 **** --- 99,105 ---- \ 'curscol': wincol + 9, \ 'endcol': wincol + 9}, screenpos(winid, 2, 22)) close + call assert_equal({}, screenpos(999, 1, 1)) bwipe! endfunc *** ../vim-8.2.1039/src/testdir/test_functions.vim 2020-06-17 20:30:41.118168604 +0200 --- src/testdir/test_functions.vim 2020-06-22 21:31:44.936162704 +0200 *************** *** 475,480 **** --- 475,485 ---- 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:') *** ../vim-8.2.1039/src/testdir/test_gf.vim 2020-04-21 22:01:11.089499502 +0200 --- src/testdir/test_gf.vim 2020-06-22 21:31:44.936162704 +0200 *************** *** 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,43 **** --- 39,51 ---- 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,123 **** --- 126,136 ---- 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,149 **** --- 159,179 ---- 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 *** ../vim-8.2.1039/src/testdir/test_normal.vim 2020-06-14 13:50:51.747717715 +0200 --- src/testdir/test_normal.vim 2020-06-22 21:31:44.936162704 +0200 *************** *** 754,761 **** bw! endfunc ! " Test for H, M and L commands with folds ! func Test_scroll_cmds() 15new call setline(1, range(1, 100)) exe "normal! 30ggz\" --- 754,762 ---- bw! endfunc ! " 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,769 **** --- 765,772 ---- 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,780 **** --- 774,877 ---- 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,2965 **** --- 3059,3098 ---- 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 *** ../vim-8.2.1039/src/testdir/test_options.vim 2020-05-31 16:41:04.646603340 +0200 --- src/testdir/test_options.vim 2020-06-22 21:31:44.936162704 +0200 *************** *** 513,518 **** --- 513,519 ---- 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,924 **** --- 922,956 ---- 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 *** ../vim-8.2.1039/src/testdir/test_quickfix.vim 2020-06-11 19:35:48.745325203 +0200 --- src/testdir/test_quickfix.vim 2020-06-22 21:31:44.936162704 +0200 *************** *** 488,497 **** call assert_fails('Xprev', 'E553') call assert_fails('Xpfile', 'E553') Xnfile ! call assert_equal('Xqftestfile2', bufname('%')) call assert_equal(10, line('.')) Xpfile ! call assert_equal('Xqftestfile1', bufname('%')) call assert_equal(6, line('.')) 5Xcc call assert_equal(5, g:Xgetlist({'idx':0}).idx) --- 488,497 ---- call assert_fails('Xprev', 'E553') call assert_fails('Xpfile', 'E553') Xnfile ! call assert_equal('Xqftestfile2', @%) call assert_equal(10, line('.')) Xpfile ! call assert_equal('Xqftestfile1', @%) call assert_equal(6, line('.')) 5Xcc call assert_equal(5, g:Xgetlist({'idx':0}).idx) *************** *** 507,513 **** call assert_equal(6, g:Xgetlist({'idx':0}).idx) Xlast Xprev ! call assert_equal('Xqftestfile2', bufname('%')) call assert_equal(11, line('.')) call assert_fails('Xnext', 'E553') call assert_fails('Xnfile', 'E553') --- 507,513 ---- call assert_equal(6, g:Xgetlist({'idx':0}).idx) Xlast Xprev ! call assert_equal('Xqftestfile2', @%) call assert_equal(11, line('.')) call assert_fails('Xnext', 'E553') call assert_fails('Xnfile', 'E553') *************** *** 520,533 **** endif call assert_equal(6, g:Xgetlist({'idx':0}).idx) Xrewind ! call assert_equal('Xqftestfile1', bufname('%')) call assert_equal(5, line('.')) 10Xnext ! call assert_equal('Xqftestfile2', bufname('%')) call assert_equal(11, line('.')) 10Xprev ! call assert_equal('Xqftestfile1', bufname('%')) call assert_equal(5, line('.')) " Jumping to an error from the error window using cc command --- 520,533 ---- endif call assert_equal(6, g:Xgetlist({'idx':0}).idx) Xrewind ! call assert_equal('Xqftestfile1', @%) call assert_equal(5, line('.')) 10Xnext ! call assert_equal('Xqftestfile2', @%) call assert_equal(11, line('.')) 10Xprev ! call assert_equal('Xqftestfile1', @%) call assert_equal(5, line('.')) " Jumping to an error from the error window using cc command *************** *** 538,544 **** Xopen 10Xcc call assert_equal(11, line('.')) ! call assert_equal('Xqftestfile2', bufname('%')) Xopen call cursor(2, 1) if a:cchar == 'c' --- 538,544 ---- Xopen 10Xcc call assert_equal(11, line('.')) ! call assert_equal('Xqftestfile2', @%) Xopen call cursor(2, 1) if a:cchar == 'c' *************** *** 547,560 **** .ll endif call assert_equal(6, line('.')) ! call assert_equal('Xqftestfile1', bufname('%')) " 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('%')) Xexpr "" call assert_fails('Xnext', 'E42:') --- 547,560 ---- .ll endif call assert_equal(6, line('.')) ! 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', @%) Xexpr "" call assert_fails('Xnext', 'E42:') *************** *** 1859,1865 **** copen | only cfirst call assert_equal(1, tabpagenr()) ! call assert_equal('Xqftestfile1', bufname('')) " If opening a file changes 'switchbuf', then the new value should be " retained. --- 1859,1865 ---- copen | only cfirst call assert_equal(1, tabpagenr()) ! call assert_equal('Xqftestfile1', @%) " If opening a file changes 'switchbuf', then the new value should be " retained. *************** *** 2679,2685 **** wincmd b cfirst call assert_equal(2, winnr()) ! call assert_equal('F1', bufname('')) enew | only exe 'sb' bnum exe 'botright sb' bnum --- 2679,2685 ---- wincmd b cfirst call assert_equal(2, winnr()) ! call assert_equal('F1', @%) enew | only exe 'sb' bnum exe 'botright sb' bnum *************** *** 2768,2774 **** edit +3 Xtestfile2 Xvimgrep +\cemacs+j Xtestfile1 let l = g:Xgetlist() ! call assert_equal('Xtestfile2', bufname('')) call assert_equal('Editor:Emacs EmAcS', l[0].text) " Test for unloading a buffer after vimgrep searched the buffer --- 2768,2774 ---- edit +3 Xtestfile2 Xvimgrep +\cemacs+j Xtestfile1 let l = g:Xgetlist() ! call assert_equal('Xtestfile2', @%) call assert_equal('Editor:Emacs EmAcS', l[0].text) " Test for unloading a buffer after vimgrep searched the buffer *************** *** 3394,3400 **** Xopen | only 2Xnext call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) ! call assert_equal('F3', bufname('%')) Xnext call assert_equal(7, col('.')) Xnext --- 3394,3400 ---- Xopen | only 2Xnext call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) ! call assert_equal('F3', @%) Xnext call assert_equal(7, col('.')) Xnext *************** *** 4043,4062 **** " Test for cexpr/lexpr enew Xexpr l ! call assert_equal('Xtestfile1', bufname('')) call assert_equal(2, line('.')) " Test for cfile/lfile enew call writefile(l, 'Xerr') Xfile Xerr ! call assert_equal('Xtestfile1', bufname('')) call assert_equal(2, line('.')) " Test for cbuffer/lbuffer edit Xerr Xbuffer ! call assert_equal('Xtestfile1', bufname('')) call assert_equal(2, line('.')) call delete('Xerr') --- 4043,4062 ---- " Test for cexpr/lexpr enew Xexpr l ! call assert_equal('Xtestfile1', @%) call assert_equal(2, line('.')) " Test for cfile/lfile enew call writefile(l, 'Xerr') Xfile Xerr ! call assert_equal('Xtestfile1', @%) call assert_equal(2, line('.')) " Test for cbuffer/lbuffer edit Xerr Xbuffer ! call assert_equal('Xtestfile1', @%) call assert_equal(2, line('.')) call delete('Xerr') *************** *** 4081,4087 **** autocmd QuickFixCmdPost * Xolder call writefile(['Xtestfile2:4:Line4'], 'Xerr') Xfile Xerr ! call assert_equal('Xtestfile2', bufname('')) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost --- 4081,4087 ---- autocmd QuickFixCmdPost * Xolder call writefile(['Xtestfile2:4:Line4'], 'Xerr') Xfile Xerr ! call assert_equal('Xtestfile2', @%) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost *************** *** 4092,4098 **** call writefile(['Xtestfile2:4:Line4'], 'Xerr') edit Xerr Xbuffer ! call assert_equal('Xtestfile2', bufname('')) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost --- 4092,4098 ---- call writefile(['Xtestfile2:4:Line4'], 'Xerr') edit Xerr Xbuffer ! call assert_equal('Xtestfile2', @%) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost *************** *** 4101,4107 **** Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder Xexpr 'Xtestfile2:4:Line4' ! call assert_equal('Xtestfile2', bufname('')) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost --- 4101,4107 ---- Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder Xexpr 'Xtestfile2:4:Line4' ! call assert_equal('Xtestfile2', @%) call assert_equal(4, line('.')) autocmd! QuickFixCmdPost *************** *** 4112,4118 **** Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder silent Xgrep Line5 Xtestfile2 ! call assert_equal('Xtestfile2', bufname('')) call assert_equal(5, line('.')) autocmd! QuickFixCmdPost endif --- 4112,4118 ---- Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder silent Xgrep Line5 Xtestfile2 ! call assert_equal('Xtestfile2', @%) call assert_equal(5, line('.')) autocmd! QuickFixCmdPost endif *************** *** 4122,4128 **** Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder silent Xvimgrep Line5 Xtestfile2 ! call assert_equal('Xtestfile2', bufname('')) call assert_equal(5, line('.')) autocmd! QuickFixCmdPost --- 4122,4128 ---- Xexpr 'Xtestfile1:2:Line2' autocmd QuickFixCmdPost * Xolder silent Xvimgrep Line5 Xtestfile2 ! call assert_equal('Xtestfile2', @%) call assert_equal(5, line('.')) autocmd! QuickFixCmdPost *************** *** 4415,4421 **** " positioned correctly. ll 3 call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) ! call assert_equal('Xtest1', bufname('')) call assert_equal(15, line('.')) " Cleanup autocmd! WinEnter --- 4415,4421 ---- " positioned correctly. ll 3 call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) ! call assert_equal('Xtest1', @%) call assert_equal(15, line('.')) " Cleanup autocmd! WinEnter *************** *** 4476,4526 **** 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_fails('Xabove', 'E553:') normal 7G Xbefore ! call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')]) call assert_fails('Xbefore', 'E553:') normal 2j Xbelow ! call assert_equal(['X2', 10], [bufname(''), line('.')]) normal 7G Xafter ! call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')]) " Last error in this file Xbelow 99 ! call assert_equal(['X2', 15], [bufname(''), line('.')]) call assert_fails('Xbelow', 'E553:') normal gg Xafter 99 ! call assert_equal(['X2', 15, 4], [bufname(''), line('.'), col('.')]) call assert_fails('Xafter', 'E553:') " First error in this file Xabove 99 ! call assert_equal(['X2', 5], [bufname(''), line('.')]) call assert_fails('Xabove', 'E553:') normal G Xbefore 99 ! call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')]) call assert_fails('Xbefore', 'E553:') normal gg Xbelow 2 ! call assert_equal(['X2', 10], [bufname(''), line('.')]) normal gg Xafter 2 ! call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')]) normal G Xabove 2 ! call assert_equal(['X2', 10], [bufname(''), line('.')]) normal G Xbefore 2 ! call assert_equal(['X2', 10, 3], [bufname(''), line('.'), col('.')]) edit X4 call assert_fails('Xabove', 'E42:') --- 4476,4526 ---- 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], [@%, line('.')]) call assert_fails('Xabove', 'E553:') normal 7G Xbefore ! call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) call assert_fails('Xbefore', 'E553:') normal 2j Xbelow ! call assert_equal(['X2', 10], [@%, line('.')]) normal 7G Xafter ! call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) " Last error in this file Xbelow 99 ! call assert_equal(['X2', 15], [@%, line('.')]) call assert_fails('Xbelow', 'E553:') normal gg Xafter 99 ! 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], [@%, line('.')]) call assert_fails('Xabove', 'E553:') normal G Xbefore 99 ! call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) call assert_fails('Xbefore', 'E553:') normal gg Xbelow 2 ! call assert_equal(['X2', 10], [@%, line('.')]) normal gg Xafter 2 ! call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) normal G Xabove 2 ! call assert_equal(['X2', 10], [@%, line('.')]) normal G Xbefore 2 ! call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) edit X4 call assert_fails('Xabove', 'E42:') *************** *** 4544,4588 **** \ "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('.')]) normal 1G Xafter 2 ! call assert_equal(['X2', 5, 2], [bufname(''), line('.'), col('.')]) normal gg Xbelow 99 ! call assert_equal(['X2', 15, 1], [bufname(''), line('.'), col('.')]) normal gg Xafter 99 ! call assert_equal(['X2', 15, 3], [bufname(''), line('.'), col('.')]) normal G Xabove 2 ! call assert_equal(['X2', 10, 1], [bufname(''), line('.'), col('.')]) normal G Xbefore 2 ! call assert_equal(['X2', 15, 2], [bufname(''), line('.'), col('.')]) normal G Xabove 99 ! call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')]) normal G Xbefore 99 ! call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')]) normal 10G Xabove ! call assert_equal(['X2', 5, 1], [bufname(''), line('.'), col('.')]) normal 10G$ 2Xbefore ! call assert_equal(['X2', 10, 2], [bufname(''), line('.'), col('.')]) normal 10G Xbelow ! call assert_equal(['X2', 15, 1], [bufname(''), line('.'), col('.')]) normal 9G 5Xafter ! call assert_equal(['X2', 15, 2], [bufname(''), line('.'), col('.')]) " Invalid range if a:cchar == 'c' --- 4544,4588 ---- \ "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], [@%, line('.'), col('.')]) normal 1G Xafter 2 ! call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) normal gg Xbelow 99 ! call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) normal gg Xafter 99 ! call assert_equal(['X2', 15, 3], [@%, line('.'), col('.')]) normal G Xabove 2 ! call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) normal G Xbefore 2 ! call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) normal G Xabove 99 ! call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) normal G Xbefore 99 ! call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) normal 10G Xabove ! call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) normal 10G$ 2Xbefore ! call assert_equal(['X2', 10, 2], [@%, line('.'), col('.')]) normal 10G Xbelow ! call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) normal 9G 5Xafter ! call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) " Invalid range if a:cchar == 'c' *** ../vim-8.2.1039/src/version.c 2020-06-22 20:30:24.202479096 +0200 --- src/version.c 2020-06-22 21:33:03.663871990 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1040, /**/ -- BEDEVERE: Look! It's the old man from scene 24 - what's he Doing here? ARTHUR: He is the keeper of the Bridge. He asks each traveler five questions ... GALAHAD: Three questions. "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///