comparison 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
comparison
equal deleted inserted replaced
8701:e688797c41ff 8702:39d6e4f2f748
502 augroup testgroup 502 augroup testgroup
503 au! 503 au!
504 autocmd BufReadCmd t call R(expand("<amatch>")) 504 autocmd BufReadCmd t call R(expand("<amatch>"))
505 augroup END 505 augroup END
506 506
507 function R(n) 507 function! R(n)
508 quit 508 quit
509 endfunc 509 endfunc
510 510
511 new 511 new
512 let q = [] 512 let q = []
635 let &efm = save_efm 635 let &efm = save_efm
636 call delete('Xerrorfile1') 636 call delete('Xerrorfile1')
637 call delete('Xerrorfile2') 637 call delete('Xerrorfile2')
638 call delete('Xtestfile') 638 call delete('Xtestfile')
639 endfunction 639 endfunction
640
641 function XquickfixChangedByAutocmd(cchar)
642 let Xolder = a:cchar . 'older'
643 let Xgetexpr = a:cchar . 'getexpr'
644 let Xrewind = a:cchar . 'rewind'
645 if a:cchar == 'c'
646 let Xsetlist = 'setqflist('
647 let ErrorNr = 'E925'
648 function! ReadFunc()
649 colder
650 cgetexpr []
651 endfunc
652 else
653 let Xsetlist = 'setloclist(0,'
654 let ErrorNr = 'E926'
655 function! ReadFunc()
656 lolder
657 lgetexpr []
658 endfunc
659 endif
660
661 augroup testgroup
662 au!
663 autocmd BufReadCmd t call ReadFunc()
664 augroup END
665
666 bwipe!
667 let words = [ "a", "b" ]
668 let qflist = []
669 for word in words
670 call add(qflist, {'filename': 't'})
671 exec "call " . Xsetlist . "qflist, '')"
672 endfor
673 exec "call assert_fails('" . Xrewind . "', '" . ErrorNr . ":')"
674
675 augroup! testgroup
676 endfunc
677
678 function Test_quickfix_was_changed_by_autocmd()
679 call XquickfixChangedByAutocmd('c')
680 call XquickfixChangedByAutocmd('l')
681 endfunction