1
0
forked from aniani/vim

patch 8.1.2375: no suffucient testing for registers

Problem:    No suffucient testing for registers.
Solution:   Add more test cases. (Yegappan Lakshmanan, closes #5296)
            Fix that "p" on last virtual column of tab inserts spaces.
This commit is contained in:
Bram Moolenaar
2019-12-01 18:16:18 +01:00
parent 269e4bd9d2
commit 6f1f0ca3ed
5 changed files with 118 additions and 10 deletions

View File

@@ -1668,21 +1668,19 @@ do_put(
{
if (gchar_cursor() == TAB)
{
int viscol = getviscol();
int ts = curbuf->b_p_ts;
// Don't need to insert spaces when "p" on the last position of a
// tab or "P" on the first position.
if (dir == FORWARD ?
#ifdef FEAT_VARTABS
int viscol = getviscol();
if (dir == FORWARD
? tabstop_padding(viscol, curbuf->b_p_ts,
curbuf->b_p_vts_array) != 1
tabstop_padding(viscol, ts, curbuf->b_p_vts_array) != 1
#else
ts - (viscol % ts) != 1
#endif
: curwin->w_cursor.coladd > 0)
coladvance_force(viscol);
#else
if (dir == FORWARD
? (int)curwin->w_cursor.coladd < curbuf->b_p_ts - 1
: curwin->w_cursor.coladd > 0)
coladvance_force(getviscol());
#endif
else
curwin->w_cursor.coladd = 0;
}

View File

@@ -10,6 +10,8 @@ func Test_aaa_empty_reg_test()
call assert_fails('normal @!', 'E354:')
call assert_fails('normal @:', 'E30:')
call assert_fails('normal @.', 'E29:')
call assert_fails('put /', 'E35:')
call assert_fails('put .', 'E29:')
endfunc
func Test_yank_shows_register()
@@ -203,6 +205,14 @@ func Test_last_used_exec_reg()
normal @@
call assert_equal('EditEdit', a)
" Test for repeating the last command-line in visual mode
call append(0, 'register')
normal gg
let @r = ''
call feedkeys("v:yank R\<CR>", 'xt')
call feedkeys("v@:", 'xt')
call assert_equal("\nregister\nregister\n", @r)
enew!
endfunc
@@ -226,6 +236,28 @@ 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>!"')
" Test for inserting a register with multiple lines
call deletebufline('', 1, '$')
call setreg('r', ['a', 'b'])
exe "normal i\<C-R>r"
call assert_equal(['a', 'b', ''], getline(1, '$'))
" Test for inserting a multi-line register in the command line
call feedkeys(":\<C-R>r\<Esc>", 'xt')
call assert_equal("a\rb\r", histget(':', -1))
enew!
endfunc
@@ -249,6 +281,25 @@ func Test_set_register()
call setreg('=', 'b', 'a')
call assert_equal('regwrite', getreg('='))
" Test for settting a list of lines to special registers
call setreg('/', [])
call assert_equal('', @/)
call setreg('=', [])
call assert_equal('', @=)
call assert_fails("call setreg('/', ['a', 'b'])", 'E883:')
call assert_fails("call setreg('=', ['a', 'b'])", 'E883:')
call assert_equal(0, setreg('_', ['a', 'b']))
" Test for recording to a invalid register
call assert_beeps('normal q$')
" Appending to a register when recording
call append(0, "text for clipboard test")
normal gg
call feedkeys('qrllq', 'xt')
call feedkeys('qRhhq', 'xt')
call assert_equal('llhh', getreg('r'))
enew!
endfunc

View File

@@ -81,4 +81,46 @@ func Test_edit_change()
normal Cx
call assert_equal('x', getline(1))
bwipe!
set virtualedit=
endfunc
" Test for pasting before and after a tab character
func Test_paste_in_tab()
new
let @" = 'xyz'
set virtualedit=all
call append(0, "a\tb")
call cursor(1, 2, 6)
normal p
call assert_equal("a\txyzb", getline(1))
call setline(1, "a\tb")
call cursor(1, 2)
normal P
call assert_equal("axyz\tb", getline(1))
" Test for virtual block paste
call setreg('"', 'xyz', 'b')
call setline(1, "a\tb")
call cursor(1, 2, 6)
normal p
call assert_equal("a\txyzb", getline(1))
call setline(1, "a\tb")
call cursor(1, 2, 6)
normal P
call assert_equal("a xyz b", getline(1))
" Test for virtual block paste with gp and gP
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())
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())
bwipe!
set virtualedit=
endfunc

View File

@@ -428,3 +428,18 @@ func Test_Visual_Block()
close!
endfunc
" Test for 'p'ut in visual block mode
func Test_visual_block_put()
enew
call append(0, ['One', 'Two', 'Three'])
normal gg
yank
call feedkeys("jl\<C-V>ljp", 'xt')
call assert_equal(['One', 'T', 'Tee', 'One', ''], getline(1, '$'))
enew!
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 */
/**/
2375,
/**/
2374,
/**/