mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-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 vim/vim#8320)
59b262362f
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
parent
9736605672
commit
3f75f25f9c
@ -78,6 +78,14 @@ func Test_file_cmd()
|
|||||||
call assert_fails('3file', 'E474:')
|
call assert_fails('3file', 'E474:')
|
||||||
call assert_fails('0,0file', 'E474:')
|
call assert_fails('0,0file', 'E474:')
|
||||||
call assert_fails('0file abc', '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
|
endfunc
|
||||||
|
|
||||||
" Test for the :drop command
|
" Test for the :drop command
|
||||||
|
@ -138,4 +138,131 @@ func Test_nocatch_process_still_running()
|
|||||||
call delete(swname)
|
call delete(swname)
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -501,6 +501,81 @@ func Test_swap_auto_delete()
|
|||||||
augroup! test_swap_recover_ext
|
augroup! test_swap_recover_ext
|
||||||
endfunc
|
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
|
||||||
|
|
||||||
func Test_no_swap_file()
|
func Test_no_swap_file()
|
||||||
call assert_equal("\nNo swap file", execute('swapname'))
|
call assert_equal("\nNo swap file", execute('swapname'))
|
||||||
endfunc
|
endfunc
|
||||||
|
Loading…
Reference in New Issue
Block a user