aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/testdir
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-03-05 14:47:51 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-03-05 16:51:22 +0800
commit1cfe83c2a2d5d1d5dcc37bdcdb9dba4107e41de7 (patch)
treeec776a5992c9fd345a1e6b19b4a5f0588d8f25a1 /src/nvim/testdir
parented05d38d9fa643c7e562b754c6cfed8b9da5c4d8 (diff)
downloadrneovim-1cfe83c2a2d5d1d5dcc37bdcdb9dba4107e41de7.tar.gz
rneovim-1cfe83c2a2d5d1d5dcc37bdcdb9dba4107e41de7.tar.bz2
rneovim-1cfe83c2a2d5d1d5dcc37bdcdb9dba4107e41de7.zip
vim-patch:9.0.0736: quickfix listing does not handle very long messages
Problem: Quickfix listing does not handle very long messages. Solution: Use a growarray instead of a fixed size buffer. (Yegappan Lakshmanan, closes vim/vim#11357) https://github.com/vim/vim/commit/f8412c9d7cc487dacf47a217ae947da68a525c53 Override Test_very_long_error_line() with a rewrite that doesn't use deferred delete and string interpolation. Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/nvim/testdir')
-rw-r--r--src/nvim/testdir/test_quickfix.vim60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim
index 8dc4173d60..fedc486e62 100644
--- a/src/nvim/testdir/test_quickfix.vim
+++ b/src/nvim/testdir/test_quickfix.vim
@@ -6220,6 +6220,66 @@ func Test_loclist_replace_autocmd()
call setloclist(0, [], 'f')
endfunc
+" Test for a very long error line and a very long information line
+func Test_very_long_error_line()
+ let msg = repeat('abcdefghijklmn', 146)
+ let emsg = 'Xlonglines.c:1:' . msg
+ call writefile([msg, emsg], 'Xerror', 'D')
+ cfile Xerror
+ cwindow
+ call assert_equal($'|| {msg}', getline(1))
+ call assert_equal($'Xlonglines.c|1| {msg}', getline(2))
+ cclose
+
+ let l = execute('clist!')->split("\n")
+ call assert_equal([$' 1: {msg}', $' 2 Xlonglines.c:1: {msg}'], l)
+
+ let l = execute('cc')->split("\n")
+ call assert_equal([$'(2 of 2): {msg}'], l)
+
+ call setqflist([], 'f')
+endfunc
+
+" The test depends on deferred delete and string interpolation, which haven't
+" been ported, so override it with a rewrite that doesn't use these features.
+func! Test_very_long_error_line()
+ let msg = repeat('abcdefghijklmn', 146)
+ let emsg = 'Xlonglines.c:1:' . msg
+ call writefile([msg, emsg], 'Xerror')
+ cfile Xerror
+ call delete('Xerror')
+ cwindow
+ call assert_equal('|| ' .. msg, getline(1))
+ call assert_equal('Xlonglines.c|1| ' .. msg, getline(2))
+ cclose
+
+ let l = execute('clist!')->split("\n")
+ call assert_equal([' 1: ' .. msg, ' 2 Xlonglines.c:1: ' .. msg], l)
+
+ let l = execute('cc')->split("\n")
+ call assert_equal(['(2 of 2): ' .. msg], l)
+
+ call setqflist([], 'f')
+endfunc
+
+" In the quickfix window, spaces at the beginning of an informational line
+" should not be removed but should be removed from an error line.
+func Test_info_line_with_space()
+ cexpr ["a.c:20:12: error: expected ';' before ':' token",
+ \ ' 20 | Afunc():', '', ' | ^']
+ copen
+ call assert_equal(["a.c|20 col 12| error: expected ';' before ':' token",
+ \ '|| 20 | Afunc():', '|| ',
+ \ '|| | ^'], getline(1, '$'))
+ cclose
+
+ let l = execute('clist!')->split("\n")
+ call assert_equal([" 1 a.c:20 col 12: error: expected ';' before ':' token",
+ \ ' 2: 20 | Afunc():', ' 3: ', ' 4: | ^'], l)
+
+ call setqflist([], 'f')
+endfunc
+
func s:QfTf(_)
endfunc