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("<cfile>"))
  
+   %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\<CR>"
--- 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\<CR>"
***************
*** 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\<C-E>"
+   call assert_equal(6, line('w0'))
+   exe "normal 2\<C-Y>"
+   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 \<C-Y>\<C-Y>"
+   call assert_equal(h + 1, line('w$'))
+ 
+   " Using <PageUp> and <PageDown> in an empty buffer should beep
+   %d
+   call assert_beeps('exe "normal \<PageUp>"')
+   call assert_beeps('exe "normal \<C-B>"')
+   call assert_beeps('exe "normal \<PageDown>"')
+   call assert_beeps('exe "normal \<C-F>"')
+ 
+   " Test for <C-U> and <C-D> with fold
+   %d
+   call setline(1, range(1, 100))
+   10,35fold
+   set scroll=10
+   exe "normal \<C-D>"
+   call assert_equal(36, line('.'))
+   exe "normal \<C-D>"
+   call assert_equal(46, line('.'))
+   exe "normal \<C-U>"
+   call assert_equal(36, line('.'))
+   exe "normal \<C-U>"
+   call assert_equal(10, line('.'))
+   exe "normal \<C-U>"
+   call assert_equal(1, line('.'))
+   set scroll&
+ 
+   " Test for scrolling to the top of the file with <C-U> and a fold
+   10
+   normal ztL
+   exe "normal \<C-U>\<C-U>"
+   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 \<C-D>"
+   call assert_equal(50, line('.'))
+   call assert_equal(100, line('w$'))
+   normal z.
+   let lnum = winline()
+   exe "normal \<C-D>"
+   call assert_equal(lnum, winline())
+   call assert_equal(50, line('.'))
+   normal zt
+   exe "normal \<C-D>"
+   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\<C-F>"
+   call assert_equal(6, line('.'))
+   exe "normal \<C-F>\<C-F>"
+   call assert_equal(11, line('.'))
+   call assert_equal(1, winline())
+   exe "normal \<C-B>"
+   call assert_equal(10, line('.'))
+   call assert_equal(3, winline())
+   exe "normal \<C-B>\<C-B>"
+   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 \<C-F>"
+   call assert_equal(4, line('w0'))
+   exe "normal \<C-F>"
+   call assert_equal(7, line('w0'))
+   exe "normal \<C-F>"
+   call assert_equal(8, line('w0'))
+   exe "normal \<C-B>"
+   call assert_equal(5, line('w0'))
+   exe "normal \<C-B>"
+   call assert_equal(2, line('w0'))
+   exe "normal \<C-B>"
+   call assert_equal(1, line('w0'))
+   set window=1
+   exe "normal gg\<C-F>"
+   call assert_equal(2, line('w0'))
+   exe "normal \<C-F>"
+   call assert_equal(3, line('w0'))
+   exe "normal \<C-B>"
+   call assert_equal(2, line('w0'))
+   exe "normal \<C-B>"
+   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 -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202006221935.05MJZJvD1488823%40masaka.moolenaar.net.

Raspunde prin e-mail lui