changeset 17089:8e9e9124c7a2 v8.1.1544

patch 8.1.1544: some balloon tests don't run when they can commit https://github.com/vim/vim/commit/b46fecd3454399f8ebdc5055302e4bfc5a10f98b Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jun 15 17:58:09 2019 +0200 patch 8.1.1544: some balloon tests don't run when they can Problem: Some balloon tests don't run when they can. Solution: Split GUI balloon tests off into a separate file. (Ozaki Kiichi, closes #4538) Change the feature check into a command for consistency.
author Bram Moolenaar <Bram@vim.org>
date Sat, 15 Jun 2019 18:00:08 +0200
parents 49eb35886d80
children ed03dd99ea37
files Filelist src/testdir/Make_all.mak src/testdir/check.vim src/testdir/test_arabic.vim src/testdir/test_balloon.vim src/testdir/test_balloon_gui.vim src/testdir/test_crypt.vim src/testdir/test_cscope.vim src/testdir/test_digraph.vim src/testdir/test_float_func.vim src/testdir/test_gui.vim src/testdir/test_gui_init.vim src/testdir/test_history.vim src/testdir/test_langmap.vim src/testdir/test_listlbr.vim src/testdir/test_listlbr_utf8.vim src/testdir/test_lua.vim src/testdir/test_makeencoding.vim src/testdir/test_matchadd_conceal.vim src/testdir/test_matchadd_conceal_utf8.vim src/testdir/test_memory_usage.vim src/testdir/test_menu.vim src/testdir/test_mksession.vim src/testdir/test_mksession_utf8.vim src/testdir/test_netbeans.vim src/testdir/test_paste.vim src/testdir/test_perl.vim src/testdir/test_popupwin.vim src/testdir/test_profile.vim src/testdir/test_prompt_buffer.vim src/testdir/test_python2.vim src/testdir/test_python3.vim src/testdir/test_pyx2.vim src/testdir/test_pyx3.vim src/testdir/test_quickfix.vim src/testdir/test_quotestar.vim src/testdir/test_reltime.vim src/testdir/test_ruby.vim src/testdir/test_sha256.vim src/testdir/test_shortpathname.vim src/testdir/test_signals.vim src/testdir/test_signs.vim src/testdir/test_spell.vim src/testdir/test_syntax.vim src/testdir/test_tcl.vim src/testdir/test_termcodes.vim src/testdir/test_terminal.vim src/testdir/test_terminal_fail.vim src/testdir/test_textobjects.vim src/testdir/test_textprop.vim src/testdir/test_timers.vim src/testdir/test_vartabs.vim src/testdir/test_winbar.vim src/testdir/test_windows_home.vim src/testdir/test_xxd.vim src/version.c
diffstat 56 files changed, 164 insertions(+), 181 deletions(-) [+]
line wrap: on
line diff
--- a/Filelist
+++ b/Filelist
@@ -120,6 +120,7 @@ SRC_ALL =	\
 		src/testdir/sautest/autoload/*.vim \
 		src/testdir/runtest.vim \
 		src/testdir/summarize.vim \
+		src/testdir/check.vim \
 		src/testdir/shared.vim \
 		src/testdir/screendump.vim \
 		src/testdir/view_util.vim \
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -65,6 +65,7 @@ NEW_TESTS = \
 	test_backspace_opt \
 	test_backup \
 	test_balloon \
+	test_balloon_gui \
 	test_behave \
 	test_blob \
 	test_blockedit \
@@ -297,6 +298,7 @@ NEW_TESTS_RES = \
 	test_autoload.res \
 	test_backspace_opt.res \
 	test_balloon.res \
+	test_balloon_gui.res \
 	test_blob.res \
 	test_blockedit.res \
 	test_breakindent.res \
new file mode 100644
--- /dev/null
+++ b/src/testdir/check.vim
@@ -0,0 +1,23 @@
+" Command to check for the presence of a feature.
+command -nargs=1 CheckFeature call CheckFeature(<f-args>)
+func CheckFeature(name)
+  if !has(a:name)
+    throw 'Skipped: ' .. a:name .. ' feature missing'
+  endif
+endfunc
+
+" Command to check for the presence of a working option.
+command -nargs=1 CheckOption call CheckOption(<f-args>)
+func CheckOption(name)
+  if !exists('+' .. a:name)
+    throw 'Skipped: ' .. a:name .. ' option not supported'
+  endif
+endfunc
+
+" Command to check for the presence of a function.
+command -nargs=1 CheckFunction call CheckFunction(<f-args>)
+func CheckFunction(name)
+  if !exists('*' .. a:name)
+    throw 'Skipped: ' .. a:name .. ' function missing'
+  endif
+endfunc
--- a/src/testdir/test_arabic.vim
+++ b/src/testdir/test_arabic.vim
@@ -2,9 +2,8 @@
 " NOTE: This just checks if the code works. If you know Arabic please add
 " functional tests that check the shaping works with real text.
 
-if !has('arabic')
-  throw 'Skipped: arabic feature missing'
-endif
+source check.vim
+CheckFeature arabic
 
 source view_util.vim
 
--- a/src/testdir/test_balloon.vim
+++ b/src/testdir/test_balloon.vim
@@ -1,11 +1,12 @@
 " Tests for 'balloonevalterm'.
+" A few tests only work in the terminal.
 
-if !has('balloon_eval_term')
-  throw 'Skipped: balloon_eval_term feature missing'
+if has('gui_running')
+  throw 'Skipped: only work in the terminal'
 endif
 
-" A few tests only work in the terminal.
-if !has('gui_running')
+source check.vim
+CheckFeature balloon_eval_term
 
 source screendump.vim
 if !CanRunVimInTerminal()
@@ -56,24 +57,3 @@ func Test_balloon_eval_term_visual()
   call StopVimInTerminal(buf)
   call delete('XTest_beval_visual')
 endfunc
-
-endif
-
-" Tests that only work in the GUI
-if has('gui_running')
-
-func Test_balloon_show_gui()
-  let msg = 'this this this this'
-  call balloon_show(msg)
-  call assert_equal(msg, balloon_gettext())
-  sleep 10m
-  call balloon_show('')
-
-  let msg = 'that that'
-  call balloon_show(msg)
-  call assert_equal(msg, balloon_gettext())
-  sleep 10m
-  call balloon_show('')
-endfunc
-
-endif
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_balloon_gui.vim
@@ -0,0 +1,22 @@
+" Tests for 'ballooneval' in the GUI.
+
+if !has('gui_running')
+  throw 'Skipped: only works in the GUI'
+endif
+
+source check.vim
+CheckFeature balloon_eval
+
+func Test_balloon_show_gui()
+  let msg = 'this this this this'
+  call balloon_show(msg)
+  call assert_equal(msg, balloon_gettext())
+  sleep 10m
+  call balloon_show('')
+
+  let msg = 'that that'
+  call balloon_show(msg)
+  call assert_equal(msg, balloon_gettext())
+  sleep 10m
+  call balloon_show('')
+endfunc
--- a/src/testdir/test_crypt.vim
+++ b/src/testdir/test_crypt.vim
@@ -1,8 +1,7 @@
 " Tests for encryption.
 
-if !has('cryptv')
-  throw 'Skipped, encryption feature missing'
-endif
+source check.vim
+CheckFeature cryptv
 
 func Common_head_only(text)
   " This was crashing Vim
--- a/src/testdir/test_cscope.vim
+++ b/src/testdir/test_cscope.vim
@@ -1,10 +1,11 @@
 " Test for cscope commands.
 
-if !has('cscope') || !has('quickfix')
-  throw 'Skipped, cscope or quickfix feature missing'
-endif
+source check.vim
+CheckFeature cscope
+CheckFeature quickfix
+
 if !executable('cscope')
-  throw 'Skipped, cscope program missing'
+  throw 'Skipped: cscope program missing'
 endif
 
 func CscopeSetupOrClean(setup)
--- a/src/testdir/test_digraph.vim
+++ b/src/testdir/test_digraph.vim
@@ -1,8 +1,7 @@
 " Tests for digraphs
 
-if !has("digraphs")
-  throw 'Skipped, digraphs feature missing'
-endif
+source check.vim
+CheckFeature digraphs
 
 func Put_Dig(chars)
   exe "norm! o\<c-k>".a:chars
--- a/src/testdir/test_float_func.vim
+++ b/src/testdir/test_float_func.vim
@@ -1,8 +1,7 @@
 " test float functions
 
-if !has('float')
-  throw 'Skipped, float feature missing'
-end
+source check.vim
+CheckFeature float
 
 func Test_abs()
   call assert_equal('1.23', string(abs(1.23)))
--- a/src/testdir/test_gui.vim
+++ b/src/testdir/test_gui.vim
@@ -2,7 +2,7 @@
 
 source shared.vim
 if !CanRunGui()
-  throw 'Skipped, cannot run GUI'
+  throw 'Skipped: cannot run GUI'
 endif
 
 source setup_gui.vim
--- a/src/testdir/test_gui_init.vim
+++ b/src/testdir/test_gui_init.vim
@@ -3,7 +3,7 @@
 
 source shared.vim
 if !CanRunGui()
-  throw 'Skipped, cannot run GUI'
+  throw 'Skipped: cannot run GUI'
 endif
 
 source setup_gui.vim
--- a/src/testdir/test_history.vim
+++ b/src/testdir/test_history.vim
@@ -1,8 +1,7 @@
 " Tests for the history functions
 
-if !has('cmdline_hist')
-  throw 'Skipped, cmdline_hist feature missing'
-endif
+source check.vim
+CheckFeature cmdline_hist
 
 set history=7
 
--- a/src/testdir/test_langmap.vim
+++ b/src/testdir/test_langmap.vim
@@ -1,8 +1,7 @@
 " tests for 'langmap'
 
-if !has('langmap')
-  throw 'Skipped, langmap feature missing'
-endif
+source check.vim
+CheckFeature langmap
 
 func Test_langmap()
   new
--- a/src/testdir/test_listlbr.vim
+++ b/src/testdir/test_listlbr.vim
@@ -3,12 +3,9 @@
 set encoding=latin1
 scriptencoding latin1
 
-if !exists("+linebreak")
-  throw 'Skipped, linebreak option missing'
-endif
-if !has("conceal")
-  throw 'Skipped, conceal feature missing'
-endif
+source check.vim
+CheckOption linebreak
+CheckFeature conceal
 
 source view_util.vim
 
--- a/src/testdir/test_listlbr_utf8.vim
+++ b/src/testdir/test_listlbr_utf8.vim
@@ -3,15 +3,10 @@
 set encoding=utf-8
 scriptencoding utf-8
 
-if !exists("+linebreak")
-  throw 'Skipped, linebreak option missing'
-endif
-if !has("conceal")
-  throw 'Skipped, conceal feature missing'
-endif
-if !has("signs")
-  throw 'Skipped, signs feature missing'
-endif
+source check.vim
+CheckOption linebreak
+CheckFeature conceal
+CheckFeature signs
 
 source view_util.vim
 
--- a/src/testdir/test_lua.vim
+++ b/src/testdir/test_lua.vim
@@ -1,8 +1,7 @@
 " Tests for Lua.
 
-if !has('lua')
-  throw 'Skipped, lua feature missing'
-endif
+source check.vim
+CheckFeature lua
 
 func TearDown()
   " Run garbage collection after each test to exercise luaV_setref().
--- a/src/testdir/test_makeencoding.vim
+++ b/src/testdir/test_makeencoding.vim
@@ -4,7 +4,7 @@ source shared.vim
 
 let s:python = PythonProg()
 if s:python == ''
-  throw 'Skipped, python program missing'
+  throw 'Skipped: python program missing'
 endif
 
 let s:script = 'test_makeencoding.py'
--- a/src/testdir/test_matchadd_conceal.vim
+++ b/src/testdir/test_matchadd_conceal.vim
@@ -1,8 +1,7 @@
 " Test for matchadd() and conceal feature
 
-if !has('conceal')
-  throw 'Skipped, conceal feature missing'
-endif
+source check.vim
+CheckFeature conceal
 
 if !has('gui_running') && has('unix')
   set term=ansi
--- a/src/testdir/test_matchadd_conceal_utf8.vim
+++ b/src/testdir/test_matchadd_conceal_utf8.vim
@@ -1,8 +1,7 @@
 " Test for matchadd() and conceal feature using utf-8.
 
-if !has('conceal')
-  throw 'Skipped, conceal feature missing'
-endif
+source check.vim
+CheckFeature conceal
 
 if !has('gui_running') && has('unix')
   set term=ansi
--- a/src/testdir/test_memory_usage.vim
+++ b/src/testdir/test_memory_usage.vim
@@ -1,15 +1,15 @@
 " Tests for memory usage.
 
-if !has('terminal')
-  throw 'Skipped, terminal feature missing'
-endif
+source check.vim
+CheckFeature terminal
+
 if has('gui_running')
-  throw 'Skipped, does not work in GUI'
+  throw 'Skipped: does not work in GUI'
 endif
 if execute('version') =~# '-fsanitize=[a-z,]*\<address\>'
   " Skip tests on Travis CI ASAN build because it's difficult to estimate
   " memory usage.
-  throw 'Skipped, does not work with ASAN'
+  throw 'Skipped: does not work with ASAN'
 endif
 
 source shared.vim
@@ -20,7 +20,7 @@ endfunc
 
 if has('win32')
   if !executable('wmic')
-    throw 'Skipped, wmic program missing'
+    throw 'Skipped: wmic program missing'
   endif
   func s:memory_usage(pid) abort
     let cmd = printf('wmic process where processid=%d get WorkingSetSize', a:pid)
@@ -28,13 +28,13 @@ if has('win32')
   endfunc
 elseif has('unix')
   if !executable('ps')
-    throw 'Skipped, ps program missing'
+    throw 'Skipped: ps program missing'
   endif
   func s:memory_usage(pid) abort
     return s:pick_nr(system('ps -o rss= -p ' . a:pid))
   endfunc
 else
-  throw 'Skipped, not win32 or unix'
+  throw 'Skipped: not win32 or unix'
 endif
 
 " Wait for memory usage to level off.
--- a/src/testdir/test_menu.vim
+++ b/src/testdir/test_menu.vim
@@ -1,8 +1,7 @@
 " Test that the system menu can be loaded.
 
-if !has('menu')
-  throw 'Skipped, menu feature missing'
-endif
+source check.vim
+CheckFeature menu
 
 func Test_load_menu()
   try
--- a/src/testdir/test_mksession.vim
+++ b/src/testdir/test_mksession.vim
@@ -3,9 +3,8 @@
 set encoding=latin1
 scriptencoding latin1
 
-if !has('mksession')
-  throw 'Skipped, mksession feature missing'
-endif
+source check.vim
+CheckFeature mksession
 
 source shared.vim
 
--- a/src/testdir/test_mksession_utf8.vim
+++ b/src/testdir/test_mksession_utf8.vim
@@ -3,9 +3,8 @@
 set encoding=utf-8
 scriptencoding utf-8
 
-if !has('mksession')
-  throw 'Skipped, mksession feature missing'
-endif
+source check.vim
+CheckFeature mksession
 
 func Test_mksession_utf8()
   tabnew
--- a/src/testdir/test_netbeans.vim
+++ b/src/testdir/test_netbeans.vim
@@ -1,14 +1,13 @@
 " Test the netbeans interface.
 
-if !has('netbeans_intg')
-  throw 'Skipped, netbeans_intg feature missing'
-endif
+source check.vim
+CheckFeature netbeans_intg
 
 source shared.vim
 
 let s:python = PythonProg()
 if s:python == ''
-  throw 'Skipped, python program missing'
+  throw 'Skipped: python program missing'
 endif
 
 " Run "testfunc" after sarting the server and stop the server afterwards.
--- a/src/testdir/test_paste.vim
+++ b/src/testdir/test_paste.vim
@@ -2,10 +2,10 @@
 
 " Bracketed paste only works with "xterm".  Not in GUI or Windows console.
 if has('win32')
-  throw 'Skipped, does not work on MS-Windows'
+  throw 'Skipped: does not work on MS-Windows'
 endif
 if has('gui_running')
-  throw 'Skipped, does not work in the GUI'
+  throw 'Skipped: does not work in the GUI'
 endif
 set term=xterm
 
--- a/src/testdir/test_perl.vim
+++ b/src/testdir/test_perl.vim
@@ -1,8 +1,7 @@
 " Tests for Perl interface
 
-if !has('perl')
-  throw 'Skipped, perl feature missing'
-end
+source check.vim
+CheckFeature perl
 
 " FIXME: RunTest don't see any error when Perl abort...
 perl $SIG{__WARN__} = sub { die "Unexpected warnings from perl: @_" };
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -1,8 +1,7 @@
 " Tests for popup windows
 
-if !has('textprop')
-  throw 'Skipped: textprop feature missing'
-endif
+source check.vim
+CheckFeature textprop
 
 source screendump.vim
 
@@ -515,7 +514,7 @@ endfunc
 
 func Test_popup_time()
   if !has('timers')
-    throw 'Skipped, timer feature not supported'
+    throw 'Skipped: timer feature not supported'
   endif
   topleft vnew
   call setline(1, 'hello')
@@ -1176,7 +1175,7 @@ endfunc
 
 func Test_notifications()
   if !has('timers')
-    throw 'Skipped, timer feature not supported'
+    throw 'Skipped: timer feature not supported'
   endif
   if !CanRunVimInTerminal()
     throw 'Skipped: cannot make screendumps'
--- a/src/testdir/test_profile.vim
+++ b/src/testdir/test_profile.vim
@@ -1,8 +1,7 @@
 " Test Vim profiler
 
-if !has('profile')
-  throw 'Skipped, profile feature missing'
-endif
+source check.vim
+CheckFeature profile
 
 func Test_profile_func()
   let lines =<< trim [CODE]
--- a/src/testdir/test_prompt_buffer.vim
+++ b/src/testdir/test_prompt_buffer.vim
@@ -1,8 +1,7 @@
 " Tests for setting 'buftype' to "prompt"
 
-if !has('channel')
-  throw 'Skipped, channel feature missing'
-endif
+source check.vim
+CheckFeature channel
 
 source shared.vim
 source screendump.vim
--- a/src/testdir/test_python2.vim
+++ b/src/testdir/test_python2.vim
@@ -1,9 +1,8 @@
 " Test for python 2 commands.
 " TODO: move tests from test87.in here.
 
-if !has('python')
-  throw 'Skipped, python feature missing'
-endif
+source check.vim
+CheckFeature python
 
 func Test_pydo()
   " Check deleting lines does not trigger ml_get error.
--- a/src/testdir/test_python3.vim
+++ b/src/testdir/test_python3.vim
@@ -1,9 +1,8 @@
 " Test for python 3 commands.
 " TODO: move tests from test88.in here.
 
-if !has('python3')
-  throw 'Skipped, python3 feature missing'
-endif
+source check.vim
+CheckFeature python3
 
 func Test_py3do()
   " Check deleting lines does not trigger an ml_get error.
--- a/src/testdir/test_pyx2.vim
+++ b/src/testdir/test_pyx2.vim
@@ -1,9 +1,8 @@
 " Test for pyx* commands and functions with Python 2.
 
 set pyx=2
-if !has('python')
-  throw 'Skipped, python feature missing'
-endif
+source check.vim
+CheckFeature python
 
 let s:py2pattern = '^2\.[0-7]\.\d\+'
 let s:py3pattern = '^3\.\d\+\.\d\+'
--- a/src/testdir/test_pyx3.vim
+++ b/src/testdir/test_pyx3.vim
@@ -1,9 +1,8 @@
 " Test for pyx* commands and functions with Python 3.
 
 set pyx=3
-if !has('python3')
-  throw 'Skipped, python3 feature missing'
-endif
+source check.vim
+CheckFeature python3
 
 let s:py2pattern = '^2\.[0-7]\.\d\+'
 let s:py3pattern = '^3\.\d\+\.\d\+'
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -1,8 +1,7 @@
 " Test for the quickfix feature.
 
-if !has('quickfix')
-  throw 'Skipped, quickfix feature missing'
-endif
+source check.vim
+CheckFeature quickfix
 
 set encoding=utf-8
 
--- a/src/testdir/test_quotestar.vim
+++ b/src/testdir/test_quotestar.vim
@@ -2,7 +2,7 @@
 
 source shared.vim
 if !WorkingClipboard()
-  throw 'Skipped, no working clipboard'
+  throw 'Skipped: no working clipboard'
 endif
 
 source shared.vim
--- a/src/testdir/test_reltime.vim
+++ b/src/testdir/test_reltime.vim
@@ -1,11 +1,8 @@
 " Tests for reltime()
 
-if !has('reltime')
-  throw 'Skipped, reltime feature missing'
-endif
-if !has('float')
-  throw 'Skipped, float feature missing'
-endif
+source check.vim
+CheckFeature reltime
+CheckFeature float
 
 func Test_reltime()
   let now = reltime()
--- a/src/testdir/test_ruby.vim
+++ b/src/testdir/test_ruby.vim
@@ -1,8 +1,7 @@
 " Tests for ruby interface
 
-if !has('ruby')
-  throw 'Skipped, ruby feature missing'
-end
+source check.vim
+CheckFeature ruby
 
 func Test_ruby_change_buffer()
   call setline(line('$'), ['1 line 1'])
--- a/src/testdir/test_sha256.vim
+++ b/src/testdir/test_sha256.vim
@@ -1,11 +1,8 @@
 " Tests for the sha256() function.
 
-if !has('cryptv')
-  throw 'Skipped, cryptv feature missing'
-endif
-if !exists('*sha256')
-  throw 'Skipped, sha256 function missing'
-endif
+source check.vim
+CheckFeature cryptv
+CheckFunction sha256
 
 function Test_sha256()
   " test for empty string:
--- a/src/testdir/test_shortpathname.vim
+++ b/src/testdir/test_shortpathname.vim
@@ -2,7 +2,7 @@
 " Only for use on Win32 systems!
 
 if !has('win32')
-  throw 'Skipped, not on MS-Windows'
+  throw 'Skipped: not on MS-Windows'
 endif
 
 func TestIt(file, bits, expected)
--- a/src/testdir/test_signals.vim
+++ b/src/testdir/test_signals.vim
@@ -1,7 +1,7 @@
 " Test signal handling.
 
 if !has('unix')
-  throw 'Skipped, not on Unix'
+  throw 'Skipped: not on Unix'
 endif
 
 source shared.vim
--- a/src/testdir/test_signs.vim
+++ b/src/testdir/test_signs.vim
@@ -1,8 +1,7 @@
 " Test for signs
 
-if !has('signs')
-  throw 'Skipped, signs feature missing'
-endif
+source check.vim
+CheckFeature signs
 
 func Test_sign()
   new
--- a/src/testdir/test_spell.vim
+++ b/src/testdir/test_spell.vim
@@ -1,8 +1,7 @@
 " Test spell checking
 
-if !has('spell')
-  throw 'Skipped, spell feature missing'
-endif
+source check.vim
+CheckFeature spell
 
 func TearDown()
   set nospell
--- a/src/testdir/test_syntax.vim
+++ b/src/testdir/test_syntax.vim
@@ -1,8 +1,7 @@
 " Test for syntax and syntax iskeyword option
 
-if !has("syntax")
-  throw 'Skipped, syntax feature missing'
-endif
+source check.vim
+CheckFeature syntax
 
 source view_util.vim
 source screendump.vim
--- a/src/testdir/test_tcl.vim
+++ b/src/testdir/test_tcl.vim
@@ -1,8 +1,7 @@
 " Tests for the Tcl interface.
 
-if !has('tcl')
-  throw 'Skipped, tcl feature missing'
-end
+source check.vim
+CheckFeature tcl
 
 " Helper function as there is no builtin tcleval() function similar
 " to perleval, luaevel(), pyeval(), etc.
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -2,10 +2,10 @@
 
 " This only works for Unix in a terminal
 if has('gui_running')
-  throw 'Skipped, does not work in the GUI'
+  throw 'Skipped: does not work in the GUI'
 endif
 if !has('unix')
-  throw 'Skipped, not on Unix'
+  throw 'Skipped: not on Unix'
 endif
 
 source shared.vim
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -1,8 +1,7 @@
 " Tests for the terminal window.
 
-if !has('terminal')
-  throw 'Skipped, terminal feature missing'
-endif
+source check.vim
+CheckFeature terminal
 
 source shared.vim
 source screendump.vim
--- a/src/testdir/test_terminal_fail.vim
+++ b/src/testdir/test_terminal_fail.vim
@@ -2,9 +2,8 @@
 " leaks under valgrind.  That is because when fork/exec fails memory is not
 " freed.  Since the process exists right away it's not a real leak.
 
-if !has('terminal')
-  throw 'Skipped, terminal feature missing'
-endif
+source check.vim
+CheckFeature terminal
 
 source shared.vim
 
--- a/src/testdir/test_textobjects.vim
+++ b/src/testdir/test_textobjects.vim
@@ -1,8 +1,7 @@
 " Test for textobjects
 
-if !has('textobjects')
-  throw 'Skipped, textobjects feature missing'
-endif
+source check.vim
+CheckFeature textobjects
 
 func CpoM(line, useM, expected)
   new
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -1,9 +1,8 @@
 " Tests for defining text property types and adding text properties to the
 " buffer.
 
-if !has('textprop')
-  throw 'Skipped, textprop feature missing'
-endif
+source check.vim
+CheckFeature textprop
 
 source screendump.vim
 
--- a/src/testdir/test_timers.vim
+++ b/src/testdir/test_timers.vim
@@ -1,8 +1,7 @@
 " Test for timers
 
-if !has('timers')
-  throw 'Skipped, timers feature missing'
-endif
+source check.vim
+CheckFeature timers
 
 source shared.vim
 source screendump.vim
--- a/src/testdir/test_vartabs.vim
+++ b/src/testdir/test_vartabs.vim
@@ -1,8 +1,7 @@
 " Test for variable tabstops
 
-if !has("vartabs")
-  throw 'Skipped, vartabs feature missing'
-endif
+source check.vim
+CheckFeature vartabs
 
 source view_util.vim
 
--- a/src/testdir/test_winbar.vim
+++ b/src/testdir/test_winbar.vim
@@ -1,8 +1,7 @@
 " Test WinBar
 
-if !has('menu')
-  throw 'Skipped, menu feature missing'
-endif
+source check.vim
+CheckFeature menu
 
 source shared.vim
 
--- a/src/testdir/test_windows_home.vim
+++ b/src/testdir/test_windows_home.vim
@@ -1,7 +1,7 @@
 " Test for $HOME on Windows.
 
 if !has('win32')
-  throw 'Skipped, not on MS-Windows'
+  throw 'Skipped: not on MS-Windows'
 endif
 
 let s:env = {}
--- a/src/testdir/test_xxd.vim
+++ b/src/testdir/test_xxd.vim
@@ -2,7 +2,7 @@
 if empty($XXD) && executable('..\xxd\xxd.exe')
   let s:xxd_cmd = '..\xxd\xxd.exe'
 elseif empty($XXD) || !executable($XXD)
-  throw 'Skipped, xxd program missing'
+  throw 'Skipped: xxd program missing'
 else
   let s:xxd_cmd = $XXD
 endif
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1544,
+/**/
     1543,
 /**/
     1542,