mirror of
https://github.com/neovim/neovim.git
synced 2025-12-16 11:25:33 +00:00
Merge pull request #19440 from zeertzjq/vim-8.2.1786
vim-patch:8.2.{1786,1799}: Normal mode commands not fully tested
This commit is contained in:
@@ -6994,6 +6994,7 @@ static void ex_redraw(exarg_T *eap)
|
|||||||
update_topline(curwin);
|
update_topline(curwin);
|
||||||
if (eap->forceit) {
|
if (eap->forceit) {
|
||||||
redraw_all_later(NOT_VALID);
|
redraw_all_later(NOT_VALID);
|
||||||
|
redraw_cmdline = true;
|
||||||
}
|
}
|
||||||
update_screen(eap->forceit ? NOT_VALID
|
update_screen(eap->forceit ? NOT_VALID
|
||||||
: VIsual_active ? INVERTED : 0);
|
: VIsual_active ? INVERTED : 0);
|
||||||
|
|||||||
@@ -191,6 +191,22 @@ func Test_gf_error()
|
|||||||
au! InsertCharPre
|
au! InsertCharPre
|
||||||
|
|
||||||
bwipe!
|
bwipe!
|
||||||
|
|
||||||
|
" gf is not allowed when buffer is locked
|
||||||
|
new
|
||||||
|
augroup Test_gf
|
||||||
|
au!
|
||||||
|
au OptionSet diff norm! gf
|
||||||
|
augroup END
|
||||||
|
call setline(1, ['Xfile1', 'line2', 'line3', 'line4'])
|
||||||
|
" Nvim does not support test_override()
|
||||||
|
" call test_override('starting', 1)
|
||||||
|
" call assert_fails('diffthis', 'E788:')
|
||||||
|
" call test_override('starting', 0)
|
||||||
|
augroup Test_gf
|
||||||
|
au!
|
||||||
|
augroup END
|
||||||
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" If a file is not found by 'gf', then 'includeexpr' should be used to locate
|
" If a file is not found by 'gf', then 'includeexpr' should be used to locate
|
||||||
|
|||||||
@@ -122,6 +122,24 @@ func Test_gd()
|
|||||||
call XTest_goto_decl('gd', lines, 3, 14)
|
call XTest_goto_decl('gd', lines, 3, 14)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Using gd to jump to a declaration in a fold
|
||||||
|
func Test_gd_with_fold()
|
||||||
|
new
|
||||||
|
let lines =<< trim END
|
||||||
|
#define ONE 1
|
||||||
|
#define TWO 2
|
||||||
|
#define THREE 3
|
||||||
|
|
||||||
|
TWO
|
||||||
|
END
|
||||||
|
call setline(1, lines)
|
||||||
|
1,3fold
|
||||||
|
call feedkeys('Ggd', 'xt')
|
||||||
|
call assert_equal(2, line('.'))
|
||||||
|
call assert_equal(-1, foldclosedend(2))
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_gd_not_local()
|
func Test_gd_not_local()
|
||||||
let lines =<< trim [CODE]
|
let lines =<< trim [CODE]
|
||||||
int func1(void)
|
int func1(void)
|
||||||
|
|||||||
@@ -492,6 +492,18 @@ func Test_normal11_showcmd()
|
|||||||
call assert_equal(3, line('$'))
|
call assert_equal(3, line('$'))
|
||||||
exe "norm! 0d3\<del>2l"
|
exe "norm! 0d3\<del>2l"
|
||||||
call assert_equal('obar2foobar3', getline('.'))
|
call assert_equal('obar2foobar3', getline('.'))
|
||||||
|
" test for the visual block size displayed in the status line
|
||||||
|
call setline(1, ['aaaaa', 'bbbbb', 'ccccc'])
|
||||||
|
call feedkeys("ggl\<C-V>lljj", 'xt')
|
||||||
|
redraw!
|
||||||
|
call assert_match('3x3$', Screenline(&lines))
|
||||||
|
call feedkeys("\<C-V>", 'xt')
|
||||||
|
" test for visually selecting a multi-byte character
|
||||||
|
call setline(1, ["\U2206"])
|
||||||
|
call feedkeys("ggv", 'xt')
|
||||||
|
redraw!
|
||||||
|
call assert_match('1-3$', Screenline(&lines))
|
||||||
|
call feedkeys("v", 'xt')
|
||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@@ -655,6 +667,19 @@ func Test_normal15_z_scroll_vert()
|
|||||||
call assert_equal(21, winsaveview()['topline'])
|
call assert_equal(21, winsaveview()['topline'])
|
||||||
call assert_equal([0, 21, 2, 0, 9], getcurpos())
|
call assert_equal([0, 21, 2, 0, 9], getcurpos())
|
||||||
|
|
||||||
|
" Test for z+ with [count] greater than buffer size
|
||||||
|
1
|
||||||
|
norm! 1000z+
|
||||||
|
call assert_equal(' 100', getline('.'))
|
||||||
|
call assert_equal(100, winsaveview()['topline'])
|
||||||
|
call assert_equal([0, 100, 2, 0, 9], getcurpos())
|
||||||
|
|
||||||
|
" Test for z+ from the last buffer line
|
||||||
|
norm! Gz.z+
|
||||||
|
call assert_equal(' 100', getline('.'))
|
||||||
|
call assert_equal(100, winsaveview()['topline'])
|
||||||
|
call assert_equal([0, 100, 2, 0, 9], getcurpos())
|
||||||
|
|
||||||
" Test for z^
|
" Test for z^
|
||||||
norm! 22z+0
|
norm! 22z+0
|
||||||
norm! z^
|
norm! z^
|
||||||
@@ -662,6 +687,12 @@ func Test_normal15_z_scroll_vert()
|
|||||||
call assert_equal(12, winsaveview()['topline'])
|
call assert_equal(12, winsaveview()['topline'])
|
||||||
call assert_equal([0, 21, 2, 0, 9], getcurpos())
|
call assert_equal([0, 21, 2, 0, 9], getcurpos())
|
||||||
|
|
||||||
|
" Test for z^ from first buffer line
|
||||||
|
norm! ggz^
|
||||||
|
call assert_equal('1', getline('.'))
|
||||||
|
call assert_equal(1, winsaveview()['topline'])
|
||||||
|
call assert_equal([0, 1, 1, 0, 1], getcurpos())
|
||||||
|
|
||||||
" Test for [count]z^
|
" Test for [count]z^
|
||||||
1
|
1
|
||||||
norm! 30z^
|
norm! 30z^
|
||||||
@@ -741,6 +772,19 @@ func Test_normal16_z_scroll_hor()
|
|||||||
norm! yl
|
norm! yl
|
||||||
call assert_equal('z', @0)
|
call assert_equal('z', @0)
|
||||||
|
|
||||||
|
" Test for zs and ze with folds
|
||||||
|
%fold
|
||||||
|
norm! $zs
|
||||||
|
call assert_equal(26, col('.'))
|
||||||
|
call assert_equal(0, winsaveview()['leftcol'])
|
||||||
|
norm! yl
|
||||||
|
call assert_equal('z', @0)
|
||||||
|
norm! ze
|
||||||
|
call assert_equal(26, col('.'))
|
||||||
|
call assert_equal(0, winsaveview()['leftcol'])
|
||||||
|
norm! yl
|
||||||
|
call assert_equal('z', @0)
|
||||||
|
|
||||||
" cleanup
|
" cleanup
|
||||||
set wrap listchars=eol:$
|
set wrap listchars=eol:$
|
||||||
bw!
|
bw!
|
||||||
@@ -834,6 +878,19 @@ func Test_vert_scroll_cmds()
|
|||||||
normal! 4H
|
normal! 4H
|
||||||
call assert_equal(33, line('.'))
|
call assert_equal(33, line('.'))
|
||||||
|
|
||||||
|
" Test for using a large count value
|
||||||
|
%d
|
||||||
|
call setline(1, range(1, 4))
|
||||||
|
norm! 6H
|
||||||
|
call assert_equal(4, line('.'))
|
||||||
|
|
||||||
|
" Test for 'M' with folded lines
|
||||||
|
%d
|
||||||
|
call setline(1, range(1, 20))
|
||||||
|
1,5fold
|
||||||
|
norm! LM
|
||||||
|
call assert_equal(12, line('.'))
|
||||||
|
|
||||||
" Test for the CTRL-E and CTRL-Y commands with folds
|
" Test for the CTRL-E and CTRL-Y commands with folds
|
||||||
%d
|
%d
|
||||||
call setline(1, range(1, 10))
|
call setline(1, range(1, 10))
|
||||||
@@ -852,6 +909,18 @@ func Test_vert_scroll_cmds()
|
|||||||
exe "normal \<C-Y>\<C-Y>"
|
exe "normal \<C-Y>\<C-Y>"
|
||||||
call assert_equal(h + 1, line('w$'))
|
call assert_equal(h + 1, line('w$'))
|
||||||
|
|
||||||
|
" Test for CTRL-Y from the first line and CTRL-E from the last line
|
||||||
|
%d
|
||||||
|
set scrolloff=2
|
||||||
|
call setline(1, range(1, 4))
|
||||||
|
exe "normal gg\<C-Y>"
|
||||||
|
call assert_equal(1, line('w0'))
|
||||||
|
call assert_equal(1, line('.'))
|
||||||
|
exe "normal G4\<C-E>\<C-E>"
|
||||||
|
call assert_equal(4, line('w$'))
|
||||||
|
call assert_equal(4, line('.'))
|
||||||
|
set scrolloff&
|
||||||
|
|
||||||
" Using <PageUp> and <PageDown> in an empty buffer should beep
|
" Using <PageUp> and <PageDown> in an empty buffer should beep
|
||||||
%d
|
%d
|
||||||
call assert_beeps('exe "normal \<PageUp>"')
|
call assert_beeps('exe "normal \<PageUp>"')
|
||||||
@@ -900,6 +969,18 @@ func Test_vert_scroll_cmds()
|
|||||||
exe "normal \<C-D>"
|
exe "normal \<C-D>"
|
||||||
call assert_equal(50, line('w0'))
|
call assert_equal(50, line('w0'))
|
||||||
|
|
||||||
|
" Test for <S-CR>. Page down.
|
||||||
|
%d
|
||||||
|
call setline(1, range(1, 100))
|
||||||
|
call feedkeys("\<S-CR>", 'xt')
|
||||||
|
call assert_equal(14, line('w0'))
|
||||||
|
call assert_equal(28, line('w$'))
|
||||||
|
|
||||||
|
" Test for <S-->. Page up.
|
||||||
|
call feedkeys("\<S-->", 'xt')
|
||||||
|
call assert_equal(1, line('w0'))
|
||||||
|
call assert_equal(15, line('w$'))
|
||||||
|
|
||||||
set foldenable&
|
set foldenable&
|
||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
@@ -1214,6 +1295,13 @@ func Test_normal18_z_fold()
|
|||||||
norm! j
|
norm! j
|
||||||
call assert_equal('55', getline('.'))
|
call assert_equal('55', getline('.'))
|
||||||
|
|
||||||
|
" Test for zm with a count
|
||||||
|
50
|
||||||
|
set foldlevel=2
|
||||||
|
norm! 3zm
|
||||||
|
call assert_equal(0, &foldlevel)
|
||||||
|
call assert_equal(49, foldclosed(line('.')))
|
||||||
|
|
||||||
" Test for zM
|
" Test for zM
|
||||||
48
|
48
|
||||||
set nofoldenable foldlevel=99
|
set nofoldenable foldlevel=99
|
||||||
@@ -1421,6 +1509,15 @@ func Test_normal23_K()
|
|||||||
set iskeyword-=%
|
set iskeyword-=%
|
||||||
set iskeyword-=\|
|
set iskeyword-=\|
|
||||||
|
|
||||||
|
" Currently doesn't work in Nvim, see #19436
|
||||||
|
" Test for specifying a count to K
|
||||||
|
" 1
|
||||||
|
" com! -nargs=* Kprog let g:Kprog_Args = <q-args>
|
||||||
|
" set keywordprg=:Kprog
|
||||||
|
" norm! 3K
|
||||||
|
" call assert_equal('3 version8', g:Kprog_Args)
|
||||||
|
" delcom Kprog
|
||||||
|
|
||||||
" Only expect "man" to work on Unix
|
" Only expect "man" to work on Unix
|
||||||
if !has("unix") || has('nvim') " Nvim K uses :terminal. #15398
|
if !has("unix") || has('nvim') " Nvim K uses :terminal. #15398
|
||||||
let &keywordprg = k
|
let &keywordprg = k
|
||||||
@@ -1868,7 +1965,31 @@ func Test_normal29_brace()
|
|||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test for ~ command
|
" Test for section movements
|
||||||
|
func Test_normal_section()
|
||||||
|
new
|
||||||
|
let lines =<< trim [END]
|
||||||
|
int foo()
|
||||||
|
{
|
||||||
|
if (1)
|
||||||
|
{
|
||||||
|
a = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[END]
|
||||||
|
call setline(1, lines)
|
||||||
|
|
||||||
|
" jumping to a folded line using [[ should open the fold
|
||||||
|
2,3fold
|
||||||
|
call cursor(5, 1)
|
||||||
|
call feedkeys("[[", 'xt')
|
||||||
|
call assert_equal(2, line('.'))
|
||||||
|
call assert_equal(-1, foldclosedend(line('.')))
|
||||||
|
|
||||||
|
close!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for changing case using u, U, gu, gU and ~ (tilde) commands
|
||||||
func Test_normal30_changecase()
|
func Test_normal30_changecase()
|
||||||
new
|
new
|
||||||
call append(0, 'This is a simple test: äüöß')
|
call append(0, 'This is a simple test: äüöß')
|
||||||
@@ -1888,6 +2009,9 @@ func Test_normal30_changecase()
|
|||||||
call assert_equal('this is a SIMPLE TEST: ÄÜÖSS', getline('.'))
|
call assert_equal('this is a SIMPLE TEST: ÄÜÖSS', getline('.'))
|
||||||
norm! V~
|
norm! V~
|
||||||
call assert_equal('THIS IS A simple test: äüöss', getline('.'))
|
call assert_equal('THIS IS A simple test: äüöss', getline('.'))
|
||||||
|
call assert_beeps('norm! c~')
|
||||||
|
%d
|
||||||
|
call assert_beeps('norm! ~')
|
||||||
|
|
||||||
" Test for changing case across lines using 'whichwrap'
|
" Test for changing case across lines using 'whichwrap'
|
||||||
call setline(1, ['aaaaaa', 'aaaaaa'])
|
call setline(1, ['aaaaaa', 'aaaaaa'])
|
||||||
@@ -2912,25 +3036,26 @@ func Test_java_motion()
|
|||||||
call assert_beeps('normal! ]m')
|
call assert_beeps('normal! ]m')
|
||||||
call assert_beeps('normal! [M')
|
call assert_beeps('normal! [M')
|
||||||
call assert_beeps('normal! ]M')
|
call assert_beeps('normal! ]M')
|
||||||
a
|
let lines =<< trim [CODE]
|
||||||
Piece of Java
|
Piece of Java
|
||||||
{
|
{
|
||||||
tt m1 {
|
tt m1 {
|
||||||
t1;
|
t1;
|
||||||
} e1
|
} e1
|
||||||
|
|
||||||
tt m2 {
|
tt m2 {
|
||||||
t2;
|
t2;
|
||||||
} e2
|
} e2
|
||||||
|
|
||||||
tt m3 {
|
tt m3 {
|
||||||
if (x)
|
if (x)
|
||||||
{
|
{
|
||||||
t3;
|
t3;
|
||||||
}
|
}
|
||||||
} e3
|
} e3
|
||||||
}
|
}
|
||||||
.
|
[CODE]
|
||||||
|
call setline(1, lines)
|
||||||
|
|
||||||
normal gg
|
normal gg
|
||||||
|
|
||||||
@@ -2983,14 +3108,21 @@ Piece of Java
|
|||||||
call assert_equal("{LF", getline('.'))
|
call assert_equal("{LF", getline('.'))
|
||||||
call assert_equal([2, 2, 2], [line('.'), col('.'), virtcol('.')])
|
call assert_equal([2, 2, 2], [line('.'), col('.'), virtcol('.')])
|
||||||
|
|
||||||
|
call cursor(2, 1)
|
||||||
|
call assert_beeps('norm! 5]m')
|
||||||
|
|
||||||
|
" jumping to a method in a fold should open the fold
|
||||||
|
6,10fold
|
||||||
|
call feedkeys("gg3]m", 'xt')
|
||||||
|
call assert_equal([7, 8, 15], [line('.'), col('.'), virtcol('.')])
|
||||||
|
call assert_equal(-1, foldclosedend(7))
|
||||||
|
|
||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Tests for g cmds
|
||||||
func Test_normal_gdollar_cmd()
|
func Test_normal_gdollar_cmd()
|
||||||
if !has("jumplist")
|
CheckFeature jumplist
|
||||||
return
|
|
||||||
endif
|
|
||||||
" Tests for g cmds
|
|
||||||
call Setup_NewWindow()
|
call Setup_NewWindow()
|
||||||
" Make long lines that will wrap
|
" Make long lines that will wrap
|
||||||
%s/$/\=repeat(' foobar', 10)/
|
%s/$/\=repeat(' foobar', 10)/
|
||||||
@@ -3198,6 +3330,27 @@ func Test_normal_colon_op()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for deleting or changing characters across lines with 'whichwrap'
|
||||||
|
" containing 's'. Should count <EOL> as one character.
|
||||||
|
func Test_normal_op_across_lines()
|
||||||
|
new
|
||||||
|
set whichwrap&
|
||||||
|
call setline(1, ['one two', 'three four'])
|
||||||
|
exe "norm! $3d\<Space>"
|
||||||
|
call assert_equal(['one twhree four'], getline(1, '$'))
|
||||||
|
|
||||||
|
call setline(1, ['one two', 'three four'])
|
||||||
|
exe "norm! $3c\<Space>x"
|
||||||
|
call assert_equal(['one twxhree four'], getline(1, '$'))
|
||||||
|
|
||||||
|
set whichwrap+=l
|
||||||
|
call setline(1, ['one two', 'three four'])
|
||||||
|
exe "norm! $3x"
|
||||||
|
call assert_equal(['one twhree four'], getline(1, '$'))
|
||||||
|
close!
|
||||||
|
set whichwrap&
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test for 'w' and 'b' commands
|
" Test for 'w' and 'b' commands
|
||||||
func Test_normal_word_move()
|
func Test_normal_word_move()
|
||||||
new
|
new
|
||||||
@@ -3271,6 +3424,19 @@ func Test_normal_vert_scroll_longline()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for jumping in a file using %
|
||||||
|
func Test_normal_percent_jump()
|
||||||
|
new
|
||||||
|
call setline(1, range(1, 100))
|
||||||
|
|
||||||
|
" jumping to a folded line should open the fold
|
||||||
|
25,75fold
|
||||||
|
call feedkeys('50%', 'xt')
|
||||||
|
call assert_equal(50, line('.'))
|
||||||
|
call assert_equal(-1, foldclosedend(50))
|
||||||
|
close!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Some commands like yy, cc, dd, >>, << and !! accept a count after
|
" Some commands like yy, cc, dd, >>, << and !! accept a count after
|
||||||
" typing the first letter of the command.
|
" typing the first letter of the command.
|
||||||
func Test_normal_count_after_operator()
|
func Test_normal_count_after_operator()
|
||||||
|
|||||||
@@ -522,8 +522,8 @@ endfunc
|
|||||||
func Test_search_with_end_offset()
|
func Test_search_with_end_offset()
|
||||||
new
|
new
|
||||||
call setline(1, ['', 'dog(a', 'cat('])
|
call setline(1, ['', 'dog(a', 'cat('])
|
||||||
exe "normal /(/e+" .. "\<CR>"
|
exe "normal /(/e+\<CR>"
|
||||||
normal "ayn
|
normal n"ayn
|
||||||
call assert_equal("a\ncat(", @a)
|
call assert_equal("a\ncat(", @a)
|
||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|||||||
@@ -279,7 +279,12 @@ func Test_get_register()
|
|||||||
call feedkeys(":\<C-R>r\<Esc>", 'xt')
|
call feedkeys(":\<C-R>r\<Esc>", 'xt')
|
||||||
call assert_equal("a\rb", histget(':', -1)) " Modified because of #6137
|
call assert_equal("a\rb", histget(':', -1)) " Modified because of #6137
|
||||||
|
|
||||||
|
call assert_fails('let r = getreg("=", [])', 'E745:')
|
||||||
|
call assert_fails('let r = getreg("=", 1, [])', 'E745:')
|
||||||
enew!
|
enew!
|
||||||
|
|
||||||
|
" Using a register in operator-pending mode should fail
|
||||||
|
call assert_beeps('norm! c"')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_set_register()
|
func Test_set_register()
|
||||||
@@ -426,6 +431,12 @@ func Test_execute_register()
|
|||||||
@
|
@
|
||||||
call assert_equal(3, i)
|
call assert_equal(3, i)
|
||||||
|
|
||||||
|
" try to execute expression register and use a backspace to cancel it
|
||||||
|
new
|
||||||
|
call feedkeys("@=\<BS>ax\<CR>y", 'xt')
|
||||||
|
call assert_equal(['x', 'y'], getline(1, '$'))
|
||||||
|
close!
|
||||||
|
|
||||||
" cannot execute a register in operator pending mode
|
" cannot execute a register in operator pending mode
|
||||||
call assert_beeps('normal! c@r')
|
call assert_beeps('normal! c@r')
|
||||||
endfunc
|
endfunc
|
||||||
|
|||||||
@@ -25,6 +25,18 @@ func Test_spell_normal()
|
|||||||
let cnt=readfile('./Xspellfile.add')
|
let cnt=readfile('./Xspellfile.add')
|
||||||
call assert_equal('goood', cnt[0])
|
call assert_equal('goood', cnt[0])
|
||||||
|
|
||||||
|
" zg should fail in operator-pending mode
|
||||||
|
call assert_beeps('norm! czg')
|
||||||
|
|
||||||
|
" zg fails in visual mode when not able to get the visual text
|
||||||
|
call assert_beeps('norm! ggVjzg')
|
||||||
|
norm! V
|
||||||
|
|
||||||
|
" zg fails for a non-identifier word
|
||||||
|
call append(line('$'), '###')
|
||||||
|
call assert_fails('norm! Gzg', 'E349:')
|
||||||
|
$d
|
||||||
|
|
||||||
" Test for zw
|
" Test for zw
|
||||||
2
|
2
|
||||||
norm! $zw
|
norm! $zw
|
||||||
|
|||||||
@@ -670,15 +670,19 @@ func Test_tabline_tabmenu()
|
|||||||
call assert_equal(3, tabpagenr('$'))
|
call assert_equal(3, tabpagenr('$'))
|
||||||
|
|
||||||
" go to tab page 2 in operator-pending mode (should beep)
|
" go to tab page 2 in operator-pending mode (should beep)
|
||||||
call assert_beeps('call feedkeys("f" .. TabLineSelectPageCode(2), "Lx!")')
|
call assert_beeps('call feedkeys("c" .. TabLineSelectPageCode(2), "Lx!")')
|
||||||
|
call assert_equal(2, tabpagenr())
|
||||||
|
call assert_equal(3, tabpagenr('$'))
|
||||||
|
|
||||||
" open new tab page before tab page 1 in operator-pending mode (should beep)
|
" open new tab page before tab page 1 in operator-pending mode (should beep)
|
||||||
call assert_beeps('call feedkeys("f" .. TabMenuNewItemCode(1), "Lx!")')
|
call assert_beeps('call feedkeys("c" .. TabMenuNewItemCode(1), "Lx!")')
|
||||||
|
call assert_equal(1, tabpagenr())
|
||||||
|
call assert_equal(4, tabpagenr('$'))
|
||||||
|
|
||||||
" open new tab page after tab page 3 in normal mode
|
" open new tab page after tab page 3 in normal mode
|
||||||
call feedkeys(TabMenuNewItemCode(4), "Lx!")
|
call feedkeys(TabMenuNewItemCode(4), "Lx!")
|
||||||
call assert_equal(4, tabpagenr())
|
call assert_equal(4, tabpagenr())
|
||||||
call assert_equal(4, tabpagenr('$'))
|
call assert_equal(5, tabpagenr('$'))
|
||||||
|
|
||||||
" go to tab page 2 in insert mode
|
" go to tab page 2 in insert mode
|
||||||
call feedkeys("i" .. TabLineSelectPageCode(2) .. "\<C-C>", "Lx!")
|
call feedkeys("i" .. TabLineSelectPageCode(2) .. "\<C-C>", "Lx!")
|
||||||
@@ -686,17 +690,17 @@ func Test_tabline_tabmenu()
|
|||||||
|
|
||||||
" close tab page 2 in insert mode
|
" close tab page 2 in insert mode
|
||||||
call feedkeys("i" .. TabMenuCloseItemCode(2) .. "\<C-C>", "Lx!")
|
call feedkeys("i" .. TabMenuCloseItemCode(2) .. "\<C-C>", "Lx!")
|
||||||
call assert_equal(3, tabpagenr('$'))
|
call assert_equal(4, tabpagenr('$'))
|
||||||
|
|
||||||
" open new tab page before tab page 3 in insert mode
|
" open new tab page before tab page 3 in insert mode
|
||||||
call feedkeys("i" .. TabMenuNewItemCode(3) .. "\<C-C>", "Lx!")
|
call feedkeys("i" .. TabMenuNewItemCode(3) .. "\<C-C>", "Lx!")
|
||||||
call assert_equal(3, tabpagenr())
|
call assert_equal(3, tabpagenr())
|
||||||
call assert_equal(4, tabpagenr('$'))
|
call assert_equal(5, tabpagenr('$'))
|
||||||
|
|
||||||
" open new tab page after tab page 4 in insert mode
|
" open new tab page after tab page 4 in insert mode
|
||||||
call feedkeys("i" .. TabMenuNewItemCode(5) .. "\<C-C>", "Lx!")
|
call feedkeys("i" .. TabMenuNewItemCode(5) .. "\<C-C>", "Lx!")
|
||||||
call assert_equal(5, tabpagenr())
|
call assert_equal(5, tabpagenr())
|
||||||
call assert_equal(5, tabpagenr('$'))
|
call assert_equal(6, tabpagenr('$'))
|
||||||
|
|
||||||
%bw!
|
%bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|||||||
@@ -1133,7 +1133,7 @@ endfunc
|
|||||||
" Test for [i, ]i, [I, ]I, [ CTRL-I, ] CTRL-I and CTRL-W i commands
|
" Test for [i, ]i, [I, ]I, [ CTRL-I, ] CTRL-I and CTRL-W i commands
|
||||||
func Test_inc_search()
|
func Test_inc_search()
|
||||||
new
|
new
|
||||||
call setline(1, ['1:foo', '2:foo', 'foo', '3:foo', '4:foo'])
|
call setline(1, ['1:foo', '2:foo', 'foo', '3:foo', '4:foo', '==='])
|
||||||
call cursor(3, 1)
|
call cursor(3, 1)
|
||||||
|
|
||||||
" Test for [i and ]i
|
" Test for [i and ]i
|
||||||
@@ -1143,6 +1143,9 @@ func Test_inc_search()
|
|||||||
call assert_equal('3:foo', execute('normal ]i'))
|
call assert_equal('3:foo', execute('normal ]i'))
|
||||||
call assert_equal('4:foo', execute('normal 2]i'))
|
call assert_equal('4:foo', execute('normal 2]i'))
|
||||||
call assert_fails('normal 3]i', 'E389:')
|
call assert_fails('normal 3]i', 'E389:')
|
||||||
|
call assert_fails('normal G]i', 'E349:')
|
||||||
|
call assert_fails('normal [i', 'E349:')
|
||||||
|
call cursor(3, 1)
|
||||||
|
|
||||||
" Test for :isearch
|
" Test for :isearch
|
||||||
call assert_equal('1:foo', execute('isearch foo'))
|
call assert_equal('1:foo', execute('isearch foo'))
|
||||||
@@ -1163,6 +1166,9 @@ func Test_inc_search()
|
|||||||
call assert_equal([
|
call assert_equal([
|
||||||
\ ' 1: 4 3:foo',
|
\ ' 1: 4 3:foo',
|
||||||
\ ' 2: 5 4:foo'], split(execute('normal ]I'), "\n"))
|
\ ' 2: 5 4:foo'], split(execute('normal ]I'), "\n"))
|
||||||
|
call assert_fails('normal G]I', 'E349:')
|
||||||
|
call assert_fails('normal [I', 'E349:')
|
||||||
|
call cursor(3, 1)
|
||||||
|
|
||||||
" Test for :ilist
|
" Test for :ilist
|
||||||
call assert_equal([
|
call assert_equal([
|
||||||
@@ -1188,6 +1194,9 @@ func Test_inc_search()
|
|||||||
exe "normal k2]\t"
|
exe "normal k2]\t"
|
||||||
call assert_equal([5, 3], [line('.'), col('.')])
|
call assert_equal([5, 3], [line('.'), col('.')])
|
||||||
call assert_fails("normal 2k3]\t", 'E389:')
|
call assert_fails("normal 2k3]\t", 'E389:')
|
||||||
|
call assert_fails("normal G[\t", 'E349:')
|
||||||
|
call assert_fails("normal ]\t", 'E349:')
|
||||||
|
call cursor(3, 1)
|
||||||
|
|
||||||
" Test for :ijump
|
" Test for :ijump
|
||||||
call cursor(3, 1)
|
call cursor(3, 1)
|
||||||
@@ -1212,6 +1221,8 @@ func Test_inc_search()
|
|||||||
close
|
close
|
||||||
call assert_fails('3wincmd i', 'E387:')
|
call assert_fails('3wincmd i', 'E387:')
|
||||||
call assert_fails('6wincmd i', 'E389:')
|
call assert_fails('6wincmd i', 'E389:')
|
||||||
|
call assert_fails("normal G\<C-W>i", 'E349:')
|
||||||
|
call cursor(3, 1)
|
||||||
|
|
||||||
" Test for :isplit
|
" Test for :isplit
|
||||||
isplit foo
|
isplit foo
|
||||||
|
|||||||
@@ -378,14 +378,17 @@ endfunc
|
|||||||
|
|
||||||
func Test_Visual_paragraph_textobject()
|
func Test_Visual_paragraph_textobject()
|
||||||
new
|
new
|
||||||
call setline(1, ['First line.',
|
let lines =<< trim [END]
|
||||||
\ '',
|
First line.
|
||||||
\ 'Second line.',
|
|
||||||
\ 'Third line.',
|
Second line.
|
||||||
\ 'Fourth line.',
|
Third line.
|
||||||
\ 'Fifth line.',
|
Fourth line.
|
||||||
\ '',
|
Fifth line.
|
||||||
\ 'Sixth line.'])
|
|
||||||
|
Sixth line.
|
||||||
|
[END]
|
||||||
|
call setline(1, lines)
|
||||||
|
|
||||||
" When start and end of visual area are identical, 'ap' or 'ip' select
|
" When start and end of visual area are identical, 'ap' or 'ip' select
|
||||||
" the whole paragraph.
|
" the whole paragraph.
|
||||||
@@ -639,6 +642,14 @@ func Test_characterwise_visual_mode()
|
|||||||
normal Gkvj$d
|
normal Gkvj$d
|
||||||
call assert_equal(['', 'a', ''], getline(1, '$'))
|
call assert_equal(['', 'a', ''], getline(1, '$'))
|
||||||
|
|
||||||
|
" characterwise visual mode: use a count with the visual mode from the last
|
||||||
|
" line in the buffer
|
||||||
|
%d _
|
||||||
|
call setline(1, ['one', 'two', 'three', 'four'])
|
||||||
|
norm! vj$y
|
||||||
|
norm! G1vy
|
||||||
|
call assert_equal('four', @")
|
||||||
|
|
||||||
" characterwise visual mode: replace a single character line and the eol
|
" characterwise visual mode: replace a single character line and the eol
|
||||||
%d _
|
%d _
|
||||||
call setline(1, "a")
|
call setline(1, "a")
|
||||||
@@ -1178,15 +1189,38 @@ func Test_exclusive_selection()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test for starting visual mode with a count.
|
" Test for starting linewise visual with a count.
|
||||||
" This test should be run without any previous visual modes. So this should be
|
" This test needs to be run without any previous visual mode. Otherwise the
|
||||||
" run as a first test.
|
" count will use the count from the previous visual mode.
|
||||||
func Test_AAA_start_visual_mode_with_count()
|
func Test_linewise_visual_with_count()
|
||||||
new
|
let after =<< trim [CODE]
|
||||||
call setline(1, ['aaaaaaa', 'aaaaaaa', 'aaaaaaa', 'aaaaaaa'])
|
call setline(1, ['one', 'two', 'three', 'four'])
|
||||||
normal! gg2Vy
|
norm! 3Vy
|
||||||
call assert_equal("aaaaaaa\naaaaaaa\n", @")
|
call assert_equal("one\ntwo\nthree\n", @")
|
||||||
close!
|
call writefile(v:errors, 'Xtestout')
|
||||||
|
qall!
|
||||||
|
[CODE]
|
||||||
|
if RunVim([], after, '')
|
||||||
|
call assert_equal([], readfile('Xtestout'))
|
||||||
|
call delete('Xtestout')
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for starting characterwise visual with a count.
|
||||||
|
" This test needs to be run without any previous visual mode. Otherwise the
|
||||||
|
" count will use the count from the previous visual mode.
|
||||||
|
func Test_characterwise_visual_with_count()
|
||||||
|
let after =<< trim [CODE]
|
||||||
|
call setline(1, ['one two', 'three'])
|
||||||
|
norm! l5vy
|
||||||
|
call assert_equal("ne tw", @")
|
||||||
|
call writefile(v:errors, 'Xtestout')
|
||||||
|
qall!
|
||||||
|
[CODE]
|
||||||
|
if RunVim([], after, '')
|
||||||
|
call assert_equal([], readfile('Xtestout'))
|
||||||
|
call delete('Xtestout')
|
||||||
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test for visually selecting an inner block (iB)
|
" Test for visually selecting an inner block (iB)
|
||||||
|
|||||||
15
test/functional/legacy/gf_spec.lua
Normal file
15
test/functional/legacy/gf_spec.lua
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
local helpers = require('test.functional.helpers')(after_each)
|
||||||
|
local clear = helpers.clear
|
||||||
|
local command = helpers.command
|
||||||
|
local eq = helpers.eq
|
||||||
|
local pcall_err = helpers.pcall_err
|
||||||
|
|
||||||
|
describe('gf', function()
|
||||||
|
before_each(clear)
|
||||||
|
|
||||||
|
it('is not allowed when buffer is locked', function()
|
||||||
|
command('au OptionSet diff norm! gf')
|
||||||
|
command([[call setline(1, ['Xfile1', 'line2', 'line3', 'line4'])]])
|
||||||
|
eq('Vim(normal):E788: Not allowed to edit another buffer now', pcall_err(command, 'diffthis'))
|
||||||
|
end)
|
||||||
|
end)
|
||||||
Reference in New Issue
Block a user