To: vim_dev@googlegroups.com Subject: Patch 8.0.0332 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.0332 Problem: GUI test fails on some systems. Solution: Try different language settings. (Kazunobu Kuriyama) Files: src/testdir/test_gui.vim *** ../vim-8.0.0331/src/testdir/test_gui.vim 2017-02-12 19:59:02.937841640 +0100 --- src/testdir/test_gui.vim 2017-02-17 13:35:24.103505472 +0100 *************** *** 7,12 **** --- 7,17 ---- 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,96 **** endfunc func Test_getfontname_with_arg() ! if 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)) 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" endif endfunc func Test_getfontname_without_arg() ! let l:fname = getfontname() ! 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', l:fname) elseif has('gui_athena') || has('gui_motif') " 'expected' is DFLT_FONT of gui_x11.c. ! call assert_equal('7x13', l: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" endif endfunc func Test_set_guifont() ! let l:guifont_saved = &guifont if has('xfontset') " Prevent 'guifontset' from canceling 'guifont'. ! let l:guifontset_saved = &guifontset set guifontset= endif ! let skipped = 0 ! 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 " 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 call assert_fails('set guifont=-notexist1-*,-notexist2-*') ! call assert_equal(l:flist, &guifont) " Non-empty font list with a valid font name. Should pick up the first " valid font. --- 41,117 ---- endfunc func Test_getfontname_with_arg() ! 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 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 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 = '' ! ! 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', fname) elseif has('gui_athena') || has('gui_motif') " 'expected' is DFLT_FONT of gui_x11.c. ! 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', fname) ! endif ! ! if !empty(skipped) ! throw skipped endif endfunc func Test_set_guifont() ! let skipped = '' ! ! let guifont_saved = &guifont if has('xfontset') " Prevent 'guifontset' from canceling 'guifont'. ! let guifontset_saved = &guifontset set guifontset= endif ! 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 flist = &guifont call assert_fails('set guifont=-notexist1-*,-notexist2-*') ! call assert_equal(flist, &guifont) " Non-empty font list with a valid font name. Should pick up the first " valid font. *************** *** 116,222 **** " 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 endif ! let &guifont = l:guifont_saved ! if skipped ! throw "Skipped: Test not implemented yet for this GUI" endif endfunc func Test_set_guifontset() ! let skipped = 0 ! 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' ! ! let l:font_jisx0201 = l:font_aw70 . '-jisx0201.1976-0' ! let l:font_jisx0208 = l:font_aw140 . '-jisx0208.1983-0' ! ! " 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) ! ! " 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) ! ! " Singleton ! let l:fontset_name = l:font_head . '-*' ! exec 'set guifontset=' . l:fontset_name ! call assert_equal(l:fontset_name, &guifontset) ! ! " Aliases ! let l:fontset_name = 'k14,r14' ! exec 'set guifontset=' . l:fontset_name ! call assert_equal(l:fontset_name, &guifontset) ! exec 'language ctype' l:ctype_saved ! else ! let skipped = 1 endif ! if skipped ! throw "Skipped: Not supported by this GUI" 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) else ! let skipped = 3 endif ! let &guifontwide = l:guifontwide_saved ! let &guifont = l: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 ! 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' set encoding=utf-8 --- 137,260 ---- " Empty list. Should fallback to the built-in default. set guifont= call assert_equal('Monospace 10', getfontname()) endif if has('xfontset') ! let &guifontset = guifontset_saved endif ! let &guifont = guifont_saved ! if !empty(skipped) ! throw skipped endif endfunc func Test_set_guifontset() ! let skipped = '' ! if !has('xfontset') ! let skipped = s:not_supported . 'xfontset' ! else ! let ctype_saved = v:ctype ! " First, since XCreateFontSet(3) is very sensitive to locale, fonts must ! " be chosen meticulously. ! let font_head = '-misc-fixed-medium-r-normal--14' ! ! let font_aw70 = font_head . '-130-75-75-c-70' ! let font_aw140 = font_head . '-130-75-75-c-140' ! ! let font_jisx0201 = font_aw70 . '-jisx0201.1976-0' ! let font_jisx0208 = font_aw140 . '-jisx0208.1983-0' ! ! let full_XLFDs = join([ font_jisx0208, font_jisx0201 ], ',') ! let short_XLFDs = join([ font_aw140, font_aw70 ], ',') ! let singleton = font_head . '-*' ! let aliases = 'k14,r14' ! ! " 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 ] ! 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 ! " Finally, restore ctype. ! exec 'language ctype' ctype_saved endif ! if !empty(skipped) ! throw skipped endif endfunc func Test_set_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 &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 = guifontwide_saved ! let &guifont = guifont_saved elseif has('gui_athena') || has('gui_motif') " guifontwide is premised upon the xfontset feature. ! 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 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,242 **** " Case 1-1: Automatic selection set guifontwide= ! exec 'set guifont=' . l:nfont ! call assert_equal(l:wfont, &guifontwide) " Case 1-2: Manual selection ! exec 'set guifontwide=' . l:wfont ! exec 'set guifont=' . l:nfont ! call assert_equal(l:wfont, &guifontwide) " Case 2: guifontset is invalid try set guifontset=-*-notexist-* ! call assert_false(1, "'set guifontset=notexist' should have failed") catch call assert_exception('E598') endtry --- 263,280 ---- " Case 1-1: Automatic selection set guifontwide= ! exec 'set guifont=' . nfont ! call assert_equal(wfont, &guifontwide) " Case 1-2: Manual selection ! 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") catch call assert_exception('E598') endtry *************** *** 245,275 **** " Case 2-1: Automatic selection set guifontwide= ! exec 'set guifont=' . l:nfont ! call assert_equal(l: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 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" endif endfunc --- 283,305 ---- " Case 2-1: Automatic selection set guifontwide= ! exec 'set guifont=' . nfont ! call assert_equal(wfont, &guifontwide) " Case 2-2: Manual selection ! 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 endif ! if !empty(skipped) ! throw skipped endif endfunc *** ../vim-8.0.0331/src/version.c 2017-02-17 12:04:35.843808317 +0100 --- src/version.c 2017-02-17 13:36:42.938916108 +0100 *************** *** 766,767 **** --- 766,769 ---- { /* Add new patch number below this line */ + /**/ + 332, /**/ -- This computer is so slow, it takes forever to execute and endless loop! /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///