summaryrefslogtreecommitdiff
path: root/test/test_ignoring_linters.vader
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_ignoring_linters.vader')
-rw-r--r--test/test_ignoring_linters.vader250
1 files changed, 250 insertions, 0 deletions
diff --git a/test/test_ignoring_linters.vader b/test/test_ignoring_linters.vader
new file mode 100644
index 00000000..af31fce3
--- /dev/null
+++ b/test/test_ignoring_linters.vader
@@ -0,0 +1,250 @@
+Execute(GetList should ignore some invalid values):
+ AssertEqual [], ale#engine#ignore#GetList('', 'foo')
+ AssertEqual [], ale#engine#ignore#GetList('', 0)
+ AssertEqual [], ale#engine#ignore#GetList('', v:null)
+
+Execute(GetList should handle Lists):
+ AssertEqual ['foo', 'bar'], ale#engine#ignore#GetList('', ['foo', 'bar'])
+
+Execute(GetList should handle Dictionaries):
+ AssertEqual
+ \ ['linter1', 'linter2'],
+ \ uniq(sort(ale#engine#ignore#GetList('x.y.z', {
+ \ 'x': ['linter1'],
+ \ 'abc': ['linter3'],
+ \ 'z': ['linter2'],
+ \ })))
+
+Execute(Exclude should ignore some invalid values):
+ AssertEqual
+ \ [
+ \ {'name': 'linter1', 'aliases': []},
+ \ {'name': 'linter2', 'aliases': ['alias1']},
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ ale#engine#ignore#Exclude(
+ \ 'foo.bar',
+ \ [
+ \ {'name': 'linter1', 'aliases': []},
+ \ {'name': 'linter2', 'aliases': ['alias1']},
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ 'foo',
+ \ )
+ AssertEqual
+ \ [
+ \ {'name': 'linter1', 'aliases': []},
+ \ {'name': 'linter2', 'aliases': ['alias1']},
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ ale#engine#ignore#Exclude(
+ \ 'foo.bar',
+ \ [
+ \ {'name': 'linter1', 'aliases': []},
+ \ {'name': 'linter2', 'aliases': ['alias1']},
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ 0,
+ \ )
+ AssertEqual
+ \ [
+ \ {'name': 'linter1', 'aliases': []},
+ \ {'name': 'linter2', 'aliases': ['alias1']},
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ ale#engine#ignore#Exclude(
+ \ 'foo.bar',
+ \ [
+ \ {'name': 'linter1', 'aliases': []},
+ \ {'name': 'linter2', 'aliases': ['alias1']},
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ v:null,
+ \ )
+
+Execute(Exclude should handle Lists):
+ AssertEqual
+ \ [
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ ale#engine#ignore#Exclude(
+ \ 'foo.bar',
+ \ [
+ \ {'name': 'linter1', 'aliases': []},
+ \ {'name': 'linter2', 'aliases': ['alias1']},
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ ['linter1', 'alias1'],
+ \ )
+
+Execute(Exclude should handle Dictionaries):
+ AssertEqual
+ \ [
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ ale#engine#ignore#Exclude(
+ \ 'foo.bar',
+ \ [
+ \ {'name': 'linter1', 'aliases': []},
+ \ {'name': 'linter2', 'aliases': ['alias1']},
+ \ {'name': 'linter3', 'aliases': []},
+ \ ],
+ \ {'foo': ['linter1'], 'bar': ['alias1']},
+ \ )
+
+Before:
+ Save g:ale_linters_ignore
+ Save g:ale_buffer_info
+
+ let g:linters = []
+ let g:loclist = []
+ let g:run_linters_called = 0
+
+ runtime autoload/ale/engine.vim
+
+ " Mock the engine function so we can set it up.
+ function! ale#engine#RunLinters(buffer, linters, should_lint_file) abort
+ let g:linters = a:linters
+ let g:run_linters_called = 1
+ endfunction
+
+ function! ale#engine#HandleLoclist(linter_name, buffer, loclist) abort
+ let g:loclist = a:loclist
+ endfunction
+
+ call ale#linter#Define('foobar', {
+ \ 'name': 'testlinter',
+ \ 'callback': 'TestCallback',
+ \ 'executable': has('win32') ? 'cmd' : 'true',
+ \ 'command': has('win32') ? 'echo' : 'true',
+ \})
+ call ale#test#SetDirectory('/testplugin/test')
+
+After:
+ Restore
+
+ unlet! b:ale_linted
+ unlet! b:ale_linters_ignore
+ unlet! b:ale_quitting
+ unlet! b:ale_save_event_fired
+ unlet! g:linters
+ unlet! g:loclist
+ unlet! g:lsp_message
+
+ call ale#test#RestoreDirectory()
+ call ale#linter#Reset()
+ call ale#lsp_linter#ClearLSPData()
+ runtime autoload/ale/engine.vim
+
+Given foobar(An empty file):
+Execute(Global ignore lists should be applied for linters):
+ ALELint
+ Assert g:run_linters_called, "The mock callback wasn't called"
+ AssertEqual ['testlinter'], map(g:linters, 'v:val.name')
+
+ let g:ale_linters_ignore = ['testlinter']
+ ALELint
+ AssertEqual [], g:linters
+
+Execute(buffer ignore lists should be applied for linters):
+ ALELint
+ Assert g:run_linters_called, "The mock callback wasn't called"
+ AssertEqual ['testlinter'], map(g:linters, 'v:val.name')
+
+ let b:ale_linters_ignore = ['testlinter']
+ ALELint
+ AssertEqual [], g:linters
+
+Execute(Buffer ignore lists should be applied for tsserver):
+ call ale#test#SetFilename('filename.ts')
+ call ale#engine#InitBufferInfo(bufnr(''))
+
+ let g:lsp_message = {
+ \ 'seq': 0,
+ \ 'type': 'event',
+ \ 'event': 'syntaxDiag',
+ \ 'body': {
+ \ 'file': g:dir . '/filename.ts',
+ \ 'diagnostics':[
+ \ {
+ \ 'start': {
+ \ 'line':2,
+ \ 'offset':14,
+ \ },
+ \ 'end': {
+ \ 'line':2,
+ \ 'offset':15,
+ \ },
+ \ 'text': ''','' expected.',
+ \ "code":1005
+ \ },
+ \ ],
+ \ },
+ \}
+
+ call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 2,
+ \ 'col': 14,
+ \ 'nr': 1005,
+ \ 'type': 'E',
+ \ 'end_col': 15,
+ \ 'end_lnum': 2,
+ \ 'text': ''','' expected.',
+ \ },
+ \ ],
+ \ g:loclist
+
+ let g:loclist = []
+ let b:ale_linters_ignore = ['tsserver']
+ call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
+
+ AssertEqual [], g:loclist
+
+Execute(Buffer ignore lists should be applied for LSP linters):
+ call ale#test#SetFilename('filename.py')
+ call ale#engine#InitBufferInfo(bufnr(''))
+ call ale#lsp_linter#SetLSPLinterMap({'347': 'lsplinter'})
+
+ let g:lsp_message = {
+ \ 'jsonrpc': '2.0',
+ \ 'method': 'textDocument/publishDiagnostics',
+ \ 'params': {
+ \ 'uri': ale#path#ToURI(expand('%:p')),
+ \ 'diagnostics': [
+ \ {
+ \ 'severity': 1,
+ \ 'message': 'x',
+ \ 'range': {
+ \ 'start': {'line': 0, 'character': 9},
+ \ 'end': {'line': 0, 'character': 9},
+ \ },
+ \ }
+ \ ],
+ \ },
+ \}
+
+ call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'col': 10,
+ \ 'type': 'E',
+ \ 'end_col': 10,
+ \ 'end_lnum': 1,
+ \ 'text': 'x',
+ \ }
+ \ ],
+ \ g:loclist
+
+ let b:ale_linters_ignore = ['lsplinter']
+ let g:loclist = []
+
+ call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
+
+ AssertEqual [], g:loclist