mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.0982: insufficient testing for reading/writing files
Problem: Insufficient testing for reading/writing files.
Solution: Add more tests. (Yegappan Lakshmanan, closes vim/vim#6257)
Add "ui_delay" to test_override() and use it for the CTRL-O test.
b340baed9f
Omit test_override().
Reorder test_writefile.vim to match Vim.
This commit is contained in:
parent
efebf30784
commit
b7c86e24f7
@ -2737,6 +2737,59 @@ func Test_autocmd_sigusr1()
|
||||
unlet g:sigusr1_passed
|
||||
endfunc
|
||||
|
||||
" Test for BufReadPre autocmd deleting the file
|
||||
func Test_BufReadPre_delfile()
|
||||
augroup TestAuCmd
|
||||
au!
|
||||
autocmd BufReadPre Xfile call delete('Xfile')
|
||||
augroup END
|
||||
call writefile([], 'Xfile')
|
||||
call assert_fails('new Xfile', 'E200:')
|
||||
call assert_equal('Xfile', @%)
|
||||
call assert_equal(1, &readonly)
|
||||
call delete('Xfile')
|
||||
augroup TestAuCmd
|
||||
au!
|
||||
augroup END
|
||||
close!
|
||||
endfunc
|
||||
|
||||
" Test for BufReadPre autocmd changing the current buffer
|
||||
func Test_BufReadPre_changebuf()
|
||||
augroup TestAuCmd
|
||||
au!
|
||||
autocmd BufReadPre Xfile edit Xsomeotherfile
|
||||
augroup END
|
||||
call writefile([], 'Xfile')
|
||||
call assert_fails('new Xfile', 'E201:')
|
||||
call assert_equal('Xsomeotherfile', @%)
|
||||
call assert_equal(1, &readonly)
|
||||
call delete('Xfile')
|
||||
augroup TestAuCmd
|
||||
au!
|
||||
augroup END
|
||||
close!
|
||||
endfunc
|
||||
|
||||
" Test for BufWipeouti autocmd changing the current buffer when reading a file
|
||||
" in an empty buffer with 'f' flag in 'cpo'
|
||||
func Test_BufDelete_changebuf()
|
||||
new
|
||||
augroup TestAuCmd
|
||||
au!
|
||||
autocmd BufWipeout * let bufnr = bufadd('somefile') | exe "b " .. bufnr
|
||||
augroup END
|
||||
let save_cpo = &cpo
|
||||
set cpo+=f
|
||||
call assert_fails('r Xfile', 'E484:')
|
||||
call assert_equal('somefile', @%)
|
||||
let &cpo = save_cpo
|
||||
augroup TestAuCmd
|
||||
au!
|
||||
augroup END
|
||||
close!
|
||||
endfunc
|
||||
|
||||
" Test for the temporary internal window used to execute autocmds
|
||||
func Test_autocmd_window()
|
||||
%bw!
|
||||
|
@ -1604,6 +1604,7 @@ func Test_edit_InsertLeave_undo()
|
||||
bwipe!
|
||||
au! InsertLeave
|
||||
call delete('XtestUndo')
|
||||
call delete(undofile('XtestUndo'))
|
||||
set undofile&
|
||||
endfunc
|
||||
|
||||
@ -1671,11 +1672,11 @@ func Test_edit_noesckeys()
|
||||
endfunc
|
||||
|
||||
" Test for running an invalid ex command in insert mode using CTRL-O
|
||||
" Note that vim has a hard-coded sleep of 3 seconds. So this test will take
|
||||
" more than 3 seconds to complete.
|
||||
func Test_edit_ctrl_o_invalid_cmd()
|
||||
new
|
||||
set showmode showcmd
|
||||
" Avoid a sleep of 3 seconds. Zero might have side effects.
|
||||
" call test_override('ui_delay', 50)
|
||||
let caught_e492 = 0
|
||||
try
|
||||
call feedkeys("i\<C-O>:invalid\<CR>abc\<Esc>", "xt")
|
||||
@ -1685,6 +1686,18 @@ func Test_edit_ctrl_o_invalid_cmd()
|
||||
call assert_equal(1, caught_e492)
|
||||
call assert_equal('abc', getline(1))
|
||||
set showmode& showcmd&
|
||||
" call test_override('ui_delay', 0)
|
||||
close!
|
||||
endfunc
|
||||
|
||||
" Test for editing a file with a very long name
|
||||
func Test_edit_illegal_filename()
|
||||
CheckEnglish
|
||||
new
|
||||
redir => msg
|
||||
exe 'edit ' . repeat('f', 5000)
|
||||
redir END
|
||||
call assert_match("Illegal file name$", split(msg, "\n")[0])
|
||||
close!
|
||||
endfunc
|
||||
|
||||
@ -1747,6 +1760,102 @@ func Test_edit_is_a_directory()
|
||||
call delete(dirname, 'rf')
|
||||
endfunc
|
||||
|
||||
" Test for editing a file using invalid file encoding
|
||||
func Test_edit_invalid_encoding()
|
||||
CheckEnglish
|
||||
call writefile([], 'Xfile')
|
||||
redir => msg
|
||||
new ++enc=axbyc Xfile
|
||||
redir END
|
||||
call assert_match('\[NOT converted\]', msg)
|
||||
call delete('Xfile')
|
||||
close!
|
||||
endfunc
|
||||
|
||||
" Test for the "charconvert" option
|
||||
func Test_edit_charconvert()
|
||||
CheckEnglish
|
||||
call writefile(['one', 'two'], 'Xfile')
|
||||
|
||||
" set 'charconvert' to a non-existing function
|
||||
set charconvert=NonExitingFunc()
|
||||
new
|
||||
let caught_e117 = v:false
|
||||
try
|
||||
redir => msg
|
||||
edit ++enc=axbyc Xfile
|
||||
catch /E117:/
|
||||
let caught_e117 = v:true
|
||||
finally
|
||||
redir END
|
||||
endtry
|
||||
call assert_true(caught_e117)
|
||||
call assert_equal(['one', 'two'], getline(1, '$'))
|
||||
call assert_match("Conversion with 'charconvert' failed", msg)
|
||||
close!
|
||||
set charconvert&
|
||||
|
||||
" 'charconvert' function doesn't create a output file
|
||||
func Cconv1()
|
||||
endfunc
|
||||
set charconvert=Cconv1()
|
||||
new
|
||||
redir => msg
|
||||
edit ++enc=axbyc Xfile
|
||||
redir END
|
||||
call assert_equal(['one', 'two'], getline(1, '$'))
|
||||
call assert_match("can't read output of 'charconvert'", msg)
|
||||
close!
|
||||
delfunc Cconv1
|
||||
set charconvert&
|
||||
|
||||
" 'charconvert' function to convert to upper case
|
||||
func Cconv2()
|
||||
let data = readfile(v:fname_in)
|
||||
call map(data, 'toupper(v:val)')
|
||||
call writefile(data, v:fname_out)
|
||||
endfunc
|
||||
set charconvert=Cconv2()
|
||||
new Xfile
|
||||
write ++enc=ucase Xfile1
|
||||
call assert_equal(['ONE', 'TWO'], readfile('Xfile1'))
|
||||
call delete('Xfile1')
|
||||
close!
|
||||
delfunc Cconv2
|
||||
set charconvert&
|
||||
|
||||
" 'charconvert' function removes the input file
|
||||
func Cconv3()
|
||||
call delete(v:fname_in)
|
||||
endfunc
|
||||
set charconvert=Cconv3()
|
||||
new
|
||||
call assert_fails('edit ++enc=lcase Xfile', 'E202:')
|
||||
call assert_equal([''], getline(1, '$'))
|
||||
close!
|
||||
delfunc Cconv3
|
||||
set charconvert&
|
||||
|
||||
call delete('Xfile')
|
||||
endfunc
|
||||
|
||||
" Test for editing a file without read permission
|
||||
func Test_edit_file_no_read_perm()
|
||||
CheckUnix
|
||||
CheckNotBSD
|
||||
call writefile(['one', 'two'], 'Xfile')
|
||||
call setfperm('Xfile', '-w-------')
|
||||
new
|
||||
redir => msg
|
||||
edit Xfile
|
||||
redir END
|
||||
call assert_equal(1, &readonly)
|
||||
call assert_equal([''], getline(1, '$'))
|
||||
call assert_match('\[Permission Denied\]', msg)
|
||||
close!
|
||||
call delete('Xfile')
|
||||
endfunc
|
||||
|
||||
" Using :edit without leaving 'insertmode' should not cause Insert mode to be
|
||||
" re-entered immediately after <C-L>
|
||||
func Test_edit_insertmode_ex_edit()
|
||||
|
@ -242,6 +242,15 @@ func Test_file_changed_dialog()
|
||||
call assert_equal(1, line('$'))
|
||||
call assert_equal('new line', getline(1))
|
||||
|
||||
" File created after starting to edit it
|
||||
call delete('Xchanged_d')
|
||||
new Xchanged_d
|
||||
call writefile(['one'], 'Xchanged_d')
|
||||
call feedkeys('L', 'L')
|
||||
checktime Xchanged_d
|
||||
call assert_equal(['one'], getline(1, '$'))
|
||||
close!
|
||||
|
||||
bwipe!
|
||||
call delete('Xchanged_d')
|
||||
endfunc
|
||||
|
@ -128,6 +128,25 @@ func Test_nowrite_quit_split()
|
||||
bwipe Xfile
|
||||
endfunc
|
||||
|
||||
func Test_writefile_sync_arg()
|
||||
" This doesn't check if fsync() works, only that the argument is accepted.
|
||||
call writefile(['one'], 'Xtest', 's')
|
||||
call writefile(['two'], 'Xtest', 'S')
|
||||
call delete('Xtest')
|
||||
endfunc
|
||||
|
||||
func Test_writefile_sync_dev_stdout()
|
||||
if !has('unix')
|
||||
return
|
||||
endif
|
||||
if filewritable('/dev/stdout')
|
||||
" Just check that this doesn't cause an error.
|
||||
call writefile(['one'], '/dev/stdout', 's')
|
||||
else
|
||||
throw 'Skipped: /dev/stdout is not writable'
|
||||
endif
|
||||
endfunc
|
||||
|
||||
func Test_writefile_autowrite()
|
||||
set autowrite
|
||||
new
|
||||
@ -237,29 +256,18 @@ func Test_write_errors()
|
||||
call delete('Xfile')
|
||||
endfunc
|
||||
|
||||
func Test_writefile_sync_dev_stdout()
|
||||
if !has('unix')
|
||||
return
|
||||
endif
|
||||
if filewritable('/dev/stdout')
|
||||
" Just check that this doesn't cause an error.
|
||||
call writefile(['one'], '/dev/stdout', 's')
|
||||
else
|
||||
throw 'Skipped: /dev/stdout is not writable'
|
||||
endif
|
||||
endfunc
|
||||
|
||||
func Test_writefile_sync_arg()
|
||||
" This doesn't check if fsync() works, only that the argument is accepted.
|
||||
call writefile(['one'], 'Xtest', 's')
|
||||
call writefile(['two'], 'Xtest', 'S')
|
||||
call delete('Xtest')
|
||||
" Test for writing a file using invalid file encoding
|
||||
func Test_write_invalid_encoding()
|
||||
new
|
||||
call setline(1, 'abc')
|
||||
call assert_fails('write ++enc=axbyc Xfile', 'E213:')
|
||||
close!
|
||||
endfunc
|
||||
|
||||
" Tests for reading and writing files with conversion for Win32.
|
||||
func Test_write_file_encoding()
|
||||
CheckMSWindows
|
||||
throw 'skipped: Nvim does not support :w ++enc=cp1251'
|
||||
CheckMSWindows
|
||||
let save_encoding = &encoding
|
||||
let save_fileencodings = &fileencodings
|
||||
set encoding& fileencodings&
|
||||
|
@ -67,6 +67,15 @@ describe('file changed dialog', function()
|
||||
call assert_equal(1, line('$'))
|
||||
call assert_equal('new line', getline(1))
|
||||
|
||||
" File created after starting to edit it
|
||||
call delete('Xchanged_d')
|
||||
new Xchanged_d
|
||||
call writefile(['one'], 'Xchanged_d')
|
||||
call nvim_input('L')
|
||||
checktime Xchanged_d
|
||||
call assert_equal(['one'], getline(1, '$'))
|
||||
close!
|
||||
|
||||
bwipe!
|
||||
call delete('Xchanged_d')
|
||||
endfunc
|
||||
|
Loading…
Reference in New Issue
Block a user