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