1" Tests for user defined commands
2
3" Test for <mods> in user defined commands
4set belloff=all
5function Test_cmdmods()
6  let g:mods = ''
7
8  command! -nargs=* MyCmd let g:mods .= '<mods> '
9
10  MyCmd
11  aboveleft MyCmd
12  abo MyCmd
13  belowright MyCmd
14  bel MyCmd
15  botright MyCmd
16  bo MyCmd
17  browse MyCmd
18  bro MyCmd
19  confirm MyCmd
20  conf MyCmd
21  hide MyCmd
22  hid MyCmd
23  keepalt MyCmd
24  keepa MyCmd
25  keepjumps MyCmd
26  keepj MyCmd
27  keepmarks MyCmd
28  kee MyCmd
29  keeppatterns MyCmd
30  keepp MyCmd
31  leftabove MyCmd  " results in :aboveleft
32  lefta MyCmd
33  lockmarks MyCmd
34  loc MyCmd
35  " noautocmd MyCmd
36  noswapfile MyCmd
37  nos MyCmd
38  rightbelow MyCmd " results in :belowright
39  rightb MyCmd
40  " sandbox MyCmd
41  silent MyCmd
42  sil MyCmd
43  tab MyCmd
44  topleft MyCmd
45  to MyCmd
46  " unsilent MyCmd
47  verbose MyCmd
48  verb MyCmd
49  vertical MyCmd
50  vert MyCmd
51
52  aboveleft belowright botright browse confirm hide keepalt keepjumps
53	      \ keepmarks keeppatterns lockmarks noswapfile silent tab
54	      \ topleft verbose vertical MyCmd
55
56  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 ' .
63      \ '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
76
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
106
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
210