aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy/quickfix_spec.lua
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-10-20 10:44:00 -0400
committerJames McCoy <jamessan@jamessan.com>2016-10-20 10:47:42 -0400
commit5bcb7aa8bf75966416f2df5a838e5cb71d439ae7 (patch)
tree8a939a4968c7c7e98fdcee8f17dc5483f3249c5c /test/functional/legacy/quickfix_spec.lua
parent1ad5a970ce2d4750520a0508a4d186634291b316 (diff)
parent41ab09539990518233f78eba7d9e5094845f2964 (diff)
downloadrneovim-5bcb7aa8bf75966416f2df5a838e5cb71d439ae7.tar.gz
rneovim-5bcb7aa8bf75966416f2df5a838e5cb71d439ae7.tar.bz2
rneovim-5bcb7aa8bf75966416f2df5a838e5cb71d439ae7.zip
Merge pull request #5441 from Shougo/vim-7.4.1588
vim-patch:7.4.1588
Diffstat (limited to 'test/functional/legacy/quickfix_spec.lua')
-rw-r--r--test/functional/legacy/quickfix_spec.lua117
1 files changed, 117 insertions, 0 deletions
diff --git a/test/functional/legacy/quickfix_spec.lua b/test/functional/legacy/quickfix_spec.lua
index df8f2625db..7657b8641b 100644
--- a/test/functional/legacy/quickfix_spec.lua
+++ b/test/functional/legacy/quickfix_spec.lua
@@ -277,6 +277,118 @@ describe('helpgrep', function()
augroup! testgroup
endfunction
+
+ " This will test for problems in quickfix:
+ " A. incorrectly copying location lists which caused the location list to show
+ " a different name than the file that was actually being displayed.
+ " B. not reusing the window for which the location list window is opened but
+ " instead creating new windows.
+ " C. make sure that the location list window is not reused instead of the
+ " window it belongs to.
+ "
+ " Set up the test environment:
+ function! ReadTestProtocol(name)
+ let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '')
+ let word = substitute(base, '\v(.*)\..*', '\1', '')
+
+ setl modifiable
+ setl noreadonly
+ setl noswapfile
+ setl bufhidden=delete
+ %del _
+ " For problem 2:
+ " 'buftype' has to be set to reproduce the constant opening of new windows
+ setl buftype=nofile
+
+ call setline(1, word)
+
+ setl nomodified
+ setl nomodifiable
+ setl readonly
+ exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '')
+ endfunction
+
+ function Test_locationlist()
+ enew
+
+ augroup testgroup
+ au!
+ autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>"))
+ augroup END
+
+ let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ]
+
+ let qflist = []
+ for word in words
+ call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', })
+ " NOTE: problem 1:
+ " intentionally not setting 'lnum' so that the quickfix entries are not
+ " valid
+ call setloclist(0, qflist, ' ')
+ endfor
+
+ " Test A
+ lrewind
+ enew
+ lopen
+ lnext
+ lnext
+ lnext
+ lnext
+ vert split
+ wincmd L
+ lopen
+ wincmd p
+ lnext
+ let fileName = expand("%")
+ wincmd p
+ let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '')
+ let fileName = substitute(fileName, '\\', '/', 'g')
+ let locationListFileName = substitute(locationListFileName, '\\', '/', 'g')
+ call assert_equal("test://bar.txt", fileName)
+ call assert_equal("test://bar.txt", locationListFileName)
+
+ wincmd n | only
+
+ " Test B:
+ lrewind
+ lopen
+ 2
+ exe "normal \<CR>"
+ wincmd p
+ 3
+ exe "normal \<CR>"
+ wincmd p
+ 4
+ exe "normal \<CR>"
+ call assert_equal(2, winnr('$'))
+ wincmd n | only
+
+ " Test C:
+ lrewind
+ lopen
+ " Let's move the location list window to the top to check whether it (the
+ " first window found) will be reused when we try to open new windows:
+ wincmd K
+ 2
+ exe "normal \<CR>"
+ wincmd p
+ 3
+ exe "normal \<CR>"
+ wincmd p
+ 4
+ exe "normal \<CR>"
+ 1wincmd w
+ call assert_equal('quickfix', &buftype)
+ 2wincmd w
+ let bufferName = expand("%")
+ let bufferName = substitute(bufferName, '\\', '/', 'g')
+ call assert_equal('test://quux.txt', bufferName)
+
+ wincmd n | only
+
+ augroup! testgroup
+ endfunction
]])
end)
@@ -339,4 +451,9 @@ describe('helpgrep', function()
call('Test_locationlist_curwin_was_closed')
expected_empty()
end)
+
+ it('checks locationlist protocol read', function()
+ call('Test_locationlist')
+ expected_empty()
+ end)
end)