Permalink
Browse files

patch 8.0.0332: GUI test fails on some systems

Problem:    GUI test fails on some systems.
Solution:   Try different language settings. (Kazunobu Kuriyama)
  • Loading branch information...
brammool committed Feb 17, 2017
1 parent 343b8c0 commit 4e9dbc74df24dc22d0eeda3741c3fb0e0e7373bf
Showing with 149 additions and 117 deletions.
  1. +147 −117 src/testdir/test_gui.vim
  2. +2 −0 src/version.c
View
@@ -7,6 +7,11 @@ endif
let s:x11_based_gui = has('gui_athena') || has('gui_motif')
\ || has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
+" Reasons for 'skipped'.
+let s:not_supported = "Skipped: Feature/Option not supported by this GUI: "
+let s:not_implemented = "Skipped: Test not implemented yet for this GUI"
+let s:not_hosted = "Skipped: Test not hosted by the system/environment"
+
" For KDE set a font, empty 'guifont' may cause a hang.
func SetUp()
if has("gui_kde")
@@ -36,61 +41,77 @@ func Test_1_set_secure()
endfunc
func Test_getfontname_with_arg()
- if has('gui_athena') || has('gui_motif')
+ let skipped = ''
+
+ if !s:x11_based_gui
+ let skipped = s:not_implemented
+ elseif has('gui_athena') || has('gui_motif')
" Invalid font name. The result should be an empty string.
call assert_equal('', getfontname('notexist'))
" Valid font name. This is usually the real name of 7x13 by default.
- let l:fname = '-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1'
- call assert_equal(l:fname, getfontname(l:fname))
+ let fname = '-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1'
+ call assert_equal(fname, getfontname(fname))
elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
" Invalid font name. The result should be the name plus the default size.
call assert_equal('notexist 10', getfontname('notexist'))
" Valid font name. This is usually the real name of Monospace by default.
- let l:fname = 'Bitstream Vera Sans Mono 12'
- call assert_equal(l:fname, getfontname(l:fname))
- else
- throw "Skipped: Matched font name unpredictable to test on this GUI"
+ 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 l:fname = getfontname()
- if has('gui_kde')
+ let skipped = ''
+
+ let fname = getfontname()
+
+ if !s:x11_based_gui
+ let skipped = s:not_implemented
+ elseif 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', l:fname)
+ call assert_equal('Courier 10 Pitch/8/-1/5/50/0/0/0/0/0', fname)
elseif has('gui_athena') || has('gui_motif')
" 'expected' is DFLT_FONT of gui_x11.c.
- call assert_equal('7x13', l:fname)
+ call assert_equal('7x13', fname)
elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
" 'expected' is DEFAULT_FONT of gui_gtk_x11.c.
- call assert_equal('Monospace 10', l:fname)
- else
- throw "Skipped: Default font name unpredictable to test on this GUI"
+ call assert_equal('Monospace 10', fname)
+ endif
+
+ if !empty(skipped)
+ throw skipped
endif
endfunc
func Test_set_guifont()
- let l:guifont_saved = &guifont
+ let skipped = ''
+
+ let guifont_saved = &guifont
if has('xfontset')
" Prevent 'guifontset' from canceling 'guifont'.
- let l:guifontset_saved = &guifontset
+ let guifontset_saved = &guifontset
set guifontset=
endif
- let skipped = 0
- if has('gui_athena') || has('gui_motif')
+ if !s:x11_based_gui
+ let skipped = s:not_implemented
+ elseif 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
" when there are no loadable fonts found in the list. (2) It checks if
" 'guifont' remains the same after the command loads none of the fonts
" listed.
- let l:flist = &guifont
+ let flist = &guifont
call assert_fails('set guifont=-notexist1-*,-notexist2-*')
- call assert_equal(l:flist, &guifont)
+ call assert_equal(flist, &guifont)
" Non-empty font list with a valid font name. Should pick up the first
" valid font.
@@ -116,107 +137,124 @@ func Test_set_guifont()
" Empty list. Should fallback to the built-in default.
set guifont=
call assert_equal('Monospace 10', getfontname())
-
- else
- let skipped = 1
endif
if has('xfontset')
- let &guifontset = l:guifontset_saved
+ let &guifontset = guifontset_saved
endif
- let &guifont = l:guifont_saved
+ let &guifont = guifont_saved
- if skipped
- throw "Skipped: Test not implemented yet for this GUI"
+ if !empty(skipped)
+ throw skipped
endif
endfunc
func Test_set_guifontset()
- let skipped = 0
+ let skipped = ''
- if has('xfontset')
- let l:ctype_saved = v:ctype
-
- " For UTF-8 locales, XCreateFontSet(3) is likely to fail in constructing a
- " fontset automatically from one or two simple XLFDs because it requires
- " the host system to have a fairly comprehensive collection of fixed-width
- " fonts with various sizes and registries/encodings in order to get the
- " job done. To make the test meaningful for a wide variety of hosts, we
- " confine ourselves to the following locale for which X11 historically has
- " the fonts to use with.
- language ctype ja_JP.eucJP
-
- " Since XCreateFontSet(3) is very sensitive to locale, fonts must be
- " chosen meticulously.
- let l:font_head = '-misc-fixed-medium-r-normal--14'
-
- let l:font_aw70 = l:font_head . '-130-75-75-c-70'
- let l:font_aw140 = l:font_head . '-130-75-75-c-140'
+ if !has('xfontset')
+ let skipped = s:not_supported . 'xfontset'
+ else
+ let ctype_saved = v:ctype
- let l:font_jisx0201 = l:font_aw70 . '-jisx0201.1976-0'
- let l:font_jisx0208 = l:font_aw140 . '-jisx0208.1983-0'
+ " First, since XCreateFontSet(3) is very sensitive to locale, fonts must
+ " be chosen meticulously.
+ let font_head = '-misc-fixed-medium-r-normal--14'
- " Full XLFDs
- let l:fontset_name = join([ l:font_jisx0208, l:font_jisx0201 ], ',')
- exec 'set guifontset=' . l:fontset_name
- call assert_equal(l:fontset_name, &guifontset)
+ let font_aw70 = font_head . '-130-75-75-c-70'
+ let font_aw140 = font_head . '-130-75-75-c-140'
- " XLFDs w/o CharSetRegistry and CharSetEncoding
- let l:fontset_name = join([ l:font_aw140, l:font_aw70 ], ',')
- exec 'set guifontset=' . l:fontset_name
- call assert_equal(l:fontset_name, &guifontset)
+ let font_jisx0201 = font_aw70 . '-jisx0201.1976-0'
+ let font_jisx0208 = font_aw140 . '-jisx0208.1983-0'
- " Singleton
- let l:fontset_name = l:font_head . '-*'
- exec 'set guifontset=' . l:fontset_name
- call assert_equal(l:fontset_name, &guifontset)
+ let full_XLFDs = join([ font_jisx0208, font_jisx0201 ], ',')
+ let short_XLFDs = join([ font_aw140, font_aw70 ], ',')
+ let singleton = font_head . '-*'
+ let aliases = 'k14,r14'
- " Aliases
- let l:fontset_name = 'k14,r14'
- exec 'set guifontset=' . l:fontset_name
- call assert_equal(l:fontset_name, &guifontset)
+ " Second, among 'locales', look up such a locale that gets 'set
+ " guifontset=' to work successfully with every fontset specified with
+ " 'fontsets'.
+ let locales = [ 'ja_JP.UTF-8', 'ja_JP.eucJP', 'ja_JP.SJIS' ]
+ let fontsets = [ full_XLFDs, short_XLFDs, singleton, aliases ]
- exec 'language ctype' l:ctype_saved
+ let feasible = 0
+ for locale in locales
+ try
+ exec 'language ctype' locale
+ catch /^Vim\%((\a\+)\)\=:E197/
+ continue
+ endtry
+ let done = 0
+ for fontset in fontsets
+ try
+ exec 'set guifontset=' . fontset
+ catch /^Vim\%((\a\+)\)\=:E\%(250\|252\|234\|597\|598\)/
+ break
+ endtry
+ let done += 1
+ endfor
+ if done == len(fontsets)
+ let feasible = 1
+ break
+ endif
+ endfor
+
+ " Third, give a set of tests if it is found feasible.
+ if !feasible
+ let skipped = s:not_hosted
+ else
+ " N.B. 'v:ctype' has already been set to an appropriate value in the
+ " previous loop.
+ for fontset in fontsets
+ exec 'set guifontset=' . fontset
+ call assert_equal(fontset, &guifontset)
+ endfor
+ endif
- else
- let skipped = 1
+ " Finally, restore ctype.
+ exec 'language ctype' ctype_saved
endif
- if skipped
- throw "Skipped: Not supported by this GUI"
+ if !empty(skipped)
+ throw skipped
endif
endfunc
func Test_set_guifontwide()
- let skipped = 0
-
- if has('gui_gtk')
- let l:guifont_saved = &guifont
- let l:guifontwide_saved = &guifontwide
-
- let l:fc_match = exepath('fc-match')
- if l:fc_match != ''
- let &guifont = system('fc-match -f "%{family[0]} %{size}" monospace:size=10')
- let l:wide = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=ja')
- exec 'set guifontwide=' . fnameescape(l:wide)
- call assert_equal(l:wide, &guifontwide)
+ let skipped = ''
+
+ if !s:x11_based_gui
+ let skipped = s:not_implemented
+ elseif has('gui_gtk')
+ let guifont_saved = &guifont
+ let guifontwide_saved = &guifontwide
+
+ let fc_match = exepath('fc-match')
+ if empty(fc_match)
+ let skipped = s:not_hosted
else
- let skipped = 3
+ let &guifont = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=en')
+ let wide = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=ja')
+ exec 'set guifontwide=' . fnameescape(wide)
+ call assert_equal(wide, &guifontwide)
endif
- let &guifontwide = l:guifontwide_saved
- let &guifont = l:guifont_saved
+ let &guifontwide = guifontwide_saved
+ let &guifont = guifont_saved
elseif has('gui_athena') || has('gui_motif')
" guifontwide is premised upon the xfontset feature.
- if has('xfontset')
- let l:encoding_saved = &encoding
- let l:guifont_saved = &guifont
- let l:guifontset_saved = &guifontset
- let l:guifontwide_saved = &guifontwide
+ if !has('xfontset')
+ let skipped = s:not_supported . 'xfontset'
+ else
+ let encoding_saved = &encoding
+ let guifont_saved = &guifont
+ let guifontset_saved = &guifontset
+ let guifontwide_saved = &guifontwide
- let l:nfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1'
- let l:wfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1'
+ let nfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1'
+ let wfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1'
set encoding=utf-8
@@ -225,18 +263,18 @@ func Test_set_guifontwide()
" Case 1-1: Automatic selection
set guifontwide=
- exec 'set guifont=' . l:nfont
- call assert_equal(l:wfont, &guifontwide)
+ exec 'set guifont=' . nfont
+ call assert_equal(wfont, &guifontwide)
" Case 1-2: Manual selection
- exec 'set guifontwide=' . l:wfont
- exec 'set guifont=' . l:nfont
- call assert_equal(l:wfont, &guifontwide)
+ exec 'set guifontwide=' . wfont
+ exec 'set guifont=' . nfont
+ call assert_equal(wfont, &guifontwide)
" Case 2: guifontset is invalid
try
set guifontset=-*-notexist-*
- call assert_false(1, "'set guifontset=notexist' should have failed")
+ call assert_false(1, "'set guifontset=-*-notexist-*' should have failed")
catch
call assert_exception('E598')
endtry
@@ -245,31 +283,23 @@ func Test_set_guifontwide()
" Case 2-1: Automatic selection
set guifontwide=
- exec 'set guifont=' . l:nfont
- call assert_equal(l:wfont, &guifontwide)
+ exec 'set guifont=' . nfont
+ call assert_equal(wfont, &guifontwide)
" Case 2-2: Manual selection
- exec 'set guifontwide=' . l:wfont
- exec 'set guifont=' . l:nfont
- call assert_equal(l:wfont, &guifontwide)
-
- let &guifontwide = l:guifontwide_saved
- let &guifontset = l:guifontset_saved
- let &guifont = l:guifont_saved
- let &encoding = l:encoding_saved
- else
- let skipped = 2
+ exec 'set guifontwide=' . wfont
+ exec 'set guifont=' . nfont
+ call assert_equal(wfont, &guifontwide)
+
+ let &guifontwide = guifontwide_saved
+ let &guifontset = guifontset_saved
+ let &guifont = guifont_saved
+ let &encoding = encoding_saved
endif
- else
- let skipped = 1
endif
- if skipped == 1
- throw "Skipped: Test not implemented yet for this GUI"
- elseif skipped == 2
- throw "Skipped: Not supported by this GUI"
- elseif skipped == 3
- throw "Skipped: Test not supported by the environment"
+ if !empty(skipped)
+ throw skipped
endif
endfunc
View
@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 332,
/**/
331,
/**/

0 comments on commit 4e9dbc7

Please sign in to comment.