mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
vim-patch:8.2.0866: not enough tests for buffer writing
Problem: Not enough tests for buffer writing.
Solution: Add more tests. Use CheckRunVimInTerminal in more places.
(Yegappan Lakshmanan, closes vim/vim#6167)
494e9069cb
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
" Test argument list commands
|
||||
|
||||
source check.vim
|
||||
source shared.vim
|
||||
source term_util.vim
|
||||
|
||||
@@ -552,9 +553,7 @@ endfunc
|
||||
|
||||
" Test for quitting Vim with unedited files in the argument list
|
||||
func Test_quit_with_arglist()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot run vim in terminal'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
let buf = RunVimInTerminal('', {'rows': 6})
|
||||
call term_sendkeys(buf, ":set nomore\n")
|
||||
call term_sendkeys(buf, ":args a b c\n")
|
||||
|
@@ -343,9 +343,7 @@ func Test_matchdelete_error()
|
||||
endfunc
|
||||
|
||||
func Test_matchclear_other_window()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot make screendumps'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
let buf = OtherWindowCommon()
|
||||
call term_sendkeys(buf, ":call clearmatches(winid)\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_matchclear_1', {})
|
||||
@@ -355,9 +353,7 @@ func Test_matchclear_other_window()
|
||||
endfunc
|
||||
|
||||
func Test_matchadd_other_window()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot make screendumps'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
let buf = OtherWindowCommon()
|
||||
call term_sendkeys(buf, ":call matchadd('Search', 'Hello', 1, -1, #{window: winid})\<CR>")
|
||||
call term_sendkeys(buf, ":\<CR>")
|
||||
|
@@ -897,9 +897,7 @@ func Test_incsearch_cmdline_modifier()
|
||||
endfunc
|
||||
|
||||
func Test_incsearch_scrolling()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot make screendumps'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
call assert_equal(0, &scrolloff)
|
||||
call writefile([
|
||||
\ 'let dots = repeat(".", 120)',
|
||||
|
@@ -81,6 +81,7 @@ endfunc
|
||||
|
||||
" Test signal INT. Handler sets got_int. It should be like typing CTRL-C.
|
||||
func Test_signal_INT()
|
||||
CheckRunVimInTerminal
|
||||
if !HasSignal('INT')
|
||||
throw 'Skipped: INT signal not supported'
|
||||
endif
|
||||
@@ -92,9 +93,6 @@ func Test_signal_INT()
|
||||
throw 'Skipped: cannot test signal INT with valgrind'
|
||||
endif
|
||||
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot run vim in terminal'
|
||||
endif
|
||||
let buf = RunVimInTerminal('', {'rows': 6})
|
||||
let pid_vim = term_getjob(buf)->job_info().process
|
||||
|
||||
@@ -121,9 +119,7 @@ func Test_deadly_signal_TERM()
|
||||
if !HasSignal('TERM')
|
||||
throw 'Skipped: TERM signal not supported'
|
||||
endif
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot run vim in terminal'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
let cmd = GetVimCommand()
|
||||
if cmd =~ 'valgrind'
|
||||
throw 'Skipped: cannot test signal TERM with valgrind'
|
||||
|
@@ -1741,9 +1741,7 @@ endfunc
|
||||
|
||||
" Test for correct cursor position after the sign column appears or disappears.
|
||||
func Test_sign_cursor_position()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot make screendumps'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
|
||||
let lines =<< trim END
|
||||
call setline(1, [repeat('x', 75), 'mmmm', 'yyyy'])
|
||||
|
@@ -809,9 +809,7 @@ func Test_issue_3969()
|
||||
endfunc
|
||||
|
||||
func Test_start_with_tabs()
|
||||
if !CanRunVimInTerminal()
|
||||
return
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
|
||||
let buf = RunVimInTerminal('-p a b c', {})
|
||||
call VerifyScreenDump(buf, 'Test_start_with_tabs', {})
|
||||
@@ -968,9 +966,7 @@ endfunc
|
||||
|
||||
" Test for specifying a non-existing vimrc file using "-u"
|
||||
func Test_missing_vimrc()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot run vim in terminal'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
let after =<< trim [CODE]
|
||||
call assert_match('^E282:', v:errmsg)
|
||||
call writefile(v:errors, 'Xtestout')
|
||||
|
@@ -63,9 +63,7 @@ func Test_read_fifo_utf8()
|
||||
endfunc
|
||||
|
||||
func Test_detect_ambiwidth()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot run Vim in a terminal window'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
|
||||
" Use the title termcap entries to output the escape sequence.
|
||||
call writefile([
|
||||
|
@@ -631,9 +631,7 @@ endfunc
|
||||
|
||||
" Check highlighting for a small piece of C code with a screen dump.
|
||||
func Test_syntax_c()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot make screendumps'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
call writefile([
|
||||
\ '/* comment line at the top */',
|
||||
\ 'int main(int argc, char **argv) { // another comment',
|
||||
|
@@ -591,9 +591,7 @@ func Test_tabs()
|
||||
endfunc
|
||||
|
||||
func Test_tabpage_cmdheight()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot make screendumps'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
call writefile([
|
||||
\ 'set laststatus=2',
|
||||
\ 'set cmdheight=2',
|
||||
|
@@ -304,9 +304,7 @@ func Test_timer_ex_mode()
|
||||
endfunc
|
||||
|
||||
func Test_timer_restore_count()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot run Vim in a terminal window'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
" Check that v:count is saved and restored, not changed by a timer.
|
||||
call writefile([
|
||||
\ 'nnoremap <expr><silent> L v:count ? v:count . "l" : "l"',
|
||||
|
@@ -1707,9 +1707,7 @@ endfunc
|
||||
|
||||
" Test for deep nesting of if/for/while/try statements {{{1
|
||||
func Test_deep_nest()
|
||||
if !CanRunVimInTerminal()
|
||||
throw 'Skipped: cannot run vim in terminal'
|
||||
endif
|
||||
CheckRunVimInTerminal
|
||||
|
||||
let lines =<< trim [SCRIPT]
|
||||
" Deep nesting of if ... endif
|
||||
|
@@ -267,6 +267,138 @@ func Test_write_errors()
|
||||
" call writefile(v:_null_blob, 'Xfile')
|
||||
" call assert_false(filereadable('Xfile'))
|
||||
call assert_fails('call writefile([], "")', 'E482:')
|
||||
|
||||
" very long file name
|
||||
let long_fname = repeat('n', 5000)
|
||||
call assert_fails('exe "w " .. long_fname', 'E75:')
|
||||
call assert_fails('call writefile([], long_fname)', 'E482:')
|
||||
endfunc
|
||||
|
||||
" Test for writing to a file which is modified after Vim read it
|
||||
func Test_write_file_mtime()
|
||||
CheckEnglish
|
||||
CheckRunVimInTerminal
|
||||
|
||||
" First read the file into a buffer
|
||||
call writefile(["Line1", "Line2"], 'Xfile')
|
||||
let old_ftime = getftime('Xfile')
|
||||
let buf = RunVimInTerminal('Xfile', #{rows : 10})
|
||||
call term_wait(buf)
|
||||
call term_sendkeys(buf, ":set noswapfile\<CR>")
|
||||
call term_wait(buf)
|
||||
|
||||
" Modify the file directly. Make sure the file modification time is
|
||||
" different. Note that on Linux/Unix, the file is considered modified
|
||||
" outside, only if the difference is 2 seconds or more
|
||||
sleep 1
|
||||
call writefile(["Line3", "Line4"], 'Xfile')
|
||||
let new_ftime = getftime('Xfile')
|
||||
while new_ftime - old_ftime < 2
|
||||
sleep 100m
|
||||
call writefile(["Line3", "Line4"], 'Xfile')
|
||||
let new_ftime = getftime('Xfile')
|
||||
endwhile
|
||||
|
||||
" Try to overwrite the file and check for the prompt
|
||||
call term_sendkeys(buf, ":w\<CR>")
|
||||
call term_wait(buf)
|
||||
call WaitForAssert({-> assert_equal("WARNING: The file has been changed since reading it!!!", term_getline(buf, 9))})
|
||||
call assert_equal("Do you really want to write to it (y/n)?",
|
||||
\ term_getline(buf, 10))
|
||||
call term_sendkeys(buf, "n\<CR>")
|
||||
call term_wait(buf)
|
||||
call assert_equal(new_ftime, getftime('Xfile'))
|
||||
call term_sendkeys(buf, ":w\<CR>")
|
||||
call term_wait(buf)
|
||||
call term_sendkeys(buf, "y\<CR>")
|
||||
call term_wait(buf)
|
||||
call WaitForAssert({-> assert_equal('Line2', readfile('Xfile')[1])})
|
||||
|
||||
" clean up
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('Xfile')
|
||||
endfunc
|
||||
|
||||
" Test for an autocmd unloading a buffer during a write command
|
||||
func Test_write_autocmd_unloadbuf_lockmark()
|
||||
augroup WriteTest
|
||||
autocmd BufWritePre Xfile enew | write
|
||||
augroup END
|
||||
e Xfile
|
||||
call assert_fails('lockmarks write', 'E203:')
|
||||
augroup WriteTest
|
||||
au!
|
||||
augroup END
|
||||
augroup! WriteTest
|
||||
endfunc
|
||||
|
||||
" Test for writing a buffer with 'acwrite' but without autocmds
|
||||
func Test_write_acwrite_error()
|
||||
new Xfile
|
||||
call setline(1, ['line1', 'line2', 'line3'])
|
||||
set buftype=acwrite
|
||||
call assert_fails('write', 'E676:')
|
||||
call assert_fails('1,2write!', 'E676:')
|
||||
call assert_fails('w >>', 'E676:')
|
||||
close!
|
||||
endfunc
|
||||
|
||||
" Test for adding and removing lines from an autocmd when writing a buffer
|
||||
func Test_write_autocmd_add_remove_lines()
|
||||
new Xfile
|
||||
call setline(1, ['aaa', 'bbb', 'ccc', 'ddd'])
|
||||
|
||||
" Autocmd deleting lines from the file when writing a partial file
|
||||
augroup WriteTest2
|
||||
au!
|
||||
autocmd FileWritePre Xfile 1,2d
|
||||
augroup END
|
||||
call assert_fails('2,3w!', 'E204:')
|
||||
|
||||
" Autocmd adding lines to a file when writing a partial file
|
||||
augroup WriteTest2
|
||||
au!
|
||||
autocmd FileWritePre Xfile call append(0, ['xxx', 'yyy'])
|
||||
augroup END
|
||||
%d
|
||||
call setline(1, ['aaa', 'bbb', 'ccc', 'ddd'])
|
||||
1,2w!
|
||||
call assert_equal(['xxx', 'yyy', 'aaa', 'bbb'], readfile('Xfile'))
|
||||
|
||||
" Autocmd deleting lines from the file when writing the whole file
|
||||
augroup WriteTest2
|
||||
au!
|
||||
autocmd BufWritePre Xfile 1,2d
|
||||
augroup END
|
||||
%d
|
||||
call setline(1, ['aaa', 'bbb', 'ccc', 'ddd'])
|
||||
w
|
||||
call assert_equal(['ccc', 'ddd'], readfile('Xfile'))
|
||||
|
||||
augroup WriteTest2
|
||||
au!
|
||||
augroup END
|
||||
augroup! WriteTest2
|
||||
|
||||
close!
|
||||
call delete('Xfile')
|
||||
endfunc
|
||||
|
||||
" Test for writing to a readonly file
|
||||
func Test_write_readonly()
|
||||
" In Cirrus-CI, the freebsd tests are run under a root account. So this test
|
||||
" doesn't fail.
|
||||
CheckNotBSD
|
||||
call writefile([], 'Xfile')
|
||||
call setfperm('Xfile', "r--------")
|
||||
edit Xfile
|
||||
set noreadonly
|
||||
call assert_fails('write', 'E505:')
|
||||
let save_cpo = &cpo
|
||||
set cpo+=W
|
||||
call assert_fails('write!', 'E504:')
|
||||
let &cpo = save_cpo
|
||||
call delete('Xfile')
|
||||
endfunc
|
||||
|
||||
" Test for writing a file using invalid file encoding
|
||||
|
Reference in New Issue
Block a user