Patch 8.1.2381
Problem: Not all register related code is covered by tests.
Solution: Add more test cases. (Yegappan Lakshmanan, closes #5301)
Files: src/testdir/test_marks.vim, src/testdir/test_registers.vim,
src/testdir/test_virtualedit.vim
*** ../vim-8.1.2380/src/testdir/test_marks.vim 2019-02-04 21:14:41.901108644 +0100
--- src/testdir/test_marks.vim 2019-12-02 20:37:22.303827471 +0100
***************
*** 174,176 ****
--- 174,193 ----
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
*** ../vim-8.1.2380/src/testdir/test_registers.vim 2019-12-01 18:16:14.553582042 +0100
--- src/testdir/test_registers.vim 2019-12-02 20:40:25.983154598 +0100
***************
*** 2,7 ****
--- 2,9 ----
" 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,250 ****
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>!"')
--- 238,243 ----
***************
*** 300,306 ****
--- 293,389 ----
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
*** ../vim-8.1.2380/src/testdir/test_virtualedit.vim 2019-12-01 18:16:14.553582042 +0100
--- src/testdir/test_virtualedit.vim 2019-12-02 20:37:22.303827471 +0100
***************
*** 84,126 ****
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
--- 84,213 ----
set virtualedit=
endfunc
! " Tests for pasting at the beginning, end and middle of a tab character
! " in virtual edit mode.
func Test_paste_in_tab()
new
! call append(0, '')
set virtualedit=all
!
! " 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, 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 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())
!
! " 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
*** ../vim-8.1.2380/src/version.c 2019-12-01 22:11:14.556778762 +0100
--- src/version.c 2019-12-02 20:40:54.343046602 +0100
***************
*** 744,745 ****
--- 744,747 ----
{ /* Add new patch number below this line */
+ /**/
+ 2381,
/**/
--
hundred-and-one symptoms of being an internet addict:
175. You send yourself e-mail before you go to bed to remind you
what to do when you wake up.
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language --
http://www.Zimbu.org ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///