mirror of
https://github.com/vim/vim.git
synced 2025-10-05 05:34:07 -04:00
patch 8.2.2901: some operators not fully tested
Problem: Some operators not fully tested. Solution: Add a few test cases. (Yegappan Lakshmanan, closes #8282)
This commit is contained in:
@@ -167,6 +167,7 @@ func Test_cpo_E()
|
|||||||
call assert_beeps('normal "ayl')
|
call assert_beeps('normal "ayl')
|
||||||
" change an empty line
|
" change an empty line
|
||||||
call assert_beeps('normal lcTa')
|
call assert_beeps('normal lcTa')
|
||||||
|
call assert_beeps('normal 0c0')
|
||||||
" delete an empty line
|
" delete an empty line
|
||||||
call assert_beeps('normal D')
|
call assert_beeps('normal D')
|
||||||
call assert_beeps('normal dl')
|
call assert_beeps('normal dl')
|
||||||
|
@@ -876,4 +876,21 @@ func Test_normal_increment_with_virtualedit()
|
|||||||
set virtualedit&
|
set virtualedit&
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for incrementing a signed hexadecimal and octal number
|
||||||
|
func Test_normal_increment_signed_hexoct_nr()
|
||||||
|
new
|
||||||
|
" negative sign before a hex number should be ignored
|
||||||
|
call setline(1, ["-0x9"])
|
||||||
|
exe "norm \<C-A>"
|
||||||
|
call assert_equal(["-0xa"], getline(1, '$'))
|
||||||
|
exe "norm \<C-X>"
|
||||||
|
call assert_equal(["-0x9"], getline(1, '$'))
|
||||||
|
call setline(1, ["-007"])
|
||||||
|
exe "norm \<C-A>"
|
||||||
|
call assert_equal(["-010"], getline(1, '$'))
|
||||||
|
exe "norm \<C-X>"
|
||||||
|
call assert_equal(["-007"], getline(1, '$'))
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -1986,6 +1986,16 @@ func Test_normal30_changecase()
|
|||||||
call assert_equal(['aaaaaa', 'AAAAaa'], getline(1, 2))
|
call assert_equal(['aaaaaa', 'AAAAaa'], getline(1, 2))
|
||||||
set whichwrap&
|
set whichwrap&
|
||||||
|
|
||||||
|
" try changing the case with a double byte encoding (DBCS)
|
||||||
|
%bw!
|
||||||
|
let enc = &enc
|
||||||
|
set encoding=cp932
|
||||||
|
call setline(1, "\u8470")
|
||||||
|
normal ~
|
||||||
|
normal gU$gu$gUgUg~g~gugu
|
||||||
|
call assert_equal("\u8470", getline(1))
|
||||||
|
let &encoding = enc
|
||||||
|
|
||||||
" clean up
|
" clean up
|
||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
@@ -3324,4 +3334,25 @@ func Test_normal_percent_jump()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for << and >> commands to shift text by 'shiftwidth'
|
||||||
|
func Test_normal_shift_rightleft()
|
||||||
|
new
|
||||||
|
call setline(1, ['one', '', "\t", ' two', "\tthree", ' four'])
|
||||||
|
set shiftwidth=2 tabstop=8
|
||||||
|
normal gg6>>
|
||||||
|
call assert_equal([' one', '', "\t ", ' two', "\t three", "\tfour"],
|
||||||
|
\ getline(1, '$'))
|
||||||
|
normal ggVG2>>
|
||||||
|
call assert_equal([' one', '', "\t ", "\ttwo",
|
||||||
|
\ "\t three", "\t four"], getline(1, '$'))
|
||||||
|
normal gg6<<
|
||||||
|
call assert_equal([' one', '', "\t ", ' two', "\t three",
|
||||||
|
\ "\t four"], getline(1, '$'))
|
||||||
|
normal ggVG2<<
|
||||||
|
call assert_equal(['one', '', "\t", ' two', "\tthree", ' four'],
|
||||||
|
\ getline(1, '$'))
|
||||||
|
set shiftwidth& tabstop&
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -80,6 +80,10 @@ func Test_edit_change()
|
|||||||
call setline(1, "\t⒌")
|
call setline(1, "\t⒌")
|
||||||
normal Cx
|
normal Cx
|
||||||
call assert_equal('x', getline(1))
|
call assert_equal('x', getline(1))
|
||||||
|
" Do a visual block change
|
||||||
|
call setline(1, ['a', 'b', 'c'])
|
||||||
|
exe "normal gg3l\<C-V>2jcx"
|
||||||
|
call assert_equal(['a x', 'b x', 'c x'], getline(1, '$'))
|
||||||
bwipe!
|
bwipe!
|
||||||
set virtualedit=
|
set virtualedit=
|
||||||
endfunc
|
endfunc
|
||||||
@@ -289,6 +293,16 @@ func Test_replace_after_eol()
|
|||||||
call append(0, '"r"')
|
call append(0, '"r"')
|
||||||
normal gg$5lrxa
|
normal gg$5lrxa
|
||||||
call assert_equal('"r" x', getline(1))
|
call assert_equal('"r" x', getline(1))
|
||||||
|
" visual block replace
|
||||||
|
%d _
|
||||||
|
call setline(1, ['a', '', 'b'])
|
||||||
|
exe "normal 2l\<C-V>2jrx"
|
||||||
|
call assert_equal(['a x', ' x', 'b x'], getline(1, '$'))
|
||||||
|
" visual characterwise selection replace after eol
|
||||||
|
%d _
|
||||||
|
call setline(1, 'a')
|
||||||
|
normal 4lv2lrx
|
||||||
|
call assert_equal('a xxx', getline(1))
|
||||||
bwipe!
|
bwipe!
|
||||||
set virtualedit=
|
set virtualedit=
|
||||||
endfunc
|
endfunc
|
||||||
@@ -375,4 +389,17 @@ func Test_ve_backspace()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for delete (x) on EOL character and after EOL
|
||||||
|
func Test_delete_past_eol()
|
||||||
|
new
|
||||||
|
call setline(1, "ab")
|
||||||
|
set virtualedit=all
|
||||||
|
exe "normal 2lx"
|
||||||
|
call assert_equal('ab', getline(1))
|
||||||
|
exe "normal 10lx"
|
||||||
|
call assert_equal('ab', getline(1))
|
||||||
|
set virtualedit&
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -81,12 +81,11 @@ func Test_visual_mode_reset()
|
|||||||
" thus preventing the problem:
|
" thus preventing the problem:
|
||||||
exe "normal! GV:call TriggerTheProblem()\<CR>"
|
exe "normal! GV:call TriggerTheProblem()\<CR>"
|
||||||
call assert_equal("Everything's fine.", g:msg)
|
call assert_equal("Everything's fine.", g:msg)
|
||||||
|
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test for visual block shift and tab characters.
|
" Test for visual block shift and tab characters.
|
||||||
func Test_block_shift_tab()
|
func Test_block_shift_tab()
|
||||||
enew!
|
new
|
||||||
call append(0, repeat(['one two three'], 5))
|
call append(0, repeat(['one two three'], 5))
|
||||||
call cursor(1,1)
|
call cursor(1,1)
|
||||||
exe "normal i\<C-G>u"
|
exe "normal i\<C-G>u"
|
||||||
@@ -95,7 +94,7 @@ func Test_block_shift_tab()
|
|||||||
call assert_equal('on1 two three', getline(2))
|
call assert_equal('on1 two three', getline(2))
|
||||||
call assert_equal('on1 two three', getline(5))
|
call assert_equal('on1 two three', getline(5))
|
||||||
|
|
||||||
enew!
|
%d _
|
||||||
call append(0, repeat(['abcdefghijklmnopqrstuvwxyz'], 5))
|
call append(0, repeat(['abcdefghijklmnopqrstuvwxyz'], 5))
|
||||||
call cursor(1,1)
|
call cursor(1,1)
|
||||||
exe "normal \<C-V>4jI \<Esc>j<<11|D"
|
exe "normal \<C-V>4jI \<Esc>j<<11|D"
|
||||||
@@ -120,12 +119,26 @@ func Test_block_shift_tab()
|
|||||||
call assert_equal(" abc\<Tab>\<Tab>defghijklmnopqrstuvwxyz", getline(4))
|
call assert_equal(" abc\<Tab>\<Tab>defghijklmnopqrstuvwxyz", getline(4))
|
||||||
call assert_equal(" abc\<Tab> defghijklmnopqrstuvwxyz", getline(5))
|
call assert_equal(" abc\<Tab> defghijklmnopqrstuvwxyz", getline(5))
|
||||||
|
|
||||||
enew!
|
" Test for block shift with space characters at the beginning and with
|
||||||
|
" 'noexpandtab' and 'expandtab'
|
||||||
|
%d _
|
||||||
|
call setline(1, [" 1", " 2", " 3"])
|
||||||
|
setlocal shiftwidth=2 noexpandtab
|
||||||
|
exe "normal gg\<C-V>3j>"
|
||||||
|
call assert_equal(["\t1", "\t2", "\t3"], getline(1, '$'))
|
||||||
|
%d _
|
||||||
|
call setline(1, [" 1", " 2", " 3"])
|
||||||
|
setlocal shiftwidth=2 expandtab
|
||||||
|
exe "normal gg\<C-V>3j>"
|
||||||
|
call assert_equal([" 1", " 2", " 3"], getline(1, '$'))
|
||||||
|
setlocal shiftwidth&
|
||||||
|
|
||||||
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Tests Blockwise Visual when there are TABs before the text.
|
" Tests Blockwise Visual when there are TABs before the text.
|
||||||
func Test_blockwise_visual()
|
func Test_blockwise_visual()
|
||||||
enew!
|
new
|
||||||
call append(0, ['123456',
|
call append(0, ['123456',
|
||||||
\ '234567',
|
\ '234567',
|
||||||
\ '345678',
|
\ '345678',
|
||||||
@@ -147,12 +160,12 @@ func Test_blockwise_visual()
|
|||||||
\ "\t\tsomext",
|
\ "\t\tsomext",
|
||||||
\ "\t\ttesext"], getline(1, 7))
|
\ "\t\ttesext"], getline(1, 7))
|
||||||
|
|
||||||
enew!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test swapping corners in blockwise visual mode with o and O
|
" Test swapping corners in blockwise visual mode with o and O
|
||||||
func Test_blockwise_visual_o_O()
|
func Test_blockwise_visual_o_O()
|
||||||
enew!
|
new
|
||||||
|
|
||||||
exe "norm! 10i.\<Esc>Y4P3lj\<C-V>4l2jr "
|
exe "norm! 10i.\<Esc>Y4P3lj\<C-V>4l2jr "
|
||||||
exe "norm! gvO\<Esc>ra"
|
exe "norm! gvO\<Esc>ra"
|
||||||
@@ -171,7 +184,7 @@ func Test_blockwise_visual_o_O()
|
|||||||
\ '...a bf.',
|
\ '...a bf.',
|
||||||
\ '..........'], getline(1, '$'))
|
\ '..........'], getline(1, '$'))
|
||||||
|
|
||||||
enew!
|
bw!
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
" Test Virtual replace mode.
|
" Test Virtual replace mode.
|
||||||
@@ -459,15 +472,13 @@ endfunc
|
|||||||
|
|
||||||
" Test for 'p'ut in visual block mode
|
" Test for 'p'ut in visual block mode
|
||||||
func Test_visual_block_put()
|
func Test_visual_block_put()
|
||||||
enew
|
new
|
||||||
|
|
||||||
call append(0, ['One', 'Two', 'Three'])
|
call append(0, ['One', 'Two', 'Three'])
|
||||||
normal gg
|
normal gg
|
||||||
yank
|
yank
|
||||||
call feedkeys("jl\<C-V>ljp", 'xt')
|
call feedkeys("jl\<C-V>ljp", 'xt')
|
||||||
call assert_equal(['One', 'T', 'Tee', 'One', ''], getline(1, '$'))
|
call assert_equal(['One', 'T', 'Tee', 'One', ''], getline(1, '$'))
|
||||||
|
bw!
|
||||||
enew!
|
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Visual modes (v V CTRL-V) followed by an operator; count; repeating
|
" Visual modes (v V CTRL-V) followed by an operator; count; repeating
|
||||||
@@ -646,6 +657,12 @@ func Test_characterwise_visual_mode()
|
|||||||
norm! G1vy
|
norm! G1vy
|
||||||
call assert_equal('four', @")
|
call assert_equal('four', @")
|
||||||
|
|
||||||
|
" characterwise visual mode: replace a single character line and the eol
|
||||||
|
%d _
|
||||||
|
call setline(1, "a")
|
||||||
|
normal v$rx
|
||||||
|
call assert_equal(['x'], getline(1, '$'))
|
||||||
|
|
||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@@ -741,6 +758,66 @@ func Test_visual_block_mode()
|
|||||||
exe "normal! \<C-V>j2lD"
|
exe "normal! \<C-V>j2lD"
|
||||||
call assert_equal(['ax', 'ax'], getline(3, 4))
|
call assert_equal(['ax', 'ax'], getline(3, 4))
|
||||||
|
|
||||||
|
" Test block insert with a short line that ends before the block
|
||||||
|
%d _
|
||||||
|
call setline(1, [" one", "a", " two"])
|
||||||
|
exe "normal gg\<C-V>2jIx"
|
||||||
|
call assert_equal([" xone", "a", " xtwo"], getline(1, '$'))
|
||||||
|
|
||||||
|
" Test block append at EOL with '$' and without '$'
|
||||||
|
%d _
|
||||||
|
call setline(1, ["one", "a", "two"])
|
||||||
|
exe "normal gg$\<C-V>2jAx"
|
||||||
|
call assert_equal(["onex", "ax", "twox"], getline(1, '$'))
|
||||||
|
%d _
|
||||||
|
call setline(1, ["one", "a", "two"])
|
||||||
|
exe "normal gg3l\<C-V>2jAx"
|
||||||
|
call assert_equal(["onex", "a x", "twox"], getline(1, '$'))
|
||||||
|
|
||||||
|
" Test block replace with an empty line in the middle and use $ to jump to
|
||||||
|
" the end of the line.
|
||||||
|
%d _
|
||||||
|
call setline(1, ['one', '', 'two'])
|
||||||
|
exe "normal gg$\<C-V>2jrx"
|
||||||
|
call assert_equal(["onx", "", "twx"], getline(1, '$'))
|
||||||
|
|
||||||
|
" Test block replace with an empty line in the middle and move cursor to the
|
||||||
|
" end of the line
|
||||||
|
%d _
|
||||||
|
call setline(1, ['one', '', 'two'])
|
||||||
|
exe "normal gg2l\<C-V>2jrx"
|
||||||
|
call assert_equal(["onx", "", "twx"], getline(1, '$'))
|
||||||
|
|
||||||
|
" Replace odd number of characters with a multibyte character
|
||||||
|
%d _
|
||||||
|
call setline(1, ['abcd', 'efgh'])
|
||||||
|
exe "normal ggl\<C-V>2ljr\u1100"
|
||||||
|
call assert_equal(["a\u1100 ", "e\u1100 "], getline(1, '$'))
|
||||||
|
|
||||||
|
" During visual block append, if the cursor moved outside of the selected
|
||||||
|
" range, then the edit should not be applied to the block.
|
||||||
|
%d _
|
||||||
|
call setline(1, ['aaa', 'bbb', 'ccc'])
|
||||||
|
exe "normal 2G\<C-V>jAx\<Up>"
|
||||||
|
call assert_equal(['aaa', 'bxbb', 'ccc'], getline(1, '$'))
|
||||||
|
|
||||||
|
" During visual block append, if the cursor is moved before the start of the
|
||||||
|
" block, then the new text should be appended there.
|
||||||
|
%d _
|
||||||
|
call setline(1, ['aaa', 'bbb', 'ccc'])
|
||||||
|
exe "normal $\<C-V>2jA\<Left>x"
|
||||||
|
" BUG: Instead of adding x as the third character in all the three lines,
|
||||||
|
" 'a' is added in the second and third lines at the end. This bug is not
|
||||||
|
" reproducible if this operation is performed manually.
|
||||||
|
"call assert_equal(['aaxa', 'bbxb', 'ccxc'], getline(1, '$'))
|
||||||
|
call assert_equal(['aaxa', 'bbba', 'ccca'], getline(1, '$'))
|
||||||
|
|
||||||
|
" Change a characterwise motion to a blockwise motion using CTRL-V
|
||||||
|
%d _
|
||||||
|
call setline(1, ['123', '456', '789'])
|
||||||
|
exe "normal ld\<C-V>j"
|
||||||
|
call assert_equal(['13', '46', '789'], getline(1, '$'))
|
||||||
|
|
||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2901,
|
||||||
/**/
|
/**/
|
||||||
2900,
|
2900,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user