1" 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
11  abo MyCmd
12  belowright MyCmd
13  bel MyCmd
14  botright MyCmd
15  bo MyCmd
16  browse MyCmd
17  bro MyCmd
18  confirm MyCmd
19  conf MyCmd
20  hide MyCmd
21  hid MyCmd
22  keepalt MyCmd
23  keepa MyCmd
24  keepjumps MyCmd
25  keepj MyCmd
26  keepmarks MyCmd
27  kee MyCmd
28  keeppatterns MyCmd
29  keepp MyCmd
30  leftabove MyCmd  " results in :aboveleft
31  lefta MyCmd
32  lockmarks MyCmd
33  loc MyCmd
34  " noautocmd MyCmd
35  noswapfile MyCmd
36  nos MyCmd
37  rightbelow MyCmd " results in :belowright
38  rightb MyCmd
39  " sandbox MyCmd
40  silent MyCmd
41  sil MyCmd
42  tab MyCmd
43  topleft MyCmd
44  to MyCmd
45  " unsilent MyCmd
46  verbose MyCmd
47  verb MyCmd
48  vertical MyCmd
49  vert MyCmd
50
51  aboveleft belowright botright browse confirm hide keepalt keepjumps
52	      \ keepmarks keeppatterns lockmarks noswapfile silent tab
53	      \ topleft verbose vertical MyCmd
54
55  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 ' .
62      \ '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
75
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
105
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
209