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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
Before:
Save g:ale_max_buffer_history_size
Save g:ale_history_log_output
Save g:ale_run_synchronously
unlet! b:ale_fixers
unlet! b:ale_enabled
unlet! b:ale_history
" Temporarily set the shell to /bin/sh, if it isn't already set that way.
" This will make it so the test works when running it directly.
let g:current_shell = &shell
if !has('win32')
let &shell = '/bin/sh'
endif
let g:history = []
let g:ale_buffer_info = {}
let g:ale_max_buffer_history_size = 20
let g:ale_history_log_output = 0
function! TestFixer(buffer)
return {'command': 'echo foo'}
endfunction
function! CollectResults(buffer, output)
return []
endfunction
call ale#linter#Define('foobar', {
\ 'name': 'testlinter',
\ 'callback': 'CollectResults',
\ 'executable': has('win32') ? 'cmd' : 'echo',
\ 'command': has('win32')
\ ? 'echo command history test'
\ : '/bin/sh -c ''echo command history test''',
\ 'read_buffer': 0,
\})
After:
Restore
unlet! g:expected_results
unlet! b:ale_fixers
unlet! b:ale_enabled
" Clear the history we changed.
unlet! b:ale_history
" Reset the shell back to what it was before.
let &shell = g:current_shell
unlet g:current_shell
let g:ale_history_enabled = 1
let g:ale_history_log_output = 0
unlet g:history
call ale#engine#Cleanup(bufnr(''))
call ale#linter#Reset()
let g:ale_buffer_info = {}
let g:ale_max_buffer_history_size = 20
delfunction TestFixer
delfunction CollectResults
Given foobar (Some imaginary filetype):
anything
Execute(History should be set when commands are run):
AssertEqual 'foobar', &filetype
let g:expected_results = ['command', 'exit_code', 'job_id', 'status']
" Retry this test until it works. This one can randomly fail.
for g:i in range(has('nvim-0.3') || has('win32') ? 5 : 1)
let b:ale_history = []
call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
let g:history = filter(
\ copy(ale#history#Get(bufnr(''))),
\ 'v:val.job_id isnot# ''executable''',
\)
AssertEqual 1, len(g:history)
if sort(keys(g:history[0])) == g:expected_results
break
endif
endfor
AssertEqual g:expected_results, sort(keys(g:history[0]))
if has('win32')
AssertEqual 'cmd /s/c "echo command history test"', g:history[0].command
else
AssertEqual ['/bin/sh', '-c', '/bin/sh -c ''echo command history test'''], g:history[0].command
endif
AssertEqual 'finished', g:history[0].status
AssertEqual 0, g:history[0].exit_code
" The Job ID will change each time, but we can check the type.
AssertEqual type(1), type(g:history[0].job_id)
Execute(History should be not set when disabled):
AssertEqual 'foobar', &filetype
let g:ale_history_enabled = 0
call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
AssertEqual [], ale#history#Get(bufnr(''))
Execute(History should include command output if logging is enabled):
AssertEqual 'foobar', &filetype
let g:ale_history_log_output = 1
let g:expected_results = ['command history test']
" Retry this test until it works. This one can randomly fail.
for g:i in range(has('nvim-0.3') || has('win32') ? 5 : 1)
let b:ale_history = []
call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
let g:history = ale#history#Get(bufnr(''))
AssertEqual 1, len(g:history)
if get(g:history[0], 'output', []) == g:expected_results
break
endif
endfor
AssertEqual g:expected_results, get(g:history[0], 'output', [])
Execute(History items should be popped after going over the max):
let b:ale_history = map(range(20), '{''status'': ''started'', ''job_id'': v:val, ''command'': ''foobar''}')
call ale#history#Add(bufnr(''), 'started', 347, 'last command')
AssertEqual
\ (
\ map(range(1, 19), '{''status'': ''started'', ''job_id'': v:val, ''command'': ''foobar''}')
\ + [{'status': 'started', 'job_id': 347, 'command': 'last command'}]
\ ),
\ ale#history#Get(bufnr(''))
Execute(Nothing should be added to history if the size is too low):
let g:ale_max_buffer_history_size = 0
call ale#history#Add(bufnr(''), 'started', 347, 'last command')
AssertEqual [], ale#history#Get(bufnr(''))
let g:ale_max_buffer_history_size = -2
call ale#history#Add(1, 'started', 347, 'last command')
AssertEqual [], ale#history#Get(bufnr(''))
Given foobar(Some file with an imaginary filetype):
a
b
c
Execute(The history should be updated when fixers are run):
call ale#test#SetFilename('dummy.txt')
let b:ale_fixers = {'foobar': ['TestFixer']}
let b:ale_enabled = 0
let g:ale_run_synchronously = 1
ALEFix
AssertEqual ['finished'], map(copy(b:ale_history), 'v:val.status')
if has('win32')
AssertEqual 'cmd /s/c "echo foo ', split(b:ale_history[0].command, '<')[0]
else
AssertEqual '/bin/sh -c echo foo ', split(join(b:ale_history[0].command), '<')[0]
endif
|