xref: /vim-8.2.3635/src/testdir/check.vim (revision bfe13ccc)
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 running on MS-Windows
56command CheckMSWindows call CheckMSWindows()
57func CheckMSWindows()
58  if !has('win32')
59    throw 'Skipped: only works on MS-Windows'
60  endif
61endfunc
62
63" Command to check for NOT running on MS-Windows
64command CheckNotMSWindows call CheckNotMSWindows()
65func CheckNotMSWindows()
66  if has('win32')
67    throw 'Skipped: does not work on MS-Windows'
68  endif
69endfunc
70
71" Command to check for running on Unix
72command CheckUnix call CheckUnix()
73func CheckUnix()
74  if !has('unix')
75    throw 'Skipped: only works on Unix'
76  endif
77endfunc
78
79" Command to check for not running on a BSD system.
80" TODO: using this checks should not be needed
81command CheckNotBSD call CheckNotBSD()
82func CheckNotBSD()
83  if has('bsd')
84    throw 'Skipped: does not work on BSD'
85  endif
86endfunc
87
88" Command to check that making screendumps is supported.
89" Caller must source screendump.vim
90command CheckScreendump call CheckScreendump()
91func CheckScreendump()
92  if !CanRunVimInTerminal()
93    throw 'Skipped: cannot make screendumps'
94  endif
95endfunc
96
97" Command to check that we can Run Vim in a terminal window
98command CheckRunVimInTerminal call CheckRunVimInTerminal()
99func CheckRunVimInTerminal()
100  if !CanRunVimInTerminal()
101    throw 'Skipped: cannot run Vim in a terminal window'
102  endif
103endfunc
104
105" Command to check that we can run the GUI
106command CheckCanRunGui call CheckCanRunGui()
107func CheckCanRunGui()
108  if !has('gui') || ($DISPLAY == "" && !has('gui_running'))
109    throw 'Skipped: cannot start the GUI'
110  endif
111endfunc
112
113" Command to check that we are using the GUI
114command CheckGui call CheckGui()
115func CheckGui()
116  if !has('gui_running')
117    throw 'Skipped: only works in the GUI'
118  endif
119endfunc
120
121" Command to check that not currently using the GUI
122command CheckNotGui call CheckNotGui()
123func CheckNotGui()
124  if has('gui_running')
125    throw 'Skipped: only works in the terminal'
126  endif
127endfunc
128
129" Command to check that test is not running as root
130command CheckNotRoot call CheckNotRoot()
131func CheckNotRoot()
132  if IsRoot()
133    throw 'Skipped: cannot run test as root'
134  endif
135endfunc
136
137" Command to check that the current language is English
138command CheckEnglish call CheckEnglish()
139func CheckEnglish()
140  if v:lang != "C" && v:lang !~ '^[Ee]n'
141      throw 'Skipped: only works in English language environment'
142  endif
143endfunc
144
145" Command to check that loopback device has IPv6 address
146command CheckIPv6 call CheckIPv6()
147func CheckIPv6()
148  if !has('ipv6')
149    throw 'Skipped: cannot use IPv6 networking'
150  endif
151  if !exists('s:ipv6_loopback')
152    let s:ipv6_loopback = s:CheckIPv6Loopback()
153  endif
154  if !s:ipv6_loopback
155    throw 'Skipped: no IPv6 address for loopback device'
156  endif
157endfunc
158
159func s:CheckIPv6Loopback()
160  if has('win32')
161    return system('netsh interface ipv6 show interface') =~? '\<Loopback\>'
162  elseif filereadable('/proc/net/if_inet6')
163    return (match(readfile('/proc/net/if_inet6'), '\slo$') >= 0)
164  elseif executable('ifconfig')
165    for dev in ['lo0', 'lo', 'loop']
166      " NOTE: On SunOS, need specify address family 'inet6' to get IPv6 info.
167      if system('ifconfig ' .. dev .. ' inet6 2>/dev/null') =~? '\<inet6\>'
168            \ || system('ifconfig ' .. dev .. ' 2>/dev/null') =~? '\<inet6\>'
169        return v:true
170      endif
171    endfor
172  else
173    " TODO: How to check it in other platforms?
174  endif
175  return v:false
176endfunc
177
178" vim: shiftwidth=2 sts=2 expandtab
179