summaryrefslogtreecommitdiff
path: root/test/test_history_saving.vader
blob: 8207d15383a61baa088ee0c041b85dff4f0702cd (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
Before:
  Save g:ale_max_buffer_history_size
  Save g:ale_history_log_output

  " 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
  let &shell = '/bin/sh'
  let g:history = []
  let g:ale_buffer_info = {}
  let g:ale_max_buffer_history_size = 20
  let g:ale_history_log_output = 0

  function! CollectResults(buffer, output)
    return []
  endfunction

  call ale#linter#Define('foobar', {
  \ 'name': 'testlinter',
  \ 'callback': 'CollectResults',
  \ 'executable': 'echo',
  \ 'command': '/bin/sh -c ''echo command history test''',
  \ 'read_buffer': 0,
  \})

After:
  Restore

  " 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 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 = g:ale_buffer_info[bufnr('%')].history

  AssertEqual 1, len(g:history)
  AssertEqual sort(['status', 'exit_code', 'job_id', 'command']), sort(keys(g:history[0]))
  AssertEqual ['/bin/sh', '-c', '/bin/sh -c ''echo command history test'''], g:history[0].command
  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 0, len(g:ale_buffer_info[bufnr('%')].history)

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 = g:ale_buffer_info[bufnr('%')].history

  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 g:ale_buffer_info[1] = {
  \ 'history': map(range(20), '{''status'': ''started'', ''job_id'': v:val, ''command'': ''foobar''}'),
  \}

  call ale#history#Add(1, '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'}]
  \ ),
  \ g:ale_buffer_info[1].history

Execute(Nothing should be added to history if the size is too low):
  let g:ale_max_buffer_history_size = 0
  let g:ale_buffer_info[1] = {'history': []}

  call ale#history#Add(1, 'started', 347, 'last command')

  AssertEqual [], g:ale_buffer_info[1].history

  let g:ale_max_buffer_history_size = -2

  call ale#history#Add(1, 'started', 347, 'last command')

  AssertEqual [], g:ale_buffer_info[1].history