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