blob: fd34be83b02ba4ad0e2454e1213904007c5b96ba [file] [log] [blame]
Bram Moolenaar4a6fcf82017-10-12 21:29:22 +02001" Tests for the exists() function
2func Test_exists()
3 augroup myagroup
4 autocmd! BufEnter *.my echo "myfile edited"
5 autocmd! FuncUndefined UndefFun exec "fu UndefFun()\nendfu"
6 augroup END
7 set rtp+=./sautest
8
9 " valid autocmd group
10 call assert_equal(1, exists('#myagroup'))
11 " valid autocmd group with garbage
12 call assert_equal(0, exists('#myagroup+b'))
13 " Valid autocmd group and event
14 call assert_equal(1, exists('#myagroup#BufEnter'))
15 " Valid autocmd group, event and pattern
16 call assert_equal(1, exists('#myagroup#BufEnter#*.my'))
17 " Valid autocmd event
18 call assert_equal(1, exists('#BufEnter'))
19 " Valid autocmd event and pattern
20 call assert_equal(1, exists('#BufEnter#*.my'))
21 " Non-existing autocmd group or event
22 call assert_equal(0, exists('#xyzagroup'))
23 " Non-existing autocmd group and valid autocmd event
24 call assert_equal(0, exists('#xyzagroup#BufEnter'))
25 " Valid autocmd group and event with no matching pattern
26 call assert_equal(0, exists('#myagroup#CmdwinEnter'))
27 " Valid autocmd group and non-existing autocmd event
28 call assert_equal(0, exists('#myagroup#xyzacmd'))
29 " Valid autocmd group and event and non-matching pattern
30 call assert_equal(0, exists('#myagroup#BufEnter#xyzpat'))
31 " Valid autocmd event and non-matching pattern
32 call assert_equal(0, exists('#BufEnter#xyzpat'))
33 " Empty autocmd group, event and pattern
34 call assert_equal(0, exists('###'))
35 " Empty autocmd group and event or empty event and pattern
36 call assert_equal(0, exists('##'))
37 " Valid autocmd event
38 call assert_equal(1, exists('##FileReadCmd'))
39 " Non-existing autocmd event
40 call assert_equal(0, exists('##MySpecialCmd'))
41
42 " Existing and working option (long form)
43 call assert_equal(1, exists('&textwidth'))
44 " Existing and working option (short form)
45 call assert_equal(1, exists('&tw'))
46 " Existing and working option with garbage
47 call assert_equal(0, exists('&tw-'))
48 " Global option
49 call assert_equal(1, exists('&g:errorformat'))
50 " Local option
51 call assert_equal(1, exists('&l:errorformat'))
52 " Negative form of existing and working option (long form)
53 call assert_equal(0, exists('&nojoinspaces'))
54 " Negative form of existing and working option (short form)
55 call assert_equal(0, exists('&nojs'))
56 " Non-existing option
57 call assert_equal(0, exists('&myxyzoption'))
58
59 " Existing and working option (long form)
60 call assert_equal(1, exists('+incsearch'))
61 " Existing and working option with garbage
62 call assert_equal(0, exists('+incsearch!1'))
63 " Existing and working option (short form)
64 call assert_equal(1, exists('+is'))
65 " Existing option that is hidden.
66 call assert_equal(0, exists('+autoprint'))
67
68 " Existing environment variable
69 let $EDITOR_NAME = 'Vim Editor'
70 call assert_equal(1, exists('$EDITOR_NAME'))
71 " Non-existing environment variable
72 call assert_equal(0, exists('$NON_ENV_VAR'))
73
74 " Valid internal function
75 call assert_equal(1, exists('*bufnr'))
76 " Valid internal function with ()
77 call assert_equal(1, exists('*bufnr()'))
78 " Non-existing internal function
79 call assert_equal(0, exists('*myxyzfunc'))
80 " Valid internal function with garbage
81 call assert_equal(0, exists('*bufnr&6'))
82 " Valid user defined function
83 call assert_equal(1, exists('*Test_exists'))
84 " Non-existing user defined function
85 call assert_equal(0, exists('*MyxyzFunc'))
86 " Function that may be created by FuncUndefined event
87 call assert_equal(0, exists('*UndefFun'))
88 " Function that may be created by script autoloading
89 call assert_equal(0, exists('*footest#F'))
90
91 " Valid internal command (full match)
92 call assert_equal(2, exists(':edit'))
93 " Valid internal command (full match) with garbage
94 call assert_equal(0, exists(':edit/a'))
95 " Valid internal command (partial match)
96 call assert_equal(1, exists(':q'))
97 " Non-existing internal command
98 call assert_equal(0, exists(':invalidcmd'))
99
100 " User defined command (full match)
101 command! MyCmd :echo 'My command'
102 call assert_equal(2, exists(':MyCmd'))
103 " User defined command (partial match)
104 command! MyOtherCmd :echo 'Another command'
105 call assert_equal(3, exists(':My'))
106
107 " Command modifier
108 call assert_equal(2, exists(':rightbelow'))
109
110 " Non-existing user defined command (full match)
111 delcommand MyCmd
112 call assert_equal(0, exists(':MyCmd'))
113
114 " Non-existing user defined command (partial match)
115 delcommand MyOtherCmd
116 call assert_equal(0, exists(':My'))
117
118 " Valid local variable
119 let local_var = 1
120 call assert_equal(1, exists('local_var'))
121 " Valid local variable with garbage
122 call assert_equal(0, exists('local_var%n'))
123 " Non-existing local variable
124 unlet local_var
125 call assert_equal(0, exists('local_var'))
126
127 " Non-existing autoload variable that may be autoloaded
128 call assert_equal(0, exists('footest#x'))
129
130 " Valid local list
131 let local_list = ["blue", "orange"]
132 call assert_equal(1, exists('local_list'))
133 " Valid local list item
134 call assert_equal(1, exists('local_list[1]'))
135 " Valid local list item with garbage
136 call assert_equal(0, exists('local_list[1]+5'))
137 " Invalid local list item
138 call assert_equal(0, exists('local_list[2]'))
139 " Non-existing local list
140 unlet local_list
141 call assert_equal(0, exists('local_list'))
142 " Valid local dictionary
143 let local_dict = {"xcord":100, "ycord":2}
144 call assert_equal(1, exists('local_dict'))
145 " Non-existing local dictionary
146 unlet local_dict
147 call assert_equal(0, exists('local_dict'))
148 " Existing local curly-brace variable
149 let str = "local"
150 let curly_{str}_var = 1
151 call assert_equal(1, exists('curly_{str}_var'))
152 " Non-existing local curly-brace variable
153 unlet curly_{str}_var
154 call assert_equal(0, exists('curly_{str}_var'))
155
156 " Existing global variable
157 let g:global_var = 1
158 call assert_equal(1, exists('g:global_var'))
159 " Existing global variable with garbage
160 call assert_equal(0, exists('g:global_var-n'))
161 " Non-existing global variable
162 unlet g:global_var
163 call assert_equal(0, exists('g:global_var'))
164 " Existing global list
165 let g:global_list = ["blue", "orange"]
166 call assert_equal(1, exists('g:global_list'))
167 " Non-existing global list
168 unlet g:global_list
169 call assert_equal(0, exists('g:global_list'))
170 " Existing global dictionary
171 let g:global_dict = {"xcord":100, "ycord":2}
172 call assert_equal(1, exists('g:global_dict'))
173 " Non-existing global dictionary
174 unlet g:global_dict
175 call assert_equal(0, exists('g:global_dict'))
176 " Existing global curly-brace variable
177 let str = "global"
178 let g:curly_{str}_var = 1
179 call assert_equal(1, exists('g:curly_{str}_var'))
180 " Non-existing global curly-brace variable
181 unlet g:curly_{str}_var
182 call assert_equal(0, exists('g:curly_{str}_var'))
183
184 " Existing window variable
185 let w:window_var = 1
186 call assert_equal(1, exists('w:window_var'))
187 " Non-existing window variable
188 unlet w:window_var
189 call assert_equal(0, exists('w:window_var'))
190 " Existing window list
191 let w:window_list = ["blue", "orange"]
192 call assert_equal(1, exists('w:window_list'))
193 " Non-existing window list
194 unlet w:window_list
195 call assert_equal(0, exists('w:window_list'))
196 " Existing window dictionary
197 let w:window_dict = {"xcord":100, "ycord":2}
198 call assert_equal(1, exists('w:window_dict'))
199 " Non-existing window dictionary
200 unlet w:window_dict
201 call assert_equal(0, exists('w:window_dict'))
202 " Existing window curly-brace variable
203 let str = "window"
204 let w:curly_{str}_var = 1
205 call assert_equal(1, exists('w:curly_{str}_var'))
206 " Non-existing window curly-brace variable
207 unlet w:curly_{str}_var
208 call assert_equal(0, exists('w:curly_{str}_var'))
209
210 " Existing tab variable
211 let t:tab_var = 1
212 call assert_equal(1, exists('t:tab_var'))
213 " Non-existing tab variable
214 unlet t:tab_var
215 call assert_equal(0, exists('t:tab_var'))
216 " Existing tab list
217 let t:tab_list = ["blue", "orange"]
218 call assert_equal(1, exists('t:tab_list'))
219 " Non-existing tab list
220 unlet t:tab_list
221 call assert_equal(0, exists('t:tab_list'))
222 " Existing tab dictionary
223 let t:tab_dict = {"xcord":100, "ycord":2}
224 call assert_equal(1, exists('t:tab_dict'))
225 " Non-existing tab dictionary
226 unlet t:tab_dict
227 call assert_equal(0, exists('t:tab_dict'))
228 " Existing tab curly-brace variable
229 let str = "tab"
230 let t:curly_{str}_var = 1
231 call assert_equal(1, exists('t:curly_{str}_var'))
232 " Non-existing tab curly-brace variable
233 unlet t:curly_{str}_var
234 call assert_equal(0, exists('t:curly_{str}_var'))
235
236 " Existing buffer variable
237 let b:buffer_var = 1
238 call assert_equal(1, exists('b:buffer_var'))
239 " Non-existing buffer variable
240 unlet b:buffer_var
241 call assert_equal(0, exists('b:buffer_var'))
242 " Existing buffer list
243 let b:buffer_list = ["blue", "orange"]
244 call assert_equal(1, exists('b:buffer_list'))
245 " Non-existing buffer list
246 unlet b:buffer_list
247 call assert_equal(0, exists('b:buffer_list'))
248 " Existing buffer dictionary
249 let b:buffer_dict = {"xcord":100, "ycord":2}
250 call assert_equal(1, exists('b:buffer_dict'))
251 " Non-existing buffer dictionary
252 unlet b:buffer_dict
253 call assert_equal(0, exists('b:buffer_dict'))
254 " Existing buffer curly-brace variable
255 let str = "buffer"
256 let b:curly_{str}_var = 1
257 call assert_equal(1, exists('b:curly_{str}_var'))
258 " Non-existing buffer curly-brace variable
259 unlet b:curly_{str}_var
260 call assert_equal(0, exists('b:curly_{str}_var'))
261
262 " Existing Vim internal variable
263 call assert_equal(1, exists('v:version'))
264 " Non-existing Vim internal variable
265 call assert_equal(0, exists('v:non_exists_var'))
266
267 " Existing script-local variable
268 let s:script_var = 1
269 call assert_equal(1, exists('s:script_var'))
270 " Non-existing script-local variable
271 unlet s:script_var
272 call assert_equal(0, exists('s:script_var'))
273 " Existing script-local list
274 let s:script_list = ["blue", "orange"]
275 call assert_equal(1, exists('s:script_list'))
276 " Non-existing script-local list
277 unlet s:script_list
278 call assert_equal(0, exists('s:script_list'))
279 " Existing script-local dictionary
280 let s:script_dict = {"xcord":100, "ycord":2}
281 call assert_equal(1, exists('s:script_dict'))
282 " Non-existing script-local dictionary
283 unlet s:script_dict
284 call assert_equal(0, exists('s:script_dict'))
285 " Existing script curly-brace variable
286 let str = "script"
287 let s:curly_{str}_var = 1
288 call assert_equal(1, exists('s:curly_{str}_var'))
289 " Non-existing script-local curly-brace variable
290 unlet s:curly_{str}_var
291 call assert_equal(0, exists('s:curly_{str}_var'))
292
293 " Existing script-local function
294 function! s:my_script_func()
295 endfunction
296
297 echo '*s:my_script_func: 1'
298 call assert_equal(1, exists('*s:my_script_func'))
299
300 " Non-existing script-local function
301 delfunction s:my_script_func
302
303 call assert_equal(0, exists('*s:my_script_func'))
304 unlet str
305
306 call assert_equal(1, g:footest#x)
307 call assert_equal(0, footest#F())
308 call assert_equal(0, UndefFun())
309endfunc
310
311" exists() test for Function arguments
312func FuncArg_Tests(func_arg, ...)
313 call assert_equal(1, exists('a:func_arg'))
314 call assert_equal(0, exists('a:non_exists_arg'))
315 call assert_equal(1, exists('a:1'))
316 call assert_equal(0, exists('a:2'))
317endfunc
318
319func Test_exists_funcarg()
320 call FuncArg_Tests("arg1", "arg2")
321endfunc