]> granicus.if.org Git - vim/commitdiff
patch 8.2.2945: some buffer related code is not tested v8.2.2945
authorYegappan Lakshmanan <yegappan@yahoo.com>
Sat, 5 Jun 2021 18:59:22 +0000 (20:59 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 5 Jun 2021 18:59:22 +0000 (20:59 +0200)
Problem:    Some buffer related code is not tested.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #8320)

src/termlib.c
src/testdir/test_excmd.vim
src/testdir/test_recover.vim
src/testdir/test_swap.vim
src/testdir/test_visual.vim
src/version.c

index e05daae5d4cf75713252568dc1c2fec6cd04f7ff..7c845c5c364337d41b6b6067409169afc3a8a078 100644 (file)
@@ -591,7 +591,7 @@ _match(char *s1, char *s2)
     static char *
 _find(char *s, char *set)
 {
-    for(; *s; s++)
+    for (; *s; s++)
     {
        char    *ptr = set;
 
index 2e137f0e61679f1113b29a6d3c3bec869a3922c2..60753a6e82c7f21adc3d1751895f4bff2225588c 100644 (file)
@@ -69,6 +69,14 @@ func Test_file_cmd()
   call assert_fails('3file', 'E474:')
   call assert_fails('0,0file', 'E474:')
   call assert_fails('0file abc', 'E474:')
+  if !has('win32')
+    " Change the name of the buffer to the same name
+    new Xfile1
+    file Xfile1
+    call assert_equal('Xfile1', @%)
+    call assert_equal('Xfile1', @#)
+    bw!
+  endif
 endfunc
 
 " Test for the :drop command
index a1ff7d92af4f13dccf16001d7406a33f25040e3f..654a0f855abf1c4fc75dae0b805dd71d8e545282 100644 (file)
@@ -133,4 +133,131 @@ func Test_nocatch_process_still_running()
   call delete(swname)
 endfunc
 
+" Test for :recover with multiple swap files
+func Test_recover_multiple_swap_files()
+  CheckUnix
+  new Xfile1
+  call setline(1, ['a', 'b', 'c'])
+  preserve
+  let b = readblob('.Xfile1.swp')
+  call writefile(b, '.Xfile1.swm')
+  call writefile(b, '.Xfile1.swn')
+  call writefile(b, '.Xfile1.swo')
+  %bw!
+  call feedkeys(":recover Xfile1\<CR>3\<CR>q", 'xt')
+  call assert_equal(['a', 'b', 'c'], getline(1, '$'))
+
+  call delete('.Xfile1.swm')
+  call delete('.Xfile1.swn')
+  call delete('.Xfile1.swo')
+endfunc
+
+" Test for :recover using an empty swap file
+func Test_recover_empty_swap_file()
+  CheckUnix
+  call writefile([], '.Xfile1.swp')
+  let msg = execute('recover Xfile1')
+  call assert_match('Unable to read block 0 from .Xfile1.swp', msg)
+  call assert_equal('Xfile1', @%)
+  bw!
+  " :recover from an empty buffer
+  call assert_fails('recover', 'E305:')
+  call delete('.Xfile1.swp')
+endfunc
+
+" Test for :recover using a corrupted swap file
+func Test_recover_corrupted_swap_file()
+  CheckUnix
+  " recover using a partial swap file
+  call writefile(0z1234, '.Xfile1.swp')
+  call assert_fails('recover Xfile1', 'E295:')
+  bw!
+
+  " recover using invalid content in the swap file
+  call writefile([repeat('1', 2*1024)], '.Xfile1.swp')
+  call assert_fails('recover Xfile1', 'E307:')
+  call delete('.Xfile1.swp')
+
+  " :recover using a swap file with a corrupted header
+  edit Xfile1
+  preserve
+  let sn = swapname('')
+  let b = readblob(sn)
+  bw!
+  " clear the B0_MAGIC_LONG field
+  let b[1008:1011] = 0z00000000
+  call writefile(b, sn)
+  let msg = execute('recover Xfile1')
+  call assert_match('the file has been damaged', msg)
+  bw!
+  call delete(sn)
+endfunc
+
+" Test for :recover using an encrypted swap file
+func Test_recover_encrypted_swap_file()
+  CheckUnix
+
+  " Recover an encrypted file from the swap file without the original file
+  new Xfile1
+  call feedkeys(":X\<CR>vim\<CR>vim\<CR>", 'xt')
+  call setline(1, ['aaa', 'bbb', 'ccc'])
+  preserve
+  let b = readblob('.Xfile1.swp')
+  call writefile(b, '.Xfile1.swm')
+  bw!
+  call feedkeys(":recover Xfile1\<CR>vim\<CR>\<CR>", 'xt')
+  call assert_equal(['aaa', 'bbb', 'ccc'], getline(1, '$'))
+  bw!
+  call delete('.Xfile1.swm')
+
+  " Recover an encrypted file from the swap file with the original file
+  new Xfile1
+  call feedkeys(":X\<CR>vim\<CR>vim\<CR>", 'xt')
+  call setline(1, ['aaa', 'bbb', 'ccc'])
+  update
+  call setline(1, ['111', '222', '333'])
+  preserve
+  let b = readblob('.Xfile1.swp')
+  call writefile(b, '.Xfile1.swm')
+  bw!
+  call feedkeys(":recover Xfile1\<CR>vim\<CR>\<CR>", 'xt')
+  call assert_equal(['111', '222', '333'], getline(1, '$'))
+  call assert_true(&modified)
+  bw!
+  call delete('.Xfile1.swm')
+  call delete('Xfile1')
+endfunc
+
+" Test for :recover using a unreadable swap file
+func Test_recover_unreadble_swap_file()
+  CheckUnix
+  CheckNotRoot
+  new Xfile1
+  let b = readblob('.Xfile1.swp')
+  call writefile(b, '.Xfile1.swm')
+  bw!
+  call setfperm('.Xfile1.swm', '-w-------')
+  call assert_fails('recover Xfile1', 'E306:')
+  call delete('.Xfile1.swm')
+endfunc
+
+" Test for using :recover when the original file and the swap file have the
+" same contents.
+func Test_recover_unmodified_file()
+  CheckUnix
+  call writefile(['aaa', 'bbb', 'ccc'], 'Xfile1')
+  edit Xfile1
+  preserve
+  let b = readblob('.Xfile1.swp')
+  %bw!
+  call writefile(b, '.Xfile1.swz')
+  let msg = execute('recover Xfile1')
+  call assert_equal(['aaa', 'bbb', 'ccc'], getline(1, '$'))
+  call assert_false(&modified)
+  call assert_match('Buffer contents equals file contents', msg)
+  bw!
+  call delete('Xfile1')
+  call delete('.Xfile1.swz')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 5f3f24da6a742a1fdf352d84310587c4e09410ee..52eb62e729b239338ebcd3c57ceed2711bc87dbc 100644 (file)
@@ -483,4 +483,79 @@ func Test_swap_auto_delete()
   augroup! test_swap_recover_ext
 endfunc
 
+" Test for renaming a buffer when the swap file is deleted out-of-band
+func Test_missing_swap_file()
+  CheckUnix
+  new Xfile1
+  call delete('.Xfile1.swp')
+  call assert_fails('file Xfile2', 'E301:')
+  call assert_equal('Xfile2', bufname())
+  call assert_true(bufexists('Xfile1'))
+  call assert_true(bufexists('Xfile2'))
+  %bw!
+endfunc
+
+" Test for :preserve command
+func Test_preserve()
+  new Xfile1
+  setlocal noswapfile
+  call assert_fails('preserve', 'E313:')
+  bw!
+endfunc
+
+" Test for the v:swapchoice variable
+func Test_swapchoice()
+  call writefile(['aaa', 'bbb'], 'Xfile1')
+  edit Xfile1
+  preserve
+  let swapfname = swapname('')
+  let b = readblob(swapfname)
+  bw!
+  call writefile(b, swapfname)
+
+  autocmd! SwapExists
+
+  " Test for v:swapchoice = 'o' (readonly)
+  augroup test_swapchoice
+    autocmd!
+    autocmd SwapExists * let v:swapchoice = 'o'
+  augroup END
+  edit Xfile1
+  call assert_true(&readonly)
+  call assert_equal(['aaa', 'bbb'], getline(1, '$'))
+  %bw!
+  call assert_true(filereadable(swapfname))
+
+  " Test for v:swapchoice = 'a' (abort)
+  augroup test_swapchoice
+    autocmd!
+    autocmd SwapExists * let v:swapchoice = 'a'
+  augroup END
+  try
+    edit Xfile1
+  catch /^Vim:Interrupt$/
+  endtry
+  call assert_equal('', @%)
+  call assert_true(bufexists('Xfile1'))
+  %bw!
+  call assert_true(filereadable(swapfname))
+
+  " Test for v:swapchoice = 'd' (delete)
+  augroup test_swapchoice
+    autocmd!
+    autocmd SwapExists * let v:swapchoice = 'd'
+  augroup END
+  edit Xfile1
+  call assert_equal('Xfile1', @%)
+  %bw!
+  call assert_false(filereadable(swapfname))
+
+  call delete('Xfile1')
+  call delete(swapfname)
+  augroup test_swapchoice
+    autocmd!
+  augroup END
+  augroup! test_swapchoice
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index b368c32b1f936b6f846f4846cc4333bd055ddfb5..51ef5ae8126ff4dfdf361af504aa5839db3549d0 100644 (file)
@@ -811,6 +811,10 @@ func Test_visual_block_mode()
   " reproducible if this operation is performed manually.
   "call assert_equal(['aaxa', 'bbxb', 'ccxc'], getline(1, '$'))
   call assert_equal(['aaxa', 'bbba', 'ccca'], getline(1, '$'))
+  " Repeat the previous test but use 'l' to move the cursor instead of '$'
+  call setline(1, ['aaa', 'bbb', 'ccc'])
+  exe "normal! gg2l\<C-V>2jA\<Left>x"
+  call assert_equal(['aaxa', 'bbxb', 'ccxc'], getline(1, '$'))
 
   " Change a characterwise motion to a blockwise motion using CTRL-V
   %d _
index b729c99f5e64a0686429c9dcb10bc91c27fad720..ec20c946e4f0b652dee9e47705660cfecd811600 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2945,
 /**/
     2944,
 /**/