changeset 20812:d8628d75c47a v8.2.0958

patch 8.2.0958: not sufficient testing for buffer writing Commit: https://github.com/vim/vim/commit/1de5f7c81d5e78fb4d612134bd2dfa6ee9183fae Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jun 11 19:22:43 2020 +0200 patch 8.2.0958: not sufficient testing for buffer writing Problem: Not sufficient testing for buffer writing. Solution: Add a few tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/6238)
author Bram Moolenaar <Bram@vim.org>
date Thu, 11 Jun 2020 19:30:04 +0200
parents af8f25c089dd
children a7c491ba7e3f
files src/testdir/test_backup.vim src/testdir/test_writefile.vim src/version.c
diffstat 3 files changed, 67 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_backup.vim
+++ b/src/testdir/test_backup.vim
@@ -1,5 +1,7 @@
 " Tests for the backup function
 
+source check.vim
+
 func Test_backup()
   set backup backupdir=. backupskip=
   new
@@ -56,3 +58,18 @@ func Test_backup2_backupcopy()
   call delete(f)
   set backup&vim backupdir&vim backupcopy&vim backupskip&vim
 endfunc
+
+" Test for using a non-existing directory as a backup directory
+func Test_non_existing_backupdir()
+  CheckNotBSD
+  let save_backup = &backupdir
+  set backupdir=./non_existing_dir
+  call writefile(['line1'], 'Xfile')
+  new Xfile
+  " TODO: write doesn't fail in Cirrus FreeBSD CI test
+  call assert_fails('write', 'E510:')
+  let &backupdir = save_backup
+  call delete('Xfile')
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
--- a/src/testdir/test_writefile.vim
+++ b/src/testdir/test_writefile.vim
@@ -383,7 +383,55 @@ func Test_write_readonly()
   set cpo+=W
   call assert_fails('write!', 'E504:')
   let &cpo = save_cpo
+  call setline(1, ['line1'])
+  write!
+  call assert_equal(['line1'], readfile('Xfile'))
   call delete('Xfile')
 endfunc
 
+" Test for 'patchmode'
+func Test_patchmode()
+  CheckNotBSD
+  call writefile(['one'], 'Xfile')
+  set patchmode=.orig nobackup writebackup
+  new Xfile
+  call setline(1, 'two')
+  " first write should create the .orig file
+  write
+  " TODO: Xfile.orig is not created in Cirrus FreeBSD CI test
+  call assert_equal(['one'], readfile('Xfile.orig'))
+  call setline(1, 'three')
+  " subsequent writes should not create/modify the .orig file
+  write
+  call assert_equal(['one'], readfile('Xfile.orig'))
+  set patchmode& backup& writebackup&
+  call delete('Xfile')
+  call delete('Xfile.orig')
+endfunc
+
+" Test for writing to a file in a readonly directory
+func Test_write_readonly_dir()
+  if !has('unix') || has('bsd')
+    " On MS-Windows, modifying files in a read-only directory is allowed.
+    " In Cirrus-CI for Freebsd, tests are run under a root account where
+    " modifying files in a read-only directory are allowed.
+    return
+  endif
+  call mkdir('Xdir')
+  call writefile(['one'], 'Xdir/Xfile1')
+  call setfperm('Xdir', 'r-xr--r--')
+  " try to create a new file in the directory
+  new Xdir/Xfile2
+  call setline(1, 'two')
+  call assert_fails('write', 'E212:')
+  " try to create a backup file in the directory
+  edit! Xdir/Xfile1
+  set backupdir=./Xdir
+  set patchmode=.orig
+  call assert_fails('write', 'E509:')
+  call setfperm('Xdir', 'rwxr--r--')
+  call delete('Xdir', 'rf')
+  set backupdir& patchmode&
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    958,
+/**/
     957,
 /**/
     956,