1" Tests specifically for the GUI 2 3if !has('gui') || ($DISPLAY == "" && !has('gui_running')) 4 finish 5endif 6 7let s:x11_based_gui = has('gui_athena') || has('gui_motif') 8 \ || has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 9 10" For KDE set a font, empty 'guifont' may cause a hang. 11func SetUp() 12 if has("gui_kde") 13 set guifont=Courier\ 10\ Pitch/8/-1/5/50/0/0/0/0/0 14 endif 15 16 " Gnome insists on creating $HOME/.gnome2/, set $HOME to avoid changing the 17 " actual home directory. But avoid triggering fontconfig by setting the 18 " cache directory. Only needed for Unix. 19 if $XDG_CACHE_HOME == '' && exists('g:tester_HOME') 20 let $XDG_CACHE_HOME = g:tester_HOME . '/.cache' 21 endif 22 call mkdir('Xhome') 23 let $HOME = fnamemodify('Xhome', ':p') 24endfunc 25 26func TearDown() 27 call delete('Xhome', 'rf') 28endfunc 29 30" Test for resetting "secure" flag after GUI has started. 31" Must be run first. 32func Test_1_set_secure() 33 set exrc secure 34 gui -f 35 call assert_equal(1, has('gui_running')) 36endfunc 37 38func Test_getfontname_with_arg() 39 if has('gui_athena') || has('gui_motif') 40 " Invalid font name. The result should be an empty string. 41 call assert_equal('', getfontname('notexist')) 42 43 " Valid font name. This is usually the real name of 7x13 by default. 44 let l:fname = '-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1' 45 call assert_equal(l:fname, getfontname(l:fname)) 46 47 elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 48 " Invalid font name. The result should be the name plus the default size. 49 call assert_equal('notexist 10', getfontname('notexist')) 50 51 " Valid font name. This is usually the real name of Monospace by default. 52 let l:fname = 'Bitstream Vera Sans Mono 12' 53 call assert_equal(l:fname, getfontname(l:fname)) 54 else 55 throw "Skipped: Matched font name unpredictable to test on this GUI" 56 endif 57endfunc 58 59func Test_getfontname_without_arg() 60 let l:fname = getfontname() 61 if has('gui_kde') 62 " 'expected' is the value specified by SetUp() above. 63 call assert_equal('Courier 10 Pitch/8/-1/5/50/0/0/0/0/0', l:fname) 64 elseif has('gui_athena') || has('gui_motif') 65 " 'expected' is DFLT_FONT of gui_x11.c. 66 call assert_equal('7x13', l:fname) 67 elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 68 " 'expected' is DEFAULT_FONT of gui_gtk_x11.c. 69 call assert_equal('Monospace 10', l:fname) 70 else 71 throw "Skipped: Default font name unpredictable to test on this GUI" 72 endif 73endfunc 74 75func Test_set_guifont() 76 let l:guifont_saved = &guifont 77 if has('xfontset') 78 " Prevent 'guifontset' from canceling 'guifont'. 79 let l:guifontset_saved = &guifontset 80 set guifontset= 81 endif 82 83 let skipped = 0 84 if has('gui_athena') || has('gui_motif') 85 " Non-empty font list with invalid font names. 86 " 87 " This test is twofold: (1) It checks if the command fails as expected 88 " when there are no loadable fonts found in the list. (2) It checks if 89 " 'guifont' remains the same after the command loads none of the fonts 90 " listed. 91 let l:flist = &guifont 92 call assert_fails('set guifont=-notexist1-*,-notexist2-*') 93 call assert_equal(l:flist, &guifont) 94 95 " Non-empty font list with a valid font name. Should pick up the first 96 " valid font. 97 set guifont=-notexist1-*,fixed,-notexist2-* 98 call assert_equal('fixed', getfontname()) 99 100 " Empty list. Should fallback to the built-in default. 101 set guifont= 102 call assert_equal('7x13', getfontname()) 103 104 elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 105 " For GTK, what we refer to as 'font names' in our manual are actually 106 " 'initial font patterns'. A valid font which matches the 'canonical font 107 " pattern' constructed from a given 'initial pattern' is to be looked up 108 " and loaded. That explains why the GTK GUIs appear to accept 'invalid 109 " font names'. 110 " 111 " Non-empty list. Should always pick up the first element, no matter how 112 " strange it is, as explained above. 113 set guifont=(´・ω・`)\ 12,Courier\ 12 114 call assert_equal('(´・ω・`) 12', getfontname()) 115 116 " Empty list. Should fallback to the built-in default. 117 set guifont= 118 call assert_equal('Monospace 10', getfontname()) 119 120 else 121 let skipped = 1 122 endif 123 124 if has('xfontset') 125 let &guifontset = l:guifontset_saved 126 endif 127 let &guifont = l:guifont_saved 128 129 if skipped 130 throw "Skipped: Test not implemented yet for this GUI" 131 endif 132endfunc 133 134func Test_getwinpos() 135 call assert_match('Window position: X \d\+, Y \d\+', execute('winpos')) 136 call assert_true(getwinposx() >= 0) 137 call assert_true(getwinposy() >= 0) 138endfunc 139 140func Test_shell_command() 141 new 142 r !echo hello 143 call assert_equal('hello', substitute(getline(2), '\W', '', 'g')) 144 bwipe! 145endfunc 146 147func Test_windowid_variable() 148 if s:x11_based_gui || has('win32') 149 call assert_true(v:windowid > 0) 150 else 151 call assert_equal(0, v:windowid) 152 endif 153endfunc 154