blob: 21b1c4c0fe34ef6a5c9488ee824dccecee528fdf [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
7 command! -nargs=* MyCmd let g:mods .= '<mods> '
8
9 MyCmd
10 aboveleft MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020011 abo MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020012 belowright MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020013 bel MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020014 botright MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020015 bo MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020016 browse MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020017 bro MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020018 confirm MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020019 conf MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020020 hide MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020021 hid MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020022 keepalt MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020023 keepa MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020024 keepjumps MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020025 keepj MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020026 keepmarks MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020027 kee MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020028 keeppatterns MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020029 keepp MyCmd
30 leftabove MyCmd " results in :aboveleft
31 lefta MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020032 lockmarks MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020033 loc MyCmd
34 " noautocmd MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020035 noswapfile MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020036 nos MyCmd
37 rightbelow MyCmd " results in :belowright
38 rightb MyCmd
39 " sandbox MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020040 silent MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020041 sil MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020042 tab MyCmd
43 topleft MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020044 to MyCmd
45 " unsilent MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020046 verbose MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020047 verb MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020048 vertical MyCmd
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020049 vert MyCmd
Bram Moolenaar63a60de2016-06-04 22:08:55 +020050
51 aboveleft belowright botright browse confirm hide keepalt keepjumps
52 \ keepmarks keeppatterns lockmarks noswapfile silent tab
53 \ topleft verbose vertical MyCmd
54
Bram Moolenaar3bcfca32016-07-30 19:39:29 +020055 call assert_equal(' aboveleft aboveleft belowright belowright botright ' .
56 \ 'botright browse browse confirm confirm hide hide ' .
57 \ 'keepalt keepalt keepjumps keepjumps keepmarks keepmarks ' .
58 \ 'keeppatterns keeppatterns aboveleft aboveleft lockmarks lockmarks noswapfile ' .
59 \ 'noswapfile belowright belowright silent silent tab topleft topleft verbose verbose ' .
60 \ 'vertical vertical ' .
61 \ 'aboveleft belowright botright browse confirm hide keepalt keepjumps ' .
Bram Moolenaar63a60de2016-06-04 22:08:55 +020062 \ 'keepmarks keeppatterns lockmarks noswapfile silent tab topleft ' .
63 \ 'verbose vertical ', g:mods)
64
65 let g:mods = ''
66 command! -nargs=* MyQCmd let g:mods .= '<q-mods> '
67
68 vertical MyQCmd
69 call assert_equal('"vertical" ', g:mods)
70
71 delcommand MyCmd
72 delcommand MyQCmd
73 unlet g:mods
74endfunction
Bram Moolenaareac784e2016-07-28 22:08:24 +020075
76func Test_Ambiguous()
77 command Doit let g:didit = 'yes'
78 command Dothat let g:didthat = 'also'
79 call assert_fails('Do', 'E464:')
80 Doit
81 call assert_equal('yes', g:didit)
82 Dothat
83 call assert_equal('also', g:didthat)
84 unlet g:didit
85 unlet g:didthat
86
87 delcommand Doit
88 Do
89 call assert_equal('also', g:didthat)
90 delcommand Dothat
91endfunc
92
93func Test_CmdUndefined()
94 call assert_fails('Doit', 'E492:')
95 au CmdUndefined Doit :command Doit let g:didit = 'yes'
96 Doit
97 call assert_equal('yes', g:didit)
98 delcommand Doit
99
100 call assert_fails('Dothat', 'E492:')
101 au CmdUndefined * let g:didnot = 'yes'
102 call assert_fails('Dothat', 'E492:')
103 call assert_equal('yes', g:didnot)
104endfunc
Bram Moolenaar65c836e2017-01-26 22:07:33 +0100105
106func Test_CmdErrors()
107 call assert_fails('com! docmd :', 'E183:')
108 call assert_fails('com! \<Tab> :', 'E182:')
109 call assert_fails('com! _ :', 'E182:')
110 call assert_fails('com! X :', 'E841:')
111 call assert_fails('com! - DoCmd :', 'E175:')
112 call assert_fails('com! -xxx DoCmd :', 'E181:')
113 call assert_fails('com! -addr DoCmd :', 'E179:')
114 call assert_fails('com! -complete DoCmd :', 'E179:')
115 call assert_fails('com! -complete=xxx DoCmd :', 'E180:')
116 call assert_fails('com! -complete=custom DoCmd :', 'E467:')
117 call assert_fails('com! -complete=customlist DoCmd :', 'E467:')
118 call assert_fails('com! -complete=behave,CustomComplete DoCmd :', 'E468:')
119 call assert_fails('com! -nargs=x DoCmd :', 'E176:')
120 call assert_fails('com! -count=1 -count=2 DoCmd :', 'E177:')
121 call assert_fails('com! -count=x DoCmd :', 'E178:')
122 call assert_fails('com! -range=x DoCmd :', 'E178:')
123
124 com! -nargs=0 DoCmd :
125 call assert_fails('DoCmd x', 'E488:')
126
127 com! -nargs=1 DoCmd :
128 call assert_fails('DoCmd', 'E471:')
129
130 com! -nargs=+ DoCmd :
131 call assert_fails('DoCmd', 'E471:')
132
133 call assert_fails('com DoCmd :', 'E174:')
134 comclear
135 call assert_fails('delcom DoCmd', 'E184:')
136endfunc
137
138func CustomComplete(A, L, P)
139 return "January\nFebruary\nMars\n"
140endfunc
141
142func CustomCompleteList(A, L, P)
143 return [ "Monday", "Tuesday", "Wednesday" ]
144endfunc
145
146func Test_CmdCompletion()
147 call feedkeys(":com -\<C-A>\<C-B>\"\<CR>", 'tx')
148 call assert_equal('"com -addr bang bar buffer complete count nargs range register', @:)
149
150 call feedkeys(":com -nargs=0 -\<C-A>\<C-B>\"\<CR>", 'tx')
151 call assert_equal('"com -nargs=0 -addr bang bar buffer complete count nargs range register', @:)
152
153 call feedkeys(":com -nargs=\<C-A>\<C-B>\"\<CR>", 'tx')
154 call assert_equal('"com -nargs=* + 0 1 ?', @:)
155
156 call feedkeys(":com -addr=\<C-A>\<C-B>\"\<CR>", 'tx')
157 call assert_equal('"com -addr=arguments buffers lines loaded_buffers quickfix tabs windows', @:)
158
159 call feedkeys(":com -complete=co\<C-A>\<C-B>\"\<CR>", 'tx')
160 call assert_equal('"com -complete=color command compiler', @:)
161
162 command! DoCmd1 :
163 command! DoCmd2 :
164 call feedkeys(":com \<C-A>\<C-B>\"\<CR>", 'tx')
165 call assert_equal('"com DoCmd1 DoCmd2', @:)
166
167 call feedkeys(":DoC\<C-A>\<C-B>\"\<CR>", 'tx')
168 call assert_equal('"DoCmd1 DoCmd2', @:)
169
170 call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
171 call assert_equal('"delcom DoCmd1 DoCmd2', @:)
172
173 delcom DoCmd1
174 call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
175 call assert_equal('"delcom DoCmd2', @:)
176
177 call feedkeys(":com DoC\<C-A>\<C-B>\"\<CR>", 'tx')
178 call assert_equal('"com DoCmd2', @:)
179
180 delcom DoCmd2
181 call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx')
182 call assert_equal('"delcom DoC', @:)
183
184 call feedkeys(":com DoC\<C-A>\<C-B>\"\<CR>", 'tx')
185 call assert_equal('"com DoC', @:)
186
187 com! -complete=behave DoCmd :
188 call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
189 call assert_equal('"DoCmd mswin xterm', @:)
190
191 " This does not work. Why?
192 "call feedkeys(":DoCmd x\<C-A>\<C-B>\"\<CR>", 'tx')
193 "call assert_equal('"DoCmd xterm', @:)
194
195 com! -complete=custom,CustomComplete DoCmd :
196 call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
197 call assert_equal('"DoCmd January February Mars', @:)
198
199 com! -complete=customlist,CustomCompleteList DoCmd :
200 call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx')
201 call assert_equal('"DoCmd Monday Tuesday Wednesday', @:)
202
203 com! -complete=custom,CustomCompleteList DoCmd :
204 call assert_fails("call feedkeys(':DoCmd \<C-D>', 'tx')", 'E730:')
205
206 com! -complete=customlist,CustomComp DoCmd :
207 call assert_fails("call feedkeys(':DoCmd \<C-D>', 'tx')", 'E117:')
208endfunc
Bram Moolenaar20951482017-12-25 13:44:43 +0100209
210func CallExecute(A, L, P)
211 " Drop first '\n'
212 return execute('echo "hi"')[1:]
213endfunc
214
215func Test_use_execute_in_completion()
216 command! -nargs=* -complete=custom,CallExecute DoExec :
217 call feedkeys(":DoExec \<C-A>\<C-B>\"\<CR>", 'tx')
218 call assert_equal('"DoExec hi', @:)
219 delcommand DoExec
220endfunc