blob: 93312f1ecf4db51f904e8f598e926290cb46be39 [file] [log] [blame]
Bram Moolenaar63a60de2016-06-04 22:08:55 +02001" Tests for user defined commands
2
3" Test for <mods> in user defined commands
4function Test_cmdmods()
5 let g:mods = ''
6
Bram Moolenaar7a1637f2020-04-13 21:16:21 +02007 command! -nargs=* MyCmd let g:mods = '<mods>'
Bram Moolenaar63a60de2016-06-04 22:08:55 +02008
9 MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020010 call assert_equal('', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020011 aboveleft MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020012 call assert_equal('aboveleft', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020013 abo MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020014 call assert_equal('aboveleft', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020015 belowright MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020016 call assert_equal('belowright', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020017 bel MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020018 call assert_equal('belowright', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020019 botright MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020020 call assert_equal('botright', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020021 bo MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020022 call assert_equal('botright', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020023 browse MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020024 call assert_equal('browse', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020025 bro MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020026 call assert_equal('browse', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020027 confirm MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020028 call assert_equal('confirm', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020029 conf MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020030 call assert_equal('confirm', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020031 hide MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020032 call assert_equal('hide', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020033 hid MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020034 call assert_equal('hide', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020035 keepalt MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020036 call assert_equal('keepalt', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020037 keepa MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020038 call assert_equal('keepalt', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020039 keepjumps MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020040 call assert_equal('keepjumps', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020041 keepj MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020042 call assert_equal('keepjumps', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020043 keepmarks MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020044 call assert_equal('keepmarks', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020045 kee MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020046 call assert_equal('keepmarks', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020047 keeppatterns MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020048 call assert_equal('keeppatterns', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020049 keepp MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020050 call assert_equal('keeppatterns', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020051 leftabove MyCmd " results in :aboveleft
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020052 call assert_equal('aboveleft', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020053 lefta MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020054 call assert_equal('aboveleft', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020055 lockmarks MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020056 call assert_equal('lockmarks', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020057 loc MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020058 call assert_equal('lockmarks', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020059 " noautocmd MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020060 noswapfile MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020061 call assert_equal('noswapfile', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020062 nos MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020063 call assert_equal('noswapfile', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020064 rightbelow MyCmd " results in :belowright
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020065 call assert_equal('belowright', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020066 rightb MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020067 call assert_equal('belowright', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020068 " sandbox MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020069 silent MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020070 call assert_equal('silent', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020071 sil MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020072 call assert_equal('silent', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020073 tab MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020074 call assert_equal('tab', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020075 topleft MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020076 call assert_equal('topleft', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020077 to MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020078 call assert_equal('topleft', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020079 " unsilent MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020080 verbose MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020081 call assert_equal('verbose', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020082 verb MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020083 call assert_equal('verbose', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020084 vertical MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020085 call assert_equal('vertical', g:mods)
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020086 vert MyCmd
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020087 call assert_equal('vertical', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020088
89 aboveleft belowright botright browse confirm hide keepalt keepjumps
90 \ keepmarks keeppatterns lockmarks noswapfile silent tab
91 \ topleft verbose vertical MyCmd
92
Bram Moolenaar7a1637f2020-04-13 21:16:21 +020093 call assert_equal('browse confirm hide keepalt keepjumps ' .
94 \ 'keepmarks keeppatterns lockmarks noswapfile silent ' .
95 \ 'verbose aboveleft belowright botright tab topleft vertical', g:mods)
Bram Moolenaar63a60de2016-06-04 22:08:55 +020096
97 let g:mods = ''
98 command! -nargs=* MyQCmd let g:mods .= '<q-mods> '
99
100 vertical MyQCmd
101 call assert_equal('"vertical" ', g:mods)
102
103 delcommand MyCmd
104 delcommand MyQCmd
105 unlet g:mods
106endfunction
Bram Moolenaareac784e2016-07-28 22:08:24 +0200107
Bram Moolenaare61e5482019-04-27 15:05:12 +0200108func SaveCmdArgs(...)
109 let g:args = a:000
110endfunc
111
112func Test_f_args()
113 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
114
115 TestFArgs
116 call assert_equal([], g:args)
117
118 TestFArgs one two three
119 call assert_equal(['one', 'two', 'three'], g:args)
120
121 TestFArgs one\\two three
122 call assert_equal(['one\two', 'three'], g:args)
123
124 TestFArgs one\ two three
125 call assert_equal(['one two', 'three'], g:args)
126
127 TestFArgs one\"two three
128 call assert_equal(['one\"two', 'three'], g:args)
129
130 delcommand TestFArgs
131endfunc
132
133func Test_q_args()
134 command -nargs=* TestQArgs call SaveCmdArgs(<q-args>)
135
136 TestQArgs
137 call assert_equal([''], g:args)
138
139 TestQArgs one two three
140 call assert_equal(['one two three'], g:args)
141
142 TestQArgs one\\two three
143 call assert_equal(['one\\two three'], g:args)
144
145 TestQArgs one\ two three
146 call assert_equal(['one\ two three'], g:args)
147
148 TestQArgs one\"two three
149 call assert_equal(['one\"two three'], g:args)
150
151 delcommand TestQArgs
152endfunc
153
154func Test_reg_arg()
155 command -nargs=* -reg TestRegArg call SaveCmdArgs("<reg>", "<register>")
156
157 TestRegArg
158 call assert_equal(['', ''], g:args)
159
160 TestRegArg x
161 call assert_equal(['x', 'x'], g:args)
162
163 delcommand TestRegArg
164endfunc
165
166func Test_no_arg()
167 command -nargs=* TestNoArg call SaveCmdArgs("<args>", "<>", "<x>", "<lt>")
168
169 TestNoArg
170 call assert_equal(['', '<>', '<x>', '<'], g:args)
171
172 TestNoArg one
173 call assert_equal(['one', '<>', '<x>', '<'], g:args)
174
175 delcommand TestNoArg
176endfunc
177
178func Test_range_arg()
179 command -range TestRangeArg call SaveCmdArgs(<range>, <line1>, <line2>)
180 new
181 call setline(1, range(100))
182 let lnum = line('.')
183
184 TestRangeArg
185 call assert_equal([0, lnum, lnum], g:args)
186
187 99TestRangeArg
188 call assert_equal([1, 99, 99], g:args)
189
190 88,99TestRangeArg
191 call assert_equal([2, 88, 99], g:args)
192
193 call assert_fails('102TestRangeArg', 'E16:')
194
195 bwipe!
196 delcommand TestRangeArg
197endfunc
198
Bram Moolenaareac784e2016-07-28 22:08:24 +0200199func Test_Ambiguous()
200 command Doit let g:didit = 'yes'
201 command Dothat let g:didthat = 'also'
202 call assert_fails('Do', 'E464:')
203 Doit
204 call assert_equal('yes', g:didit)
205 Dothat
206 call assert_equal('also', g:didthat)
207 unlet g:didit
208 unlet g:didthat
209
210 delcommand Doit
211 Do
212 call assert_equal('also', g:didthat)
213 delcommand Dothat
Bram Moolenaare61e5482019-04-27 15:05:12 +0200214
215 call assert_fails("\x4ei\041", ' you demand a ')
Bram Moolenaareac784e2016-07-28 22:08:24 +0200216endfunc
217
Bram Moolenaar55d46912018-12-08 16:03:28 +0100218func Test_redefine_on_reload()
219 call writefile(['command ExistingCommand echo "yes"'], 'Xcommandexists')
220 call assert_equal(0, exists(':ExistingCommand'))
221 source Xcommandexists
222 call assert_equal(2, exists(':ExistingCommand'))
223 " Redefining a command when reloading a script is OK.
224 source Xcommandexists
225 call assert_equal(2, exists(':ExistingCommand'))
226
227 " But redefining in another script is not OK.
228 call writefile(['command ExistingCommand echo "yes"'], 'Xcommandexists2')
229 call assert_fails('source Xcommandexists2', 'E174:')
230 call delete('Xcommandexists2')
231
232 " And defining twice in one script is not OK.
233 delcommand ExistingCommand
234 call assert_equal(0, exists(':ExistingCommand'))
235 call writefile([
236 \ 'command ExistingCommand echo "yes"',
237 \ 'command ExistingCommand echo "no"',
238 \ ], 'Xcommandexists')
239 call assert_fails('source Xcommandexists', 'E174:')
240 call assert_equal(2, exists(':ExistingCommand'))
241
242 call delete('Xcommandexists')
243 delcommand ExistingCommand
244endfunc
245
Bram Moolenaareac784e2016-07-28 22:08:24 +0200246func Test_CmdUndefined()
247 call assert_fails('Doit', 'E492:')
248 au CmdUndefined Doit :command Doit let g:didit = 'yes'
249 Doit
250 call assert_equal('yes', g:didit)
251 delcommand Doit
252
253 call assert_fails('Dothat', 'E492:')
254 au CmdUndefined * let g:didnot = 'yes'
255 call assert_fails('Dothat', 'E492:')
256 call assert_equal('yes', g:didnot)
257endfunc
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100258
259func Test_CmdErrors()
260 call assert_fails('com! docmd :', 'E183:')
261 call assert_fails('com! \<Tab> :', 'E182:')
262 call assert_fails('com! _ :', 'E182:')
263 call assert_fails('com! X :', 'E841:')
264 call assert_fails('com! - DoCmd :', 'E175:')
265 call assert_fails('com! -xxx DoCmd :', 'E181:')
266 call assert_fails('com! -addr DoCmd :', 'E179:')
Bram Moolenaare61e5482019-04-27 15:05:12 +0200267 call assert_fails('com! -addr=asdf DoCmd :', 'E180:')
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100268 call assert_fails('com! -complete DoCmd :', 'E179:')
269 call assert_fails('com! -complete=xxx DoCmd :', 'E180:')
270 call assert_fails('com! -complete=custom DoCmd :', 'E467:')
271 call assert_fails('com! -complete=customlist DoCmd :', 'E467:')
272 call assert_fails('com! -complete=behave,CustomComplete DoCmd :', 'E468:')
Martin Tournoijde69a732021-07-11 14:28:25 +0200273 call assert_fails('com! -complete=file DoCmd :', 'E1208:')
274 call assert_fails('com! -nargs=0 -complete=file DoCmd :', 'E1208:')
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100275 call assert_fails('com! -nargs=x DoCmd :', 'E176:')
276 call assert_fails('com! -count=1 -count=2 DoCmd :', 'E177:')
277 call assert_fails('com! -count=x DoCmd :', 'E178:')
278 call assert_fails('com! -range=x DoCmd :', 'E178:')
279
280 com! -nargs=0 DoCmd :
281 call assert_fails('DoCmd x', 'E488:')
282
283 com! -nargs=1 DoCmd :
284 call assert_fails('DoCmd', 'E471:')
285
286 com! -nargs=+ DoCmd :
287 call assert_fails('DoCmd', 'E471:')
288
289 call assert_fails('com DoCmd :', 'E174:')
290 comclear
291 call assert_fails('delcom DoCmd', 'E184:')
292endfunc
293
294func CustomComplete(A, L, P)
295 return "January\nFebruary\nMars\n"
296endfunc
297
298func CustomCompleteList(A, L, P)
Bram Moolenaar24ebd832020-03-16 21:25:24 +0100299 return [ "Monday", "Tuesday", "Wednesday", {}]
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100300endfunc
301
302func Test_CmdCompletion()
303 call feedkeys(":com -\<C-A>\<C-B>\"\<CR>", 'tx')
304 call assert_equal('"com -addr bang bar buffer complete count nargs range register', @:)
305
306 call feedkeys(":com -nargs=0 -\<C-A>\<C-B>\"\<CR>", 'tx')
307 call assert_equal('"com -nargs=0 -addr bang bar buffer complete count nargs range register', @:)
308
309 call feedkeys(":com -nargs=\<C-A>\<C-B>\"\<CR>", 'tx')
310 call assert_equal('"com -nargs=* + 0 1 ?', @:)
311
312 call feedkeys(":com -addr=\<C-A>\<C-B>\"\<CR>", 'tx')
Bram Moolenaar51a74542018-12-02 18:21:49 +0100313 call assert_equal('"com -addr=arguments buffers lines loaded_buffers other quickfix tabs windows', @:)
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100314
315 call feedkeys(":com -complete=co\<C-A>\<C-B>\"\<CR>", 'tx')
316 call assert_equal('"com -complete=color command compiler', @:)
317
318 command! DoCmd1 :
319 command! DoCmd2 :
320 call feedkeys(":com \<C-A>\<C-B>\"\<CR>", 'tx')
321 call assert_equal('"com DoCmd1 DoCmd2', @:)
322
323 call feedkeys(":DoC\<C-A>\<C-B>\"\<CR>", 'tx')
324 call assert_equal('"DoCmd1 DoCmd2', @:)
325
326 call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
327 call assert_equal('"delcom DoCmd1 DoCmd2', @:)
328
329 delcom DoCmd1
330 call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
331 call assert_equal('"delcom DoCmd2', @:)
332
333 call feedkeys(":com DoC\<C-A>\<C-B>\"\<CR>", 'tx')
334 call assert_equal('"com DoCmd2', @:)
335
336 delcom DoCmd2
337 call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
338 call assert_equal('"delcom DoC', @:)
339
340 call feedkeys(":com DoC\<C-A>\<C-B>\"\<CR>", 'tx')
341 call assert_equal('"com DoC', @:)
342
Martin Tournoijde69a732021-07-11 14:28:25 +0200343 com! -nargs=1 -complete=behave DoCmd :
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100344 call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
345 call assert_equal('"DoCmd mswin xterm', @:)
346
Martin Tournoijde69a732021-07-11 14:28:25 +0200347 com! -nargs=* -complete=custom,CustomComplete DoCmd :
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100348 call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
349 call assert_equal('"DoCmd January February Mars', @:)
350
Martin Tournoijde69a732021-07-11 14:28:25 +0200351 com! -nargs=? -complete=customlist,CustomCompleteList DoCmd :
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100352 call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
353 call assert_equal('"DoCmd Monday Tuesday Wednesday', @:)
354
Martin Tournoijde69a732021-07-11 14:28:25 +0200355 com! -nargs=+ -complete=custom,CustomCompleteList DoCmd :
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100356 call assert_fails("call feedkeys(':DoCmd \<C-D>', 'tx')", 'E730:')
357
Martin Tournoijde69a732021-07-11 14:28:25 +0200358 com! -nargs=+ -complete=customlist,CustomComp DoCmd :
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100359 call assert_fails("call feedkeys(':DoCmd \<C-D>', 'tx')", 'E117:')
Bram Moolenaar24ebd832020-03-16 21:25:24 +0100360
361 " custom completion without a function
Martin Tournoijde69a732021-07-11 14:28:25 +0200362 com! -nargs=? -complete=custom, DoCmd
Bram Moolenaar24ebd832020-03-16 21:25:24 +0100363 call assert_beeps("call feedkeys(':DoCmd \t', 'tx')")
364
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200365 " custom completion failure with the wrong function
Martin Tournoijde69a732021-07-11 14:28:25 +0200366 com! -nargs=? -complete=custom,min DoCmd
Bram Moolenaar9d8d0b52020-04-24 22:47:31 +0200367 call assert_fails("call feedkeys(':DoCmd \t', 'tx')", 'E118:')
368
Bram Moolenaar24ebd832020-03-16 21:25:24 +0100369 delcom DoCmd
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100370endfunc
Bram Moolenaar20951482017-12-25 13:44:43 +0100371
372func CallExecute(A, L, P)
373 " Drop first '\n'
374 return execute('echo "hi"')[1:]
375endfunc
376
377func Test_use_execute_in_completion()
378 command! -nargs=* -complete=custom,CallExecute DoExec :
379 call feedkeys(":DoExec \<C-A>\<C-B>\"\<CR>", 'tx')
380 call assert_equal('"DoExec hi', @:)
381 delcommand DoExec
382endfunc
Bram Moolenaar51a74542018-12-02 18:21:49 +0100383
384func Test_addr_all()
385 command! -addr=lines DoSomething let g:a1 = <line1> | let g:a2 = <line2>
386 %DoSomething
387 call assert_equal(1, g:a1)
388 call assert_equal(line('$'), g:a2)
389
390 command! -addr=arguments DoSomething let g:a1 = <line1> | let g:a2 = <line2>
391 args one two three
392 %DoSomething
393 call assert_equal(1, g:a1)
394 call assert_equal(3, g:a2)
395
396 command! -addr=buffers DoSomething let g:a1 = <line1> | let g:a2 = <line2>
397 %DoSomething
398 for low in range(1, bufnr('$'))
399 if buflisted(low)
400 break
401 endif
402 endfor
403 call assert_equal(low, g:a1)
404 call assert_equal(bufnr('$'), g:a2)
405
406 command! -addr=loaded_buffers DoSomething let g:a1 = <line1> | let g:a2 = <line2>
407 %DoSomething
408 for low in range(1, bufnr('$'))
409 if bufloaded(low)
410 break
411 endif
412 endfor
413 call assert_equal(low, g:a1)
414 for up in range(bufnr('$'), 1, -1)
415 if bufloaded(up)
416 break
417 endif
418 endfor
419 call assert_equal(up, g:a2)
420
421 command! -addr=windows DoSomething let g:a1 = <line1> | let g:a2 = <line2>
422 new
423 %DoSomething
424 call assert_equal(1, g:a1)
425 call assert_equal(winnr('$'), g:a2)
426 bwipe
427
428 command! -addr=tabs DoSomething let g:a1 = <line1> | let g:a2 = <line2>
429 tabnew
430 %DoSomething
431 call assert_equal(1, g:a1)
432 call assert_equal(len(gettabinfo()), g:a2)
433 bwipe
434
Bram Moolenaarb7316892019-05-01 18:08:42 +0200435 command! -addr=other DoSomething let g:a1 = <line1> | let g:a2 = <line2>
Bram Moolenaar51a74542018-12-02 18:21:49 +0100436 DoSomething
Bram Moolenaarb7316892019-05-01 18:08:42 +0200437 call assert_equal(line('.'), g:a1)
438 call assert_equal(line('.'), g:a2)
439 %DoSomething
440 call assert_equal(1, g:a1)
441 call assert_equal(line('$'), g:a2)
Bram Moolenaar51a74542018-12-02 18:21:49 +0100442
443 delcommand DoSomething
444endfunc
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200445
446func Test_command_list()
447 command! DoCmd :
448 call assert_equal("\n Name Args Address Complete Definition"
449 \ .. "\n DoCmd 0 :",
450 \ execute('command DoCmd'))
451
452 " Test with various -range= and -count= argument values.
453 command! -range DoCmd :
454 call assert_equal("\n Name Args Address Complete Definition"
455 \ .. "\n DoCmd 0 . :",
456 \ execute('command DoCmd'))
457 command! -range=% DoCmd :
458 call assert_equal("\n Name Args Address Complete Definition"
459 \ .. "\n DoCmd 0 % :",
460 \ execute('command! DoCmd'))
461 command! -range=2 DoCmd :
462 call assert_equal("\n Name Args Address Complete Definition"
463 \ .. "\n DoCmd 0 2 :",
464 \ execute('command DoCmd'))
465 command! -count=2 DoCmd :
466 call assert_equal("\n Name Args Address Complete Definition"
Bram Moolenaarb7316892019-05-01 18:08:42 +0200467 \ .. "\n DoCmd 0 2c ? :",
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200468 \ execute('command DoCmd'))
469
470 " Test with various -addr= argument values.
471 command! -addr=lines DoCmd :
472 call assert_equal("\n Name Args Address Complete Definition"
473 \ .. "\n DoCmd 0 . :",
474 \ execute('command DoCmd'))
475 command! -addr=arguments DoCmd :
476 call assert_equal("\n Name Args Address Complete Definition"
477 \ .. "\n DoCmd 0 . arg :",
478 \ execute('command DoCmd'))
479 command! -addr=buffers DoCmd :
480 call assert_equal("\n Name Args Address Complete Definition"
481 \ .. "\n DoCmd 0 . buf :",
482 \ execute('command DoCmd'))
483 command! -addr=loaded_buffers DoCmd :
484 call assert_equal("\n Name Args Address Complete Definition"
485 \ .. "\n DoCmd 0 . load :",
486 \ execute('command DoCmd'))
487 command! -addr=windows DoCmd :
488 call assert_equal("\n Name Args Address Complete Definition"
489 \ .. "\n DoCmd 0 . win :",
490 \ execute('command DoCmd'))
491 command! -addr=tabs DoCmd :
492 call assert_equal("\n Name Args Address Complete Definition"
493 \ .. "\n DoCmd 0 . tab :",
494 \ execute('command DoCmd'))
495 command! -addr=other DoCmd :
496 call assert_equal("\n Name Args Address Complete Definition"
497 \ .. "\n DoCmd 0 . ? :",
498 \ execute('command DoCmd'))
499
500 " Test with various -complete= argument values (non-exhaustive list)
Martin Tournoijde69a732021-07-11 14:28:25 +0200501 command! -nargs=1 -complete=arglist DoCmd :
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200502 call assert_equal("\n Name Args Address Complete Definition"
Martin Tournoijde69a732021-07-11 14:28:25 +0200503 \ .. "\n DoCmd 1 arglist :",
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200504 \ execute('command DoCmd'))
Martin Tournoijde69a732021-07-11 14:28:25 +0200505 command! -nargs=* -complete=augroup DoCmd :
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200506 call assert_equal("\n Name Args Address Complete Definition"
Martin Tournoijde69a732021-07-11 14:28:25 +0200507 \ .. "\n DoCmd * augroup :",
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200508 \ execute('command DoCmd'))
Martin Tournoijde69a732021-07-11 14:28:25 +0200509 command! -nargs=? -complete=custom,CustomComplete DoCmd :
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200510 call assert_equal("\n Name Args Address Complete Definition"
Martin Tournoijde69a732021-07-11 14:28:25 +0200511 \ .. "\n DoCmd ? custom :",
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200512 \ execute('command DoCmd'))
Martin Tournoijde69a732021-07-11 14:28:25 +0200513 command! -nargs=+ -complete=customlist,CustomComplete DoCmd :
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200514 call assert_equal("\n Name Args Address Complete Definition"
Martin Tournoijde69a732021-07-11 14:28:25 +0200515 \ .. "\n DoCmd + customlist :",
Bram Moolenaard1f90bb2019-04-25 22:42:07 +0200516 \ execute('command DoCmd'))
517
518 " Test with various -narg= argument values.
519 command! -nargs=0 DoCmd :
520 call assert_equal("\n Name Args Address Complete Definition"
521 \ .. "\n DoCmd 0 :",
522 \ execute('command DoCmd'))
523 command! -nargs=1 DoCmd :
524 call assert_equal("\n Name Args Address Complete Definition"
525 \ .. "\n DoCmd 1 :",
526 \ execute('command DoCmd'))
527 command! -nargs=* DoCmd :
528 call assert_equal("\n Name Args Address Complete Definition"
529 \ .. "\n DoCmd * :",
530 \ execute('command DoCmd'))
531 command! -nargs=? DoCmd :
532 call assert_equal("\n Name Args Address Complete Definition"
533 \ .. "\n DoCmd ? :",
534 \ execute('command DoCmd'))
535 command! -nargs=+ DoCmd :
536 call assert_equal("\n Name Args Address Complete Definition"
537 \ .. "\n DoCmd + :",
538 \ execute('command DoCmd'))
539
540 " Test with other arguments.
541 command! -bang DoCmd :
542 call assert_equal("\n Name Args Address Complete Definition"
543 \ .. "\n! DoCmd 0 :",
544 \ execute('command DoCmd'))
545 command! -bar DoCmd :
546 call assert_equal("\n Name Args Address Complete Definition"
547 \ .. "\n| DoCmd 0 :",
548 \ execute('command DoCmd'))
549 command! -register DoCmd :
550 call assert_equal("\n Name Args Address Complete Definition"
551 \ .. "\n\" DoCmd 0 :",
552 \ execute('command DoCmd'))
553 command! -buffer DoCmd :
554 call assert_equal("\n Name Args Address Complete Definition"
555 \ .. "\nb DoCmd 0 :"
556 \ .. "\n\" DoCmd 0 :",
557 \ execute('command DoCmd'))
558 comclear
559
560 " Test with many args.
561 command! -bang -bar -register -buffer -nargs=+ -complete=environment -addr=windows -count=3 DoCmd :
562 call assert_equal("\n Name Args Address Complete Definition"
563 \ .. "\n!\"b|DoCmd + 3c win environment :",
564 \ execute('command DoCmd'))
565 comclear
566
567 " Test with special characters in command definition.
568 command! DoCmd :<cr><tab><c-d>
569 call assert_equal("\n Name Args Address Complete Definition"
570 \ .. "\n DoCmd 0 :<CR><Tab><C-D>",
571 \ execute('command DoCmd'))
572
573 " Test output in verbose mode.
574 command! DoCmd :
575 call assert_match("^\n"
576 \ .. " Name Args Address Complete Definition\n"
577 \ .. " DoCmd 0 :\n"
578 \ .. "\tLast set from .*/test_usercommands.vim line \\d\\+$",
579 \ execute('verbose command DoCmd'))
580
581 comclear
582 call assert_equal("\nNo user-defined commands found", execute(':command Xxx'))
583 call assert_equal("\nNo user-defined commands found", execute('command'))
584endfunc
Bram Moolenaar24ebd832020-03-16 21:25:24 +0100585
Bram Moolenaar8b633132020-03-20 18:20:51 +0100586" Test for a custom user completion returning the wrong value type
587func Test_usercmd_custom()
588 func T1(a, c, p)
589 return "a\nb\n"
590 endfunc
591 command -nargs=* -complete=customlist,T1 TCmd1
Bram Moolenaarea04a6e2020-04-23 13:38:02 +0200592 call feedkeys(":TCmd1 \<C-A>\<C-B>\"\<CR>", 'xt')
593 call assert_equal('"TCmd1 ', @:)
Bram Moolenaar8b633132020-03-20 18:20:51 +0100594 delcommand TCmd1
595 delfunc T1
596
597 func T2(a, c, p)
Bram Moolenaarea04a6e2020-04-23 13:38:02 +0200598 return {}
Bram Moolenaar8b633132020-03-20 18:20:51 +0100599 endfunc
600 command -nargs=* -complete=customlist,T2 TCmd2
Bram Moolenaarea04a6e2020-04-23 13:38:02 +0200601 call feedkeys(":TCmd2 \<C-A>\<C-B>\"\<CR>", 'xt')
602 call assert_equal('"TCmd2 ', @:)
Bram Moolenaar8b633132020-03-20 18:20:51 +0100603 delcommand TCmd2
604 delfunc T2
605endfunc
606
Bram Moolenaar24ebd832020-03-16 21:25:24 +0100607" vim: shiftwidth=2 sts=2 expandtab