Patch 8.2.0866

8 views
Skip to first unread message

Bram Moolenaar

unread,
May 31, 2020, 3:28:51 PM5/31/20
to vim...@googlegroups.com

Patch 8.2.0866
Problem: Not enough tests for buffer writing.
Solution: Add more tests. Use CheckRunVimInTerminal in more places.
(Yegappan Lakshmanan, closes #6167)
Files: src/testdir/test_arglist.vim, src/testdir/test_match.vim,
src/testdir/test_messages.vim, src/testdir/test_netbeans.py,
src/testdir/test_netbeans.vim, src/testdir/test_search.vim,
src/testdir/test_signals.vim, src/testdir/test_signs.vim,
src/testdir/test_startup.vim, src/testdir/test_startup_utf8.vim,
src/testdir/test_syntax.vim, src/testdir/test_tabpage.vim,
src/testdir/test_timers.vim, src/testdir/test_vimscript.vim,
src/testdir/test_writefile.vim


*** ../vim-8.2.0865/src/testdir/test_arglist.vim 2020-04-08 21:50:18.872619665 +0200
--- src/testdir/test_arglist.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 1,5 ****
--- 1,6 ----
" Test argument list commands

+ source check.vim
source shared.vim
source term_util.vim

***************
*** 511,519 ****

" Test for quiting Vim with unedited files in the argument list
func Test_quit_with_arglist()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot run vim in terminal'
! endif
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":set nomore\n")
call term_sendkeys(buf, ":args a b c\n")
--- 512,518 ----

" Test for quiting Vim with unedited files in the argument list
func Test_quit_with_arglist()
! CheckRunVimInTerminal
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":set nomore\n")
call term_sendkeys(buf, ":args a b c\n")
*** ../vim-8.2.0865/src/testdir/test_match.vim 2020-04-26 15:59:51.206952132 +0200
--- src/testdir/test_match.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 313,321 ****
endfunc

func Test_matchclear_other_window()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot make screendumps'
! endif
let buf = OtherWindowCommon()
call term_sendkeys(buf, ":call clearmatches(winid)\<CR>")
call VerifyScreenDump(buf, 'Test_matchclear_1', {})
--- 313,319 ----
endfunc

func Test_matchclear_other_window()
! CheckRunVimInTerminal
let buf = OtherWindowCommon()
call term_sendkeys(buf, ":call clearmatches(winid)\<CR>")
call VerifyScreenDump(buf, 'Test_matchclear_1', {})
***************
*** 325,333 ****
endfunc

func Test_matchadd_other_window()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot make screendumps'
! endif
let buf = OtherWindowCommon()
call term_sendkeys(buf, ":call matchadd('Search', 'Hello', 1, -1, #{window: winid})\<CR>")
call term_sendkeys(buf, ":\<CR>")
--- 323,329 ----
endfunc

func Test_matchadd_other_window()
! CheckRunVimInTerminal
let buf = OtherWindowCommon()
call term_sendkeys(buf, ":call matchadd('Search', 'Hello', 1, -1, #{window: winid})\<CR>")
call term_sendkeys(buf, ":\<CR>")
*** ../vim-8.2.0865/src/testdir/test_messages.vim 2020-05-30 21:52:49.242816719 +0200
--- src/testdir/test_messages.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 1,5 ****
--- 1,6 ----
" Tests for :messages, :echomsg, :echoerr

+ source check.vim
source shared.vim
source term_util.vim
source view_util.vim
***************
*** 172,180 ****

" Test more-prompt (see :help more-prompt).
func Test_message_more()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot run vim in terminal'
! endif
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":call setline(1, range(1, 100))\n")

--- 173,179 ----

" Test more-prompt (see :help more-prompt).
func Test_message_more()
! CheckRunVimInTerminal
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":call setline(1, range(1, 100))\n")

***************
*** 265,273 ****
endfunc

func Test_ask_yesno()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot run vim in terminal'
! endif
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":call setline(1, range(1, 2))\n")

--- 264,270 ----
endfunc

func Test_ask_yesno()
! CheckRunVimInTerminal
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":call setline(1, range(1, 2))\n")

*** ../vim-8.2.0865/src/testdir/test_netbeans.py 2020-04-19 14:02:22.427687032 +0200
--- src/testdir/test_netbeans.py 2020-05-31 21:18:31.637533919 +0200
***************
*** 102,108 ****
'setReadOnly_Test' : '3:setReadOnly!87\n',
'close_Test' : '3:close!88\n',
'specialKeys_Test' : '0:specialKeys!89 "F12 F13"\n',
! 'detach_Test' : '2:close!90\n1:close!91\nDETACH\n'
}
# execute the specified test
if cmd not in testmap:
--- 102,109 ----
'setReadOnly_Test' : '3:setReadOnly!87\n',
'close_Test' : '3:close!88\n',
'specialKeys_Test' : '0:specialKeys!89 "F12 F13"\n',
! 'nbbufwrite_Test' : '4:editFile!90 "XnbBuffer"\n4:netbeansBuffer!91 T\n',
! 'detach_Test' : '2:close!92\n1:close!93\nDETACH\n'
}
# execute the specified test
if cmd not in testmap:
***************
*** 120,126 ****

if len(response) > 0:
self.request.sendall(response.encode('utf-8'))
! # Write the respoinse into the file, so that the test can knows
# the command was sent.
with open("Xnetbeans", "a") as myfile:
myfile.write('send: ' + response)
--- 121,127 ----

if len(response) > 0:
self.request.sendall(response.encode('utf-8'))
! # Write the response into the file, so that the test can knows
# the command was sent.
with open("Xnetbeans", "a") as myfile:
myfile.write('send: ' + response)
*** ../vim-8.2.0865/src/testdir/test_netbeans.vim 2020-05-17 22:33:49.943137285 +0200
--- src/testdir/test_netbeans.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 607,616 ****
call assert_equal('0:fileOpened=0 "" T F', l[-1])
let g:last += 1

" detach
call appendbufline(cmdbufnr, '$', 'detach_Test')
call WaitFor('len(readfile("Xnetbeans")) >= (g:last + 8)')
! call WaitForAssert({-> assert_equal('0:disconnect=91', readfile("Xnetbeans")[-1])})

" the connection was closed
call assert_false(has("netbeans_enabled"))
--- 607,626 ----
call assert_equal('0:fileOpened=0 "" T F', l[-1])
let g:last += 1

+ " Test for writing a netbeans buffer
+ call appendbufline(cmdbufnr, '$', 'nbbufwrite_Test')
+ call WaitFor('len(readfile("Xnetbeans")) >= (g:last + 5)')
+ call assert_fails('write', 'E656:')
+ call setline(1, ['one', 'two'])
+ call assert_fails('1write!', 'E657:')
+ write
+ call WaitFor('len(readfile("Xnetbeans")) >= (g:last + 10)')
+ let g:last += 10
+
" detach
call appendbufline(cmdbufnr, '$', 'detach_Test')
call WaitFor('len(readfile("Xnetbeans")) >= (g:last + 8)')
! call WaitForAssert({-> assert_equal('0:disconnect=93', readfile("Xnetbeans")[-1])})

" the connection was closed
call assert_false(has("netbeans_enabled"))
*** ../vim-8.2.0865/src/testdir/test_search.vim 2020-04-28 20:29:04.237851565 +0200
--- src/testdir/test_search.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 886,894 ****
endfunc

func Test_incsearch_scrolling()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot make screendumps'
! endif
call assert_equal(0, &scrolloff)
call writefile([
\ 'let dots = repeat(".", 120)',
--- 886,892 ----
endfunc

func Test_incsearch_scrolling()
! CheckRunVimInTerminal
call assert_equal(0, &scrolloff)
call writefile([
\ 'let dots = repeat(".", 120)',
*** ../vim-8.2.0865/src/testdir/test_signals.vim 2020-05-16 16:08:30.098714978 +0200
--- src/testdir/test_signals.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 80,85 ****
--- 80,86 ----

" 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
***************
*** 91,99 ****
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

--- 92,97 ----
***************
*** 120,128 ****
if !HasSignal('TERM')
throw 'Skipped: TERM signal not supported'
endif
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot run vim in terminal'
! endif
let cmd = GetVimCommand()
if cmd =~ 'valgrind'
throw 'Skipped: cannot test signal TERM with valgrind'
--- 118,124 ----
if !HasSignal('TERM')
throw 'Skipped: TERM signal not supported'
endif
! CheckRunVimInTerminal
let cmd = GetVimCommand()
if cmd =~ 'valgrind'
throw 'Skipped: cannot test signal TERM with valgrind'
*** ../vim-8.2.0865/src/testdir/test_signs.vim 2020-02-19 17:12:48.911095268 +0100
--- src/testdir/test_signs.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 1734,1742 ****

" 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

let lines =<< trim END
call setline(1, [repeat('x', 75), 'mmmm', 'yyyy'])
--- 1734,1740 ----

" Test for correct cursor position after the sign column appears or disappears.
func Test_sign_cursor_position()
! CheckRunVimInTerminal

let lines =<< trim END
call setline(1, [repeat('x', 75), 'mmmm', 'yyyy'])
*** ../vim-8.2.0865/src/testdir/test_startup.vim 2020-05-03 18:21:00.849749313 +0200
--- src/testdir/test_startup.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 673,681 ****
endfunc

func Test_start_with_tabs()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot make screendumps'
! endif

let buf = RunVimInTerminal('-p a b c', {})
call VerifyScreenDump(buf, 'Test_start_with_tabs', {})
--- 673,679 ----
endfunc

func Test_start_with_tabs()
! CheckRunVimInTerminal

let buf = RunVimInTerminal('-p a b c', {})
call VerifyScreenDump(buf, 'Test_start_with_tabs', {})
***************
*** 783,791 ****

" Test for specifying a non-existing vimrc file using "-u"
func Test_missing_vimrc()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot run vim in terminal'
! endif
let after =<< trim [CODE]
call assert_match('^E282:', v:errmsg)
call writefile(v:errors, 'Xtestout')
--- 781,787 ----

" Test for specifying a non-existing vimrc file using "-u"
func Test_missing_vimrc()
! CheckRunVimInTerminal
let after =<< trim [CODE]
call assert_match('^E282:', v:errmsg)
call writefile(v:errors, 'Xtestout')
*** ../vim-8.2.0865/src/testdir/test_startup_utf8.vim 2020-04-08 21:50:18.876619651 +0200
--- src/testdir/test_startup_utf8.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 62,70 ****
endfunc

func Test_detect_ambiwidth()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot run Vim in a terminal window'
! endif

" Use the title termcap entries to output the escape sequence.
call writefile([
--- 62,68 ----
endfunc

func Test_detect_ambiwidth()
! CheckRunVimInTerminal

" Use the title termcap entries to output the escape sequence.
call writefile([
*** ../vim-8.2.0865/src/testdir/test_syntax.vim 2020-05-31 19:48:49.318871077 +0200
--- src/testdir/test_syntax.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 597,605 ****

" 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
call writefile([
\ '/* comment line at the top */',
\ 'int main(int argc, char **argv) { // another comment',
--- 597,603 ----

" Check highlighting for a small piece of C code with a screen dump.
func Test_syntax_c()
! CheckRunVimInTerminal
call writefile([
\ '/* comment line at the top */',
\ 'int main(int argc, char **argv) { // another comment',
*** ../vim-8.2.0865/src/testdir/test_tabpage.vim 2020-04-25 15:24:40.551354115 +0200
--- src/testdir/test_tabpage.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 593,601 ****
endfunc

func Test_tabpage_cmdheight()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot make screendumps'
! endif
call writefile([
\ 'set laststatus=2',
\ 'set cmdheight=2',
--- 593,599 ----
endfunc

func Test_tabpage_cmdheight()
! CheckRunVimInTerminal
call writefile([
\ 'set laststatus=2',
\ 'set cmdheight=2',
*** ../vim-8.2.0865/src/testdir/test_timers.vim 2020-04-08 21:50:18.876619651 +0200
--- src/testdir/test_timers.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 324,332 ****
endfunc

func Test_timer_restore_count()
! if !CanRunVimInTerminal()
! throw 'Skipped: cannot run Vim in a terminal window'
! endif
" 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"',
--- 324,330 ----
endfunc

func Test_timer_restore_count()
! 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"',
*** ../vim-8.2.0865/src/testdir/test_vimscript.vim 2020-04-25 15:24:40.551354115 +0200
--- src/testdir/test_vimscript.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 1904,1912 ****

" 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

let lines =<< trim [SCRIPT]
" Deep nesting of if ... endif
--- 1904,1910 ----

" Test for deep nesting of if/for/while/try statements {{{1
func Test_deep_nest()
! CheckRunVimInTerminal

let lines =<< trim [SCRIPT]
" Deep nesting of if ... endif
*** ../vim-8.2.0865/src/testdir/test_writefile.vim 2020-04-26 15:59:51.206952132 +0200
--- src/testdir/test_writefile.vim 2020-05-31 21:18:31.637533919 +0200
***************
*** 1,6 ****
--- 1,7 ----
" Tests for the writefile() function and some :write commands.

source check.vim
+ source term_util.vim

func Test_writefile()
let f = tempname()
***************
*** 207,218 ****
close!
enew | only
call delete('Xfile')
-
- call writefile(test_null_list(), 'Xfile')
- call assert_false(filereadable('Xfile'))
- call writefile(test_null_blob(), 'Xfile')
- call assert_false(filereadable('Xfile'))
- call assert_fails('call writefile([], "")', 'E482:')
endfunc

func Test_write_errors()
--- 208,213 ----
***************
*** 257,262 ****
--- 252,389 ----
call writefile(test_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

" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0865/src/version.c 2020-05-31 19:48:49.318871077 +0200
--- src/version.c 2020-05-31 21:20:37.237010288 +0200
***************
*** 748,749 ****
--- 748,751 ----
{ /* Add new patch number below this line */
+ /**/
+ 866,
/**/

--
You are Dead. Do you wish to restart, load, or quit?

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages