changeset 18784:7b57a80f70f6 v8.1.2381

patch 8.1.2381: not all register related code is covered by tests Commit: https://github.com/vim/vim/commit/54c8d229f54e36e89fcd5d84e523fd894d018024 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 2 20:41:39 2019 +0100 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 https://github.com/vim/vim/issues/5301)
author Bram Moolenaar <Bram@vim.org>
date Mon, 02 Dec 2019 20:45:03 +0100
parents ee76aada926d
children b3ddaa7a8b5b
files src/testdir/test_marks.vim src/testdir/test_registers.vim src/testdir/test_virtualedit.vim src/version.c
diffstat 4 files changed, 210 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_marks.vim
+++ b/src/testdir/test_marks.vim
@@ -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
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -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
--- a/src/testdir/test_virtualedit.vim
+++ b/src/testdir/test_virtualedit.vim
@@ -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)
+
+  " 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\txyzb", getline(1))
+  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)
+  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))
+
+  " 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))
 
-  " Test for virtual block paste with gp and gP
+  " 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
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2381,
+/**/
     2380,
 /**/
     2379,