Files
ale/test/test_virtualtext.vader
w0rp 385dc4130c Show a single virtualtext message by default
Show only a single virtualtext message per line by default. The setting
can be configured to whatever the user wants. This default prevents
several linters from spamming the editor with messages that run off into
the right margin.

Documentation now clarifies that problems have a predictable order, and
which message will come first.
2023-09-10 17:22:16 +01:00

200 lines
6.1 KiB
Plaintext

Before:
Save g:ale_buffer_info
Save g:ale_virtualtext_cursor
Save g:ale_virtualtext_delay
Save g:ale_virtualtext_single
Save g:ale_virtualtext_prefix
Save b:ale_virtualtext_prefix
Save g:ale_use_neovim_diagnostics_api
call ale#virtualtext#ResetDataForTests()
let g:setting = ''
let g:ale_virtualtext_prefix = '%comment% %type%: '
let g:ale_virtualtext_delay = 0
let g:ale_virtualtext_single = 0
let g:ale_buffer_info = {
\ bufnr(''): {
\ 'loclist': [
\ {
\ 'bufnr': bufnr(''),
\ 'type': 'E',
\ 'lnum': 1,
\ 'col': 5,
\ 'text': 'Line 1 error',
\ },
\ {
\ 'bufnr': bufnr(''),
\ 'type': 'W',
\ 'lnum': 2,
\ 'col': 1,
\ 'text': 'Line 2 warning 1',
\ },
\ {
\ 'bufnr': bufnr(''),
\ 'type': 'W',
\ 'lnum': 2,
\ 'col': 5,
\ 'text': 'Line 2 warning 2',
\ },
\ ],
\ },
\}
let g:ale_use_neovim_diagnostics_api = 0
After:
Restore
unlet! g:setting
unlet! g:ns_id
Execute(The correct highlight groups should be loaded for virtual-text):
AssertEqual 'ALEVirtualTextError', ale#virtualtext#GetGroup({})
AssertEqual 'ALEVirtualTextError', ale#virtualtext#GetGroup({'type': 'E'})
AssertEqual 'ALEVirtualTextStyleError',
\ ale#virtualtext#GetGroup({'type': 'E', 'sub_type': 'style'})
AssertEqual 'ALEVirtualTextWarning', ale#virtualtext#GetGroup({'type': 'W'})
AssertEqual 'ALEVirtualTextStyleWarning',
\ ale#virtualtext#GetGroup({'type': 'W', 'sub_type': 'style'})
AssertEqual 'ALEVirtualTextInfo', ale#virtualtext#GetGroup({'type': 'I'})
Given python (An empty Python file):
Execute(Comment text should be detected correctly for Python files):
if has('patch-9.0.0297') || has('nvim-0.8.0')
AssertEqual '#', ale#virtualtext#GetComment(bufnr(''))
endif
Given java (An empty Java file):
Execute(Comment text should be detected correctly for Java files):
if has('patch-9.0.0297') || has('nvim-0.8.0')
AssertEqual '//', ale#virtualtext#GetComment(bufnr(''))
endif
Given html (An empty HTML file):
Execute(Comment text should be detected correctly for HTML files):
if has('patch-9.0.0297') || has('nvim-0.8.0')
AssertEqual "\<!--", ale#virtualtext#GetComment(bufnr(''))
endif
Given python(An example Python file):
# line 1
# line 2
Execute(We should not show virtualtext when disabled):
if has('patch-9.0.0297') || has('nvim-0.8.0')
for g:setting in ['disabled', '0', 0]
call ale#virtualtext#ResetDataForTests()
let g:ale_virtualtext_cursor = g:setting
call cursor(1, 1)
call ale#virtualtext#ShowCursorWarningWithDelay()
" Tick the timer.
sleep 1ms
AssertEqual '', ale#virtualtext#GetLastMessageForTests()
endfor
endif
Execute(We should find a virtualtext error on line 1):
if has('patch-9.0.0297') || has('nvim-0.8.0')
for g:setting in ['current', '1', 1]
call ale#virtualtext#ResetDataForTests()
let g:ale_virtualtext_cursor = 'current'
call cursor(1, 1)
call ale#virtualtext#ShowCursorWarningWithDelay()
" Tick the timer.
sleep 1ms
AssertEqual '# E: Line 1 error', ale#virtualtext#GetLastMessageForTests()
if has('patch-9.0.0297')
AssertEqual ['ALEVirtualTextError'], map(prop_list(1), {_, v -> v.type})
AssertEqual [], prop_list(2)
endif
endfor
endif
Execute(We should find a virtualtext error on line 2):
if has('patch-9.0.0297') || has('nvim-0.8.0')
let g:ale_virtualtext_cursor = 'current'
call cursor(2, 5)
call ale#virtualtext#ShowCursorWarningWithDelay()
" Tick the timer.
sleep 1ms
AssertEqual '# W: Line 2 warning 2', ale#virtualtext#GetLastMessageForTests()
if has('patch-9.0.0297')
AssertEqual [], prop_list(1)
AssertEqual ['ALEVirtualTextWarning'], map(prop_list(2), {_, v -> v.type})
endif
endif
Execute(We should be able to change the virtualtext prefix globally):
let g:ale_virtualtext_prefix = '%severity%: '
if has('patch-9.0.0297') || has('nvim-0.8.0')
let g:ale_virtualtext_cursor = 'current'
call cursor(1, 1)
call ale#virtualtext#ShowCursorWarningWithDelay()
" Tick the timer.
sleep 1ms
AssertEqual 'Error: Line 1 error', ale#virtualtext#GetLastMessageForTests()
endif
Execute(We should be able to change the virtualtext prefix per-buffer):
let b:ale_virtualtext_prefix = 'B> '
if has('patch-9.0.0297') || has('nvim-0.8.0')
let g:ale_virtualtext_cursor = 'current'
call cursor(1, 1)
call ale#virtualtext#ShowCursorWarningWithDelay()
" Tick the timer.
sleep 1ms
AssertEqual 'B> Line 1 error', ale#virtualtext#GetLastMessageForTests()
endif
Execute(We should set errors across all lines):
if has('patch-9.0.0297') || has('nvim-0.8.0')
call ale#virtualtext#SetTexts(bufnr(''), g:ale_buffer_info[bufnr('')].loclist)
AssertEqual '# W: Line 2 warning 2', ale#virtualtext#GetLastMessageForTests()
if has('patch-9.0.0297')
AssertEqual ['ALEVirtualTextError'], map(prop_list(1), {_, v -> v.type})
AssertEqual ['ALEVirtualTextWarning', 'ALEVirtualTextWarning'],
\ map(prop_list(2), {_, v -> v.type})
endif
endif
Execute(We should be able to limit virtual messages to the first one only):
let g:ale_virtualtext_single = 1
if has('patch-9.0.0297') || has('nvim-0.8.0')
call ale#virtualtext#SetTexts(bufnr(''), g:ale_buffer_info[bufnr('')].loclist)
AssertEqual '# W: Line 2 warning 1', ale#virtualtext#GetLastMessageForTests()
if has('patch-9.0.0297')
AssertEqual ['ALEVirtualTextError'], map(prop_list(1), {_, v -> v.type})
AssertEqual ['ALEVirtualTextWarning'],
\ map(prop_list(2), {_, v -> v.type})
endif
endif
Execute(We should not set cursor messages when Neovim diagnostics are enabled):
let g:ale_use_neovim_diagnostics_api = 1
if has('patch-9.0.0297') || has('nvim-0.8.0')
let g:ale_virtualtext_cursor = 'current'
call cursor(1, 1)
call ale#virtualtext#ShowCursorWarningWithDelay()
" Tick the timer.
sleep 1ms
AssertEqual '', ale#virtualtext#GetLastMessageForTests()
endif