xref: /vim-8.2.3635/src/testdir/test_gui.vim (revision beae4084)
1" Tests specifically for the GUI
2
3source shared.vim
4source check.vim
5CheckCanRunGui
6
7source setup_gui.vim
8
9func Setup()
10  call GUISetUpCommon()
11endfunc
12
13func TearDown()
14  call GUITearDownCommon()
15endfunc
16
17" Test for resetting "secure" flag after GUI has started.
18" Must be run first, since it starts the GUI on Unix.
19func Test_1_set_secure()
20  set exrc secure
21  gui -f
22  call assert_equal(1, has('gui_running'))
23endfunc
24
25" As for non-GUI, a balloon_show() test was already added with patch 8.0.0401
26func Test_balloon_show()
27  if has('balloon_eval')
28    " This won't do anything but must not crash either.
29    call balloon_show('hi!')
30  endif
31endfunc
32
33func Test_colorscheme()
34  call assert_equal('16777216', &t_Co)
35
36  let colorscheme_saved = exists('g:colors_name') ? g:colors_name : 'default'
37  let g:color_count = 0
38  augroup TestColors
39    au!
40    au ColorScheme * let g:color_count += 1| let g:after_colors = g:color_count
41    au ColorSchemePre * let g:color_count += 1 |let g:before_colors = g:color_count
42  augroup END
43
44  colorscheme torte
45  redraw!
46  call assert_equal('dark', &background)
47  call assert_equal(1, g:before_colors)
48  call assert_equal(2, g:after_colors)
49  call assert_equal("\ntorte", execute('colorscheme'))
50
51  let a = substitute(execute('hi Search'), "\n\\s\\+", ' ', 'g')
52  call assert_match("\nSearch         xxx term=reverse ctermfg=0 ctermbg=12 gui=bold guifg=Black guibg=Red", a)
53
54  call assert_fails('colorscheme does_not_exist', 'E185:')
55
56  exec 'colorscheme' colorscheme_saved
57  augroup TestColors
58    au!
59  augroup END
60  unlet g:color_count g:after_colors g:before_colors
61  redraw!
62endfunc
63
64func Test_getfontname_with_arg()
65  let skipped = ''
66
67  if !g:x11_based_gui
68    let skipped = g:not_implemented
69  elseif has('gui_athena') || has('gui_motif')
70    " Invalid font name. The result should be an empty string.
71    call assert_equal('', getfontname('notexist'))
72
73    " Valid font name. This is usually the real name of 7x13 by default.
74    let fname = '-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1'
75    call assert_match(fname, getfontname(fname))
76
77  elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
78    " Invalid font name. The result should be the name plus the default size.
79    call assert_equal('notexist 10', getfontname('notexist'))
80    call assert_equal('', getfontname('*'))
81
82    " Valid font name. This is usually the real name of Monospace by default.
83    let fname = 'Bitstream Vera Sans Mono 12'
84    call assert_equal(fname, getfontname(fname))
85  endif
86
87  if !empty(skipped)
88    throw skipped
89  endif
90endfunc
91
92func Test_getfontname_without_arg()
93  let skipped = ''
94
95  let fname = getfontname()
96
97  if !g:x11_based_gui
98    let skipped = g:not_implemented
99  elseif has('gui_kde')
100    " 'expected' is the value specified by SetUp() above.
101    call assert_equal('Courier 10 Pitch/8/-1/5/50/0/0/0/0/0', fname)
102  elseif has('gui_athena') || has('gui_motif')
103    " 'expected' is DFLT_FONT of gui_x11.c or its real name.
104    let pat = '\(7x13\)\|\(\c-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1\)'
105    call assert_match(pat, fname)
106  elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
107    " 'expected' is DEFAULT_FONT of gui_gtk_x11.c.
108    call assert_equal('Monospace 10', fname)
109  endif
110
111  if !empty(skipped)
112    throw skipped
113  endif
114endfunc
115
116func Test_getwinpos()
117  call assert_match('Window position: X \d\+, Y \d\+', execute('winpos'))
118  call assert_true(getwinposx() >= 0)
119  call assert_true(getwinposy() >= 0)
120  call assert_equal([getwinposx(), getwinposy()], getwinpos())
121endfunc
122
123func Test_quoteplus()
124  let skipped = ''
125
126  if !g:x11_based_gui
127    let skipped = g:not_supported . 'quoteplus'
128  else
129    let quoteplus_saved = @+
130
131    let test_call     = 'Can you hear me?'
132    let test_response = 'Yes, I can.'
133    let vim_exe = GetVimCommand()
134    let testee = 'VIMRUNTIME=' . $VIMRUNTIME . '; export VIMRUNTIME;'
135          \ . vim_exe . ' --noplugin --not-a-term -c ''%s'''
136    " Ignore the "failed to create input context" error.
137    let cmd = 'call test_ignore_error("E285") | '
138	  \ . 'gui -f | '
139	  \ . 'call feedkeys("'
140          \ . '\"+p'
141          \ . ':s/' . test_call . '/' . test_response . '/\<CR>'
142          \ . '\"+yis'
143          \ . ':q!\<CR>", "tx")'
144    let run_vimtest = printf(testee, cmd)
145
146    " Set the quoteplus register to test_call, and another gvim will launched.
147    " Then, it first tries to paste the content of its own quotedplus register
148    " onto it.  Second, it tries to substitute test_response for the pasted
149    " sentence.  If the sentence is identical to test_call, the substitution
150    " should succeed.  Third, it tries to yank the result of the substitution
151    " to its own quoteplus register, and last it quits.  When system()
152    " returns, the content of the quoteplus register should be identical to
153    " test_response if those quoteplus registers are synchronized properly
154    " with/through the X11 clipboard.
155    let @+ = test_call
156    call system(run_vimtest)
157    call assert_equal(test_response, @+)
158
159    let @+ = quoteplus_saved
160  endif
161
162  if !empty(skipped)
163    throw skipped
164  endif
165endfunc
166
167func Test_set_background()
168  let background_saved = &background
169
170  set background&
171  call assert_equal('light', &background)
172
173  set background=dark
174  call assert_equal('dark', &background)
175
176  let &background = background_saved
177endfunc
178
179func Test_set_balloondelay()
180  if !exists('+balloondelay')
181    return
182  endif
183
184  let balloondelay_saved = &balloondelay
185
186  " Check if the default value is identical to that described in the manual.
187  set balloondelay&
188  call assert_equal(600, &balloondelay)
189
190  " Edge cases
191
192  " XXX This fact should be hidden so that people won't be tempted to write
193  " plugin/TimeMachine.vim.  TODO Add reasonable range checks to the source
194  " code.
195  set balloondelay=-1
196  call assert_equal(-1, &balloondelay)
197
198  " Though it's possible to interpret the zero delay to be 'as soon as
199  " possible' or even 'indefinite', its actual meaning depends on the GUI
200  " toolkit in use after all.
201  set balloondelay=0
202  call assert_equal(0, &balloondelay)
203
204  set balloondelay=1
205  call assert_equal(1, &balloondelay)
206
207  " Since p_bdelay is of type long currently, the upper bound can be
208  " impractically huge and machine-dependent.  Practically, it's sufficient
209  " to check if balloondelay works with 0x7fffffff (32 bits) for now.
210  set balloondelay=2147483647
211  call assert_equal(2147483647, &balloondelay)
212
213  let &balloondelay = balloondelay_saved
214endfunc
215
216func Test_set_ballooneval()
217  if !exists('+ballooneval')
218    return
219  endif
220
221  let ballooneval_saved = &ballooneval
222
223  set ballooneval&
224  call assert_equal(0, &ballooneval)
225
226  set ballooneval
227  call assert_notequal(0, &ballooneval)
228
229  set noballooneval
230  call assert_equal(0, &ballooneval)
231
232  let &ballooneval = ballooneval_saved
233endfunc
234
235func Test_set_balloonexpr()
236  if !exists('+balloonexpr')
237    return
238  endif
239
240  let balloonexpr_saved = &balloonexpr
241
242  " Default value
243  set balloonexpr&
244  call assert_equal('', &balloonexpr)
245
246  " User-defined function
247  new
248  func MyBalloonExpr()
249      return 'Cursor is at line ' . v:beval_lnum .
250	      \', column ' . v:beval_col .
251	      \ ' of file ' .  bufname(v:beval_bufnr) .
252	      \ ' on word "' . v:beval_text . '"' .
253	      \ ' in window ' . v:beval_winid . ' (#' . v:beval_winnr . ')'
254  endfunc
255  setl balloonexpr=MyBalloonExpr()
256  setl ballooneval
257  call assert_equal('MyBalloonExpr()', &balloonexpr)
258  " TODO Read non-empty text, place the pointer at a character of a word,
259  " and check if the content of the balloon is the same as what is expected.
260  " Also, check if textlock works as expected.
261  setl balloonexpr&
262  call assert_equal('', &balloonexpr)
263  delfunc MyBalloonExpr
264  bwipe!
265
266  " Multiline support
267  if has('balloon_multiline')
268    " Multiline balloon using NL
269    new
270    func MyBalloonFuncForMultilineUsingNL()
271      return "Multiline\nSuppported\nBalloon\nusing NL"
272    endfunc
273    setl balloonexpr=MyBalloonFuncForMultilineUsingNL()
274    setl ballooneval
275    call assert_equal('MyBalloonFuncForMultilineUsingNL()', &balloonexpr)
276    " TODO Read non-empty text, place the pointer at a character of a word,
277    " and check if the content of the balloon is the same as what is
278    " expected.  Also, check if textlock works as expected.
279    setl balloonexpr&
280    delfunc MyBalloonFuncForMultilineUsingNL
281    bwipe!
282
283    " Multiline balloon using List
284    new
285    func MyBalloonFuncForMultilineUsingList()
286      return [ 'Multiline', 'Suppported', 'Balloon', 'using List' ]
287    endfunc
288    setl balloonexpr=MyBalloonFuncForMultilineUsingList()
289    setl ballooneval
290    call assert_equal('MyBalloonFuncForMultilineUsingList()', &balloonexpr)
291    " TODO Read non-empty text, place the pointer at a character of a word,
292    " and check if the content of the balloon is the same as what is
293    " expected.  Also, check if textlock works as expected.
294    setl balloonexpr&
295    delfunc MyBalloonFuncForMultilineUsingList
296    bwipe!
297  endif
298
299  let &balloonexpr = balloonexpr_saved
300endfunc
301
302" Invalid arguments are tested with test_options in conjunction with segfaults
303" caused by them (Patch 8.0.0357, 24922ec233).
304func Test_set_guicursor()
305  let guicursor_saved = &guicursor
306
307  let default = [
308        \ "n-v-c:block-Cursor/lCursor",
309        \ "ve:ver35-Cursor",
310        \ "o:hor50-Cursor",
311        \ "i-ci:ver25-Cursor/lCursor",
312        \ "r-cr:hor20-Cursor/lCursor",
313        \ "sm:block-Cursor-blinkwait175-blinkoff150-blinkon175"
314        \ ]
315
316  " Default Value
317  set guicursor&
318  call assert_equal(join(default, ','), &guicursor)
319
320  " Argument List Example 1
321  let opt_list = copy(default)
322  let opt_list[0] = "n-c-v:block-nCursor"
323  exec "set guicursor=" . join(opt_list, ',')
324  call assert_equal(join(opt_list, ','), &guicursor)
325  unlet opt_list
326
327  " Argument List Example 2
328  let opt_list = copy(default)
329  let opt_list[3] = "i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150"
330  exec "set guicursor=" . join(opt_list, ',')
331  call assert_equal(join(opt_list, ','), &guicursor)
332  unlet opt_list
333
334  " 'a' Mode
335  set guicursor&
336  let &guicursor .= ',a:blinkon0'
337  call assert_equal(join(default, ',') . ",a:blinkon0", &guicursor)
338
339  let &guicursor = guicursor_saved
340endfunc
341
342func Test_set_guifont()
343  let skipped = ''
344
345  let guifont_saved = &guifont
346  if has('xfontset')
347    " Prevent 'guifontset' from canceling 'guifont'.
348    let guifontset_saved = &guifontset
349    set guifontset=
350  endif
351
352  if !g:x11_based_gui
353    let skipped = g:not_implemented
354  elseif has('gui_athena') || has('gui_motif')
355    " Non-empty font list with invalid font names.
356    "
357    " This test is twofold: (1) It checks if the command fails as expected
358    " when there are no loadable fonts found in the list. (2) It checks if
359    " 'guifont' remains the same after the command loads none of the fonts
360    " listed.
361    let flist = &guifont
362    call assert_fails('set guifont=-notexist1-*,-notexist2-*')
363    call assert_equal(flist, &guifont)
364
365    " Non-empty font list with a valid font name.  Should pick up the first
366    " valid font.
367    set guifont=-notexist1-*,fixed,-notexist2-*
368    let pat = '\(fixed\)\|\(\c-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1\)'
369    call assert_match(pat, getfontname())
370
371    " Empty list. Should fallback to the built-in default.
372    set guifont=
373    let pat = '\(7x13\)\|\(\c-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1\)'
374    call assert_match(pat, getfontname())
375
376  elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3')
377    " For GTK, what we refer to as 'font names' in our manual are actually
378    " 'initial font patterns'.  A valid font which matches the 'canonical font
379    " pattern' constructed from a given 'initial pattern' is to be looked up
380    " and loaded.  That explains why the GTK GUIs appear to accept 'invalid
381    " font names'.
382    "
383    " Non-empty list.  Should always pick up the first element, no matter how
384    " strange it is, as explained above.
385    set guifont=(´・ω・`)\ 12,Courier\ 12
386    call assert_equal('(´・ω・`) 12', getfontname())
387
388    " Empty list. Should fallback to the built-in default.
389    set guifont=
390    call assert_equal('Monospace 10', getfontname())
391  endif
392
393  if has('win32')
394    " Invalid font names are accepted in GTK GUI
395    call assert_fails('set guifont=xa1bc23d7f', 'E596:')
396  endif
397
398  if has('xfontset')
399    let &guifontset = guifontset_saved
400  endif
401  let &guifont = guifont_saved
402
403  if !empty(skipped)
404    throw skipped
405  endif
406endfunc
407
408func Test_set_guifontset()
409  CheckFeature xfontset
410  let skipped = ''
411
412  call assert_fails('set guifontset=*', 'E597:')
413
414  let ctype_saved = v:ctype
415
416  " First, since XCreateFontSet(3) is very sensitive to locale, fonts must
417  " be chosen meticulously.
418  let font_head = '-misc-fixed-medium-r-normal--14'
419
420  let font_aw70 = font_head . '-130-75-75-c-70'
421  let font_aw140 = font_head . '-130-75-75-c-140'
422
423  let font_jisx0201 = font_aw70 . '-jisx0201.1976-0'
424  let font_jisx0208 = font_aw140 . '-jisx0208.1983-0'
425
426  let full_XLFDs = join([ font_jisx0208, font_jisx0201 ], ',')
427  let short_XLFDs = join([ font_aw140, font_aw70 ], ',')
428  let singleton = font_head . '-*'
429  let aliases = 'k14,r14'
430
431  " Second, among 'locales', look up such a locale that gets 'set
432  " guifontset=' to work successfully with every fontset specified with
433  " 'fontsets'.
434  let locales = [ 'ja_JP.UTF-8', 'ja_JP.eucJP', 'ja_JP.SJIS' ]
435  let fontsets = [ full_XLFDs, short_XLFDs, singleton, aliases ]
436
437  let feasible = 0
438  for locale in locales
439    try
440      exec 'language ctype' locale
441    catch /^Vim\%((\a\+)\)\=:E197/
442      continue
443    endtry
444    let done = 0
445    for fontset in fontsets
446      try
447	exec 'set guifontset=' . fontset
448      catch /^Vim\%((\a\+)\)\=:E\%(250\|252\|234\|597\|598\)/
449	break
450      endtry
451      let done += 1
452    endfor
453    if done == len(fontsets)
454      let feasible = 1
455      break
456    endif
457  endfor
458
459  " Third, give a set of tests if it is found feasible.
460  if !feasible
461    let skipped = g:not_hosted
462  else
463    " N.B. 'v:ctype' has already been set to an appropriate value in the
464    " previous loop.
465    for fontset in fontsets
466      exec 'set guifontset=' . fontset
467      call assert_equal(fontset, &guifontset)
468    endfor
469  endif
470
471  " Finally, restore ctype.
472  exec 'language ctype' ctype_saved
473
474  if !empty(skipped)
475    throw skipped
476  endif
477endfunc
478
479func Test_set_guifontwide()
480  call assert_fails('set guifontwide=*', 'E533:')
481  let skipped = ''
482
483  if !g:x11_based_gui
484    let skipped = g:not_implemented
485  elseif has('gui_gtk')
486    let guifont_saved = &guifont
487    let guifontwide_saved = &guifontwide
488
489    let fc_match = exepath('fc-match')
490    if empty(fc_match)
491      let skipped = g:not_hosted
492    else
493      let &guifont = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=en')
494      let wide = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=ja')
495      exec 'set guifontwide=' . fnameescape(wide)
496      call assert_equal(wide, &guifontwide)
497    endif
498
499    let &guifontwide = guifontwide_saved
500    let &guifont = guifont_saved
501
502  elseif has('gui_athena') || has('gui_motif')
503    " guifontwide is premised upon the xfontset feature.
504    if !has('xfontset')
505      let skipped = g:not_supported . 'xfontset'
506    else
507      let encoding_saved    = &encoding
508      let guifont_saved     = &guifont
509      let guifontset_saved  = &guifontset
510      let guifontwide_saved = &guifontwide
511
512      let nfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1'
513      let wfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1'
514
515      set encoding=utf-8
516
517      " Case 1: guifontset is empty
518      set guifontset=
519
520      " Case 1-1: Automatic selection
521      set guifontwide=
522      exec 'set guifont=' . nfont
523      call assert_equal(wfont, &guifontwide)
524
525      " Case 1-2: Manual selection
526      exec 'set guifontwide=' . wfont
527      exec 'set guifont=' . nfont
528      call assert_equal(wfont, &guifontwide)
529
530      " Case 2: guifontset is invalid
531      try
532        set guifontset=-*-notexist-*
533        call assert_report("'set guifontset=-*-notexist-*' should have failed")
534      catch
535        call assert_exception('E598')
536      endtry
537      " Set it to an invalid value brutally for preparation.
538      let &guifontset = '-*-notexist-*'
539
540      " Case 2-1: Automatic selection
541      set guifontwide=
542      exec 'set guifont=' . nfont
543      call assert_equal(wfont, &guifontwide)
544
545      " Case 2-2: Manual selection
546      exec 'set guifontwide=' . wfont
547      exec 'set guifont=' . nfont
548      call assert_equal(wfont, &guifontwide)
549
550      let &guifontwide = guifontwide_saved
551      let &guifontset  = guifontset_saved
552      let &guifont     = guifont_saved
553      let &encoding    = encoding_saved
554    endif
555  endif
556
557  if !empty(skipped)
558    throw skipped
559  endif
560endfunc
561
562func Test_set_guiheadroom()
563  let skipped = ''
564
565  if !g:x11_based_gui
566    let skipped = g:not_supported . 'guiheadroom'
567  else
568    " Since this script is to be read together with '-U NONE', the default
569    " value must be preserved.
570    call assert_equal(50, &guiheadroom)
571  endif
572
573  if !empty(skipped)
574    throw skipped
575  endif
576endfunc
577
578func Test_set_guioptions()
579  let guioptions_saved = &guioptions
580  let duration = '200m'
581
582  if has('win32')
583    " Default Value
584    set guioptions&
585    call assert_equal('egmrLtT', &guioptions)
586
587  else
588    " Default Value
589    set guioptions&
590    call assert_equal('aegimrLtT', &guioptions)
591
592    " To activate scrollbars of type 'L' or 'R'.
593    wincmd v
594    redraw!
595
596    " Remove all default GUI ornaments
597    set guioptions-=T
598    exec 'sleep' . duration
599    call assert_equal('aegimrLt', &guioptions)
600    set guioptions-=t
601    exec 'sleep' . duration
602    call assert_equal('aegimrL', &guioptions)
603    set guioptions-=L
604    exec 'sleep' . duration
605    call assert_equal('aegimr', &guioptions)
606    set guioptions-=r
607    exec 'sleep' . duration
608    call assert_equal('aegim', &guioptions)
609    set guioptions-=m
610    exec 'sleep' . duration
611    call assert_equal('aegi', &guioptions)
612
613    " Try non-default GUI ornaments
614    set guioptions+=l
615    exec 'sleep' . duration
616    call assert_equal('aegil', &guioptions)
617    set guioptions-=l
618    exec 'sleep' . duration
619    call assert_equal('aegi', &guioptions)
620
621    set guioptions+=R
622    exec 'sleep' . duration
623    call assert_equal('aegiR', &guioptions)
624    set guioptions-=R
625    exec 'sleep' . duration
626    call assert_equal('aegi', &guioptions)
627
628    set guioptions+=b
629    exec 'sleep' . duration
630    call assert_equal('aegib', &guioptions)
631    set guioptions+=h
632    exec 'sleep' . duration
633    call assert_equal('aegibh', &guioptions)
634    set guioptions-=h
635    exec 'sleep' . duration
636    call assert_equal('aegib', &guioptions)
637    set guioptions-=b
638    exec 'sleep' . duration
639    call assert_equal('aegi', &guioptions)
640
641    set guioptions+=v
642    exec 'sleep' . duration
643    call assert_equal('aegiv', &guioptions)
644    set guioptions-=v
645    exec 'sleep' . duration
646    call assert_equal('aegi', &guioptions)
647
648    if has('gui_motif')
649      set guioptions+=F
650      exec 'sleep' . duration
651      call assert_equal('aegiF', &guioptions)
652      set guioptions-=F
653      exec 'sleep' . duration
654      call assert_equal('aegi', &guioptions)
655    endif
656
657    if has('gui_gtk3')
658      set guioptions+=d
659      exec 'sleep' . duration
660      call assert_equal('aegid', &guioptions)
661      set guioptions-=d
662      exec 'sleep' . duration
663      call assert_equal('aegi', &guioptions)
664    endif
665
666    " Restore GUI ornaments to the default state.
667    set guioptions+=m
668    exec 'sleep' . duration
669    call assert_equal('aegim', &guioptions)
670    set guioptions+=r
671    exec 'sleep' . duration
672    call assert_equal('aegimr', &guioptions)
673    set guioptions+=L
674    exec 'sleep' . duration
675    call assert_equal('aegimrL', &guioptions)
676    set guioptions+=t
677    exec 'sleep' . duration
678    call assert_equal('aegimrLt', &guioptions)
679    set guioptions+=T
680    exec 'sleep' . duration
681    call assert_equal("aegimrLtT", &guioptions)
682
683    wincmd o
684    redraw!
685  endif
686
687  let &guioptions = guioptions_saved
688endfunc
689
690func Test_scrollbars()
691  new
692  " buffer with 200 lines
693  call setline(1, repeat(['one', 'two'], 100))
694  set guioptions+=rlb
695
696  " scroll to move line 11 at top, moves the cursor there
697  eval 10->test_scrollbar('left', 0)
698  redraw
699  call assert_equal(1, winline())
700  call assert_equal(11, line('.'))
701
702  " scroll to move line 1 at top, cursor stays in line 11
703  call test_scrollbar('right', 0, 0)
704  redraw
705  call assert_equal(11, winline())
706  call assert_equal(11, line('.'))
707
708  set nowrap
709  call setline(11, repeat('x', 150))
710  redraw
711  call assert_equal(1, wincol())
712  set number
713  redraw
714  call assert_equal(5, wincol())
715  set nonumber
716  redraw
717  call assert_equal(1, col('.'))
718
719  " scroll to character 11, cursor is moved
720  call test_scrollbar('hor', 10, 0)
721  redraw
722  call assert_equal(1, wincol())
723  set number
724  redraw
725  call assert_equal(5, wincol())
726  set nonumber
727  redraw
728  call assert_equal(11, col('.'))
729
730  set guioptions&
731  set wrap&
732  bwipe!
733endfunc
734
735func Test_menu()
736  CheckFeature quickfix
737
738  " Check Help menu exists
739  let help_menu = execute('menu Help')
740  call assert_match('Overview', help_menu)
741
742  " Check Help menu works
743  emenu Help.Overview
744  call assert_equal('help', &buftype)
745  close
746
747  " Check deleting menu doesn't cause trouble.
748  aunmenu Help
749  call assert_fails('menu Help', 'E329:')
750endfunc
751
752func Test_set_guipty()
753  let guipty_saved = &guipty
754
755  " Default Value
756  set guipty&
757  call assert_equal(1, &guipty)
758
759  set noguipty
760  call assert_equal(0, &guipty)
761
762  let &guipty = guipty_saved
763endfunc
764
765func Test_encoding_conversion()
766  " GTK supports conversion between 'encoding' and "utf-8"
767  if has('gui_gtk')
768    let encoding_saved = &encoding
769    set encoding=latin1
770
771    " would be nice if we could take a screenshot
772    intro
773    " sets the window title
774    edit SomeFile
775
776    let &encoding = encoding_saved
777  endif
778endfunc
779
780func Test_shell_command()
781  new
782  r !echo hello
783  call assert_equal('hello', substitute(getline(2), '\W', '', 'g'))
784  bwipe!
785endfunc
786
787func Test_syntax_colortest()
788  runtime syntax/colortest.vim
789  redraw!
790  sleep 200m
791  bwipe!
792endfunc
793
794func Test_set_term()
795  " It's enough to check the current value since setting 'term' to anything
796  " other than builtin_gui makes no sense at all.
797  call assert_equal('builtin_gui', &term)
798  call assert_fails('set term=xterm', 'E530:')
799endfunc
800
801func Test_windowid_variable()
802  if g:x11_based_gui || has('win32')
803    call assert_true(v:windowid > 0)
804  else
805    call assert_equal(0, v:windowid)
806  endif
807endfunc
808
809" Test "vim -g" and also the GUIEnter autocommand.
810func Test_gui_dash_g()
811  let cmd = GetVimCommand('Xscriptgui')
812  call writefile([""], "Xtestgui")
813  let lines =<< trim END
814	au GUIEnter * call writefile(["insertmode: " . &insertmode], "Xtestgui")
815	au GUIEnter * qall
816  END
817  call writefile(lines, 'Xscriptgui')
818  call system(cmd . ' -g')
819  call WaitForAssert({-> assert_equal(['insertmode: 0'], readfile('Xtestgui'))})
820
821  call delete('Xscriptgui')
822  call delete('Xtestgui')
823endfunc
824
825" Test "vim -7" and also the GUIEnter autocommand.
826func Test_gui_dash_y()
827  let cmd = GetVimCommand('Xscriptgui')
828  call writefile([""], "Xtestgui")
829  let lines =<< trim END
830	au GUIEnter * call writefile(["insertmode: " . &insertmode], "Xtestgui")
831	au GUIEnter * qall
832  END
833  call writefile(lines, 'Xscriptgui')
834  call system(cmd . ' -y')
835  call WaitForAssert({-> assert_equal(['insertmode: 1'], readfile('Xtestgui'))})
836
837  call delete('Xscriptgui')
838  call delete('Xtestgui')
839endfunc
840
841" vim: shiftwidth=2 sts=2 expandtab
842