xref: /vim-8.2.3635/src/testdir/check.vim (revision 40bd5a15)
107282f01SBram Moolenaarsource shared.vim
23180fe6cSBram Moolenaarsource term_util.vim
307282f01SBram Moolenaar
47f829cabSBram Moolenaarcommand -nargs=1 MissingFeature throw 'Skipped: ' .. <args> .. ' feature missing'
57f829cabSBram Moolenaar
6b46fecd3SBram Moolenaar" Command to check for the presence of a feature.
7b46fecd3SBram Moolenaarcommand -nargs=1 CheckFeature call CheckFeature(<f-args>)
8b46fecd3SBram Moolenaarfunc CheckFeature(name)
97929651eSBram Moolenaar  if !has(a:name, 1)
107929651eSBram Moolenaar    throw 'Checking for non-existent feature ' .. a:name
117929651eSBram Moolenaar  endif
12b46fecd3SBram Moolenaar  if !has(a:name)
137f829cabSBram Moolenaar    MissingFeature a:name
14b46fecd3SBram Moolenaar  endif
15b46fecd3SBram Moolenaarendfunc
16b46fecd3SBram Moolenaar
17fb773a3eSBram Moolenaar" Command to check for the absence of a feature.
18fb773a3eSBram Moolenaarcommand -nargs=1 CheckNotFeature call CheckNotFeature(<f-args>)
19fb773a3eSBram Moolenaarfunc CheckNotFeature(name)
20fb773a3eSBram Moolenaar  if !has(a:name, 1)
21fb773a3eSBram Moolenaar    throw 'Checking for non-existent feature ' .. a:name
22fb773a3eSBram Moolenaar  endif
23fb773a3eSBram Moolenaar  if has(a:name)
24fb773a3eSBram Moolenaar    throw 'Skipped: ' .. a:name .. ' feature present'
25fb773a3eSBram Moolenaar  endif
26fb773a3eSBram Moolenaarendfunc
27fb773a3eSBram Moolenaar
28b46fecd3SBram Moolenaar" Command to check for the presence of a working option.
29b46fecd3SBram Moolenaarcommand -nargs=1 CheckOption call CheckOption(<f-args>)
30b46fecd3SBram Moolenaarfunc CheckOption(name)
31c5a8fdc4SBram Moolenaar  if !exists('&' .. a:name)
32c5a8fdc4SBram Moolenaar    throw 'Checking for non-existent option ' .. a:name
33c5a8fdc4SBram Moolenaar  endif
34b46fecd3SBram Moolenaar  if !exists('+' .. a:name)
35b46fecd3SBram Moolenaar    throw 'Skipped: ' .. a:name .. ' option not supported'
36b46fecd3SBram Moolenaar  endif
37b46fecd3SBram Moolenaarendfunc
38b46fecd3SBram Moolenaar
3915c47602SBram Moolenaar" Command to check for the presence of a built-in function.
40b46fecd3SBram Moolenaarcommand -nargs=1 CheckFunction call CheckFunction(<f-args>)
41b46fecd3SBram Moolenaarfunc CheckFunction(name)
4215c47602SBram Moolenaar  if !exists('?' .. a:name)
4315c47602SBram Moolenaar    throw 'Checking for non-existent function ' .. a:name
4415c47602SBram Moolenaar  endif
45b46fecd3SBram Moolenaar  if !exists('*' .. a:name)
46b46fecd3SBram Moolenaar    throw 'Skipped: ' .. a:name .. ' function missing'
47b46fecd3SBram Moolenaar  endif
48b46fecd3SBram Moolenaarendfunc
494641a122SBram Moolenaar
508c5a278fSBram Moolenaar" Command to check for the presence of an Ex command
518c5a278fSBram Moolenaarcommand -nargs=1 CheckCommand call CheckCommand(<f-args>)
528c5a278fSBram Moolenaarfunc CheckCommand(name)
538c5a278fSBram Moolenaar  if !exists(':' .. a:name)
548c5a278fSBram Moolenaar    throw 'Skipped: ' .. a:name .. ' command not supported'
558c5a278fSBram Moolenaar  endif
568c5a278fSBram Moolenaarendfunc
578c5a278fSBram Moolenaar
588c5a278fSBram Moolenaar" Command to check for the presence of a shell command
598c5a278fSBram Moolenaarcommand -nargs=1 CheckExecutable call CheckExecutable(<f-args>)
608c5a278fSBram Moolenaarfunc CheckExecutable(name)
618c5a278fSBram Moolenaar  if !executable(a:name)
628c5a278fSBram Moolenaar    throw 'Skipped: ' .. a:name .. ' program not executable'
638c5a278fSBram Moolenaar  endif
648c5a278fSBram Moolenaarendfunc
658c5a278fSBram Moolenaar
66a161cb5dSBram Moolenaar" Command to check for the presence of python.  Argument should have been
67a161cb5dSBram Moolenaar" obtained with PythonProg()
68a161cb5dSBram Moolenaarfunc CheckPython(name)
69a161cb5dSBram Moolenaar  if a:name == ''
70a161cb5dSBram Moolenaar    throw 'Skipped: python command not available'
71a161cb5dSBram Moolenaar  endif
72a161cb5dSBram Moolenaarendfunc
73a161cb5dSBram Moolenaar
744641a122SBram Moolenaar" Command to check for running on MS-Windows
754641a122SBram Moolenaarcommand CheckMSWindows call CheckMSWindows()
764641a122SBram Moolenaarfunc CheckMSWindows()
774641a122SBram Moolenaar  if !has('win32')
784641a122SBram Moolenaar    throw 'Skipped: only works on MS-Windows'
794641a122SBram Moolenaar  endif
804641a122SBram Moolenaarendfunc
814641a122SBram Moolenaar
828c5a278fSBram Moolenaar" Command to check for NOT running on MS-Windows
838c5a278fSBram Moolenaarcommand CheckNotMSWindows call CheckNotMSWindows()
848c5a278fSBram Moolenaarfunc CheckNotMSWindows()
858c5a278fSBram Moolenaar  if has('win32')
868c5a278fSBram Moolenaar    throw 'Skipped: does not work on MS-Windows'
878c5a278fSBram Moolenaar  endif
888c5a278fSBram Moolenaarendfunc
898c5a278fSBram Moolenaar
904641a122SBram Moolenaar" Command to check for running on Unix
914641a122SBram Moolenaarcommand CheckUnix call CheckUnix()
924641a122SBram Moolenaarfunc CheckUnix()
934641a122SBram Moolenaar  if !has('unix')
944641a122SBram Moolenaar    throw 'Skipped: only works on Unix'
954641a122SBram Moolenaar  endif
964641a122SBram Moolenaarendfunc
973c8ee629SBram Moolenaar
986635ae14SBram Moolenaar" Command to check for running on Linix
996635ae14SBram Moolenaarcommand CheckLinux call CheckLinux()
1006635ae14SBram Moolenaarfunc CheckLinux()
1016635ae14SBram Moolenaar  if !has('linux')
1026635ae14SBram Moolenaar    throw 'Skipped: only works on Linux'
1036635ae14SBram Moolenaar  endif
1046635ae14SBram Moolenaarendfunc
1056635ae14SBram Moolenaar
1068b9abfd8SBram Moolenaar" Command to check for not running on a BSD system.
1078b9abfd8SBram Moolenaarcommand CheckNotBSD call CheckNotBSD()
1088b9abfd8SBram Moolenaarfunc CheckNotBSD()
1098b9abfd8SBram Moolenaar  if has('bsd')
1108b9abfd8SBram Moolenaar    throw 'Skipped: does not work on BSD'
1118b9abfd8SBram Moolenaar  endif
1128b9abfd8SBram Moolenaarendfunc
1138b9abfd8SBram Moolenaar
1143c8ee629SBram Moolenaar" Command to check that making screendumps is supported.
1153c8ee629SBram Moolenaar" Caller must source screendump.vim
1163c8ee629SBram Moolenaarcommand CheckScreendump call CheckScreendump()
1173c8ee629SBram Moolenaarfunc CheckScreendump()
1183c8ee629SBram Moolenaar  if !CanRunVimInTerminal()
1193c8ee629SBram Moolenaar    throw 'Skipped: cannot make screendumps'
1203c8ee629SBram Moolenaar  endif
1213c8ee629SBram Moolenaarendfunc
1223c8ee629SBram Moolenaar
1233c8ee629SBram Moolenaar" Command to check that we can Run Vim in a terminal window
1243c8ee629SBram Moolenaarcommand CheckRunVimInTerminal call CheckRunVimInTerminal()
1253c8ee629SBram Moolenaarfunc CheckRunVimInTerminal()
1263c8ee629SBram Moolenaar  if !CanRunVimInTerminal()
1273c8ee629SBram Moolenaar    throw 'Skipped: cannot run Vim in a terminal window'
1283c8ee629SBram Moolenaar  endif
1293c8ee629SBram Moolenaarendfunc
1308c5a278fSBram Moolenaar
1318c5a278fSBram Moolenaar" Command to check that we can run the GUI
1328c5a278fSBram Moolenaarcommand CheckCanRunGui call CheckCanRunGui()
1338c5a278fSBram Moolenaarfunc CheckCanRunGui()
1348c5a278fSBram Moolenaar  if !has('gui') || ($DISPLAY == "" && !has('gui_running'))
1352514315fSBram Moolenaar    throw 'Skipped: cannot start the GUI'
1368c5a278fSBram Moolenaar  endif
1378c5a278fSBram Moolenaarendfunc
1388c5a278fSBram Moolenaar
139d6fa7bd5SBram Moolenaar" Command to Check for an environment variable
140d6fa7bd5SBram Moolenaarcommand -nargs=1 CheckEnv call CheckEnv(<f-args>)
141d6fa7bd5SBram Moolenaarfunc CheckEnv(name)
142f6d87797SBram Moolenaar  if empty(eval('$' .. a:name))
143d6fa7bd5SBram Moolenaar    throw 'Skipped: Environment variable ' .. a:name .. ' is not set'
144d6fa7bd5SBram Moolenaar  endif
145d6fa7bd5SBram Moolenaarendfunc
146d6fa7bd5SBram Moolenaar
1478c5a278fSBram Moolenaar" Command to check that we are using the GUI
1488c5a278fSBram Moolenaarcommand CheckGui call CheckGui()
1498c5a278fSBram Moolenaarfunc CheckGui()
1508c5a278fSBram Moolenaar  if !has('gui_running')
1518c5a278fSBram Moolenaar    throw 'Skipped: only works in the GUI'
1528c5a278fSBram Moolenaar  endif
1538c5a278fSBram Moolenaarendfunc
1548c5a278fSBram Moolenaar
1558c5a278fSBram Moolenaar" Command to check that not currently using the GUI
1568c5a278fSBram Moolenaarcommand CheckNotGui call CheckNotGui()
1578c5a278fSBram Moolenaarfunc CheckNotGui()
1588c5a278fSBram Moolenaar  if has('gui_running')
1598c5a278fSBram Moolenaar    throw 'Skipped: only works in the terminal'
1608c5a278fSBram Moolenaar  endif
1618c5a278fSBram Moolenaarendfunc
16207282f01SBram Moolenaar
16307282f01SBram Moolenaar" Command to check that test is not running as root
16407282f01SBram Moolenaarcommand CheckNotRoot call CheckNotRoot()
16507282f01SBram Moolenaarfunc CheckNotRoot()
16607282f01SBram Moolenaar  if IsRoot()
16707282f01SBram Moolenaar    throw 'Skipped: cannot run test as root'
16807282f01SBram Moolenaar  endif
16907282f01SBram Moolenaarendfunc
170cde0ff39SBram Moolenaar
171cde0ff39SBram Moolenaar" Command to check that the current language is English
172cde0ff39SBram Moolenaarcommand CheckEnglish call CheckEnglish()
173cde0ff39SBram Moolenaarfunc CheckEnglish()
174cde0ff39SBram Moolenaar  if v:lang != "C" && v:lang !~ '^[Ee]n'
175cde0ff39SBram Moolenaar      throw 'Skipped: only works in English language environment'
176cde0ff39SBram Moolenaar  endif
177cde0ff39SBram Moolenaarendfunc
178cde0ff39SBram Moolenaar
179bfe13cccSBram Moolenaar" Command to check that loopback device has IPv6 address
180bfe13cccSBram Moolenaarcommand CheckIPv6 call CheckIPv6()
181bfe13cccSBram Moolenaarfunc CheckIPv6()
182bfe13cccSBram Moolenaar  if !has('ipv6')
183bfe13cccSBram Moolenaar    throw 'Skipped: cannot use IPv6 networking'
184bfe13cccSBram Moolenaar  endif
185bfe13cccSBram Moolenaar  if !exists('s:ipv6_loopback')
186bfe13cccSBram Moolenaar    let s:ipv6_loopback = s:CheckIPv6Loopback()
187bfe13cccSBram Moolenaar  endif
188bfe13cccSBram Moolenaar  if !s:ipv6_loopback
189bfe13cccSBram Moolenaar    throw 'Skipped: no IPv6 address for loopback device'
190bfe13cccSBram Moolenaar  endif
191bfe13cccSBram Moolenaarendfunc
192bfe13cccSBram Moolenaar
193bfe13cccSBram Moolenaarfunc s:CheckIPv6Loopback()
194bfe13cccSBram Moolenaar  if has('win32')
195bfe13cccSBram Moolenaar    return system('netsh interface ipv6 show interface') =~? '\<Loopback\>'
196bfe13cccSBram Moolenaar  elseif filereadable('/proc/net/if_inet6')
197bfe13cccSBram Moolenaar    return (match(readfile('/proc/net/if_inet6'), '\slo$') >= 0)
198bfe13cccSBram Moolenaar  elseif executable('ifconfig')
199bfe13cccSBram Moolenaar    for dev in ['lo0', 'lo', 'loop']
200bfe13cccSBram Moolenaar      " NOTE: On SunOS, need specify address family 'inet6' to get IPv6 info.
201bfe13cccSBram Moolenaar      if system('ifconfig ' .. dev .. ' inet6 2>/dev/null') =~? '\<inet6\>'
202bfe13cccSBram Moolenaar            \ || system('ifconfig ' .. dev .. ' 2>/dev/null') =~? '\<inet6\>'
203bfe13cccSBram Moolenaar        return v:true
204bfe13cccSBram Moolenaar      endif
205bfe13cccSBram Moolenaar    endfor
206bfe13cccSBram Moolenaar  else
207bfe13cccSBram Moolenaar    " TODO: How to check it in other platforms?
208bfe13cccSBram Moolenaar  endif
209bfe13cccSBram Moolenaar  return v:false
210bfe13cccSBram Moolenaarendfunc
211bfe13cccSBram Moolenaar
21297202d95SBram Moolenaar" Command to check for not running under ASAN
21397202d95SBram Moolenaarcommand CheckNotAsan call CheckNotAsan()
21497202d95SBram Moolenaarfunc CheckNotAsan()
21597202d95SBram Moolenaar  if execute('version') =~# '-fsanitize=[a-z,]*\<address\>'
21697202d95SBram Moolenaar    throw 'Skipped: does not work with ASAN'
21797202d95SBram Moolenaar  endif
21897202d95SBram Moolenaarendfunc
21997202d95SBram Moolenaar
220*40bd5a15SBram Moolenaar" Command to check for X11 based GUI
221*40bd5a15SBram Moolenaarcommand CheckX11BasedGui call CheckX11BasedGui()
222*40bd5a15SBram Moolenaarfunc CheckX11BasedGui()
223*40bd5a15SBram Moolenaar  if !g:x11_based_gui
224*40bd5a15SBram Moolenaar    throw 'Skipped: requires X11 based GUI'
225*40bd5a15SBram Moolenaar  endif
226*40bd5a15SBram Moolenaarendfunc
227*40bd5a15SBram Moolenaar
228f8c52e8dSBram Moolenaar" Command to check for satisfying any of the conditions.
229f8c52e8dSBram Moolenaar" e.g. CheckAnyOf Feature:bsd Feature:sun Linux
230f8c52e8dSBram Moolenaarcommand -nargs=+ CheckAnyOf call CheckAnyOf(<f-args>)
231f8c52e8dSBram Moolenaarfunc CheckAnyOf(...)
232f8c52e8dSBram Moolenaar  let excp = []
233f8c52e8dSBram Moolenaar  for arg in a:000
234f8c52e8dSBram Moolenaar    try
235f8c52e8dSBram Moolenaar      exe 'Check' .. substitute(arg, ':', ' ', '')
236f8c52e8dSBram Moolenaar      return
237f8c52e8dSBram Moolenaar    catch /^Skipped:/
238f8c52e8dSBram Moolenaar      let excp += [substitute(v:exception, '^Skipped:\s*', '', '')]
239f8c52e8dSBram Moolenaar    endtry
240f8c52e8dSBram Moolenaar  endfor
241f8c52e8dSBram Moolenaar  throw 'Skipped: ' .. join(excp, '; ')
242f8c52e8dSBram Moolenaarendfunc
243f8c52e8dSBram Moolenaar
244f8c52e8dSBram Moolenaar" Command to check for satisfying all of the conditions.
245f8c52e8dSBram Moolenaar" e.g. CheckAllOf Unix Gui Option:ballooneval
246f8c52e8dSBram Moolenaarcommand -nargs=+ CheckAllOf call CheckAllOf(<f-args>)
247f8c52e8dSBram Moolenaarfunc CheckAllOf(...)
248f8c52e8dSBram Moolenaar  for arg in a:000
249f8c52e8dSBram Moolenaar    exe 'Check' .. substitute(arg, ':', ' ', '')
250f8c52e8dSBram Moolenaar  endfor
251f8c52e8dSBram Moolenaarendfunc
252f8c52e8dSBram Moolenaar
253cde0ff39SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
254