summaryrefslogtreecommitdiff
path: root/test/test_temporary_file_management.vader
blob: bb735886be72952a1a4bb3275ffc7b381ed09575 (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
Before:
  Save g:ale_buffer_info

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

  let g:command = 'echo test'
  let g:filename = ''
  let g:directory = ''
  let g:preserved_directory = ''

  function! TestCommandCallback(buffer) abort
    " We are registering a temporary file, so we should delete it.
    let g:filename = tempname()
    call writefile(['foo'], g:filename)
    call ale#command#ManageFile(a:buffer, g:filename)

    " We are registering this directory appropriately, so we should delete
    " the whole thing.
    let g:directory = tempname()
    call mkdir(g:directory)
    call writefile(['foo'], g:directory . '/bar')
    call ale#command#ManageDirectory(a:buffer, g:directory)

    " We are registering this directory as temporary file, so we
    " shouldn't delete it.
    let g:preserved_directory = tempname()
    call mkdir(g:preserved_directory)
    call writefile(['foo'], g:preserved_directory . '/bar')
    call ale#command#ManageFile(a:buffer, g:preserved_directory)

    return g:command
  endfunction

  function! TestCallback(buffer, output) abort
    return []
  endfunction

  call ale#linter#Define('foobar', {
  \ 'name': 'testlinter',
  \ 'executable': has('win32') ? 'cmd' : 'echo',
  \ 'callback': 'TestCallback',
  \ 'command': function('TestCommandCallback'),
  \})
  call ale#command#ClearData()

After:
  Restore

  if !empty(g:preserved_directory)
    call delete(g:preserved_directory, 'rf')
  endif

  unlet! g:ale_run_synchronously
  unlet! g:command
  unlet! g:filename
  unlet! g:directory
  unlet! g:preserved_directory
  delfunction TestCommandCallback
  delfunction TestCallback
  call ale#linter#Reset()
  call ale#command#ClearData()

Given foobar (Some imaginary filetype):
  foo
  bar
  baz

Execute(ALE should delete managed files/directories appropriately after linting):
  AssertEqual 'foobar', &filetype

  call ale#Queue(0)
  call ale#test#FlushJobs()

  Assert !filereadable(g:filename), 'The temporary file was not deleted'
  Assert !isdirectory(g:directory), 'The temporary directory was not deleted'
  Assert isdirectory(g:preserved_directory), 'The temporary directory was not kept'

Execute(ALE should delete managed files even if no command is run):
  AssertEqual 'foobar', &filetype

  let g:command = ''

  call ale#Queue(0)
  call ale#test#WaitForJobs(2000)

  Assert !filereadable(g:filename), 'The temporary file was not deleted'
  Assert !isdirectory(g:directory), 'The temporary directory was not deleted'
  Assert isdirectory(g:preserved_directory), 'The temporary directory was not kept'

Execute(ALE should delete managed files when the buffer is removed):
  call ale#engine#InitBufferInfo(bufnr('%'))
  call TestCommandCallback(bufnr('%'))
  call ale#engine#Cleanup(bufnr('%'))

  Assert !filereadable(g:filename), 'The temporary file was not deleted'
  Assert !isdirectory(g:directory), 'The temporary directory was not deleted'
  Assert isdirectory(g:preserved_directory), 'The tempoary directory was not kept'

Execute(ALE should create and delete directories for ale#command#CreateDirectory()):
  call ale#engine#InitBufferInfo(bufnr('%'))

  let b:dir = ale#command#CreateDirectory(bufnr('%'))
  let b:dir2 = ale#command#CreateDirectory(bufnr('%'))

  Assert isdirectory(b:dir), 'The directory was not created'

  " We should get the correct file permissions.
  " We want to ensure that the directory is not readable by 'other'
  if has('unix')
    AssertEqual 'rwxr-x---', getfperm(b:dir)
  endif

  " The two directories shouldn't be the same.
  AssertNotEqual b:dir2, b:dir

  call ale#engine#Cleanup(bufnr('%'))

  Assert !isdirectory(b:dir), 'The directory was not deleted'
  Assert !isdirectory(b:dir2), 'The second directory was not deleted'

Execute(ale#command#ManageFile should add the file even if the buffer info hasn't been set yet):
  call ale#command#ManageFile(bufnr(''), '/foo/bar')

  AssertEqual
  \ {
  \   bufnr(''): {
  \     'jobs': {},
  \     'file_list': ['/foo/bar'],
  \     'directory_list': [],
  \   },
  \ },
  \ ale#command#GetData()

Execute(ale#command#ManageDirectory should add the directory even if the buffer info hasn't been set yet):
  call ale#command#ManageDirectory(bufnr(''), '/foo/bar')

  AssertEqual
  \ {
  \   bufnr(''): {
  \     'jobs': {},
  \     'file_list': [],
  \     'directory_list': ['/foo/bar'],
  \   },
  \ },
  \ ale#command#GetData()