diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim index 2c6a3600e1..a91e65df6c 100644 --- a/src/nvim/testdir/test_quickfix.vim +++ b/src/nvim/testdir/test_quickfix.vim @@ -24,6 +24,11 @@ function! s:setup_commands(cchar) command! -nargs=* Xaddbuffer caddbuffer command! -nargs=* Xrewind crewind command! -nargs=* -bang Xnext cnext + command! -nargs=* -bang Xprev cprev + command! -nargs=* -bang Xfirst cfirst + command! -nargs=* -bang Xlast clast + command! -nargs=* -bang Xnfile cnfile + command! -nargs=* -bang Xpfile cpfile command! -nargs=* Xexpr cexpr command! -nargs=* Xvimgrep vimgrep command! -nargs=* Xgrep grep @@ -48,6 +53,11 @@ function! s:setup_commands(cchar) command! -nargs=* Xaddbuffer laddbuffer command! -nargs=* Xrewind lrewind command! -nargs=* -bang Xnext lnext + command! -nargs=* -bang Xprev lprev + command! -nargs=* -bang Xfirst lfirst + command! -nargs=* -bang Xlast llast + command! -nargs=* -bang Xnfile lnfile + command! -nargs=* -bang Xpfile lpfile command! -nargs=* Xexpr lexpr command! -nargs=* Xvimgrep lvimgrep command! -nargs=* Xgrep lgrep @@ -310,6 +320,56 @@ function Test_cbuffer() call XbufferTests('l') endfunction +function XexprTests(cchar) + call s:setup_commands(a:cchar) + + call assert_fails('Xexpr 10', 'E777:') +endfunction + +function Test_cexpr() + call XexprTests('c') + call XexprTests('l') +endfunction + +" Tests for :cnext, :cprev, :cfirst, :clast commands +function Xtest_browse(cchar) + call s:setup_commands(a:cchar) + + call s:create_test_file('Xqftestfile1') + call s:create_test_file('Xqftestfile2') + + Xgetexpr ['Xqftestfile1:5:Line5', + \ 'Xqftestfile1:6:Line6', + \ 'Xqftestfile2:10:Line10', + \ 'Xqftestfile2:11:Line11'] + + Xfirst + call assert_fails('Xprev', 'E553') + call assert_fails('Xpfile', 'E553') + Xnfile + call assert_equal('Xqftestfile2', bufname('%')) + call assert_equal(10, line('.')) + Xpfile + call assert_equal('Xqftestfile1', bufname('%')) + call assert_equal(6, line('.')) + Xlast + call assert_equal('Xqftestfile2', bufname('%')) + call assert_equal(11, line('.')) + call assert_fails('Xnext', 'E553') + call assert_fails('Xnfile', 'E553') + Xrewind + call assert_equal('Xqftestfile1', bufname('%')) + call assert_equal(5, line('.')) + + call delete('Xqftestfile1') + call delete('Xqftestfile2') +endfunction + +function Test_browse() + call Xtest_browse('c') + call Xtest_browse('l') +endfunction + function! s:test_xhelpgrep(cchar) call s:setup_commands(a:cchar) Xhelpgrep quickfix @@ -736,25 +796,61 @@ function! Test_efm_dirstack() call delete('habits1.txt') endfunction -" TODO: -" Add tests for the following formats in 'errorformat' -" %n %t %r %+ %- %O -function! Test_efm2() +" Tests for invalid error format specifies +function Xinvalid_efm_Tests(cchar) + call s:setup_commands(a:cchar) + let save_efm = &efm - " Test for invalid efm - set efm=%L%M%N - call assert_fails('cexpr "abc.txt:1:Hello world"', 'E376:') - call assert_fails('lexpr "abc.txt:1:Hello world"', 'E376:') + set efm=%f:%l:%m,%f:%f:%l:%m + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E372:') + + set efm=%f:%l:%m,%f:%l:%r:%m + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') + + set efm=%f:%l:%m,%O:%f:%l:%m + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') + + set efm=%f:%l:%m,%f:%l:%*[^a-z + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E374:') + + set efm=%f:%l:%m,%f:%l:%*c + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E375:') + + set efm=%f:%l:%m,%L%M%N + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E376:') + + set efm=%f:%l:%m,%f:%l:%m:%R + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E377:') + + set efm= + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E378:') + + set efm=%DEntering\ dir\ abc,%f:%l:%m + call assert_fails('Xexpr ["Entering dir abc", "abc.txt:1:Hello world"]', 'E379:') + + let &efm = save_efm +endfunction + +function Test_invalid_efm() + call Xinvalid_efm_Tests('c') + call Xinvalid_efm_Tests('l') +endfunction + +" TODO: +" Add tests for the following formats in 'errorformat' +" %r %O +function! Test_efm2() + let save_efm = &efm " Test for %s format in efm set efm=%f:%s cexpr 'Xtestfile:Line search text' - let l = getqflist() call assert_equal(l[0].pattern, '^\VLine search text\$') call assert_equal(l[0].lnum, 0) + " Test for %P, %Q and %t format specifiers let lines=["[Xtestfile1]", \ "(1,17) error: ';' missing", \ "(21,2) warning: variable 'z' not defined", @@ -776,6 +872,34 @@ function! Test_efm2() call assert_equal(9, len(l)) call assert_equal(21, l[2].lnum) call assert_equal(2, l[2].col) + call assert_equal('w', l[2].type) + call assert_equal('e', l[3].type) + + " Tests for %E, %C and %Z format specifiers + let lines = ["Error 275", + \ "line 42", + \ "column 3", + \ "' ' expected after '--'" + \] + set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m + cgetexpr lines + let l = getqflist() + call assert_equal(275, l[0].nr) + call assert_equal(42, l[0].lnum) + call assert_equal(3, l[0].col) + call assert_equal('E', l[0].type) + call assert_equal("\n' ' expected after '--'", l[0].text) + + " Test for %> + let lines = ["Error in line 147 of foo.c:", + \"unknown variable 'i'" + \] + set efm=unknown\ variable\ %m,%E%>Error\ in\ line\ %l\ of\ %f:,%Z%m + cgetexpr lines + let l = getqflist() + call assert_equal(147, l[0].lnum) + call assert_equal('E', l[0].type) + call assert_equal("\nunknown variable 'i'", l[0].text) let &efm = save_efm endfunction diff --git a/src/nvim/version.c b/src/nvim/version.c index 17bb4aa356..b5168f565b 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -456,7 +456,7 @@ static int included_patches[] = { // 1987 NA // 1986, // 1985 NA - // 1984, + 1984, // 1983 NA // 1982 NA // 1981,