0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.1.2381: not all register related code is covered by tests

Problem:    Not all register related code is covered by tests.
Solution:   Add more test cases. (Yegappan Lakshmanan, closes #5301)
This commit is contained in:
Bram Moolenaar
2019-12-02 20:41:39 +01:00
parent 306139005c
commit 54c8d229f5
4 changed files with 211 additions and 22 deletions

View File

@@ -174,3 +174,20 @@ func Test_mark_error()
call assert_fails('mark xx', 'E488:')
call assert_fails('mark _', 'E191:')
endfunc
" Test for :lockmarks when pasting content
func Test_lockmarks_with_put()
new
call append(0, repeat(['sky is blue'], 4))
normal gg
1,2yank r
put r
normal G
lockmarks put r
call assert_equal(2, line("'["))
call assert_equal(3, line("']"))
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@@ -2,6 +2,8 @@
" Tests for register operations
"
source check.vim
" This test must be executed first to check for empty and unset registers.
func Test_aaa_empty_reg_test()
call assert_fails('normal @@', 'E748:')
@@ -236,15 +238,6 @@ func Test_get_register()
call assert_equal('', getregtype('!'))
" Test for clipboard registers (* and +)
if has("clipboard_working")
call append(0, "text for clipboard test")
normal gg"*yiw
call assert_equal('text', getreg('*'))
normal gg2w"+yiw
call assert_equal('clipboard', getreg('+'))
endif
" Test for inserting an invalid register content
call assert_beeps('exe "normal i\<C-R>!"')
@@ -300,7 +293,97 @@ func Test_set_register()
call feedkeys('qRhhq', 'xt')
call assert_equal('llhh', getreg('r'))
" Appending a list of characters to a register from different lines
let @r = ''
call append(0, ['abcdef', '123456'])
normal gg"ry3l
call cursor(2, 4)
normal "Ry3l
call assert_equal('abc456', @r)
" Test for gP with multiple lines selected using characterwise motion
%delete
call append(0, ['vim editor', 'vim editor'])
let @r = ''
exe "normal ggwy/vim /e\<CR>gP"
call assert_equal(['vim editor', 'vim editor', 'vim editor'], getline(1, 3))
" Test for gP with . register
%delete
normal iabc
normal ".gp
call assert_equal('abcabc', getline(1))
normal 0".gP
call assert_equal('abcabcabc', getline(1))
enew!
endfunc
" Test for clipboard registers (* and +)
func Test_clipboard_regs()
CheckNotGui
CheckFeature clipboard_working
new
call append(0, "text for clipboard test")
normal gg"*yiw
call assert_equal('text', getreg('*'))
normal gg2w"+yiw
call assert_equal('clipboard', getreg('+'))
" Test for replacing the clipboard register contents
set clipboard=unnamed
let @* = 'food'
normal ggviw"*p
call assert_equal('text', getreg('*'))
call assert_equal('food for clipboard test', getline(1))
normal ggviw"*p
call assert_equal('food', getreg('*'))
call assert_equal('text for clipboard test', getline(1))
" Test for replacing the selection register contents
set clipboard=unnamedplus
let @+ = 'food'
normal ggviw"+p
call assert_equal('text', getreg('+'))
call assert_equal('food for clipboard test', getline(1))
normal ggviw"+p
call assert_equal('food', getreg('+'))
call assert_equal('text for clipboard test', getline(1))
" Test for auto copying visually selected text to clipboard register
call setline(1, "text for clipboard test")
let @* = ''
set clipboard=autoselect
normal ggwwviwy
call assert_equal('clipboard', @*)
" Test for auto copying visually selected text to selection register
let @+ = ''
set clipboard=autoselectplus
normal ggwviwy
call assert_equal('for', @+)
set clipboard&vim
bwipe!
endfunc
" Test for restarting the current mode (insert or virtual replace) after
" executing the contents of a register
func Test_put_reg_restart_mode()
new
call append(0, 'editor')
normal gg
let @r = "ivim \<Esc>"
call feedkeys("i\<C-O>@r\<C-R>=mode()\<CR>", 'xt')
call assert_equal('vimi editor', getline(1))
call setline(1, 'editor')
normal gg
call feedkeys("gR\<C-O>@r\<C-R>=mode()\<CR>", 'xt')
call assert_equal('vimReditor', getline(1))
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@@ -84,43 +84,130 @@ func Test_edit_change()
set virtualedit=
endfunc
" Test for pasting before and after a tab character
" Tests for pasting at the beginning, end and middle of a tab character
" in virtual edit mode.
func Test_paste_in_tab()
new
let @" = 'xyz'
call append(0, '')
set virtualedit=all
call append(0, "a\tb")
call cursor(1, 2, 6)
normal p
call assert_equal("a\txyzb", getline(1))
" Tests for pasting a register with characterwise mode type
call setreg('"', 'xyz', 'c')
" paste (p) unnamed register at the beginning of a tab
call setline(1, "a\tb")
call cursor(1, 2)
call cursor(1, 2, 0)
normal p
call assert_equal('a xyz b', getline(1))
" paste (P) unnamed register at the beginning of a tab
call setline(1, "a\tb")
call cursor(1, 2, 0)
normal P
call assert_equal("axyz\tb", getline(1))
" Test for virtual block paste
call setreg('"', 'xyz', 'b')
" paste (p) unnamed register at the end of a tab
call setline(1, "a\tb")
call cursor(1, 2, 6)
normal p
call assert_equal("a\txyzb", getline(1))
" paste (P) unnamed register at the end of a tab
call setline(1, "a\tb")
call cursor(1, 2, 6)
normal P
call assert_equal("a xyz b", getline(1))
call assert_equal('a xyz b', getline(1))
" Test for virtual block paste with gp and gP
" Tests for pasting a register with blockwise mode type
call setreg('"', 'xyz', 'b')
" paste (p) unnamed register at the beginning of a tab
call setline(1, "a\tb")
call cursor(1, 2, 0)
normal p
call assert_equal('a xyz b', getline(1))
" paste (P) unnamed register at the beginning of a tab
call setline(1, "a\tb")
call cursor(1, 2, 0)
normal P
call assert_equal("axyz\tb", getline(1))
" paste (p) unnamed register at the end of a tab
call setline(1, "a\tb")
call cursor(1, 2, 6)
normal p
call assert_equal("a\txyzb", getline(1))
" paste (P) unnamed register at the end of a tab
call setline(1, "a\tb")
call cursor(1, 2, 6)
normal P
call assert_equal('a xyz b', getline(1))
" Tests for pasting with gp and gP in virtual edit mode
" paste (gp) unnamed register at the beginning of a tab
call setline(1, "a\tb")
call cursor(1, 2, 0)
normal gp
call assert_equal('a xyz b', getline(1))
call assert_equal([0, 1, 12, 0, 12], getcurpos())
" paste (gP) unnamed register at the beginning of a tab
call setline(1, "a\tb")
call cursor(1, 2, 0)
normal gP
call assert_equal("axyz\tb", getline(1))
call assert_equal([0, 1, 5, 0, 5], getcurpos())
" paste (gp) unnamed register at the end of a tab
call setline(1, "a\tb")
call cursor(1, 2, 6)
normal gp
call assert_equal("a\txyzb", getline(1))
call assert_equal([0, 1, 6, 0, 12], getcurpos())
" paste (gP) unnamed register at the end of a tab
call setline(1, "a\tb")
call cursor(1, 2, 6)
normal gP
call assert_equal("a xyz b", getline(1))
call assert_equal([0, 1, 12, 0 ,12], getcurpos())
call assert_equal('a xyz b', getline(1))
call assert_equal([0, 1, 12, 0, 12], getcurpos())
" Tests for pasting a named register
let @r = 'xyz'
" paste (gp) named register in the middle of a tab
call setline(1, "a\tb")
call cursor(1, 2, 2)
normal "rgp
call assert_equal('a xyz b', getline(1))
call assert_equal([0, 1, 8, 0, 8], getcurpos())
" paste (gP) named register in the middle of a tab
call setline(1, "a\tb")
call cursor(1, 2, 2)
normal "rgP
call assert_equal('a xyz b', getline(1))
call assert_equal([0, 1, 7, 0, 7], getcurpos())
bwipe!
set virtualedit=
endfunc
" Test for yanking a few spaces within a tab to a register
func Test_yank_in_tab()
new
let @r = ''
call setline(1, "a\tb")
set virtualedit=all
call cursor(1, 2, 2)
normal "ry5l
call assert_equal(' ', @r)
bwipe!
set virtualedit=
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2381,
/**/
2380,
/**/