xref: /vim-8.2.3635/src/testdir/test_gui.vim (revision 8cc2a9c0)
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