summaryrefslogtreecommitdiff
path: root/test/test_history_saving.vader
blob: 020ceb5343a2a82447a53a6bc907dc62de1c3142 (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
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