summaryrefslogtreecommitdiff
path: root/test/fixers/test_prettier_fixer_callback.vader
blob: 44245630b8d8b5d1375e228196846c6a86d33c94 (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
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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
Before:
  call ale#test#SetDirectory('/testplugin/test/fixers')
  Save g:ale_javascript_prettier_executable
  Save g:ale_javascript_prettier_options

  " Use an invalid global executable, so we don't match it.
  let g:ale_javascript_prettier_executable = 'xxxinvalid'
  let g:ale_javascript_prettier_options = ''

  call ale#test#SetDirectory('/testplugin/test/fixers')
  silent cd ..
  silent cd command_callback
  let g:dir = getcwd()

After:
  let g:ale_has_override = {}

  call ale#test#RestoreDirectory()
  call ale#semver#ResetVersionCache()

Execute(The prettier callback should return the correct default values):
  call ale#test#SetFilename('../prettier-test-files/testfile.js')

  AssertEqual
  \ {
  \   'read_temporary_file': 1,
  \   'command': ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' %t'
  \     . ' --write',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), [])

Execute(The --config option should not be set automatically):
  let g:ale_javascript_prettier_use_local_config = 1
  call ale#test#SetFilename('../prettier-test-files/with_config/testfile.js')

  AssertEqual
  \ {
  \   'read_temporary_file': 1,
  \   'command': ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' %t'
  \     . ' --write',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), [])

Execute(The prettier callback should include custom prettier options):
  let g:ale_javascript_prettier_options = '--no-semi'
  call ale#test#SetFilename('../prettier-test-files/with_config/testfile.js')

  AssertEqual
  \ {
  \   'read_temporary_file': 1,
  \   'command': ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' %t'
  \     . ' --no-semi'
  \     . ' --write',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), [])

Execute(The version check should be correct):
  call ale#test#SetFilename('../prettier-test-files/testfile.js')

  AssertEqual
  \ {
  \   'chain_with': 'ale#fixers#prettier#ApplyFixForVersion',
  \   'command': ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --version',
  \ },
  \ ale#fixers#prettier#Fix(bufnr(''))

Execute(--stdin-filepath should be used when prettier is new enough):
  let g:ale_javascript_prettier_options = '--no-semi'
  call ale#test#SetFilename('../prettier-test-files/with_config/testfile.js')

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --no-semi'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(The version number should be cached):
  call ale#test#SetFilename('../prettier-test-files/with_config/testfile.js')

  " Call the second callback with the version output.
  call ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

  " Call it again without the version output. We should use the newer command.
  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), [])

Execute(Should set --parser based on filetype, TypeScript):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=typescript

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser typescript'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, CSS):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=css

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser css'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, LESS):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=less

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser less'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, SCSS):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=scss

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser scss'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, JSON):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=json

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser json'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, JSON5):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=json5

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser json5'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, GraphQL):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=graphql

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser graphql'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, Markdown):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=markdown

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser markdown'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, Vue):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=vue

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser vue'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on filetype, YAML):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=yaml

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser yaml'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(Should set --parser based on first filetype of multiple filetypes):
  call ale#test#SetFilename('../prettier-test-files/testfile')

  set filetype=css.scss

  AssertEqual
  \ {
  \   'command': 'cd ' . ale#Escape(expand('%:p:h')) . ' && '
  \     . ale#Escape(g:ale_javascript_prettier_executable)
  \     . ' --parser css'
  \     . ' --stdin-filepath %s --stdin',
  \ },
  \ ale#fixers#prettier#ApplyFixForVersion(bufnr(''), ['1.6.0'])

Execute(The prettier_d post-processor should permit regular JavaScript content):
  AssertEqual
  \ [
  \   'const x = ''Error: foo''',
  \   'const y = 3',
  \ ],
  \ ale#fixers#prettier#ProcessPrettierDOutput(bufnr(''), [
  \   'const x = ''Error: foo''',
  \   'const y = 3',
  \ ])

Execute(The prettier_d post-processor should handle error messages correctly):
  AssertEqual
  \ [],
  \ ale#fixers#prettier#ProcessPrettierDOutput(bufnr(''), [
  \   'SyntaxError: Unexpected token, expected "," (36:28)',
  \ ])