diff src/testdir/test_quickfix.vim @ 8702:39d6e4f2f748 v7.4.1640

commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd Author: Bram Moolenaar <Bram@vim.org> Date: Wed Mar 23 20:55:42 2016 +0100 patch 7.4.1640 Problem: Crash when an autocommand changes a quickfix list. (Dominique) Solution: Check wether an entry is still valid. (Yegappan Lakshmanan, Hirohito Higashi)
author Christian Brabandt <cb@256bit.org>
date Wed, 23 Mar 2016 21:00:05 +0100
parents ec78ecf15de7
children 4ce26276caeb
line wrap: on
line diff
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -504,7 +504,7 @@ function Test_locationlist_curwin_was_cl
       autocmd BufReadCmd t call R(expand("<amatch>"))
     augroup END
 
-    function R(n)
+    function! R(n)
       quit
     endfunc
 
@@ -637,3 +637,45 @@ function! Test_efm1()
     call delete('Xerrorfile2')
     call delete('Xtestfile')
 endfunction
+
+function XquickfixChangedByAutocmd(cchar)
+  let Xolder = a:cchar . 'older'
+  let Xgetexpr = a:cchar . 'getexpr'
+  let Xrewind = a:cchar . 'rewind'
+  if a:cchar == 'c'
+    let Xsetlist = 'setqflist('
+    let ErrorNr = 'E925'
+    function! ReadFunc()
+      colder
+      cgetexpr []
+    endfunc
+  else
+    let Xsetlist = 'setloclist(0,'
+    let ErrorNr = 'E926'
+    function! ReadFunc()
+      lolder
+      lgetexpr []
+    endfunc
+  endif
+
+  augroup testgroup
+    au!
+    autocmd BufReadCmd t call ReadFunc()
+  augroup END
+
+  bwipe!
+  let words = [ "a", "b" ]
+  let qflist = []
+  for word in words
+    call add(qflist, {'filename': 't'})
+    exec "call " . Xsetlist . "qflist, '')"
+  endfor
+  exec "call assert_fails('" . Xrewind . "', '" . ErrorNr . ":')"
+
+  augroup! testgroup
+endfunc
+
+function Test_quickfix_was_changed_by_autocmd()
+  call XquickfixChangedByAutocmd('c')
+  call XquickfixChangedByAutocmd('l')
+endfunction