Patch 8.2.2849
Problem:    Bufwrite not sufficiently tested.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #8192)
Files:      src/testdir/test_startup.vim, src/testdir/test_writefile.vim


*** ../vim-8.2.2849/src/testdir/test_startup.vim        2021-05-06 
17:36:50.988003911 +0200
--- src/testdir/test_startup.vim        2021-05-13 18:07:46.469007806 +0200
***************
*** 1270,1273 ****
--- 1270,1288 ----
    call delete('Xprogname', 'd')
  endfunc
  
+ " Test for doing a write from .vimrc
+ func Test_write_in_vimrc()
+   call writefile(['silent! write'], 'Xvimrc')
+   let after =<< trim [CODE]
+     call assert_match('E32: ', v:errmsg)
+     call writefile(v:errors, 'Xtestout')
+     qall
+   [CODE]
+   if RunVim([], after, '-u Xvimrc')
+     call assert_equal([], readfile('Xtestout'))
+     call delete('Xtestout')
+   endif
+   call delete('Xvimrc')
+ endfunc
+ 
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.2849/src/testdir/test_writefile.vim      2021-03-19 
14:38:07.869248401 +0100
--- src/testdir/test_writefile.vim      2021-05-13 18:07:46.473007793 +0200
***************
*** 58,64 ****
--- 58,86 ----
    call assert_fails('write ++enc=cp932', 'E513:')
    call assert_equal(contents, readfile('Xfile'))
  
+   " With 'backupcopy' set, if there is a conversion error, the backup file is
+   " still created.
+   set backupcopy=yes writebackup& backup&
+   call delete('Xfile' .. &backupext)
+   call assert_fails('write ++enc=cp932', 'E513:')
+   call assert_equal(contents, readfile('Xfile'))
+   call assert_equal(contents, readfile('Xfile' .. &backupext))
+   set backupcopy&
+   %bw!
+ 
+   " Conversion error during write
+   new
+   call setline(1, ["\U10000000"])
+   let output = execute('write! ++enc=utf-16 Xfile')
+   call assert_match('CONVERSION ERROR', output)
+   let output = execute('write! ++enc=ucs-2 Xfile')
+   call assert_match('CONVERSION ERROR', output)
+   call delete('Xfilz~')
+   call delete('Xfily~')
+   %bw!
+ 
    call delete('Xfile')
+   call delete('Xfile' .. &backupext)
    bwipe!
    set backup& writebackup& backupdir&vim backupskip&vim
  endfunc
***************
*** 257,262 ****
--- 279,294 ----
    let long_fname = repeat('n', 5000)
    call assert_fails('exe "w " .. long_fname', 'E75:')
    call assert_fails('call writefile([], long_fname)', 'E482:')
+ 
+   " Test for writing to a block device on Unix-like systems
+   if has('unix') && getfperm('/dev/loop0') != ''
+         \ && getftype('/dev/loop0') == 'bdev' && !IsRoot()
+     new
+     edit /dev/loop0
+     call assert_fails('write', 'E505: ')
+     call assert_fails('write!', 'E503: ')
+     close!
+   endif
  endfunc
  
  " Test for writing to a file which is modified after Vim read it
***************
*** 383,390 ****
--- 415,435 ----
    call setline(1, ['line1'])
    write!
    call assert_equal(['line1'], readfile('Xfile'))
+ 
+   " Auto-saving a readonly file should fail with 'autowriteall'
+   %bw!
+   e Xfile
+   set noreadonly autowriteall
+   call setline(1, ['aaaa'])
+   call assert_fails('n', 'E505:')
+   set cpo+=W
+   call assert_fails('n', 'E504:')
+   set cpo-=W
+   set autowriteall&
+ 
    set backupskip&
    call delete('Xfile')
+   %bw!
  endfunc
  
  " Test for 'patchmode'
***************
*** 400,405 ****
--- 445,463 ----
    " subsequent writes should not create/modify the .orig file
    write
    call assert_equal(['one'], readfile('Xfile.orig'))
+ 
+   " use 'patchmode' with 'nobackup' and 'nowritebackup' to create an empty
+   " original file
+   call delete('Xfile')
+   call delete('Xfile.orig')
+   %bw!
+   set patchmode=.orig nobackup nowritebackup
+   edit Xfile
+   call setline(1, ['xxx'])
+   write
+   call assert_equal(['xxx'], readfile('Xfile'))
+   call assert_equal([], readfile('Xfile.orig'))
+ 
    set patchmode& backup& backupskip& writebackup&
    call delete('Xfile')
    call delete('Xfile.orig')
***************
*** 700,703 ****
--- 758,900 ----
    bwipe! XNoEolSetEol
  endfunc
  
+ " Test for the 'backupcopy' option when writing files
+ func Test_backupcopy()
+   CheckUnix
+   set backupskip=
+   " With the default 'backupcopy' setting, saving a symbolic link file
+   " should not break the link.
+   set backupcopy&
+   call writefile(['1111'], 'Xfile1')
+   silent !ln -s Xfile1 Xfile2
+   new Xfile2
+   call setline(1, ['2222'])
+   write
+   close
+   call assert_equal(['2222'], readfile('Xfile1'))
+   call assert_equal('Xfile1', resolve('Xfile2'))
+   call assert_equal('link', getftype('Xfile2'))
+   call delete('Xfile1')
+   call delete('Xfile2')
+ 
+   " With the 'backupcopy' set to 'breaksymlink', saving a symbolic link file
+   " should break the link.
+   set backupcopy=yes,breaksymlink
+   call writefile(['1111'], 'Xfile1')
+   silent !ln -s Xfile1 Xfile2
+   new Xfile2
+   call setline(1, ['2222'])
+   write
+   close
+   call assert_equal(['1111'], readfile('Xfile1'))
+   call assert_equal(['2222'], readfile('Xfile2'))
+   call assert_equal('Xfile2', resolve('Xfile2'))
+   call assert_equal('file', getftype('Xfile2'))
+   call delete('Xfile1')
+   call delete('Xfile2')
+   set backupcopy&
+ 
+   " With the default 'backupcopy' setting, saving a hard link file
+   " should not break the link.
+   set backupcopy&
+   call writefile(['1111'], 'Xfile1')
+   silent !ln Xfile1 Xfile2
+   new Xfile2
+   call setline(1, ['2222'])
+   write
+   close
+   call assert_equal(['2222'], readfile('Xfile1'))
+   call delete('Xfile1')
+   call delete('Xfile2')
+ 
+   " With the 'backupcopy' set to 'breaksymlink', saving a hard link file
+   " should break the link.
+   set backupcopy=yes,breakhardlink
+   call writefile(['1111'], 'Xfile1')
+   silent !ln Xfile1 Xfile2
+   new Xfile2
+   call setline(1, ['2222'])
+   write
+   call assert_equal(['1111'], readfile('Xfile1'))
+   call assert_equal(['2222'], readfile('Xfile2'))
+   call delete('Xfile1')
+   call delete('Xfile2')
+ 
+   " If a backup file is already present, then a slightly modified filename
+   " should be used as the backup file. Try with 'backupcopy' set to 'yes' and
+   " 'no'.
+   %bw
+   call writefile(['aaaa'], 'Xfile')
+   call writefile(['bbbb'], 'Xfile.bak')
+   set backupcopy=yes backupext=.bak
+   new Xfile
+   call setline(1, ['cccc'])
+   write
+   close
+   call assert_equal(['cccc'], readfile('Xfile'))
+   call assert_equal(['bbbb'], readfile('Xfile.bak'))
+   set backupcopy=no backupext=.bak
+   new Xfile
+   call setline(1, ['dddd'])
+   write
+   close
+   call assert_equal(['dddd'], readfile('Xfile'))
+   call assert_equal(['bbbb'], readfile('Xfile.bak'))
+   call delete('Xfile')
+   call delete('Xfile.bak')
+ 
+   " Write to a device file (in Unix-like systems) which cannot be backed up.
+   if has('unix')
+     set writebackup backupcopy=yes nobackup
+     new
+     call setline(1, ['aaaa'])
+     let output = execute('write! /dev/null')
+     call assert_match('"/dev/null" \[Device]', output)
+     close
+     set writebackup backupcopy=no nobackup
+     new
+     call setline(1, ['aaaa'])
+     let output = execute('write! /dev/null')
+     call assert_match('"/dev/null" \[Device]', output)
+     close
+     set backup writebackup& backupcopy&
+     new
+     call setline(1, ['aaaa'])
+     let output = execute('write! /dev/null')
+     call assert_match('"/dev/null" \[Device]', output)
+     close
+   endif
+ 
+   set backupcopy& backupskip& backupext& backup&
+ endfunc
+ 
+ " Test for writing a file with 'encoding' set to 'utf-16'
+ func Test_write_utf16()
+   new
+   call setline(1, ["\U00010001"])
+   write ++enc=utf-16 Xfile
+   bw!
+   call assert_equal(0zD800DC01, readfile('Xfile', 'B')[0:3])
+   call delete('Xfile')
+ endfunc
+ 
+ " Test for trying to save a backup file when the backup file is a symbolic
+ " link to the original file. The backup file should not be modified.
+ func Test_write_backup_symlink()
+   CheckUnix
+   call writefile(['1111'], 'Xfile')
+   silent !ln -s Xfile Xfile.bak
+ 
+   new Xfile
+   set backup backupcopy=yes backupext=.bak
+   write
+   call assert_equal('link', getftype('Xfile.bak'))
+   call assert_equal('Xfile', resolve('Xfile.bak'))
+   set backup& backupcopy& backupext&
+   close
+ 
+   call delete('Xfile')
+   call delete('Xfile.bak')
+ endfunc
+ 
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.2849/src/version.c       2021-05-13 14:55:51.620360842 +0200
--- src/version.c       2021-05-13 18:10:55.820306896 +0200
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     2849,
  /**/

-- 
Edison's greatest achievement came in 1879, when he invented the
electric company.  Edison's design was a brilliant adaptation of the
simple electrical circuit: the electric company sends electricity
through a wire to a customer, then immediately gets the electricity
back through another wire

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            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/202105131633.14DGXk3l2859629%40masaka.moolenaar.net.

Raspunde prin e-mail lui