changeset 12783:afd8a4f36301 v8.0.1269

patch 8.0.1269: effect of autocommands on marks is not tested commit https://github.com/vim/vim/commit/aace21581345aa51c09d809ab3744a943a71c879 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Nov 5 16:23:10 2017 +0100 patch 8.0.1269: effect of autocommands on marks is not tested Problem: Effect of autocommands on marks is not tested. Solution: Add a couple of tests. (James McCoy, closes https://github.com/vim/vim/issues/2271)
author Christian Brabandt <cb@256bit.org>
date Sun, 05 Nov 2017 16:30:04 +0100
parents a558153adcb5
children b38715f6a758
files src/testdir/test_autocmd.vim src/version.c
diffstat 2 files changed, 129 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -997,3 +997,130 @@ func Test_Cmd_Autocmds()
   call delete('Xxx')
   enew!
 endfunc
+
+func SetChangeMarks(start, end)
+  exe a:start. 'mark ['
+  exe a:end. 'mark ]'
+endfunc
+
+" Verify the effects of autocmds on '[ and ']
+func Test_change_mark_in_autocmds()
+  edit! Xtest
+  call feedkeys("ia\<CR>b\<CR>c\<CR>d\<C-g>u", 'xtn')
+
+  call SetChangeMarks(2, 3)
+  write
+  call assert_equal([1, 4], [line("'["), line("']")])
+
+  call SetChangeMarks(2, 3)
+  au BufWritePre * call assert_equal([1, 4], [line("'["), line("']")])
+  write
+  au! BufWritePre
+
+  if executable('cat')
+    write XtestFilter
+    write >> XtestFilter
+
+    call SetChangeMarks(2, 3)
+    " Marks are set to the entire range of the write
+    au FilterWritePre * call assert_equal([1, 4], [line("'["), line("']")])
+    " '[ is adjusted to just before the line that will receive the filtered
+    " data
+    au FilterReadPre * call assert_equal([4, 4], [line("'["), line("']")])
+    " The filtered data is read into the buffer, and the source lines are
+    " still present, so the range is after the source lines
+    au FilterReadPost * call assert_equal([5, 12], [line("'["), line("']")])
+    %!cat XtestFilter
+    " After the filtered data is read, the original lines are deleted
+    call assert_equal([1, 8], [line("'["), line("']")])
+    au! FilterWritePre,FilterReadPre,FilterReadPost
+    undo
+
+    call SetChangeMarks(1, 4)
+    au FilterWritePre * call assert_equal([2, 3], [line("'["), line("']")])
+    au FilterReadPre * call assert_equal([3, 3], [line("'["), line("']")])
+    au FilterReadPost * call assert_equal([4, 11], [line("'["), line("']")])
+    2,3!cat XtestFilter
+    call assert_equal([2, 9], [line("'["), line("']")])
+    au! FilterWritePre,FilterReadPre,FilterReadPost
+    undo
+
+    call delete('XtestFilter')
+  endif
+
+  call SetChangeMarks(1, 4)
+  au FileWritePre * call assert_equal([2, 3], [line("'["), line("']")])
+  2,3write Xtest2
+  au! FileWritePre
+
+  call SetChangeMarks(2, 3)
+  au FileAppendPre * call assert_equal([1, 4], [line("'["), line("']")])
+  write >> Xtest2
+  au! FileAppendPre
+
+  call SetChangeMarks(1, 4)
+  au FileAppendPre * call assert_equal([2, 3], [line("'["), line("']")])
+  2,3write >> Xtest2
+  au! FileAppendPre
+
+  call SetChangeMarks(1, 1)
+  au FileReadPre * call assert_equal([3, 1], [line("'["), line("']")])
+  au FileReadPost * call assert_equal([4, 11], [line("'["), line("']")])
+  3read Xtest2
+  au! FileReadPre,FileReadPost
+  undo
+
+  call SetChangeMarks(4, 4)
+  " When the line is 0, it's adjusted to 1
+  au FileReadPre * call assert_equal([1, 4], [line("'["), line("']")])
+  au FileReadPost * call assert_equal([1, 8], [line("'["), line("']")])
+  0read Xtest2
+  au! FileReadPre,FileReadPost
+  undo
+
+  call SetChangeMarks(4, 4)
+  " When the line is 0, it's adjusted to 1
+  au FileReadPre * call assert_equal([1, 4], [line("'["), line("']")])
+  au FileReadPost * call assert_equal([2, 9], [line("'["), line("']")])
+  1read Xtest2
+  au! FileReadPre,FileReadPost
+  undo
+
+  bwipe!
+  call delete('Xtest')
+  call delete('Xtest2')
+endfunc
+
+func Test_Filter_noshelltemp()
+  if !executable('cat')
+    return
+  endif
+
+  enew!
+  call setline(1, ['a', 'b', 'c', 'd'])
+
+  let shelltemp = &shelltemp
+  set shelltemp
+
+  let g:filter_au = 0
+  au FilterWritePre * let g:filter_au += 1
+  au FilterReadPre * let g:filter_au += 1
+  au FilterReadPost * let g:filter_au += 1
+  %!cat
+  call assert_equal(3, g:filter_au)
+
+  if has('filterpipe')
+    set noshelltemp
+
+    let g:filter_au = 0
+    au FilterWritePre * let g:filter_au += 1
+    au FilterReadPre * let g:filter_au += 1
+    au FilterReadPost * let g:filter_au += 1
+    %!cat
+    call assert_equal(0, g:filter_au)
+  endif
+
+  au! FilterWritePre,FilterReadPre,FilterReadPost
+  let &shelltemp = shelltemp
+  bwipe!
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1269,
+/**/
     1268,
 /**/
     1267,