@@ -102,3 +102,107 @@ func Test_CmdUndefined()
102102 call assert_fails (' Dothat' , ' E492:' )
103103 call assert_equal (' yes' , g: didnot )
104104endfunc
105+
106+ func 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:' )
136+ endfunc
137+
138+ func CustomComplete (A, L, P )
139+ return " January\n February\n Mars\n "
140+ endfunc
141+
142+ func CustomCompleteList (A, L, P )
143+ return [ " Monday" , " Tuesday" , " Wednesday" ]
144+ endfunc
145+
146+ func 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:' )
208+ endfunc
0 commit comments