Skip to content

Commit

Permalink
patch 8.2.3526: tests have clumsy check for X11 based GUI
Browse files Browse the repository at this point in the history
Problem:    Tests have clumsy check for X11 based GUI.
Solution:   Add CheckX11BasedGui.
  • Loading branch information
brammool committed Oct 16, 2021
1 parent d4c4bfa commit 40bd5a1
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 150 deletions.
8 changes: 8 additions & 0 deletions src/testdir/check.vim
Expand Up @@ -217,6 +217,14 @@ func CheckNotAsan()
endif
endfunc

" Command to check for X11 based GUI
command CheckX11BasedGui call CheckX11BasedGui()
func CheckX11BasedGui()
if !g:x11_based_gui
throw 'Skipped: requires X11 based GUI'
endif
endfunc

" Command to check for satisfying any of the conditions.
" e.g. CheckAnyOf Feature:bsd Feature:sun Linux
command -nargs=+ CheckAnyOf call CheckAnyOf(<f-args>)
Expand Down
1 change: 0 additions & 1 deletion src/testdir/setup_gui.vim
Expand Up @@ -5,7 +5,6 @@ let g:x11_based_gui = has('gui_athena') || has('gui_motif')

" Reasons for 'skipped'.
let g:not_supported = "Skipped: Feature/Option not supported by this GUI: "
let g:not_implemented = "Skipped: Test not implemented yet for this GUI"
let g:not_hosted = "Skipped: Test not hosted by the system/environment"

" For KDE set a font, empty 'guifont' may cause a hang.
Expand Down
202 changes: 79 additions & 123 deletions src/testdir/test_gui.vim
Expand Up @@ -61,11 +61,9 @@ func Test_colorscheme()
endfunc

func Test_getfontname_with_arg()
let skipped = ''
CheckX11BasedGui

if !g:x11_based_gui
let skipped = g:not_implemented
elseif has('gui_athena') || has('gui_motif')
if has('gui_athena') || has('gui_motif')
" Invalid font name. The result should be an empty string.
call assert_equal('', getfontname('notexist'))

Expand All @@ -82,20 +80,14 @@ func Test_getfontname_with_arg()
let fname = 'Bitstream Vera Sans Mono 12'
call assert_equal(fname, getfontname(fname))
endif

if !empty(skipped)
throw skipped
endif
endfunc

func Test_getfontname_without_arg()
let skipped = ''
CheckX11BasedGui

let fname = getfontname()

if !g:x11_based_gui
let skipped = g:not_implemented
elseif has('gui_kde')
if has('gui_kde')
" 'expected' is the value specified by SetUp() above.
call assert_equal('Courier 10 Pitch/8/-1/5/50/0/0/0/0/0', fname)
elseif has('gui_athena') || has('gui_motif')
Expand All @@ -106,10 +98,6 @@ func Test_getfontname_without_arg()
" 'expected' is DEFAULT_FONT of gui_gtk_x11.c.
call assert_equal('Monospace 10', fname)
endif

if !empty(skipped)
throw skipped
endif
endfunc

func Test_getwinpos()
Expand All @@ -120,48 +108,41 @@ func Test_getwinpos()
endfunc

func Test_quoteplus()
let g:test_is_flaky = 1
let skipped = ''
CheckX11BasedGui

if !g:x11_based_gui
let skipped = g:not_supported . 'quoteplus'
else
let quoteplus_saved = @+

let test_call = 'Can you hear me?'
let test_response = 'Yes, I can.'
let vim_exe = GetVimCommand()
let testee = 'VIMRUNTIME=' . $VIMRUNTIME . '; export VIMRUNTIME;'
\ . vim_exe . ' --noplugin --not-a-term -c ''%s'''
" Ignore the "failed to create input context" error.
let cmd = 'call test_ignore_error("E285") | '
\ . 'gui -f | '
\ . 'call feedkeys("'
\ . '\"+p'
\ . ':s/' . test_call . '/' . test_response . '/\<CR>'
\ . '\"+yis'
\ . ':q!\<CR>", "tx")'
let run_vimtest = printf(testee, cmd)

" Set the quoteplus register to test_call, and another gvim will launched.
" Then, it first tries to paste the content of its own quotedplus register
" onto it. Second, it tries to substitute test_response for the pasted
" sentence. If the sentence is identical to test_call, the substitution
" should succeed. Third, it tries to yank the result of the substitution
" to its own quoteplus register, and last it quits. When system()
" returns, the content of the quoteplus register should be identical to
" test_response if those quoteplus registers are synchronized properly
" with/through the X11 clipboard.
let @+ = test_call
call system(run_vimtest)
call assert_equal(test_response, @+)

let @+ = quoteplus_saved
endif
let g:test_is_flaky = 1

if !empty(skipped)
throw skipped
endif
let quoteplus_saved = @+

let test_call = 'Can you hear me?'
let test_response = 'Yes, I can.'
let vim_exe = GetVimCommand()
let testee = 'VIMRUNTIME=' . $VIMRUNTIME . '; export VIMRUNTIME;'
\ . vim_exe . ' --noplugin --not-a-term -c ''%s'''
" Ignore the "failed to create input context" error.
let cmd = 'call test_ignore_error("E285") | '
\ . 'gui -f | '
\ . 'call feedkeys("'
\ . '\"+p'
\ . ':s/' . test_call . '/' . test_response . '/\<CR>'
\ . '\"+yis'
\ . ':q!\<CR>", "tx")'
let run_vimtest = printf(testee, cmd)

" Set the quoteplus register to test_call, and another gvim will launched.
" Then, it first tries to paste the content of its own quotedplus register
" onto it. Second, it tries to substitute test_response for the pasted
" sentence. If the sentence is identical to test_call, the substitution
" should succeed. Third, it tries to yank the result of the substitution
" to its own quoteplus register, and last it quits. When system()
" returns, the content of the quoteplus register should be identical to
" test_response if those quoteplus registers are synchronized properly
" with/through the X11 clipboard.
let @+ = test_call
call system(run_vimtest)
call assert_equal(test_response, @+)

let @+ = quoteplus_saved
endfunc

func Test_set_background()
Expand Down Expand Up @@ -333,8 +314,29 @@ func Test_set_guicursor()
let &guicursor = guicursor_saved
endfunc

func Test_set_guifont_errors()
if has('win32')
" Invalid font names are accepted in GTK GUI
call assert_fails('set guifont=xa1bc23d7f', 'E596:')
endif

" This only works if 'renderoptions' exists and does not work for Windows XP
" and older.
if exists('+renderoptions') && windowsversion() !~ '^[345]\.'
" doing this four times used to cause a crash
set renderoptions=type:directx
for i in range(5)
set guifont=
endfor
set renderoptions=
for i in range(5)
set guifont=
endfor
endif
endfunc

func Test_set_guifont()
let skipped = ''
CheckX11BasedGui

let guifont_saved = &guifont
if has('xfontset')
Expand All @@ -343,9 +345,7 @@ func Test_set_guifont()
set guifontset=
endif

if !g:x11_based_gui
let skipped = g:not_implemented
elseif has('gui_athena') || has('gui_motif')
if has('gui_athena') || has('gui_motif')
" Non-empty font list with invalid font names.
"
" This test is twofold: (1) It checks if the command fails as expected
Expand Down Expand Up @@ -384,33 +384,10 @@ func Test_set_guifont()
call assert_equal('Monospace 10', getfontname())
endif

if has('win32')
" Invalid font names are accepted in GTK GUI
call assert_fails('set guifont=xa1bc23d7f', 'E596:')
endif

" This only works if 'renderoptions' exists and does not work for Windows XP
" and older.
if exists('+renderoptions') && windowsversion() !~ '^[345]\.'
" doing this four times used to cause a crash
set renderoptions=type:directx
for i in range(5)
set guifont=
endfor
set renderoptions=
for i in range(5)
set guifont=
endfor
endif

if has('xfontset')
let &guifontset = guifontset_saved
endif
let &guifont = guifont_saved

if !empty(skipped)
throw skipped
endif
endfunc

func Test_set_guifontset()
Expand Down Expand Up @@ -485,12 +462,11 @@ func Test_set_guifontset()
endfunc

func Test_set_guifontwide()
CheckX11BasedGui

call assert_fails('set guifontwide=*', 'E533:')
let skipped = ''

if !g:x11_based_gui
let skipped = g:not_implemented
elseif has('gui_gtk')
if has('gui_gtk')
let guifont_saved = &guifont
let guifontwide_saved = &guifontwide

Expand Down Expand Up @@ -561,51 +537,31 @@ func Test_set_guifontwide()
let &encoding = encoding_saved
endif
endif

if !empty(skipped)
throw skipped
endif
endfunc

func Test_set_guiligatures()
let skipped = ''

if !g:x11_based_gui
let skipped = g:not_supported . 'guiligatures'
else
if has('gui_gtk') || has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
" Try correct value
set guiligatures=<>=ab
call assert_equal("<>=ab", &guiligatures)
" Try to throw error
try
set guiligatures=<>=šab
call assert_report("'set guiligatures=<>=šab should have failed")
catch
call assert_exception('E1243:')
endtry
endif
endif
CheckX11BasedGui

if !empty(skipped)
throw skipped
if has('gui_gtk') || has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
" Try correct value
set guiligatures=<>=ab
call assert_equal("<>=ab", &guiligatures)
" Try to throw error
try
set guiligatures=<>=šab
call assert_report("'set guiligatures=<>=šab should have failed")
catch
call assert_exception('E1243:')
endtry
endif
endfunc

func Test_set_guiheadroom()
let skipped = ''
CheckX11BasedGui

if !g:x11_based_gui
let skipped = g:not_supported . 'guiheadroom'
else
" Since this script is to be read together with '-U NONE', the default
" value must be preserved.
call assert_equal(50, &guiheadroom)
endif

if !empty(skipped)
throw skipped
endif
" Since this script is to be read together with '-U NONE', the default
" value must be preserved.
call assert_equal(50, &guiheadroom)
endfunc

func Test_set_guioptions()
Expand Down
36 changes: 10 additions & 26 deletions src/testdir/test_gui_init.vim
Expand Up @@ -22,19 +22,11 @@ call test_ignore_error('E285:')
gui -f

func Test_set_guiheadroom()
let skipped = ''

if !g:x11_based_gui
let skipped = g:not_supported . 'guiheadroom'
else
" The 'expected' value must be consistent with the value specified with
" gui_init.vim.
call assert_equal(0, &guiheadroom)
endif

if !empty(skipped)
throw skipped
endif
CheckX11BasedGui

" The 'expected' value must be consistent with the value specified with
" gui_init.vim.
call assert_equal(0, &guiheadroom)
endfunc

func Test_set_guioptions_for_M()
Expand All @@ -44,19 +36,11 @@ func Test_set_guioptions_for_M()
endfunc

func Test_set_guioptions_for_p()
let skipped = ''

if !g:x11_based_gui
let skipped = g:not_supported . '''p'' of guioptions'
else
sleep 200ms
" Check if the 'p' option is included.
call assert_match('.*p.*', &guioptions)
endif

if !empty(skipped)
throw skipped
endif
CheckX11BasedGui

sleep 200ms
" Check if the 'p' option is included.
call assert_match('.*p.*', &guioptions)
endfunc

" vim: shiftwidth=2 sts=2 expandtab
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -757,6 +757,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3526,
/**/
3525,
/**/
Expand Down

0 comments on commit 40bd5a1

Please sign in to comment.