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