summaryrefslogtreecommitdiff
path: root/test/test_computed_lint_file_values.vader
blob: ed0d4c0ce9ae4e601a5a5c39282e034e136c7ab1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
Before:
  Save g:ale_enabled
  Save g:ale_run_synchronously
  Save g:ale_set_lists_synchronously
  Save g:ale_buffer_info

  let g:ale_enabled = 1
  let g:ale_buffer_info = {}
  let g:ale_run_synchronously = 1
  let g:ale_set_lists_synchronously = 1

  function! TestCallback(buffer, output)
    " Windows adds extra spaces to the text from echo.
    return [{
    \ 'lnum': 2,
    \ 'col': 3,
    \ 'text': 'testlinter1',
    \}]
  endfunction
  function! TestCallback2(buffer, output)
    " Windows adds extra spaces to the text from echo.
    return [{
    \ 'lnum': 1,
    \ 'col': 3,
    \ 'text': 'testlinter2',
    \}]
  endfunction
  function! TestCallback3(buffer, output)
    " Windows adds extra spaces to the text from echo.
    return [{
    \ 'lnum': 3,
    \ 'col': 3,
    \ 'text': 'testlinter3',
    \}]
  endfunction

  " These two linters computer their lint_file values after running commands.
  call ale#linter#Define('foobar', {
  \ 'name': 'testlinter1',
  \ 'callback': 'TestCallback',
  \ 'executable': has('win32') ? 'cmd' : 'echo',
  \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''',
  \ 'lint_file': {b -> ale#command#Run(b, 'echo', {-> 1})},
  \})
  call ale#linter#Define('foobar', {
  \ 'name': 'testlinter2',
  \ 'callback': 'TestCallback2',
  \ 'executable': has('win32') ? 'cmd' : 'echo',
  \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''',
  \ 'lint_file': {b -> ale#command#Run(b, 'echo', {-> ale#command#Run(b, 'echo', {-> 1})})},
  \})
  " This one directly computes the result.
  call ale#linter#Define('foobar', {
  \ 'name': 'testlinter3',
  \ 'callback': 'TestCallback3',
  \ 'executable': has('win32') ? 'cmd' : 'echo',
  \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''',
  \ 'lint_file': {b -> 1},
  \})

  let g:filename = tempname()
  call writefile([], g:filename)
  call ale#test#SetFilename(g:filename)

After:
  delfunction TestCallback

  call ale#engine#Cleanup(bufnr(''))
  Restore
  call ale#linter#Reset()

  " Items and markers, etc.
  call setloclist(0, [])
  call clearmatches()
  call ale#sign#Clear()

  if filereadable(g:filename)
    call delete(g:filename)
  endif

  unlet g:filename

Given foobar(A file with some lines):
  foo
  bar
  baz

Execute(lint_file results where the result is eventually computed should be run):
  call ale#Queue(0, 'lint_file')
  call ale#test#FlushJobs()

  AssertEqual
  \ [
  \   {
  \     'bufnr': bufnr('%'),
  \     'lnum': 1,
  \     'vcol': 0,
  \     'col': 3,
  \     'text': 'testlinter2',
  \     'type': 'E',
  \     'nr': -1,
  \     'pattern': '',
  \     'valid': 1,
  \   },
  \   {
  \     'bufnr': bufnr('%'),
  \     'lnum': 2,
  \     'vcol': 0,
  \     'col': 3,
  \     'text': 'testlinter1',
  \     'type': 'E',
  \     'nr': -1,
  \     'pattern': '',
  \     'valid': 1,
  \   },
  \   {
  \     'bufnr': bufnr('%'),
  \     'lnum': 3,
  \     'vcol': 0,
  \     'col': 3,
  \     'text': 'testlinter3',
  \     'type': 'E',
  \     'nr': -1,
  \     'pattern': '',
  \     'valid': 1,
  \   },
  \ ],
  \ ale#test#GetLoclistWithoutModule()

Execute(Linters where lint_file eventually evaluates to 1 shouldn't be run if we don't want to run them):
  call ale#Queue(0, '')
  call ale#test#FlushJobs()

  AssertEqual [], ale#test#GetLoclistWithoutModule()

Execute(Keeping computed lint_file jobs running should work):
  AssertEqual 'testlinter2', ale#linter#Get('foobar')[1].name

  call ale#engine#InitBufferInfo(bufnr(''))

  call ale#engine#MarkLinterActive(
  \ g:ale_buffer_info[bufnr('')],
  \ ale#linter#Get('foobar')[1]
  \)
  call ale#engine#RunLinters(bufnr(''), ale#linter#Get('foobar'), 0)

  Assert !empty(g:ale_buffer_info[bufnr('')].active_linter_list),
  \ 'The active linter list was empty'
  Assert ale#engine#IsCheckingBuffer(bufnr('')),
  \ 'The IsCheckingBuffer function returned 0'