From 9606317486416aeba590d44fd9fcc955834d1e3b Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sat, 10 Oct 2020 15:22:05 -0400 Subject: vim-patch:8.1.0988: deleting location list buffer breaks location list window Problem: Deleting a location list buffer breaks location list window functionality. Solution: (Yegappan Lakshmanan, closes vim/vim#4056) https://github.com/vim/vim/commit/d82a81cad93708a6c180e59119db4818cc38c1a9 Cherry-pick Xqbuf_test() changes from patch 8.1.0892. Patch 8.1.0892 triggers a memory leak. --- src/nvim/testdir/test_quickfix.vim | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'src/nvim/testdir') diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim index d7eb4806ec..dc1b20ce65 100644 --- a/src/nvim/testdir/test_quickfix.vim +++ b/src/nvim/testdir/test_quickfix.vim @@ -4061,8 +4061,40 @@ func Xqfbuf_test(cchar) call assert_match(qfbnum . ' h- "\[Location List]"', execute('ls')) call assert_true(bufloaded(qfbnum)) + " After deleting a location list buffer using ":bdelete", opening the + " location list window should mark the buffer as a location list buffer. + exe "bdelete " . qfbnum + lopen + call assert_equal("quickfix", &buftype) + call assert_equal(1, getwininfo(win_getid(winnr()))[0].loclist) + call assert_equal(wid, getloclist(0, {'filewinid' : 0}).filewinid) + call assert_false(&swapfile) + lclose + + " When the location list is cleared for the window, the buffer should be + " removed + call setloclist(0, [], 'f') + call assert_false(bufexists(qfbnum)) + + " When the location list is freed with the location list window open, the + " location list buffer should not be lost. It should be reused when the + " location list is again populated. + lexpr "F1:10:Line10" + lopen + let wid = win_getid() + let qfbnum = bufnr('') + wincmd p + call setloclist(0, [], 'f') + lexpr "F1:10:Line10" + lopen + call assert_equal(wid, win_getid()) + call assert_equal(qfbnum, bufnr('')) + lclose + + " When the window with the location list is closed, the buffer should be + " removed new | only - call assert_false(bufloaded(qfbnum)) + call assert_false(bufexists(qfbnum)) endif endfunc -- cgit