changeset 24572:dcb3a856f515 v8.2.2825

patch 8.2.2825: code in checkreadonly() not fully tested Commit: https://github.com/vim/vim/commit/2bf6034e5caf36b319148f46ba9a12e36c3bd41d Author: Dominique Pelle <dominique.pelle@gmail.com> Date: Sun May 2 20:16:24 2021 +0200 patch 8.2.2825: code in checkreadonly() not fully tested Problem: Code in checkreadonly() not fully tested. Solution: Add more tests. (Dominique Pell?, closes https://github.com/vim/vim/issues/8169)
author Bram Moolenaar <Bram@vim.org>
date Sun, 02 May 2021 20:30:04 +0200
parents 227e254b71b7
children 206a2cdcaf8a
files src/testdir/test_excmd.vim src/version.c
diffstat 2 files changed, 57 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_excmd.vim
+++ b/src/testdir/test_excmd.vim
@@ -319,6 +319,61 @@ func Test_confirm_q_wq()
   call delete('Xfoo')
 endfunc
 
+func Test_confirm_write_ro()
+  CheckNotGui
+  CheckRunVimInTerminal
+
+  call writefile(['foo'], 'Xconfirm_write_ro')
+  let lines =<< trim END
+    set nobackup ff=unix cmdheight=2
+    edit Xconfirm_write_ro
+    norm Abar
+  END
+  call writefile(lines, 'Xscript')
+  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
+
+  " Try to write with 'ro' option.
+  call term_sendkeys(buf, ":set ro | confirm w\n")
+  call WaitForAssert({-> assert_match("^'readonly' option is set for \"Xconfirm_write_ro\"\. *$",
+        \            term_getline(buf, 18))}, 1000)
+  call WaitForAssert({-> assert_match('^Do you wish to write anyway? *$',
+        \            term_getline(buf, 19))}, 1000)
+  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
+  call term_sendkeys(buf, 'N')
+  call WaitForAssert({-> assert_match('^ *$', term_getline(buf, 19))}, 1000)
+  call WaitForAssert({-> assert_match('.* All$', term_getline(buf, 20))}, 1000)
+  call assert_equal(['foo'], readfile('Xconfirm_write_ro'))
+
+  call term_sendkeys(buf, ":confirm w\n")
+  call WaitForAssert({-> assert_match("^'readonly' option is set for \"Xconfirm_write_ro\"\. *$",
+        \            term_getline(buf, 18))}, 1000)
+  call WaitForAssert({-> assert_match('^Do you wish to write anyway? *$',
+        \            term_getline(buf, 19))}, 1000)
+  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
+  call term_sendkeys(buf, 'Y')
+  call WaitForAssert({-> assert_match('^"Xconfirm_write_ro" 1L, 7B written$',
+        \            term_getline(buf, 19))}, 1000)
+  call assert_equal(['foobar'], readfile('Xconfirm_write_ro'))
+
+  " Try to write with read-only file permissions.
+  call setfperm('Xconfirm_write_ro', 'r--r--r--')
+  call term_sendkeys(buf, ":set noro | undo | confirm w\n")
+  call WaitForAssert({-> assert_match("^File permissions of \"Xconfirm_write_ro\" are read-only\. *$",
+        \            term_getline(buf, 17))}, 1000)
+  call WaitForAssert({-> assert_match('^It may still be possible to write it\. *$',
+        \            term_getline(buf, 18))}, 1000)
+  call WaitForAssert({-> assert_match('^Do you wish to try? *$', term_getline(buf, 19))}, 1000)
+  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
+  call term_sendkeys(buf, 'Y')
+  call WaitForAssert({-> assert_match('^"Xconfirm_write_ro" 1L, 4B written$',
+        \            term_getline(buf, 19))}, 1000)
+  call assert_equal(['foo'], readfile('Xconfirm_write_ro'))
+
+  call StopVimInTerminal(buf)
+  call delete('Xscript')
+  call delete('Xconfirm_write_ro')
+endfunc
+
 " Test for the :print command
 func Test_print_cmd()
   call assert_fails('print', 'E749:')
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2825,
+/**/
     2824,
 /**/
     2823,