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 endif 390 391 if exists('+renderoptions') 392 " doing this four times used to cause a crash 393 set renderoptions=type:directx 394 for i in range(5) 395 set guifont= 396 endfor 397 set renderoptions= 398 for i in range(5) 399 set guifont= 400 endfor 401 endif 402 403 if has('xfontset') 404 let &guifontset = guifontset_saved 405 endif 406 let &guifont = guifont_saved 407 408 if !empty(skipped) 409 throw skipped 410 endif 411endfunc 412 413func Test_set_guifontset() 414 CheckFeature xfontset 415 let skipped = '' 416 417 call assert_fails('set guifontset=*', 'E597:') 418 419 let ctype_saved = v:ctype 420 421 " First, since XCreateFontSet(3) is very sensitive to locale, fonts must 422 " be chosen meticulously. 423 let font_head = '-misc-fixed-medium-r-normal--14' 424 425 let font_aw70 = font_head . '-130-75-75-c-70' 426 let font_aw140 = font_head . '-130-75-75-c-140' 427 428 let font_jisx0201 = font_aw70 . '-jisx0201.1976-0' 429 let font_jisx0208 = font_aw140 . '-jisx0208.1983-0' 430 431 let full_XLFDs = join([ font_jisx0208, font_jisx0201 ], ',') 432 let short_XLFDs = join([ font_aw140, font_aw70 ], ',') 433 let singleton = font_head . '-*' 434 let aliases = 'k14,r14' 435 436 " Second, among 'locales', look up such a locale that gets 'set 437 " guifontset=' to work successfully with every fontset specified with 438 " 'fontsets'. 439 let locales = [ 'ja_JP.UTF-8', 'ja_JP.eucJP', 'ja_JP.SJIS' ] 440 let fontsets = [ full_XLFDs, short_XLFDs, singleton, aliases ] 441 442 let feasible = 0 443 for locale in locales 444 try 445 exec 'language ctype' locale 446 catch /^Vim\%((\a\+)\)\=:E197/ 447 continue 448 endtry 449 let done = 0 450 for fontset in fontsets 451 try 452 exec 'set guifontset=' . fontset 453 catch /^Vim\%((\a\+)\)\=:E\%(250\|252\|234\|597\|598\)/ 454 break 455 endtry 456 let done += 1 457 endfor 458 if done == len(fontsets) 459 let feasible = 1 460 break 461 endif 462 endfor 463 464 " Third, give a set of tests if it is found feasible. 465 if !feasible 466 let skipped = g:not_hosted 467 else 468 " N.B. 'v:ctype' has already been set to an appropriate value in the 469 " previous loop. 470 for fontset in fontsets 471 exec 'set guifontset=' . fontset 472 call assert_equal(fontset, &guifontset) 473 endfor 474 endif 475 476 " Finally, restore ctype. 477 exec 'language ctype' ctype_saved 478 479 if !empty(skipped) 480 throw skipped 481 endif 482endfunc 483 484func Test_set_guifontwide() 485 call assert_fails('set guifontwide=*', 'E533:') 486 let skipped = '' 487 488 if !g:x11_based_gui 489 let skipped = g:not_implemented 490 elseif has('gui_gtk') 491 let guifont_saved = &guifont 492 let guifontwide_saved = &guifontwide 493 494 let fc_match = exepath('fc-match') 495 if empty(fc_match) 496 let skipped = g:not_hosted 497 else 498 let &guifont = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=en') 499 let wide = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=ja') 500 exec 'set guifontwide=' . fnameescape(wide) 501 call assert_equal(wide, &guifontwide) 502 endif 503 504 let &guifontwide = guifontwide_saved 505 let &guifont = guifont_saved 506 507 elseif has('gui_athena') || has('gui_motif') 508 " guifontwide is premised upon the xfontset feature. 509 if !has('xfontset') 510 let skipped = g:not_supported . 'xfontset' 511 else 512 let encoding_saved = &encoding 513 let guifont_saved = &guifont 514 let guifontset_saved = &guifontset 515 let guifontwide_saved = &guifontwide 516 517 let nfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1' 518 let wfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1' 519 520 set encoding=utf-8 521 522 " Case 1: guifontset is empty 523 set guifontset= 524 525 " Case 1-1: Automatic selection 526 set guifontwide= 527 exec 'set guifont=' . nfont 528 call assert_equal(wfont, &guifontwide) 529 530 " Case 1-2: Manual selection 531 exec 'set guifontwide=' . wfont 532 exec 'set guifont=' . nfont 533 call assert_equal(wfont, &guifontwide) 534 535 " Case 2: guifontset is invalid 536 try 537 set guifontset=-*-notexist-* 538 call assert_report("'set guifontset=-*-notexist-*' should have failed") 539 catch 540 call assert_exception('E598:') 541 endtry 542 " Set it to an invalid value brutally for preparation. 543 let &guifontset = '-*-notexist-*' 544 545 " Case 2-1: Automatic selection 546 set guifontwide= 547 exec 'set guifont=' . nfont 548 call assert_equal(wfont, &guifontwide) 549 550 " Case 2-2: Manual selection 551 exec 'set guifontwide=' . wfont 552 exec 'set guifont=' . nfont 553 call assert_equal(wfont, &guifontwide) 554 555 let &guifontwide = guifontwide_saved 556 let &guifontset = guifontset_saved 557 let &guifont = guifont_saved 558 let &encoding = encoding_saved 559 endif 560 endif 561 562 if !empty(skipped) 563 throw skipped 564 endif 565endfunc 566 567func Test_set_guiheadroom() 568 let skipped = '' 569 570 if !g:x11_based_gui 571 let skipped = g:not_supported . 'guiheadroom' 572 else 573 " Since this script is to be read together with '-U NONE', the default 574 " value must be preserved. 575 call assert_equal(50, &guiheadroom) 576 endif 577 578 if !empty(skipped) 579 throw skipped 580 endif 581endfunc 582 583func Test_set_guioptions() 584 let guioptions_saved = &guioptions 585 let duration = '200m' 586 587 if has('win32') 588 " Default Value 589 set guioptions& 590 call assert_equal('egmrLtT', &guioptions) 591 592 else 593 " Default Value 594 set guioptions& 595 call assert_equal('aegimrLtT', &guioptions) 596 597 " To activate scrollbars of type 'L' or 'R'. 598 wincmd v 599 redraw! 600 601 " Remove all default GUI ornaments 602 set guioptions-=T 603 exec 'sleep' . duration 604 call assert_equal('aegimrLt', &guioptions) 605 set guioptions-=t 606 exec 'sleep' . duration 607 call assert_equal('aegimrL', &guioptions) 608 set guioptions-=L 609 exec 'sleep' . duration 610 call assert_equal('aegimr', &guioptions) 611 set guioptions-=r 612 exec 'sleep' . duration 613 call assert_equal('aegim', &guioptions) 614 set guioptions-=m 615 exec 'sleep' . duration 616 call assert_equal('aegi', &guioptions) 617 618 " Try non-default GUI ornaments 619 set guioptions+=l 620 exec 'sleep' . duration 621 call assert_equal('aegil', &guioptions) 622 set guioptions-=l 623 exec 'sleep' . duration 624 call assert_equal('aegi', &guioptions) 625 626 set guioptions+=R 627 exec 'sleep' . duration 628 call assert_equal('aegiR', &guioptions) 629 set guioptions-=R 630 exec 'sleep' . duration 631 call assert_equal('aegi', &guioptions) 632 633 set guioptions+=b 634 exec 'sleep' . duration 635 call assert_equal('aegib', &guioptions) 636 set guioptions+=h 637 exec 'sleep' . duration 638 call assert_equal('aegibh', &guioptions) 639 set guioptions-=h 640 exec 'sleep' . duration 641 call assert_equal('aegib', &guioptions) 642 set guioptions-=b 643 exec 'sleep' . duration 644 call assert_equal('aegi', &guioptions) 645 646 set guioptions+=v 647 exec 'sleep' . duration 648 call assert_equal('aegiv', &guioptions) 649 set guioptions-=v 650 exec 'sleep' . duration 651 call assert_equal('aegi', &guioptions) 652 653 if has('gui_motif') 654 set guioptions+=F 655 exec 'sleep' . duration 656 call assert_equal('aegiF', &guioptions) 657 set guioptions-=F 658 exec 'sleep' . duration 659 call assert_equal('aegi', &guioptions) 660 endif 661 662 if has('gui_gtk3') 663 set guioptions+=d 664 exec 'sleep' . duration 665 call assert_equal('aegid', &guioptions) 666 set guioptions-=d 667 exec 'sleep' . duration 668 call assert_equal('aegi', &guioptions) 669 endif 670 671 " Restore GUI ornaments to the default state. 672 set guioptions+=m 673 exec 'sleep' . duration 674 call assert_equal('aegim', &guioptions) 675 set guioptions+=r 676 exec 'sleep' . duration 677 call assert_equal('aegimr', &guioptions) 678 set guioptions+=L 679 exec 'sleep' . duration 680 call assert_equal('aegimrL', &guioptions) 681 set guioptions+=t 682 exec 'sleep' . duration 683 call assert_equal('aegimrLt', &guioptions) 684 set guioptions+=T 685 exec 'sleep' . duration 686 call assert_equal("aegimrLtT", &guioptions) 687 688 wincmd o 689 redraw! 690 endif 691 692 let &guioptions = guioptions_saved 693endfunc 694 695func Test_scrollbars() 696 new 697 " buffer with 200 lines 698 call setline(1, repeat(['one', 'two'], 100)) 699 set guioptions+=rlb 700 701 " scroll to move line 11 at top, moves the cursor there 702 eval 10->test_scrollbar('left', 0) 703 redraw 704 call assert_equal(1, winline()) 705 call assert_equal(11, line('.')) 706 707 " scroll to move line 1 at top, cursor stays in line 11 708 call test_scrollbar('right', 0, 0) 709 redraw 710 call assert_equal(11, winline()) 711 call assert_equal(11, line('.')) 712 713 set nowrap 714 call setline(11, repeat('x', 150)) 715 redraw 716 call assert_equal(1, wincol()) 717 set number 718 redraw 719 call assert_equal(5, wincol()) 720 set nonumber 721 redraw 722 call assert_equal(1, col('.')) 723 724 " scroll to character 11, cursor is moved 725 call test_scrollbar('hor', 10, 0) 726 redraw 727 call assert_equal(1, wincol()) 728 set number 729 redraw 730 call assert_equal(5, wincol()) 731 set nonumber 732 redraw 733 call assert_equal(11, col('.')) 734 735 set guioptions& 736 set wrap& 737 bwipe! 738endfunc 739 740func Test_menu() 741 CheckFeature quickfix 742 743 " Check Help menu exists 744 let help_menu = execute('menu Help') 745 call assert_match('Overview', help_menu) 746 747 " Check Help menu works 748 emenu Help.Overview 749 call assert_equal('help', &buftype) 750 close 751 752 " Check deleting menu doesn't cause trouble. 753 aunmenu Help 754 if exists(':tlmenu') 755 tlunmenu Help 756 endif 757 call assert_fails('menu Help', 'E329:') 758endfunc 759 760func Test_set_guipty() 761 let guipty_saved = &guipty 762 763 " Default Value 764 set guipty& 765 call assert_equal(1, &guipty) 766 767 set noguipty 768 call assert_equal(0, &guipty) 769 770 let &guipty = guipty_saved 771endfunc 772 773func Test_encoding_conversion() 774 " GTK supports conversion between 'encoding' and "utf-8" 775 CheckFeature gui_gtk 776 let encoding_saved = &encoding 777 set encoding=latin1 778 779 " would be nice if we could take a screenshot 780 intro 781 " sets the window title 782 edit SomeFile 783 784 let &encoding = encoding_saved 785endfunc 786 787func Test_shell_command() 788 new 789 r !echo hello 790 call assert_equal('hello', substitute(getline(2), '\W', '', 'g')) 791 bwipe! 792endfunc 793 794func Test_syntax_colortest() 795 runtime syntax/colortest.vim 796 redraw! 797 sleep 200m 798 bwipe! 799endfunc 800 801func Test_set_term() 802 " It's enough to check the current value since setting 'term' to anything 803 " other than builtin_gui makes no sense at all. 804 call assert_equal('builtin_gui', &term) 805 call assert_fails('set term=xterm', 'E530:') 806endfunc 807 808func Test_windowid_variable() 809 if g:x11_based_gui || has('win32') 810 call assert_true(v:windowid > 0) 811 else 812 call assert_equal(0, v:windowid) 813 endif 814endfunc 815 816" Test "vim -g" and also the GUIEnter autocommand. 817func Test_gui_dash_g() 818 let cmd = GetVimCommand('Xscriptgui') 819 call writefile([""], "Xtestgui") 820 let lines =<< trim END 821 au GUIEnter * call writefile(["insertmode: " . &insertmode], "Xtestgui") 822 au GUIEnter * qall 823 END 824 call writefile(lines, 'Xscriptgui') 825 call system(cmd . ' -g') 826 call WaitForAssert({-> assert_equal(['insertmode: 0'], readfile('Xtestgui'))}) 827 828 call delete('Xscriptgui') 829 call delete('Xtestgui') 830endfunc 831 832" Test "vim -7" and also the GUIEnter autocommand. 833func Test_gui_dash_y() 834 let cmd = GetVimCommand('Xscriptgui') 835 call writefile([""], "Xtestgui") 836 let lines =<< trim END 837 au GUIEnter * call writefile(["insertmode: " . &insertmode], "Xtestgui") 838 au GUIEnter * qall 839 END 840 call writefile(lines, 'Xscriptgui') 841 call system(cmd . ' -y') 842 call WaitForAssert({-> assert_equal(['insertmode: 1'], readfile('Xtestgui'))}) 843 844 call delete('Xscriptgui') 845 call delete('Xtestgui') 846endfunc 847 848" Test for "!" option in 'guioptions'. Use a terminal for running external 849" commands 850func Test_gui_run_cmd_in_terminal() 851 CheckFeature terminal 852 let save_guioptions = &guioptions 853 set guioptions+=! 854 if has('win32') 855 let cmd = 'type' 856 else 857 " assume all the other systems have a cat command 858 let cmd = 'cat' 859 endif 860 exe "silent !" . cmd . " test_gui.vim" 861 " TODO: how to check that the command ran in a separate terminal? 862 " Maybe check for $TERM (dumb vs xterm) in the spawned shell? 863 let &guioptions = save_guioptions 864endfunc 865 866func Test_gui_recursive_mapping() 867 nmap ' <C-W> 868 nmap <C-W>a :let didit = 1<CR> 869 call feedkeys("'a", 'xt') 870 call assert_equal(1, didit) 871 872 nunmap ' 873 nunmap <C-W>a 874endfunc 875 876" vim: shiftwidth=2 sts=2 expandtab 877