0
0
mirror of https://github.com/vim/vim.git synced 2025-10-03 05:14:07 -04:00

patch 8.2.2945: some buffer related code is not tested

Problem:    Some buffer related code is not tested.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #8320)
This commit is contained in:
Yegappan Lakshmanan
2021-06-05 20:59:22 +02:00
committed by Bram Moolenaar
parent 1328bde9d4
commit 59b262362f
6 changed files with 217 additions and 1 deletions

View 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;

View 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

View 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

View 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

View 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 _

View File

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