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