xref: /vim-8.2.3635/src/testdir/check.vim (revision c8cdf0f8)
1source shared.vim
2source term_util.vim
3
4command -nargs=1 MissingFeature throw 'Skipped: ' .. <args> .. ' feature missing'
5
6" Command to check for the presence of a feature.
7command -nargs=1 CheckFeature call CheckFeature(<f-args>)
8func CheckFeature(name)
9  if !has(a:name, 1)
10    throw 'Checking for non-existent feature ' .. a:name
11  endif
12  if !has(a:name)
13    MissingFeature a:name
14  endif
15endfunc
16
17" Command to check for the presence of a working option.
18command -nargs=1 CheckOption call CheckOption(<f-args>)
19func CheckOption(name)
20  if !exists('&' .. a:name)
21    throw 'Checking for non-existent option ' .. a:name
22  endif
23  if !exists('+' .. a:name)
24    throw 'Skipped: ' .. a:name .. ' option not supported'
25  endif
26endfunc
27
28" Command to check for the presence of a built-in function.
29command -nargs=1 CheckFunction call CheckFunction(<f-args>)
30func CheckFunction(name)
31  if !exists('?' .. a:name)
32    throw 'Checking for non-existent function ' .. a:name
33  endif
34  if !exists('*' .. a:name)
35    throw 'Skipped: ' .. a:name .. ' function missing'
36  endif
37endfunc
38
39" Command to check for the presence of an Ex command
40command -nargs=1 CheckCommand call CheckCommand(<f-args>)
41func CheckCommand(name)
42  if !exists(':' .. a:name)
43    throw 'Skipped: ' .. a:name .. ' command not supported'
44  endif
45endfunc
46
47" Command to check for the presence of a shell command
48command -nargs=1 CheckExecutable call CheckExecutable(<f-args>)
49func CheckExecutable(name)
50  if !executable(a:name)
51    throw 'Skipped: ' .. a:name .. ' program not executable'
52  endif
53endfunc
54
55" Command to check for the presence of python.  Argument should have been
56" obtained with PythonProg()
57func CheckPython(name)
58  if a:name == ''
59    throw 'Skipped: python command not available'
60  endif
61endfunc
62
63" Command to check for running on MS-Windows
64command CheckMSWindows call CheckMSWindows()
65func CheckMSWindows()
66  if !has('win32')
67    throw 'Skipped: only works on MS-Windows'
68  endif
69endfunc
70
71" Command to check for NOT running on MS-Windows
72command CheckNotMSWindows call CheckNotMSWindows()
73func CheckNotMSWindows()
74  if has('win32')
75    throw 'Skipped: does not work on MS-Windows'
76  endif
77endfunc
78
79" Command to check for running on Unix
80command CheckUnix call CheckUnix()
81func CheckUnix()
82  if !has('unix')
83    throw 'Skipped: only works on Unix'
84  endif
85endfunc
86
87" Command to check for running on Linix
88command CheckLinux call CheckLinux()
89func CheckLinux()
90  if !has('linux')
91    throw 'Skipped: only works on Linux'
92  endif
93endfunc
94
95" Command to check for not running on a BSD system.
96" TODO: using this check should not be needed
97command CheckNotBSD call CheckNotBSD()
98func CheckNotBSD()
99  if has('bsd')
100    throw 'Skipped: does not work on BSD'
101  endif
102endfunc
103
104" Command to check that making screendumps is supported.
105" Caller must source screendump.vim
106command CheckScreendump call CheckScreendump()
107func CheckScreendump()
108  if !CanRunVimInTerminal()
109    throw 'Skipped: cannot make screendumps'
110  endif
111endfunc
112
113" Command to check that we can Run Vim in a terminal window
114command CheckRunVimInTerminal call CheckRunVimInTerminal()
115func CheckRunVimInTerminal()
116  if !CanRunVimInTerminal()
117    throw 'Skipped: cannot run Vim in a terminal window'
118  endif
119endfunc
120
121" Command to check that we can run the GUI
122command CheckCanRunGui call CheckCanRunGui()
123func CheckCanRunGui()
124  if !has('gui') || ($DISPLAY == "" && !has('gui_running'))
125    throw 'Skipped: cannot start the GUI'
126  endif
127endfunc
128
129" Command to check that we are using the GUI
130command CheckGui call CheckGui()
131func CheckGui()
132  if !has('gui_running')
133    throw 'Skipped: only works in the GUI'
134  endif
135endfunc
136
137" Command to check that not currently using the GUI
138command CheckNotGui call CheckNotGui()
139func CheckNotGui()
140  if has('gui_running')
141    throw 'Skipped: only works in the terminal'
142  endif
143endfunc
144
145" Command to check that test is not running as root
146command CheckNotRoot call CheckNotRoot()
147func CheckNotRoot()
148  if IsRoot()
149    throw 'Skipped: cannot run test as root'
150  endif
151endfunc
152
153" Command to check that the current language is English
154command CheckEnglish call CheckEnglish()
155func CheckEnglish()
156  if v:lang != "C" && v:lang !~ '^[Ee]n'
157      throw 'Skipped: only works in English language environment'
158  endif
159endfunc
160
161" Command to check that loopback device has IPv6 address
162command CheckIPv6 call CheckIPv6()
163func CheckIPv6()
164  if !has('ipv6')
165    throw 'Skipped: cannot use IPv6 networking'
166  endif
167  if !exists('s:ipv6_loopback')
168    let s:ipv6_loopback = s:CheckIPv6Loopback()
169  endif
170  if !s:ipv6_loopback
171    throw 'Skipped: no IPv6 address for loopback device'
172  endif
173endfunc
174
175func s:CheckIPv6Loopback()
176  if has('win32')
177    return system('netsh interface ipv6 show interface') =~? '\<Loopback\>'
178  elseif filereadable('/proc/net/if_inet6')
179    return (match(readfile('/proc/net/if_inet6'), '\slo$') >= 0)
180  elseif executable('ifconfig')
181    for dev in ['lo0', 'lo', 'loop']
182      " NOTE: On SunOS, need specify address family 'inet6' to get IPv6 info.
183      if system('ifconfig ' .. dev .. ' inet6 2>/dev/null') =~? '\<inet6\>'
184            \ || system('ifconfig ' .. dev .. ' 2>/dev/null') =~? '\<inet6\>'
185        return v:true
186      endif
187    endfor
188  else
189    " TODO: How to check it in other platforms?
190  endif
191  return v:false
192endfunc
193
194" Command to check for not running under ASAN
195command CheckNotAsan call CheckNotAsan()
196func CheckNotAsan()
197  if execute('version') =~# '-fsanitize=[a-z,]*\<address\>'
198    throw 'Skipped: does not work with ASAN'
199  endif
200endfunc
201
202" vim: shiftwidth=2 sts=2 expandtab
203