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
|
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! 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
let g:ale_buffer_info = {}
let g:ale_max_buffer_history_size = 20
call ale#linter#Reset()
delfunction TestFixer
delfunction CollectResults
Given foobar (Some imaginary filetype):
anything
Execute(History should be set when commands are run):
AssertEqual 'foobar', &filetype
call ale#Lint()
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)
AssertEqual sort(['status', 'exit_code', 'job_id', 'command']), sort(keys(g:history[0]))
if has('win32')
AssertEqual 'cmd /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#Lint()
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
call ale#Lint()
call ale#engine#WaitForJobs(2000)
let g:history = ale#history#Get(bufnr(''))
AssertEqual 1, len(g:history)
AssertEqual ['command history test'], 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 /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
|