summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-22 21:34:30 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-22 21:34:30 +0200
commitbdd2c290d3cda69e0046c42f0c651f60bc510a16 (patch)
treeb95a39fc279dd0629e7d48a49174f83e9db35639
parent25fd2672875351ff56a925284a03a900081f70c0 (diff)
patch 8.2.1040: not enough testing for movement commandsv8.2.1040
Problem: Not enough testing for movement commands. Solution: Add more tests. (Yegappan Lakshmanan, closes #6313)
-rw-r--r--src/testdir/test_cursor_func.vim1
-rw-r--r--src/testdir/test_functions.vim5
-rw-r--r--src/testdir/test_gf.vim30
-rw-r--r--src/testdir/test_normal.vim137
-rw-r--r--src/testdir/test_options.vim32
-rw-r--r--src/testdir/test_quickfix.vim92
-rw-r--r--src/version.c2
7 files changed, 251 insertions, 48 deletions
diff --git a/src/testdir/test_cursor_func.vim b/src/testdir/test_cursor_func.vim
index 0ddfcdadfd..bfb908d38c 100644
--- 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
index 6e54095516..1c463f0722 100644
--- 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
index 736a315790..3fa85113f1 100644
--- 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("<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,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
index 1760da4a44..2a06bb5b01 100644
--- 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\<CR>"
@@ -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\<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,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\<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
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index d18b15fa15..a57f3c74ab 100644
--- 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 \<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
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index d3b9127fa3..669060a518 100644
--- 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
index d6ed2cd972..de54b218d3 100644
--- 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,