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 -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202005311928.04VJShJr723003%40masaka.moolenaar.net.

Raspunde prin e-mail lui