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 CheckFeature balloon_eval 28 " This won't do anything but must not crash either. 29 call balloon_show('hi!') 30endfunc 31 32func Test_colorscheme() 33 call assert_equal('16777216', &t_Co) 34 35 let colorscheme_saved = exists('g:colors_name') ? g:colors_name : 'default' 36 let g:color_count = 0 37 augroup TestColors 38 au! 39 au ColorScheme * let g:color_count += 1| let g:after_colors = g:color_count 40 au ColorSchemePre * let g:color_count += 1 |let g:before_colors = g:color_count 41 augroup END 42 43 colorscheme torte 44 redraw! 45 call assert_equal('dark', &background) 46 call assert_equal(1, g:before_colors) 47 call assert_equal(2, g:after_colors) 48 call assert_equal("\ntorte", execute('colorscheme')) 49 50 let a = substitute(execute('hi Search'), "\n\\s\\+", ' ', 'g') 51 call assert_match("\nSearch xxx term=reverse ctermfg=0 ctermbg=12 gui=bold guifg=Black guibg=Red", a) 52 53 call assert_fails('colorscheme does_not_exist', 'E185:') 54 55 exec 'colorscheme' colorscheme_saved 56 augroup TestColors 57 au! 58 augroup END 59 unlet g:color_count g:after_colors g:before_colors 60 redraw! 61endfunc 62 63func Test_getfontname_with_arg() 64 let skipped = '' 65 66 if !g:x11_based_gui 67 let skipped = g:not_implemented 68 elseif has('gui_athena') || has('gui_motif') 69 " Invalid font name. The result should be an empty string. 70 call assert_equal('', getfontname('notexist')) 71 72 " Valid font name. This is usually the real name of 7x13 by default. 73 let fname = '-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1' 74 call assert_match(fname, getfontname(fname)) 75 76 elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 77 " Invalid font name. The result should be the name plus the default size. 78 call assert_equal('notexist 10', getfontname('notexist')) 79 call assert_equal('', getfontname('*')) 80 81 " Valid font name. This is usually the real name of Monospace by default. 82 let fname = 'Bitstream Vera Sans Mono 12' 83 call assert_equal(fname, getfontname(fname)) 84 endif 85 86 if !empty(skipped) 87 throw skipped 88 endif 89endfunc 90 91func Test_getfontname_without_arg() 92 let skipped = '' 93 94 let fname = getfontname() 95 96 if !g:x11_based_gui 97 let skipped = g:not_implemented 98 elseif has('gui_kde') 99 " 'expected' is the value specified by SetUp() above. 100 call assert_equal('Courier 10 Pitch/8/-1/5/50/0/0/0/0/0', fname) 101 elseif has('gui_athena') || has('gui_motif') 102 " 'expected' is DFLT_FONT of gui_x11.c or its real name. 103 let pat = '\(7x13\)\|\(\c-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1\)' 104 call assert_match(pat, fname) 105 elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 106 " 'expected' is DEFAULT_FONT of gui_gtk_x11.c. 107 call assert_equal('Monospace 10', fname) 108 endif 109 110 if !empty(skipped) 111 throw skipped 112 endif 113endfunc 114 115func Test_getwinpos() 116 call assert_match('Window position: X \d\+, Y \d\+', execute('winpos')) 117 call assert_true(getwinposx() >= 0) 118 call assert_true(getwinposy() >= 0) 119 call assert_equal([getwinposx(), getwinposy()], getwinpos()) 120endfunc 121 122func Test_quoteplus() 123 let skipped = '' 124 125 if !g:x11_based_gui 126 let skipped = g:not_supported . 'quoteplus' 127 else 128 let quoteplus_saved = @+ 129 130 let test_call = 'Can you hear me?' 131 let test_response = 'Yes, I can.' 132 let vim_exe = GetVimCommand() 133 let testee = 'VIMRUNTIME=' . $VIMRUNTIME . '; export VIMRUNTIME;' 134 \ . vim_exe . ' --noplugin --not-a-term -c ''%s''' 135 " Ignore the "failed to create input context" error. 136 let cmd = 'call test_ignore_error("E285") | ' 137 \ . 'gui -f | ' 138 \ . 'call feedkeys("' 139 \ . '\"+p' 140 \ . ':s/' . test_call . '/' . test_response . '/\<CR>' 141 \ . '\"+yis' 142 \ . ':q!\<CR>", "tx")' 143 let run_vimtest = printf(testee, cmd) 144 145 " Set the quoteplus register to test_call, and another gvim will launched. 146 " Then, it first tries to paste the content of its own quotedplus register 147 " onto it. Second, it tries to substitute test_response for the pasted 148 " sentence. If the sentence is identical to test_call, the substitution 149 " should succeed. Third, it tries to yank the result of the substitution 150 " to its own quoteplus register, and last it quits. When system() 151 " returns, the content of the quoteplus register should be identical to 152 " test_response if those quoteplus registers are synchronized properly 153 " with/through the X11 clipboard. 154 let @+ = test_call 155 call system(run_vimtest) 156 call assert_equal(test_response, @+) 157 158 let @+ = quoteplus_saved 159 endif 160 161 if !empty(skipped) 162 throw skipped 163 endif 164endfunc 165 166func Test_set_background() 167 let background_saved = &background 168 169 set background& 170 call assert_equal('light', &background) 171 172 set background=dark 173 call assert_equal('dark', &background) 174 175 let &background = background_saved 176endfunc 177 178func Test_set_balloondelay() 179 CheckOption balloondelay 180 181 let balloondelay_saved = &balloondelay 182 183 " Check if the default value is identical to that described in the manual. 184 set balloondelay& 185 call assert_equal(600, &balloondelay) 186 187 " Edge cases 188 189 " XXX This fact should be hidden so that people won't be tempted to write 190 " plugin/TimeMachine.vim. TODO Add reasonable range checks to the source 191 " code. 192 set balloondelay=-1 193 call assert_equal(-1, &balloondelay) 194 195 " Though it's possible to interpret the zero delay to be 'as soon as 196 " possible' or even 'indefinite', its actual meaning depends on the GUI 197 " toolkit in use after all. 198 set balloondelay=0 199 call assert_equal(0, &balloondelay) 200 201 set balloondelay=1 202 call assert_equal(1, &balloondelay) 203 204 " Since p_bdelay is of type long currently, the upper bound can be 205 " impractically huge and machine-dependent. Practically, it's sufficient 206 " to check if balloondelay works with 0x7fffffff (32 bits) for now. 207 set balloondelay=2147483647 208 call assert_equal(2147483647, &balloondelay) 209 210 let &balloondelay = balloondelay_saved 211endfunc 212 213func Test_set_ballooneval() 214 CheckOption ballooneval 215 216 let ballooneval_saved = &ballooneval 217 218 set ballooneval& 219 call assert_equal(0, &ballooneval) 220 221 set ballooneval 222 call assert_notequal(0, &ballooneval) 223 224 set noballooneval 225 call assert_equal(0, &ballooneval) 226 227 let &ballooneval = ballooneval_saved 228endfunc 229 230func Test_set_balloonexpr() 231 CheckOption balloonexpr 232 233 let balloonexpr_saved = &balloonexpr 234 235 " Default value 236 set balloonexpr& 237 call assert_equal('', &balloonexpr) 238 239 " User-defined function 240 new 241 func MyBalloonExpr() 242 return 'Cursor is at line ' . v:beval_lnum . 243 \', column ' . v:beval_col . 244 \ ' of file ' . bufname(v:beval_bufnr) . 245 \ ' on word "' . v:beval_text . '"' . 246 \ ' in window ' . v:beval_winid . ' (#' . v:beval_winnr . ')' 247 endfunc 248 setl balloonexpr=MyBalloonExpr() 249 setl ballooneval 250 call assert_equal('MyBalloonExpr()', &balloonexpr) 251 " TODO Read non-empty text, place the pointer at a character of a word, 252 " and check if the content of the balloon is the same as what is expected. 253 " Also, check if textlock works as expected. 254 setl balloonexpr& 255 call assert_equal('', &balloonexpr) 256 delfunc MyBalloonExpr 257 bwipe! 258 259 " Multiline support 260 if has('balloon_multiline') 261 " Multiline balloon using NL 262 new 263 func MyBalloonFuncForMultilineUsingNL() 264 return "Multiline\nSuppported\nBalloon\nusing NL" 265 endfunc 266 setl balloonexpr=MyBalloonFuncForMultilineUsingNL() 267 setl ballooneval 268 call assert_equal('MyBalloonFuncForMultilineUsingNL()', &balloonexpr) 269 " TODO Read non-empty text, place the pointer at a character of a word, 270 " and check if the content of the balloon is the same as what is 271 " expected. Also, check if textlock works as expected. 272 setl balloonexpr& 273 delfunc MyBalloonFuncForMultilineUsingNL 274 bwipe! 275 276 " Multiline balloon using List 277 new 278 func MyBalloonFuncForMultilineUsingList() 279 return [ 'Multiline', 'Suppported', 'Balloon', 'using List' ] 280 endfunc 281 setl balloonexpr=MyBalloonFuncForMultilineUsingList() 282 setl ballooneval 283 call assert_equal('MyBalloonFuncForMultilineUsingList()', &balloonexpr) 284 " TODO Read non-empty text, place the pointer at a character of a word, 285 " and check if the content of the balloon is the same as what is 286 " expected. Also, check if textlock works as expected. 287 setl balloonexpr& 288 delfunc MyBalloonFuncForMultilineUsingList 289 bwipe! 290 endif 291 292 let &balloonexpr = balloonexpr_saved 293endfunc 294 295" Invalid arguments are tested with test_options in conjunction with segfaults 296" caused by them (Patch 8.0.0357, 24922ec233). 297func Test_set_guicursor() 298 let guicursor_saved = &guicursor 299 300 let default = [ 301 \ "n-v-c:block-Cursor/lCursor", 302 \ "ve:ver35-Cursor", 303 \ "o:hor50-Cursor", 304 \ "i-ci:ver25-Cursor/lCursor", 305 \ "r-cr:hor20-Cursor/lCursor", 306 \ "sm:block-Cursor-blinkwait175-blinkoff150-blinkon175" 307 \ ] 308 309 " Default Value 310 set guicursor& 311 call assert_equal(join(default, ','), &guicursor) 312 313 " Argument List Example 1 314 let opt_list = copy(default) 315 let opt_list[0] = "n-c-v:block-nCursor" 316 exec "set guicursor=" . join(opt_list, ',') 317 call assert_equal(join(opt_list, ','), &guicursor) 318 unlet opt_list 319 320 " Argument List Example 2 321 let opt_list = copy(default) 322 let opt_list[3] = "i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150" 323 exec "set guicursor=" . join(opt_list, ',') 324 call assert_equal(join(opt_list, ','), &guicursor) 325 unlet opt_list 326 327 " 'a' Mode 328 set guicursor& 329 let &guicursor .= ',a:blinkon0' 330 call assert_equal(join(default, ',') . ",a:blinkon0", &guicursor) 331 332 let &guicursor = guicursor_saved 333endfunc 334 335func Test_set_guifont() 336 let skipped = '' 337 338 let guifont_saved = &guifont 339 if has('xfontset') 340 " Prevent 'guifontset' from canceling 'guifont'. 341 let guifontset_saved = &guifontset 342 set guifontset= 343 endif 344 345 if !g:x11_based_gui 346 let skipped = g:not_implemented 347 elseif has('gui_athena') || has('gui_motif') 348 " Non-empty font list with invalid font names. 349 " 350 " This test is twofold: (1) It checks if the command fails as expected 351 " when there are no loadable fonts found in the list. (2) It checks if 352 " 'guifont' remains the same after the command loads none of the fonts 353 " listed. 354 let flist = &guifont 355 call assert_fails('set guifont=-notexist1-*,-notexist2-*') 356 call assert_equal(flist, &guifont) 357 358 " Non-empty font list with a valid font name. Should pick up the first 359 " valid font. 360 set guifont=-notexist1-*,fixed,-notexist2-* 361 let pat = '\(fixed\)\|\(\c-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1\)' 362 call assert_match(pat, getfontname()) 363 364 " Empty list. Should fallback to the built-in default. 365 set guifont= 366 let pat = '\(7x13\)\|\(\c-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1\)' 367 call assert_match(pat, getfontname()) 368 369 elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 370 " For GTK, what we refer to as 'font names' in our manual are actually 371 " 'initial font patterns'. A valid font which matches the 'canonical font 372 " pattern' constructed from a given 'initial pattern' is to be looked up 373 " and loaded. That explains why the GTK GUIs appear to accept 'invalid 374 " font names'. 375 " 376 " Non-empty list. Should always pick up the first element, no matter how 377 " strange it is, as explained above. 378 set guifont=(´・ω・`)\ 12,Courier\ 12 379 call assert_equal('(´・ω・`) 12', getfontname()) 380 381 " Empty list. Should fallback to the built-in default. 382 set guifont= 383 call assert_equal('Monospace 10', getfontname()) 384 endif 385 386 if has('win32') 387 " Invalid font names are accepted in GTK GUI 388 call assert_fails('set guifont=xa1bc23d7f', 'E596:') 389 390 " doing this four times used to cause a crash 391 set guifont= 392 set guifont= 393 set guifont= 394 set guifont= 395 set guifont= 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 if exists(':tlmenu') 750 tlunmenu Help 751 endif 752 call assert_fails('menu Help', 'E329:') 753endfunc 754 755func Test_set_guipty() 756 let guipty_saved = &guipty 757 758 " Default Value 759 set guipty& 760 call assert_equal(1, &guipty) 761 762 set noguipty 763 call assert_equal(0, &guipty) 764 765 let &guipty = guipty_saved 766endfunc 767 768func Test_encoding_conversion() 769 " GTK supports conversion between 'encoding' and "utf-8" 770 CheckFeature gui_gtk 771 let encoding_saved = &encoding 772 set encoding=latin1 773 774 " would be nice if we could take a screenshot 775 intro 776 " sets the window title 777 edit SomeFile 778 779 let &encoding = encoding_saved 780endfunc 781 782func Test_shell_command() 783 new 784 r !echo hello 785 call assert_equal('hello', substitute(getline(2), '\W', '', 'g')) 786 bwipe! 787endfunc 788 789func Test_syntax_colortest() 790 runtime syntax/colortest.vim 791 redraw! 792 sleep 200m 793 bwipe! 794endfunc 795 796func Test_set_term() 797 " It's enough to check the current value since setting 'term' to anything 798 " other than builtin_gui makes no sense at all. 799 call assert_equal('builtin_gui', &term) 800 call assert_fails('set term=xterm', 'E530:') 801endfunc 802 803func Test_windowid_variable() 804 if g:x11_based_gui || has('win32') 805 call assert_true(v:windowid > 0) 806 else 807 call assert_equal(0, v:windowid) 808 endif 809endfunc 810 811" Test "vim -g" and also the GUIEnter autocommand. 812func Test_gui_dash_g() 813 let cmd = GetVimCommand('Xscriptgui') 814 call writefile([""], "Xtestgui") 815 let lines =<< trim END 816 au GUIEnter * call writefile(["insertmode: " . &insertmode], "Xtestgui") 817 au GUIEnter * qall 818 END 819 call writefile(lines, 'Xscriptgui') 820 call system(cmd . ' -g') 821 call WaitForAssert({-> assert_equal(['insertmode: 0'], readfile('Xtestgui'))}) 822 823 call delete('Xscriptgui') 824 call delete('Xtestgui') 825endfunc 826 827" Test "vim -7" and also the GUIEnter autocommand. 828func Test_gui_dash_y() 829 let cmd = GetVimCommand('Xscriptgui') 830 call writefile([""], "Xtestgui") 831 let lines =<< trim END 832 au GUIEnter * call writefile(["insertmode: " . &insertmode], "Xtestgui") 833 au GUIEnter * qall 834 END 835 call writefile(lines, 'Xscriptgui') 836 call system(cmd . ' -y') 837 call WaitForAssert({-> assert_equal(['insertmode: 1'], readfile('Xtestgui'))}) 838 839 call delete('Xscriptgui') 840 call delete('Xtestgui') 841endfunc 842 843" Test for "!" option in 'guioptions'. Use a terminal for running external 844" commands 845func Test_gui_run_cmd_in_terminal() 846 CheckFeature terminal 847 let save_guioptions = &guioptions 848 set guioptions+=! 849 if has('win32') 850 let cmd = 'type' 851 else 852 " assume all the other systems have a cat command 853 let cmd = 'cat' 854 endif 855 exe "silent !" . cmd . " test_gui.vim" 856 " TODO: how to check that the command ran in a separate terminal? 857 " Maybe check for $TERM (dumb vs xterm) in the spawned shell? 858 let &guioptions = save_guioptions 859endfunc 860 861func Test_gui_recursive_mapping() 862 nmap ' <C-W> 863 nmap <C-W>a :let didit = 1<CR> 864 call feedkeys("'a", 'xt') 865 call assert_equal(1, didit) 866 867 nunmap ' 868 nunmap <C-W>a 869endfunc 870 871" vim: shiftwidth=2 sts=2 expandtab 872