1877e9577SBram Moolenaar" Tests specifically for the GUI 2877e9577SBram Moolenaar 39f0139a2SBram Moolenaarsource shared.vim 48c5a278fSBram Moolenaarsource check.vim 58c5a278fSBram MoolenaarCheckCanRunGui 6877e9577SBram Moolenaar 78be2fbb6SBram Moolenaarsource setup_gui.vim 813c724fbSBram Moolenaar 98be2fbb6SBram Moolenaarfunc Setup() 108be2fbb6SBram Moolenaar call GUISetUpCommon() 1150fa8dd0SBram Moolenaarendfunc 1250fa8dd0SBram Moolenaar 1350fa8dd0SBram Moolenaarfunc TearDown() 148be2fbb6SBram Moolenaar call GUITearDownCommon() 15877e9577SBram Moolenaarendfunc 16877e9577SBram Moolenaar 17877e9577SBram Moolenaar" Test for resetting "secure" flag after GUI has started. 185d7ead3bSBram Moolenaar" Must be run first, since it starts the GUI on Unix. 19877e9577SBram Moolenaarfunc Test_1_set_secure() 20877e9577SBram Moolenaar set exrc secure 21877e9577SBram Moolenaar gui -f 22877e9577SBram Moolenaar call assert_equal(1, has('gui_running')) 23877e9577SBram Moolenaarendfunc 24877e9577SBram Moolenaar 25d5841f28SBram Moolenaar" As for non-GUI, a balloon_show() test was already added with patch 8.0.0401 26d5841f28SBram Moolenaarfunc Test_balloon_show() 276d91bcb4SBram Moolenaar CheckFeature balloon_eval 28d5841f28SBram Moolenaar " This won't do anything but must not crash either. 29d5841f28SBram Moolenaar call balloon_show('hi!') 30d5841f28SBram Moolenaarendfunc 31d5841f28SBram Moolenaar 328774845cSBram Moolenaarfunc Test_colorscheme() 33acc770a1SBram Moolenaar call assert_equal('16777216', &t_Co) 34acc770a1SBram Moolenaar 358774845cSBram Moolenaar let colorscheme_saved = exists('g:colors_name') ? g:colors_name : 'default' 3660a68362SBram Moolenaar let g:color_count = 0 3760a68362SBram Moolenaar augroup TestColors 3860a68362SBram Moolenaar au! 3960a68362SBram Moolenaar au ColorScheme * let g:color_count += 1| let g:after_colors = g:color_count 4060a68362SBram Moolenaar au ColorSchemePre * let g:color_count += 1 |let g:before_colors = g:color_count 4160a68362SBram Moolenaar augroup END 428774845cSBram Moolenaar 438774845cSBram Moolenaar colorscheme torte 448774845cSBram Moolenaar redraw! 458774845cSBram Moolenaar call assert_equal('dark', &background) 4660a68362SBram Moolenaar call assert_equal(1, g:before_colors) 4760a68362SBram Moolenaar call assert_equal(2, g:after_colors) 486d4470b0SBram Moolenaar call assert_equal("\ntorte", execute('colorscheme')) 496d4470b0SBram Moolenaar 506d4470b0SBram Moolenaar let a = substitute(execute('hi Search'), "\n\\s\\+", ' ', 'g') 516d4470b0SBram Moolenaar call assert_match("\nSearch xxx term=reverse ctermfg=0 ctermbg=12 gui=bold guifg=Black guibg=Red", a) 526d4470b0SBram Moolenaar 536d4470b0SBram Moolenaar call assert_fails('colorscheme does_not_exist', 'E185:') 548774845cSBram Moolenaar 558774845cSBram Moolenaar exec 'colorscheme' colorscheme_saved 5660a68362SBram Moolenaar augroup TestColors 5760a68362SBram Moolenaar au! 5860a68362SBram Moolenaar augroup END 5960a68362SBram Moolenaar unlet g:color_count g:after_colors g:before_colors 608774845cSBram Moolenaar redraw! 618774845cSBram Moolenaarendfunc 628774845cSBram Moolenaar 636f785749SBram Moolenaarfunc Test_getfontname_with_arg() 6440bd5a15SBram Moolenaar CheckX11BasedGui 654e9dbc74SBram Moolenaar 6640bd5a15SBram Moolenaar if has('gui_athena') || has('gui_motif') 676f785749SBram Moolenaar " Invalid font name. The result should be an empty string. 686f785749SBram Moolenaar call assert_equal('', getfontname('notexist')) 696f785749SBram Moolenaar 706f785749SBram Moolenaar " Valid font name. This is usually the real name of 7x13 by default. 718774845cSBram Moolenaar let fname = '-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1' 728774845cSBram Moolenaar call assert_match(fname, getfontname(fname)) 736f785749SBram Moolenaar 746f785749SBram Moolenaar elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 756f785749SBram Moolenaar " Invalid font name. The result should be the name plus the default size. 766f785749SBram Moolenaar call assert_equal('notexist 10', getfontname('notexist')) 770e05de46SBram Moolenaar call assert_equal('', getfontname('*')) 786f785749SBram Moolenaar 796f785749SBram Moolenaar " Valid font name. This is usually the real name of Monospace by default. 804e9dbc74SBram Moolenaar let fname = 'Bitstream Vera Sans Mono 12' 814e9dbc74SBram Moolenaar call assert_equal(fname, getfontname(fname)) 824e9dbc74SBram Moolenaar endif 836f785749SBram Moolenaarendfunc 846f785749SBram Moolenaar 856f785749SBram Moolenaarfunc Test_getfontname_without_arg() 8640bd5a15SBram Moolenaar CheckX11BasedGui 874e9dbc74SBram Moolenaar 884e9dbc74SBram Moolenaar let fname = getfontname() 894e9dbc74SBram Moolenaar 9040bd5a15SBram Moolenaar if has('gui_kde') 916f785749SBram Moolenaar " 'expected' is the value specified by SetUp() above. 924e9dbc74SBram Moolenaar call assert_equal('Courier 10 Pitch/8/-1/5/50/0/0/0/0/0', fname) 936f785749SBram Moolenaar elseif has('gui_athena') || has('gui_motif') 948774845cSBram Moolenaar " 'expected' is DFLT_FONT of gui_x11.c or its real name. 958774845cSBram Moolenaar let pat = '\(7x13\)\|\(\c-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1\)' 968774845cSBram Moolenaar call assert_match(pat, fname) 976f785749SBram Moolenaar elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 986f785749SBram Moolenaar " 'expected' is DEFAULT_FONT of gui_gtk_x11.c. 994e9dbc74SBram Moolenaar call assert_equal('Monospace 10', fname) 1004e9dbc74SBram Moolenaar endif 1016f785749SBram Moolenaarendfunc 1026f785749SBram Moolenaar 1038774845cSBram Moolenaarfunc Test_getwinpos() 1048774845cSBram Moolenaar call assert_match('Window position: X \d\+, Y \d\+', execute('winpos')) 1058774845cSBram Moolenaar call assert_true(getwinposx() >= 0) 1068774845cSBram Moolenaar call assert_true(getwinposy() >= 0) 107027df2a7SBram Moolenaar call assert_equal([getwinposx(), getwinposy()], getwinpos()) 1088774845cSBram Moolenaarendfunc 1098774845cSBram Moolenaar 1105074a0e0SBram Moolenaarfunc Test_quoteplus() 11140bd5a15SBram Moolenaar CheckX11BasedGui 1125074a0e0SBram Moolenaar 11340bd5a15SBram Moolenaar let g:test_is_flaky = 1 11440bd5a15SBram Moolenaar 1155074a0e0SBram Moolenaar let quoteplus_saved = @+ 1165074a0e0SBram Moolenaar 1175074a0e0SBram Moolenaar let test_call = 'Can you hear me?' 1185074a0e0SBram Moolenaar let test_response = 'Yes, I can.' 11993344c2dSBram Moolenaar let vim_exe = GetVimCommand() 1205074a0e0SBram Moolenaar let testee = 'VIMRUNTIME=' . $VIMRUNTIME . '; export VIMRUNTIME;' 12193344c2dSBram Moolenaar \ . vim_exe . ' --noplugin --not-a-term -c ''%s''' 122f8ab1b14SBram Moolenaar " Ignore the "failed to create input context" error. 12324d7636eSBram Moolenaar let cmd = 'call test_ignore_error("E285") | ' 12424d7636eSBram Moolenaar \ . 'gui -f | ' 12524d7636eSBram Moolenaar \ . 'call feedkeys("' 1265074a0e0SBram Moolenaar \ . '\"+p' 1275074a0e0SBram Moolenaar \ . ':s/' . test_call . '/' . test_response . '/\<CR>' 1285074a0e0SBram Moolenaar \ . '\"+yis' 1295074a0e0SBram Moolenaar \ . ':q!\<CR>", "tx")' 13024d7636eSBram Moolenaar let run_vimtest = printf(testee, cmd) 1315074a0e0SBram Moolenaar 1325074a0e0SBram Moolenaar " Set the quoteplus register to test_call, and another gvim will launched. 1335074a0e0SBram Moolenaar " Then, it first tries to paste the content of its own quotedplus register 134027df2a7SBram Moolenaar " onto it. Second, it tries to substitute test_response for the pasted 1355074a0e0SBram Moolenaar " sentence. If the sentence is identical to test_call, the substitution 1365074a0e0SBram Moolenaar " should succeed. Third, it tries to yank the result of the substitution 1375074a0e0SBram Moolenaar " to its own quoteplus register, and last it quits. When system() 1385074a0e0SBram Moolenaar " returns, the content of the quoteplus register should be identical to 1395074a0e0SBram Moolenaar " test_response if those quoteplus registers are synchronized properly 1405074a0e0SBram Moolenaar " with/through the X11 clipboard. 1415074a0e0SBram Moolenaar let @+ = test_call 1425074a0e0SBram Moolenaar call system(run_vimtest) 1435074a0e0SBram Moolenaar call assert_equal(test_response, @+) 1445074a0e0SBram Moolenaar 1455074a0e0SBram Moolenaar let @+ = quoteplus_saved 1465074a0e0SBram Moolenaarendfunc 1475074a0e0SBram Moolenaar 148*d68a0044SBram Moolenaarfunc Test_gui_read_stdin() 149*d68a0044SBram Moolenaar CheckUnix 150*d68a0044SBram Moolenaar 151*d68a0044SBram Moolenaar call writefile(['some', 'lines'], 'Xstdin') 152*d68a0044SBram Moolenaar let script =<< trim END 153*d68a0044SBram Moolenaar call writefile(getline(1, '$'), 'XstdinOK') 154*d68a0044SBram Moolenaar qa! 155*d68a0044SBram Moolenaar END 156*d68a0044SBram Moolenaar call writefile(script, 'Xscript') 157*d68a0044SBram Moolenaar 158*d68a0044SBram Moolenaar " Cannot use --not-a-term here, the "reading from stdin" message would not be 159*d68a0044SBram Moolenaar " displayed. 160*d68a0044SBram Moolenaar let vimcmd = substitute(GetVimCommand(), '--not-a-term', '', '') 161*d68a0044SBram Moolenaar 162*d68a0044SBram Moolenaar call system('cat Xstdin | ' .. vimcmd .. ' -f -g -S Xscript -') 163*d68a0044SBram Moolenaar call assert_equal(['some', 'lines'], readfile('XstdinOK')) 164*d68a0044SBram Moolenaar 165*d68a0044SBram Moolenaar call delete('Xstdin') 166*d68a0044SBram Moolenaar call delete('XstdinOK') 167*d68a0044SBram Moolenaar call delete('Xscript') 168*d68a0044SBram Moolenaarendfunc 169*d68a0044SBram Moolenaar 1708774845cSBram Moolenaarfunc Test_set_background() 1718774845cSBram Moolenaar let background_saved = &background 1728774845cSBram Moolenaar 1738774845cSBram Moolenaar set background& 1748774845cSBram Moolenaar call assert_equal('light', &background) 1758774845cSBram Moolenaar 1768774845cSBram Moolenaar set background=dark 1778774845cSBram Moolenaar call assert_equal('dark', &background) 1788774845cSBram Moolenaar 1798774845cSBram Moolenaar let &background = background_saved 1808774845cSBram Moolenaarendfunc 1818774845cSBram Moolenaar 182d5841f28SBram Moolenaarfunc Test_set_balloondelay() 1836d91bcb4SBram Moolenaar CheckOption balloondelay 184d5841f28SBram Moolenaar 185d5841f28SBram Moolenaar let balloondelay_saved = &balloondelay 186d5841f28SBram Moolenaar 187d5841f28SBram Moolenaar " Check if the default value is identical to that described in the manual. 188d5841f28SBram Moolenaar set balloondelay& 189d5841f28SBram Moolenaar call assert_equal(600, &balloondelay) 190d5841f28SBram Moolenaar 191d5841f28SBram Moolenaar " Edge cases 192d5841f28SBram Moolenaar 193d5841f28SBram Moolenaar " XXX This fact should be hidden so that people won't be tempted to write 194d5841f28SBram Moolenaar " plugin/TimeMachine.vim. TODO Add reasonable range checks to the source 195d5841f28SBram Moolenaar " code. 196d5841f28SBram Moolenaar set balloondelay=-1 197d5841f28SBram Moolenaar call assert_equal(-1, &balloondelay) 198d5841f28SBram Moolenaar 199d5841f28SBram Moolenaar " Though it's possible to interpret the zero delay to be 'as soon as 200d5841f28SBram Moolenaar " possible' or even 'indefinite', its actual meaning depends on the GUI 201d5841f28SBram Moolenaar " toolkit in use after all. 202d5841f28SBram Moolenaar set balloondelay=0 203d5841f28SBram Moolenaar call assert_equal(0, &balloondelay) 204d5841f28SBram Moolenaar 205d5841f28SBram Moolenaar set balloondelay=1 206d5841f28SBram Moolenaar call assert_equal(1, &balloondelay) 207d5841f28SBram Moolenaar 208d5841f28SBram Moolenaar " Since p_bdelay is of type long currently, the upper bound can be 209d5841f28SBram Moolenaar " impractically huge and machine-dependent. Practically, it's sufficient 2100f9ea22cSBram Moolenaar " to check if balloondelay works with 0x7fffffff (32 bits) for now. 2110f9ea22cSBram Moolenaar set balloondelay=2147483647 2120f9ea22cSBram Moolenaar call assert_equal(2147483647, &balloondelay) 213d5841f28SBram Moolenaar 214d5841f28SBram Moolenaar let &balloondelay = balloondelay_saved 215d5841f28SBram Moolenaarendfunc 216d5841f28SBram Moolenaar 217d5841f28SBram Moolenaarfunc Test_set_ballooneval() 2186d91bcb4SBram Moolenaar CheckOption ballooneval 219d5841f28SBram Moolenaar 220d5841f28SBram Moolenaar let ballooneval_saved = &ballooneval 221d5841f28SBram Moolenaar 222d5841f28SBram Moolenaar set ballooneval& 223d5841f28SBram Moolenaar call assert_equal(0, &ballooneval) 224d5841f28SBram Moolenaar 225d5841f28SBram Moolenaar set ballooneval 226d5841f28SBram Moolenaar call assert_notequal(0, &ballooneval) 227d5841f28SBram Moolenaar 228d5841f28SBram Moolenaar set noballooneval 229d5841f28SBram Moolenaar call assert_equal(0, &ballooneval) 230d5841f28SBram Moolenaar 231d5841f28SBram Moolenaar let &ballooneval = ballooneval_saved 232d5841f28SBram Moolenaarendfunc 233d5841f28SBram Moolenaar 234d5841f28SBram Moolenaarfunc Test_set_balloonexpr() 2356d91bcb4SBram Moolenaar CheckOption balloonexpr 236d5841f28SBram Moolenaar 237d5841f28SBram Moolenaar let balloonexpr_saved = &balloonexpr 238d5841f28SBram Moolenaar 239d5841f28SBram Moolenaar " Default value 240d5841f28SBram Moolenaar set balloonexpr& 241d5841f28SBram Moolenaar call assert_equal('', &balloonexpr) 242d5841f28SBram Moolenaar 243d5841f28SBram Moolenaar " User-defined function 244d5841f28SBram Moolenaar new 245d5841f28SBram Moolenaar func MyBalloonExpr() 246d5841f28SBram Moolenaar return 'Cursor is at line ' . v:beval_lnum . 247d5841f28SBram Moolenaar \', column ' . v:beval_col . 248d5841f28SBram Moolenaar \ ' of file ' . bufname(v:beval_bufnr) . 249d5841f28SBram Moolenaar \ ' on word "' . v:beval_text . '"' . 250d5841f28SBram Moolenaar \ ' in window ' . v:beval_winid . ' (#' . v:beval_winnr . ')' 251d5841f28SBram Moolenaar endfunc 252d5841f28SBram Moolenaar setl balloonexpr=MyBalloonExpr() 253d5841f28SBram Moolenaar setl ballooneval 254d5841f28SBram Moolenaar call assert_equal('MyBalloonExpr()', &balloonexpr) 255d5841f28SBram Moolenaar " TODO Read non-empty text, place the pointer at a character of a word, 256027df2a7SBram Moolenaar " and check if the content of the balloon is the same as what is expected. 257d5841f28SBram Moolenaar " Also, check if textlock works as expected. 258d5841f28SBram Moolenaar setl balloonexpr& 259d5841f28SBram Moolenaar call assert_equal('', &balloonexpr) 260d5841f28SBram Moolenaar delfunc MyBalloonExpr 261d5841f28SBram Moolenaar bwipe! 262d5841f28SBram Moolenaar 263d5841f28SBram Moolenaar " Multiline support 264d5841f28SBram Moolenaar if has('balloon_multiline') 265d5841f28SBram Moolenaar " Multiline balloon using NL 266d5841f28SBram Moolenaar new 267d5841f28SBram Moolenaar func MyBalloonFuncForMultilineUsingNL() 268d5841f28SBram Moolenaar return "Multiline\nSuppported\nBalloon\nusing NL" 269d5841f28SBram Moolenaar endfunc 270d5841f28SBram Moolenaar setl balloonexpr=MyBalloonFuncForMultilineUsingNL() 271d5841f28SBram Moolenaar setl ballooneval 272d5841f28SBram Moolenaar call assert_equal('MyBalloonFuncForMultilineUsingNL()', &balloonexpr) 273d5841f28SBram Moolenaar " TODO Read non-empty text, place the pointer at a character of a word, 274027df2a7SBram Moolenaar " and check if the content of the balloon is the same as what is 275d5841f28SBram Moolenaar " expected. Also, check if textlock works as expected. 276d5841f28SBram Moolenaar setl balloonexpr& 277d5841f28SBram Moolenaar delfunc MyBalloonFuncForMultilineUsingNL 278d5841f28SBram Moolenaar bwipe! 279d5841f28SBram Moolenaar 280d5841f28SBram Moolenaar " Multiline balloon using List 281d5841f28SBram Moolenaar new 282d5841f28SBram Moolenaar func MyBalloonFuncForMultilineUsingList() 283d5841f28SBram Moolenaar return [ 'Multiline', 'Suppported', 'Balloon', 'using List' ] 284d5841f28SBram Moolenaar endfunc 285d5841f28SBram Moolenaar setl balloonexpr=MyBalloonFuncForMultilineUsingList() 286d5841f28SBram Moolenaar setl ballooneval 287d5841f28SBram Moolenaar call assert_equal('MyBalloonFuncForMultilineUsingList()', &balloonexpr) 288d5841f28SBram Moolenaar " TODO Read non-empty text, place the pointer at a character of a word, 289027df2a7SBram Moolenaar " and check if the content of the balloon is the same as what is 290d5841f28SBram Moolenaar " expected. Also, check if textlock works as expected. 291d5841f28SBram Moolenaar setl balloonexpr& 292d5841f28SBram Moolenaar delfunc MyBalloonFuncForMultilineUsingList 293d5841f28SBram Moolenaar bwipe! 294d5841f28SBram Moolenaar endif 295d5841f28SBram Moolenaar 296d5841f28SBram Moolenaar let &balloonexpr = balloonexpr_saved 297d5841f28SBram Moolenaarendfunc 298d5841f28SBram Moolenaar 2998774845cSBram Moolenaar" Invalid arguments are tested with test_options in conjunction with segfaults 3008774845cSBram Moolenaar" caused by them (Patch 8.0.0357, 24922ec233). 3018774845cSBram Moolenaarfunc Test_set_guicursor() 3028774845cSBram Moolenaar let guicursor_saved = &guicursor 3038774845cSBram Moolenaar 3048774845cSBram Moolenaar let default = [ 3058774845cSBram Moolenaar \ "n-v-c:block-Cursor/lCursor", 3068774845cSBram Moolenaar \ "ve:ver35-Cursor", 3078774845cSBram Moolenaar \ "o:hor50-Cursor", 3088774845cSBram Moolenaar \ "i-ci:ver25-Cursor/lCursor", 3098774845cSBram Moolenaar \ "r-cr:hor20-Cursor/lCursor", 3108774845cSBram Moolenaar \ "sm:block-Cursor-blinkwait175-blinkoff150-blinkon175" 3118774845cSBram Moolenaar \ ] 3128774845cSBram Moolenaar 3138774845cSBram Moolenaar " Default Value 3148774845cSBram Moolenaar set guicursor& 3158774845cSBram Moolenaar call assert_equal(join(default, ','), &guicursor) 3168774845cSBram Moolenaar 3178774845cSBram Moolenaar " Argument List Example 1 3188774845cSBram Moolenaar let opt_list = copy(default) 3198774845cSBram Moolenaar let opt_list[0] = "n-c-v:block-nCursor" 3208774845cSBram Moolenaar exec "set guicursor=" . join(opt_list, ',') 3218774845cSBram Moolenaar call assert_equal(join(opt_list, ','), &guicursor) 3228774845cSBram Moolenaar unlet opt_list 3238774845cSBram Moolenaar 3248774845cSBram Moolenaar " Argument List Example 2 3258774845cSBram Moolenaar let opt_list = copy(default) 3268774845cSBram Moolenaar let opt_list[3] = "i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150" 3278774845cSBram Moolenaar exec "set guicursor=" . join(opt_list, ',') 3288774845cSBram Moolenaar call assert_equal(join(opt_list, ','), &guicursor) 3298774845cSBram Moolenaar unlet opt_list 3308774845cSBram Moolenaar 3318774845cSBram Moolenaar " 'a' Mode 3328774845cSBram Moolenaar set guicursor& 3338774845cSBram Moolenaar let &guicursor .= ',a:blinkon0' 3348774845cSBram Moolenaar call assert_equal(join(default, ',') . ",a:blinkon0", &guicursor) 3358774845cSBram Moolenaar 3368774845cSBram Moolenaar let &guicursor = guicursor_saved 3378774845cSBram Moolenaarendfunc 3388774845cSBram Moolenaar 33940bd5a15SBram Moolenaarfunc Test_set_guifont_errors() 34040bd5a15SBram Moolenaar if has('win32') 34140bd5a15SBram Moolenaar " Invalid font names are accepted in GTK GUI 34240bd5a15SBram Moolenaar call assert_fails('set guifont=xa1bc23d7f', 'E596:') 34340bd5a15SBram Moolenaar endif 34440bd5a15SBram Moolenaar 34540bd5a15SBram Moolenaar " This only works if 'renderoptions' exists and does not work for Windows XP 34640bd5a15SBram Moolenaar " and older. 34740bd5a15SBram Moolenaar if exists('+renderoptions') && windowsversion() !~ '^[345]\.' 34840bd5a15SBram Moolenaar " doing this four times used to cause a crash 34940bd5a15SBram Moolenaar set renderoptions=type:directx 35040bd5a15SBram Moolenaar for i in range(5) 35140bd5a15SBram Moolenaar set guifont= 35240bd5a15SBram Moolenaar endfor 35340bd5a15SBram Moolenaar set renderoptions= 35440bd5a15SBram Moolenaar for i in range(5) 35540bd5a15SBram Moolenaar set guifont= 35640bd5a15SBram Moolenaar endfor 35740bd5a15SBram Moolenaar endif 35840bd5a15SBram Moolenaarendfunc 35940bd5a15SBram Moolenaar 36043dded8cSBram Moolenaarfunc Test_set_guifont() 36140bd5a15SBram Moolenaar CheckX11BasedGui 3624e9dbc74SBram Moolenaar 3634e9dbc74SBram Moolenaar let guifont_saved = &guifont 36443dded8cSBram Moolenaar if has('xfontset') 36543dded8cSBram Moolenaar " Prevent 'guifontset' from canceling 'guifont'. 3664e9dbc74SBram Moolenaar let guifontset_saved = &guifontset 36743dded8cSBram Moolenaar set guifontset= 36843dded8cSBram Moolenaar endif 36943dded8cSBram Moolenaar 37040bd5a15SBram Moolenaar if has('gui_athena') || has('gui_motif') 37143dded8cSBram Moolenaar " Non-empty font list with invalid font names. 37243dded8cSBram Moolenaar " 37343dded8cSBram Moolenaar " This test is twofold: (1) It checks if the command fails as expected 37443dded8cSBram Moolenaar " when there are no loadable fonts found in the list. (2) It checks if 37543dded8cSBram Moolenaar " 'guifont' remains the same after the command loads none of the fonts 37643dded8cSBram Moolenaar " listed. 3774e9dbc74SBram Moolenaar let flist = &guifont 37843dded8cSBram Moolenaar call assert_fails('set guifont=-notexist1-*,-notexist2-*') 3794e9dbc74SBram Moolenaar call assert_equal(flist, &guifont) 38043dded8cSBram Moolenaar 38143dded8cSBram Moolenaar " Non-empty font list with a valid font name. Should pick up the first 38243dded8cSBram Moolenaar " valid font. 38343dded8cSBram Moolenaar set guifont=-notexist1-*,fixed,-notexist2-* 3848774845cSBram Moolenaar let pat = '\(fixed\)\|\(\c-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1\)' 3858774845cSBram Moolenaar call assert_match(pat, getfontname()) 38643dded8cSBram Moolenaar 38743dded8cSBram Moolenaar " Empty list. Should fallback to the built-in default. 38843dded8cSBram Moolenaar set guifont= 3898774845cSBram Moolenaar let pat = '\(7x13\)\|\(\c-Misc-Fixed-Medium-R-Normal--13-120-75-75-C-70-ISO8859-1\)' 3908774845cSBram Moolenaar call assert_match(pat, getfontname()) 39143dded8cSBram Moolenaar 39243dded8cSBram Moolenaar elseif has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 39343dded8cSBram Moolenaar " For GTK, what we refer to as 'font names' in our manual are actually 39443dded8cSBram Moolenaar " 'initial font patterns'. A valid font which matches the 'canonical font 39543dded8cSBram Moolenaar " pattern' constructed from a given 'initial pattern' is to be looked up 39643dded8cSBram Moolenaar " and loaded. That explains why the GTK GUIs appear to accept 'invalid 39743dded8cSBram Moolenaar " font names'. 39843dded8cSBram Moolenaar " 39943dded8cSBram Moolenaar " Non-empty list. Should always pick up the first element, no matter how 40043dded8cSBram Moolenaar " strange it is, as explained above. 40143dded8cSBram Moolenaar set guifont=(´・ω・`)\ 12,Courier\ 12 40243dded8cSBram Moolenaar call assert_equal('(´・ω・`) 12', getfontname()) 40343dded8cSBram Moolenaar 40443dded8cSBram Moolenaar " Empty list. Should fallback to the built-in default. 40543dded8cSBram Moolenaar set guifont= 40643dded8cSBram Moolenaar call assert_equal('Monospace 10', getfontname()) 40743dded8cSBram Moolenaar endif 40843dded8cSBram Moolenaar 40943dded8cSBram Moolenaar if has('xfontset') 4104e9dbc74SBram Moolenaar let &guifontset = guifontset_saved 41143dded8cSBram Moolenaar endif 4124e9dbc74SBram Moolenaar let &guifont = guifont_saved 41343dded8cSBram Moolenaarendfunc 41443dded8cSBram Moolenaar 41510434674SBram Moolenaarfunc Test_set_guifontset() 416ce90e36fSBram Moolenaar CheckFeature xfontset 4174e9dbc74SBram Moolenaar let skipped = '' 41810434674SBram Moolenaar 419ee4e0c1eSBram Moolenaar call assert_fails('set guifontset=*', 'E597:') 420ee4e0c1eSBram Moolenaar 4214e9dbc74SBram Moolenaar let ctype_saved = v:ctype 4224e9dbc74SBram Moolenaar 4234e9dbc74SBram Moolenaar " First, since XCreateFontSet(3) is very sensitive to locale, fonts must 4244e9dbc74SBram Moolenaar " be chosen meticulously. 4254e9dbc74SBram Moolenaar let font_head = '-misc-fixed-medium-r-normal--14' 4264e9dbc74SBram Moolenaar 4274e9dbc74SBram Moolenaar let font_aw70 = font_head . '-130-75-75-c-70' 4284e9dbc74SBram Moolenaar let font_aw140 = font_head . '-130-75-75-c-140' 4294e9dbc74SBram Moolenaar 4304e9dbc74SBram Moolenaar let font_jisx0201 = font_aw70 . '-jisx0201.1976-0' 4314e9dbc74SBram Moolenaar let font_jisx0208 = font_aw140 . '-jisx0208.1983-0' 4324e9dbc74SBram Moolenaar 4334e9dbc74SBram Moolenaar let full_XLFDs = join([ font_jisx0208, font_jisx0201 ], ',') 4344e9dbc74SBram Moolenaar let short_XLFDs = join([ font_aw140, font_aw70 ], ',') 4354e9dbc74SBram Moolenaar let singleton = font_head . '-*' 4364e9dbc74SBram Moolenaar let aliases = 'k14,r14' 4374e9dbc74SBram Moolenaar 4384e9dbc74SBram Moolenaar " Second, among 'locales', look up such a locale that gets 'set 4394e9dbc74SBram Moolenaar " guifontset=' to work successfully with every fontset specified with 4404e9dbc74SBram Moolenaar " 'fontsets'. 4414e9dbc74SBram Moolenaar let locales = [ 'ja_JP.UTF-8', 'ja_JP.eucJP', 'ja_JP.SJIS' ] 4424e9dbc74SBram Moolenaar let fontsets = [ full_XLFDs, short_XLFDs, singleton, aliases ] 4434e9dbc74SBram Moolenaar 4444e9dbc74SBram Moolenaar let feasible = 0 4454e9dbc74SBram Moolenaar for locale in locales 4464e9dbc74SBram Moolenaar try 4474e9dbc74SBram Moolenaar exec 'language ctype' locale 4484e9dbc74SBram Moolenaar catch /^Vim\%((\a\+)\)\=:E197/ 4494e9dbc74SBram Moolenaar continue 4504e9dbc74SBram Moolenaar endtry 4514e9dbc74SBram Moolenaar let done = 0 4524e9dbc74SBram Moolenaar for fontset in fontsets 4534e9dbc74SBram Moolenaar try 4544e9dbc74SBram Moolenaar exec 'set guifontset=' . fontset 4554e9dbc74SBram Moolenaar catch /^Vim\%((\a\+)\)\=:E\%(250\|252\|234\|597\|598\)/ 4564e9dbc74SBram Moolenaar break 4574e9dbc74SBram Moolenaar endtry 4584e9dbc74SBram Moolenaar let done += 1 4594e9dbc74SBram Moolenaar endfor 4604e9dbc74SBram Moolenaar if done == len(fontsets) 4614e9dbc74SBram Moolenaar let feasible = 1 4624e9dbc74SBram Moolenaar break 4634e9dbc74SBram Moolenaar endif 4644e9dbc74SBram Moolenaar endfor 4654e9dbc74SBram Moolenaar 4664e9dbc74SBram Moolenaar " Third, give a set of tests if it is found feasible. 4674e9dbc74SBram Moolenaar if !feasible 4688be2fbb6SBram Moolenaar let skipped = g:not_hosted 4694e9dbc74SBram Moolenaar else 4704e9dbc74SBram Moolenaar " N.B. 'v:ctype' has already been set to an appropriate value in the 4714e9dbc74SBram Moolenaar " previous loop. 4724e9dbc74SBram Moolenaar for fontset in fontsets 4734e9dbc74SBram Moolenaar exec 'set guifontset=' . fontset 4744e9dbc74SBram Moolenaar call assert_equal(fontset, &guifontset) 4754e9dbc74SBram Moolenaar endfor 47610434674SBram Moolenaar endif 47710434674SBram Moolenaar 4784e9dbc74SBram Moolenaar " Finally, restore ctype. 4794e9dbc74SBram Moolenaar exec 'language ctype' ctype_saved 4804e9dbc74SBram Moolenaar 4814e9dbc74SBram Moolenaar if !empty(skipped) 4824e9dbc74SBram Moolenaar throw skipped 48310434674SBram Moolenaar endif 48410434674SBram Moolenaarendfunc 48510434674SBram Moolenaar 48610434674SBram Moolenaarfunc Test_set_guifontwide() 48740bd5a15SBram Moolenaar CheckX11BasedGui 48810434674SBram Moolenaar 48940bd5a15SBram Moolenaar call assert_fails('set guifontwide=*', 'E533:') 49040bd5a15SBram Moolenaar 49140bd5a15SBram Moolenaar if has('gui_gtk') 4924e9dbc74SBram Moolenaar let guifont_saved = &guifont 4934e9dbc74SBram Moolenaar let guifontwide_saved = &guifontwide 49410434674SBram Moolenaar 4954e9dbc74SBram Moolenaar let fc_match = exepath('fc-match') 4964e9dbc74SBram Moolenaar if empty(fc_match) 4978be2fbb6SBram Moolenaar let skipped = g:not_hosted 49810434674SBram Moolenaar else 4994e9dbc74SBram Moolenaar let &guifont = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=en') 5004e9dbc74SBram Moolenaar let wide = system('fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=ja') 5014e9dbc74SBram Moolenaar exec 'set guifontwide=' . fnameescape(wide) 5024e9dbc74SBram Moolenaar call assert_equal(wide, &guifontwide) 50310434674SBram Moolenaar endif 50410434674SBram Moolenaar 5054e9dbc74SBram Moolenaar let &guifontwide = guifontwide_saved 5064e9dbc74SBram Moolenaar let &guifont = guifont_saved 50710434674SBram Moolenaar 50810434674SBram Moolenaar elseif has('gui_athena') || has('gui_motif') 50910434674SBram Moolenaar " guifontwide is premised upon the xfontset feature. 5104e9dbc74SBram Moolenaar if !has('xfontset') 5118be2fbb6SBram Moolenaar let skipped = g:not_supported . 'xfontset' 5124e9dbc74SBram Moolenaar else 5134e9dbc74SBram Moolenaar let encoding_saved = &encoding 5144e9dbc74SBram Moolenaar let guifont_saved = &guifont 5154e9dbc74SBram Moolenaar let guifontset_saved = &guifontset 5164e9dbc74SBram Moolenaar let guifontwide_saved = &guifontwide 51710434674SBram Moolenaar 5184e9dbc74SBram Moolenaar let nfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1' 5194e9dbc74SBram Moolenaar let wfont = '-misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1' 52010434674SBram Moolenaar 52110434674SBram Moolenaar set encoding=utf-8 52210434674SBram Moolenaar 52310434674SBram Moolenaar " Case 1: guifontset is empty 52410434674SBram Moolenaar set guifontset= 52510434674SBram Moolenaar 52610434674SBram Moolenaar " Case 1-1: Automatic selection 52710434674SBram Moolenaar set guifontwide= 5284e9dbc74SBram Moolenaar exec 'set guifont=' . nfont 5294e9dbc74SBram Moolenaar call assert_equal(wfont, &guifontwide) 53010434674SBram Moolenaar 53110434674SBram Moolenaar " Case 1-2: Manual selection 5324e9dbc74SBram Moolenaar exec 'set guifontwide=' . wfont 5334e9dbc74SBram Moolenaar exec 'set guifont=' . nfont 5344e9dbc74SBram Moolenaar call assert_equal(wfont, &guifontwide) 53510434674SBram Moolenaar 53610434674SBram Moolenaar " Case 2: guifontset is invalid 53710434674SBram Moolenaar try 53810434674SBram Moolenaar set guifontset=-*-notexist-* 53937175409SBram Moolenaar call assert_report("'set guifontset=-*-notexist-*' should have failed") 54010434674SBram Moolenaar catch 541e2e4075fSBram Moolenaar call assert_exception('E598:') 54210434674SBram Moolenaar endtry 54310434674SBram Moolenaar " Set it to an invalid value brutally for preparation. 54410434674SBram Moolenaar let &guifontset = '-*-notexist-*' 54510434674SBram Moolenaar 54610434674SBram Moolenaar " Case 2-1: Automatic selection 54710434674SBram Moolenaar set guifontwide= 5484e9dbc74SBram Moolenaar exec 'set guifont=' . nfont 5494e9dbc74SBram Moolenaar call assert_equal(wfont, &guifontwide) 55010434674SBram Moolenaar 55110434674SBram Moolenaar " Case 2-2: Manual selection 5524e9dbc74SBram Moolenaar exec 'set guifontwide=' . wfont 5534e9dbc74SBram Moolenaar exec 'set guifont=' . nfont 5544e9dbc74SBram Moolenaar call assert_equal(wfont, &guifontwide) 55510434674SBram Moolenaar 5564e9dbc74SBram Moolenaar let &guifontwide = guifontwide_saved 5574e9dbc74SBram Moolenaar let &guifontset = guifontset_saved 5584e9dbc74SBram Moolenaar let &guifont = guifont_saved 5594e9dbc74SBram Moolenaar let &encoding = encoding_saved 56010434674SBram Moolenaar endif 56110434674SBram Moolenaar endif 56210434674SBram Moolenaarendfunc 56310434674SBram Moolenaar 5644eeedc09SDusan Popovicfunc Test_set_guiligatures() 56540bd5a15SBram Moolenaar CheckX11BasedGui 5664eeedc09SDusan Popovic 5674eeedc09SDusan Popovic if has('gui_gtk') || has('gui_gtk2') || has('gui_gnome') || has('gui_gtk3') 5684eeedc09SDusan Popovic " Try correct value 5694eeedc09SDusan Popovic set guiligatures=<>=ab 5704eeedc09SDusan Popovic call assert_equal("<>=ab", &guiligatures) 5714eeedc09SDusan Popovic " Try to throw error 5724eeedc09SDusan Popovic try 5734eeedc09SDusan Popovic set guiligatures=<>=šab 5744eeedc09SDusan Popovic call assert_report("'set guiligatures=<>=šab should have failed") 5754eeedc09SDusan Popovic catch 5764eeedc09SDusan Popovic call assert_exception('E1243:') 5774eeedc09SDusan Popovic endtry 5784eeedc09SDusan Popovic endif 5794eeedc09SDusan Popovicendfunc 5804eeedc09SDusan Popovic 5818be2fbb6SBram Moolenaarfunc Test_set_guiheadroom() 58240bd5a15SBram Moolenaar CheckX11BasedGui 5838be2fbb6SBram Moolenaar 5848be2fbb6SBram Moolenaar " Since this script is to be read together with '-U NONE', the default 5858be2fbb6SBram Moolenaar " value must be preserved. 5868be2fbb6SBram Moolenaar call assert_equal(50, &guiheadroom) 5878be2fbb6SBram Moolenaarendfunc 5888be2fbb6SBram Moolenaar 5898774845cSBram Moolenaarfunc Test_set_guioptions() 5908774845cSBram Moolenaar let guioptions_saved = &guioptions 5918774845cSBram Moolenaar let duration = '200m' 5928774845cSBram Moolenaar 5938774845cSBram Moolenaar if has('win32') 5948774845cSBram Moolenaar " Default Value 5958774845cSBram Moolenaar set guioptions& 5968774845cSBram Moolenaar call assert_equal('egmrLtT', &guioptions) 5978774845cSBram Moolenaar 5988774845cSBram Moolenaar else 5998774845cSBram Moolenaar " Default Value 6008774845cSBram Moolenaar set guioptions& 6018774845cSBram Moolenaar call assert_equal('aegimrLtT', &guioptions) 6028774845cSBram Moolenaar 6038774845cSBram Moolenaar " To activate scrollbars of type 'L' or 'R'. 6048774845cSBram Moolenaar wincmd v 6058774845cSBram Moolenaar redraw! 6068774845cSBram Moolenaar 6078774845cSBram Moolenaar " Remove all default GUI ornaments 6088774845cSBram Moolenaar set guioptions-=T 6098774845cSBram Moolenaar exec 'sleep' . duration 6108774845cSBram Moolenaar call assert_equal('aegimrLt', &guioptions) 6118774845cSBram Moolenaar set guioptions-=t 6128774845cSBram Moolenaar exec 'sleep' . duration 6138774845cSBram Moolenaar call assert_equal('aegimrL', &guioptions) 6148774845cSBram Moolenaar set guioptions-=L 6158774845cSBram Moolenaar exec 'sleep' . duration 6168774845cSBram Moolenaar call assert_equal('aegimr', &guioptions) 6178774845cSBram Moolenaar set guioptions-=r 6188774845cSBram Moolenaar exec 'sleep' . duration 6198774845cSBram Moolenaar call assert_equal('aegim', &guioptions) 6208774845cSBram Moolenaar set guioptions-=m 6218774845cSBram Moolenaar exec 'sleep' . duration 6228774845cSBram Moolenaar call assert_equal('aegi', &guioptions) 6238774845cSBram Moolenaar 6248774845cSBram Moolenaar " Try non-default GUI ornaments 6258774845cSBram Moolenaar set guioptions+=l 6268774845cSBram Moolenaar exec 'sleep' . duration 6278774845cSBram Moolenaar call assert_equal('aegil', &guioptions) 6288774845cSBram Moolenaar set guioptions-=l 6298774845cSBram Moolenaar exec 'sleep' . duration 6308774845cSBram Moolenaar call assert_equal('aegi', &guioptions) 6318774845cSBram Moolenaar 6328774845cSBram Moolenaar set guioptions+=R 6338774845cSBram Moolenaar exec 'sleep' . duration 6348774845cSBram Moolenaar call assert_equal('aegiR', &guioptions) 6358774845cSBram Moolenaar set guioptions-=R 6368774845cSBram Moolenaar exec 'sleep' . duration 6378774845cSBram Moolenaar call assert_equal('aegi', &guioptions) 6388774845cSBram Moolenaar 6398774845cSBram Moolenaar set guioptions+=b 6408774845cSBram Moolenaar exec 'sleep' . duration 6418774845cSBram Moolenaar call assert_equal('aegib', &guioptions) 6428774845cSBram Moolenaar set guioptions+=h 6438774845cSBram Moolenaar exec 'sleep' . duration 6448774845cSBram Moolenaar call assert_equal('aegibh', &guioptions) 6458774845cSBram Moolenaar set guioptions-=h 6468774845cSBram Moolenaar exec 'sleep' . duration 6478774845cSBram Moolenaar call assert_equal('aegib', &guioptions) 6488774845cSBram Moolenaar set guioptions-=b 6498774845cSBram Moolenaar exec 'sleep' . duration 6508774845cSBram Moolenaar call assert_equal('aegi', &guioptions) 6518774845cSBram Moolenaar 6528774845cSBram Moolenaar set guioptions+=v 6538774845cSBram Moolenaar exec 'sleep' . duration 6548774845cSBram Moolenaar call assert_equal('aegiv', &guioptions) 6558774845cSBram Moolenaar set guioptions-=v 6568774845cSBram Moolenaar exec 'sleep' . duration 6578774845cSBram Moolenaar call assert_equal('aegi', &guioptions) 6588774845cSBram Moolenaar 6598774845cSBram Moolenaar if has('gui_motif') 6608774845cSBram Moolenaar set guioptions+=F 6618774845cSBram Moolenaar exec 'sleep' . duration 6628774845cSBram Moolenaar call assert_equal('aegiF', &guioptions) 6638774845cSBram Moolenaar set guioptions-=F 6648774845cSBram Moolenaar exec 'sleep' . duration 6658774845cSBram Moolenaar call assert_equal('aegi', &guioptions) 6668774845cSBram Moolenaar endif 6678774845cSBram Moolenaar 66850bf7ce0SBram Moolenaar if has('gui_gtk3') 66950bf7ce0SBram Moolenaar set guioptions+=d 67050bf7ce0SBram Moolenaar exec 'sleep' . duration 67150bf7ce0SBram Moolenaar call assert_equal('aegid', &guioptions) 67250bf7ce0SBram Moolenaar set guioptions-=d 67350bf7ce0SBram Moolenaar exec 'sleep' . duration 67450bf7ce0SBram Moolenaar call assert_equal('aegi', &guioptions) 67550bf7ce0SBram Moolenaar endif 67650bf7ce0SBram Moolenaar 6778774845cSBram Moolenaar " Restore GUI ornaments to the default state. 6788774845cSBram Moolenaar set guioptions+=m 6798774845cSBram Moolenaar exec 'sleep' . duration 6808774845cSBram Moolenaar call assert_equal('aegim', &guioptions) 6818774845cSBram Moolenaar set guioptions+=r 6828774845cSBram Moolenaar exec 'sleep' . duration 6838774845cSBram Moolenaar call assert_equal('aegimr', &guioptions) 6848774845cSBram Moolenaar set guioptions+=L 6858774845cSBram Moolenaar exec 'sleep' . duration 6868774845cSBram Moolenaar call assert_equal('aegimrL', &guioptions) 6878774845cSBram Moolenaar set guioptions+=t 6888774845cSBram Moolenaar exec 'sleep' . duration 6898774845cSBram Moolenaar call assert_equal('aegimrLt', &guioptions) 6908774845cSBram Moolenaar set guioptions+=T 6918774845cSBram Moolenaar exec 'sleep' . duration 6928774845cSBram Moolenaar call assert_equal("aegimrLtT", &guioptions) 6938774845cSBram Moolenaar 6948774845cSBram Moolenaar wincmd o 6958774845cSBram Moolenaar redraw! 6968774845cSBram Moolenaar endif 6978774845cSBram Moolenaar 6988774845cSBram Moolenaar let &guioptions = guioptions_saved 6998774845cSBram Moolenaarendfunc 7008774845cSBram Moolenaar 701ab186737SBram Moolenaarfunc Test_scrollbars() 702ab186737SBram Moolenaar new 703ab186737SBram Moolenaar " buffer with 200 lines 704ab186737SBram Moolenaar call setline(1, repeat(['one', 'two'], 100)) 705ab186737SBram Moolenaar set guioptions+=rlb 706ab186737SBram Moolenaar 707ab186737SBram Moolenaar " scroll to move line 11 at top, moves the cursor there 708ce90e36fSBram Moolenaar eval 10->test_scrollbar('left', 0) 709ab186737SBram Moolenaar redraw 710ab186737SBram Moolenaar call assert_equal(1, winline()) 711ab186737SBram Moolenaar call assert_equal(11, line('.')) 712ab186737SBram Moolenaar 713ab186737SBram Moolenaar " scroll to move line 1 at top, cursor stays in line 11 714ab186737SBram Moolenaar call test_scrollbar('right', 0, 0) 715ab186737SBram Moolenaar redraw 716ab186737SBram Moolenaar call assert_equal(11, winline()) 717ab186737SBram Moolenaar call assert_equal(11, line('.')) 718ab186737SBram Moolenaar 719ab186737SBram Moolenaar set nowrap 720ab186737SBram Moolenaar call setline(11, repeat('x', 150)) 721ab186737SBram Moolenaar redraw 722ab186737SBram Moolenaar call assert_equal(1, wincol()) 723f6d50f1dSBram Moolenaar set number 724f6d50f1dSBram Moolenaar redraw 725f6d50f1dSBram Moolenaar call assert_equal(5, wincol()) 726f6d50f1dSBram Moolenaar set nonumber 727f6d50f1dSBram Moolenaar redraw 728ab186737SBram Moolenaar call assert_equal(1, col('.')) 729ab186737SBram Moolenaar 730ab186737SBram Moolenaar " scroll to character 11, cursor is moved 731ab186737SBram Moolenaar call test_scrollbar('hor', 10, 0) 732ab186737SBram Moolenaar redraw 733ab186737SBram Moolenaar call assert_equal(1, wincol()) 734f6d50f1dSBram Moolenaar set number 735f6d50f1dSBram Moolenaar redraw 736f6d50f1dSBram Moolenaar call assert_equal(5, wincol()) 737f6d50f1dSBram Moolenaar set nonumber 738f6d50f1dSBram Moolenaar redraw 739ab186737SBram Moolenaar call assert_equal(11, col('.')) 740ab186737SBram Moolenaar 741ab186737SBram Moolenaar set guioptions& 742ab186737SBram Moolenaar set wrap& 743ab186737SBram Moolenaar bwipe! 744ab186737SBram Moolenaarendfunc 745ab186737SBram Moolenaar 74647cf1cc2SBram Moolenaarfunc Test_menu() 7475a4c3082SBram Moolenaar CheckFeature quickfix 7485a4c3082SBram Moolenaar 74947cf1cc2SBram Moolenaar " Check Help menu exists 75047cf1cc2SBram Moolenaar let help_menu = execute('menu Help') 75147cf1cc2SBram Moolenaar call assert_match('Overview', help_menu) 75247cf1cc2SBram Moolenaar 75347cf1cc2SBram Moolenaar " Check Help menu works 75447cf1cc2SBram Moolenaar emenu Help.Overview 75547cf1cc2SBram Moolenaar call assert_equal('help', &buftype) 75647cf1cc2SBram Moolenaar close 75747cf1cc2SBram Moolenaar 75847cf1cc2SBram Moolenaar " Check deleting menu doesn't cause trouble. 75947cf1cc2SBram Moolenaar aunmenu Help 760b45cd36bSBram Moolenaar if exists(':tlmenu') 761b45cd36bSBram Moolenaar tlunmenu Help 762b45cd36bSBram Moolenaar endif 76347cf1cc2SBram Moolenaar call assert_fails('menu Help', 'E329:') 76447cf1cc2SBram Moolenaarendfunc 76547cf1cc2SBram Moolenaar 7668774845cSBram Moolenaarfunc Test_set_guipty() 7678774845cSBram Moolenaar let guipty_saved = &guipty 7688774845cSBram Moolenaar 7698774845cSBram Moolenaar " Default Value 7708774845cSBram Moolenaar set guipty& 7718774845cSBram Moolenaar call assert_equal(1, &guipty) 7728774845cSBram Moolenaar 7738774845cSBram Moolenaar set noguipty 7748774845cSBram Moolenaar call assert_equal(0, &guipty) 7758774845cSBram Moolenaar 7768774845cSBram Moolenaar let &guipty = guipty_saved 7776f785749SBram Moolenaarendfunc 77813c724fbSBram Moolenaar 779c701f320SBram Moolenaarfunc Test_encoding_conversion() 780c701f320SBram Moolenaar " GTK supports conversion between 'encoding' and "utf-8" 7816d91bcb4SBram Moolenaar CheckFeature gui_gtk 782c701f320SBram Moolenaar let encoding_saved = &encoding 783c701f320SBram Moolenaar set encoding=latin1 784c701f320SBram Moolenaar 785c701f320SBram Moolenaar " would be nice if we could take a screenshot 786c701f320SBram Moolenaar intro 787c701f320SBram Moolenaar " sets the window title 788c701f320SBram Moolenaar edit SomeFile 789c701f320SBram Moolenaar 790c701f320SBram Moolenaar let &encoding = encoding_saved 791c701f320SBram Moolenaarendfunc 792c701f320SBram Moolenaar 793877e9577SBram Moolenaarfunc Test_shell_command() 794877e9577SBram Moolenaar new 7959d5b876dSBram Moolenaar r !echo hello 7969d5b876dSBram Moolenaar call assert_equal('hello', substitute(getline(2), '\W', '', 'g')) 797877e9577SBram Moolenaar bwipe! 798877e9577SBram Moolenaarendfunc 79913c724fbSBram Moolenaar 8008774845cSBram Moolenaarfunc Test_syntax_colortest() 8018774845cSBram Moolenaar runtime syntax/colortest.vim 8028774845cSBram Moolenaar redraw! 8038774845cSBram Moolenaar sleep 200m 8048774845cSBram Moolenaar bwipe! 8058774845cSBram Moolenaarendfunc 8068774845cSBram Moolenaar 8078774845cSBram Moolenaarfunc Test_set_term() 8088774845cSBram Moolenaar " It's enough to check the current value since setting 'term' to anything 8098774845cSBram Moolenaar " other than builtin_gui makes no sense at all. 8108774845cSBram Moolenaar call assert_equal('builtin_gui', &term) 811ee4e0c1eSBram Moolenaar call assert_fails('set term=xterm', 'E530:') 8128774845cSBram Moolenaarendfunc 8138774845cSBram Moolenaar 81413c724fbSBram Moolenaarfunc Test_windowid_variable() 8158be2fbb6SBram Moolenaar if g:x11_based_gui || has('win32') 81613c724fbSBram Moolenaar call assert_true(v:windowid > 0) 81713c724fbSBram Moolenaar else 81813c724fbSBram Moolenaar call assert_equal(0, v:windowid) 81913c724fbSBram Moolenaar endif 8206f785749SBram Moolenaarendfunc 821248be5c5SBram Moolenaar 822248be5c5SBram Moolenaar" Test "vim -g" and also the GUIEnter autocommand. 823248be5c5SBram Moolenaarfunc Test_gui_dash_g() 824248be5c5SBram Moolenaar let cmd = GetVimCommand('Xscriptgui') 825248be5c5SBram Moolenaar call writefile([""], "Xtestgui") 826e7eb9270SBram Moolenaar let lines =<< trim END 827e7eb9270SBram Moolenaar au GUIEnter * call writefile(["insertmode: " . &insertmode], "Xtestgui") 828e7eb9270SBram Moolenaar au GUIEnter * qall 829e7eb9270SBram Moolenaar END 830e7eb9270SBram Moolenaar call writefile(lines, 'Xscriptgui') 831248be5c5SBram Moolenaar call system(cmd . ' -g') 832248be5c5SBram Moolenaar call WaitForAssert({-> assert_equal(['insertmode: 0'], readfile('Xtestgui'))}) 833248be5c5SBram Moolenaar 834248be5c5SBram Moolenaar call delete('Xscriptgui') 835248be5c5SBram Moolenaar call delete('Xtestgui') 836248be5c5SBram Moolenaarendfunc 837248be5c5SBram Moolenaar 838248be5c5SBram Moolenaar" Test "vim -7" and also the GUIEnter autocommand. 839248be5c5SBram Moolenaarfunc Test_gui_dash_y() 840248be5c5SBram Moolenaar let cmd = GetVimCommand('Xscriptgui') 841248be5c5SBram Moolenaar call writefile([""], "Xtestgui") 842e7eb9270SBram Moolenaar let lines =<< trim END 843e7eb9270SBram Moolenaar au GUIEnter * call writefile(["insertmode: " . &insertmode], "Xtestgui") 844e7eb9270SBram Moolenaar au GUIEnter * qall 845e7eb9270SBram Moolenaar END 846e7eb9270SBram Moolenaar call writefile(lines, 'Xscriptgui') 847248be5c5SBram Moolenaar call system(cmd . ' -y') 848248be5c5SBram Moolenaar call WaitForAssert({-> assert_equal(['insertmode: 1'], readfile('Xtestgui'))}) 849248be5c5SBram Moolenaar 850248be5c5SBram Moolenaar call delete('Xscriptgui') 851248be5c5SBram Moolenaar call delete('Xtestgui') 852248be5c5SBram Moolenaarendfunc 8530e05de46SBram Moolenaar 85491689ea8SBram Moolenaar" Test for "!" option in 'guioptions'. Use a terminal for running external 85591689ea8SBram Moolenaar" commands 85691689ea8SBram Moolenaarfunc Test_gui_run_cmd_in_terminal() 8574457e1d9SBram Moolenaar CheckFeature terminal 85891689ea8SBram Moolenaar let save_guioptions = &guioptions 85991689ea8SBram Moolenaar set guioptions+=! 86091689ea8SBram Moolenaar if has('win32') 86191689ea8SBram Moolenaar let cmd = 'type' 86291689ea8SBram Moolenaar else 86391689ea8SBram Moolenaar " assume all the other systems have a cat command 86491689ea8SBram Moolenaar let cmd = 'cat' 86591689ea8SBram Moolenaar endif 86698f1671cSBram Moolenaar exe "silent !" . cmd . " test_gui.vim" 86791689ea8SBram Moolenaar " TODO: how to check that the command ran in a separate terminal? 86891689ea8SBram Moolenaar " Maybe check for $TERM (dumb vs xterm) in the spawned shell? 86991689ea8SBram Moolenaar let &guioptions = save_guioptions 87091689ea8SBram Moolenaarendfunc 87191689ea8SBram Moolenaar 87246cd43bdSBram Moolenaarfunc Test_gui_recursive_mapping() 87346cd43bdSBram Moolenaar nmap ' <C-W> 87446cd43bdSBram Moolenaar nmap <C-W>a :let didit = 1<CR> 87546cd43bdSBram Moolenaar call feedkeys("'a", 'xt') 87646cd43bdSBram Moolenaar call assert_equal(1, didit) 87746cd43bdSBram Moolenaar 87846cd43bdSBram Moolenaar nunmap ' 87946cd43bdSBram Moolenaar nunmap <C-W>a 880f1e7449dSYegappan Lakshmananendfunc 881f1e7449dSYegappan Lakshmanan 882f1e7449dSYegappan Lakshmanan" Test GUI mouse events 883f1e7449dSYegappan Lakshmananfunc Test_gui_mouse_event() 884f1e7449dSYegappan Lakshmanan set mousemodel=extend 885f1e7449dSYegappan Lakshmanan call test_override('no_query_mouse', 1) 886f1e7449dSYegappan Lakshmanan new 887f1e7449dSYegappan Lakshmanan call setline(1, ['one two three', 'four five six']) 888f1e7449dSYegappan Lakshmanan 8897237cab8SYegappan Lakshmanan " place the cursor using left click in normal mode 890f1e7449dSYegappan Lakshmanan call cursor(1, 1) 891f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 2, 4, 0, 0) 892f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 2, 4, 0, 0) 893f1e7449dSYegappan Lakshmanan call feedkeys("\<Esc>", 'Lx!') 894f1e7449dSYegappan Lakshmanan call assert_equal([0, 2, 4, 0], getpos('.')) 895f1e7449dSYegappan Lakshmanan 896f1e7449dSYegappan Lakshmanan " select and yank a word 897f1e7449dSYegappan Lakshmanan let @" = '' 898f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 1, 9, 0, 0) 899f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 1, 9, 1, 0) 900f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 1, 9, 0, 0) 901f1e7449dSYegappan Lakshmanan call feedkeys("y", 'Lx!') 902f1e7449dSYegappan Lakshmanan call assert_equal('three', @") 903f1e7449dSYegappan Lakshmanan 904f1e7449dSYegappan Lakshmanan " create visual selection using right click 905f1e7449dSYegappan Lakshmanan let @" = '' 906f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 2, 6, 0, 0) 907f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 2, 6, 0, 0) 908f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(2, 2, 13, 0, 0) 909f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 2, 13, 0, 0) 910f1e7449dSYegappan Lakshmanan call feedkeys("y", 'Lx!') 911f1e7449dSYegappan Lakshmanan call assert_equal('five six', @") 912f1e7449dSYegappan Lakshmanan 913f1e7449dSYegappan Lakshmanan " paste using middle mouse button 914f1e7449dSYegappan Lakshmanan let @* = 'abc ' 915f1e7449dSYegappan Lakshmanan call feedkeys('""', 'Lx!') 916f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(1, 1, 9, 0, 0) 917f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 1, 9, 0, 0) 918f1e7449dSYegappan Lakshmanan call feedkeys("\<Esc>", 'Lx!') 919f1e7449dSYegappan Lakshmanan call assert_equal(['one two abc three', 'four five six'], getline(1, '$')) 920f1e7449dSYegappan Lakshmanan 921f1e7449dSYegappan Lakshmanan " extend visual selection using right click in visual mode 922f1e7449dSYegappan Lakshmanan let @" = '' 923f1e7449dSYegappan Lakshmanan call cursor(1, 1) 924f1e7449dSYegappan Lakshmanan call feedkeys('v', 'Lx!') 925f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(2, 1, 17, 0, 0) 926f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 1, 17, 0, 0) 927f1e7449dSYegappan Lakshmanan call feedkeys("y", 'Lx!') 928f1e7449dSYegappan Lakshmanan call assert_equal('one two abc three', @") 929f1e7449dSYegappan Lakshmanan 930f1e7449dSYegappan Lakshmanan " extend visual selection using mouse drag 931f1e7449dSYegappan Lakshmanan let @" = '' 932f1e7449dSYegappan Lakshmanan call cursor(1, 1) 933f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 2, 1, 0, 0) 934f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x43, 2, 9, 0, 0) 935f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x3, 2, 9, 0, 0) 936f1e7449dSYegappan Lakshmanan call feedkeys("y", 'Lx!') 937f1e7449dSYegappan Lakshmanan call assert_equal('four five', @") 938f1e7449dSYegappan Lakshmanan 939f1e7449dSYegappan Lakshmanan " select text by moving the mouse 940f1e7449dSYegappan Lakshmanan let @" = '' 941f1e7449dSYegappan Lakshmanan call cursor(1, 1) 942f1e7449dSYegappan Lakshmanan redraw! 943f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 1, 4, 0, 0) 944f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x700, 1, 9, 0, 0) 945f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x700, 1, 13, 0, 0) 946f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x3, 1, 13, 0, 0) 947f1e7449dSYegappan Lakshmanan call feedkeys("y", 'Lx!') 948f1e7449dSYegappan Lakshmanan call assert_equal(' two abc t', @") 949f1e7449dSYegappan Lakshmanan 950f1e7449dSYegappan Lakshmanan " Using mouse in insert mode 951f1e7449dSYegappan Lakshmanan call cursor(1, 1) 952f1e7449dSYegappan Lakshmanan call feedkeys('i', 't') 953f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 2, 11, 0, 0) 954f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 2, 11, 0, 0) 955f1e7449dSYegappan Lakshmanan call feedkeys("po\<Esc>", 'Lx!') 956f1e7449dSYegappan Lakshmanan call assert_equal(['one two abc three', 'four five posix'], getline(1, '$')) 957f1e7449dSYegappan Lakshmanan 958f1e7449dSYegappan Lakshmanan %d _ 959f1e7449dSYegappan Lakshmanan call setline(1, range(1, 100)) 960f1e7449dSYegappan Lakshmanan " scroll up 961f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x200, 2, 1, 0, 0) 962f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x200, 2, 1, 0, 0) 963f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x200, 2, 1, 0, 0) 964f1e7449dSYegappan Lakshmanan call feedkeys("H", 'Lx!') 965f1e7449dSYegappan Lakshmanan call assert_equal(10, line('.')) 966f1e7449dSYegappan Lakshmanan 967f1e7449dSYegappan Lakshmanan " scroll down 968f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x100, 2, 1, 0, 0) 969f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x100, 2, 1, 0, 0) 970f1e7449dSYegappan Lakshmanan call feedkeys("H", 'Lx!') 971f1e7449dSYegappan Lakshmanan call assert_equal(4, line('.')) 972f1e7449dSYegappan Lakshmanan 973f1e7449dSYegappan Lakshmanan %d _ 974f1e7449dSYegappan Lakshmanan set nowrap 975f1e7449dSYegappan Lakshmanan call setline(1, range(10)->join('')->repeat(10)) 976f1e7449dSYegappan Lakshmanan " scroll left 977f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x500, 1, 5, 0, 0) 978f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x500, 1, 10, 0, 0) 979f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x500, 1, 15, 0, 0) 980f1e7449dSYegappan Lakshmanan call feedkeys('g0', 'Lx!') 981f1e7449dSYegappan Lakshmanan call assert_equal(19, col('.')) 982f1e7449dSYegappan Lakshmanan 983f1e7449dSYegappan Lakshmanan " scroll right 984f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x600, 1, 15, 0, 0) 985f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0x600, 1, 10, 0, 0) 986f1e7449dSYegappan Lakshmanan call feedkeys('g0', 'Lx!') 987f1e7449dSYegappan Lakshmanan call assert_equal(7, col('.')) 988f1e7449dSYegappan Lakshmanan set wrap& 989f1e7449dSYegappan Lakshmanan 990f1e7449dSYegappan Lakshmanan %d _ 991f1e7449dSYegappan Lakshmanan call setline(1, repeat([repeat('a', 60)], 10)) 992f1e7449dSYegappan Lakshmanan 993f1e7449dSYegappan Lakshmanan " record various mouse events 994f1e7449dSYegappan Lakshmanan let mouseEventNames = [ 995f1e7449dSYegappan Lakshmanan \ 'LeftMouse', 'LeftRelease', '2-LeftMouse', '3-LeftMouse', 996f1e7449dSYegappan Lakshmanan \ 'S-LeftMouse', 'A-LeftMouse', 'C-LeftMouse', 'MiddleMouse', 997f1e7449dSYegappan Lakshmanan \ 'MiddleRelease', '2-MiddleMouse', '3-MiddleMouse', 998f1e7449dSYegappan Lakshmanan \ 'S-MiddleMouse', 'A-MiddleMouse', 'C-MiddleMouse', 999f1e7449dSYegappan Lakshmanan \ 'RightMouse', 'RightRelease', '2-RightMouse', 1000f1e7449dSYegappan Lakshmanan \ '3-RightMouse', 'S-RightMouse', 'A-RightMouse', 'C-RightMouse', 1001f1e7449dSYegappan Lakshmanan \ 'X1Mouse', 'S-X1Mouse', 'A-X1Mouse', 'C-X1Mouse', 'X2Mouse', 1002f1e7449dSYegappan Lakshmanan \ 'S-X2Mouse', 'A-X2Mouse', 'C-X2Mouse' 1003f1e7449dSYegappan Lakshmanan \ ] 1004f1e7449dSYegappan Lakshmanan let mouseEventCodes = map(copy(mouseEventNames), "'<' .. v:val .. '>'") 1005f1e7449dSYegappan Lakshmanan let g:events = [] 1006f1e7449dSYegappan Lakshmanan for e in mouseEventCodes 1007f1e7449dSYegappan Lakshmanan exe 'nnoremap ' .. e .. ' <Cmd>call add(g:events, "' .. 1008f1e7449dSYegappan Lakshmanan \ substitute(e, '[<>]', '', 'g') .. '")<CR>' 1009f1e7449dSYegappan Lakshmanan endfor 1010f1e7449dSYegappan Lakshmanan 1011f1e7449dSYegappan Lakshmanan " Test various mouse buttons (0 - Left, 1 - Middle, 2 - Right, 0x300 - X1, 1012f1e7449dSYegappan Lakshmanan " 0x300- X2) 1013f1e7449dSYegappan Lakshmanan for button in [0, 1, 2, 0x300, 0x400] 1014f1e7449dSYegappan Lakshmanan " Single click 1015f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 2, 5, 0, 0) 1016f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 2, 5, 0, 0) 1017f1e7449dSYegappan Lakshmanan 1018f1e7449dSYegappan Lakshmanan " Double/Triple click is supported by only the Left/Middle/Right mouse 1019f1e7449dSYegappan Lakshmanan " buttons 1020f1e7449dSYegappan Lakshmanan if button <= 2 1021f1e7449dSYegappan Lakshmanan " Double Click 1022f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 2, 5, 0, 0) 1023f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 2, 5, 1, 0) 1024f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 2, 5, 0, 0) 1025f1e7449dSYegappan Lakshmanan 1026f1e7449dSYegappan Lakshmanan " Triple Click 1027f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 2, 5, 0, 0) 1028f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 2, 5, 1, 0) 1029f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 2, 5, 1, 0) 1030f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 2, 5, 0, 0) 1031f1e7449dSYegappan Lakshmanan endif 1032f1e7449dSYegappan Lakshmanan 1033f1e7449dSYegappan Lakshmanan " Shift click 1034f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 3, 7, 0, 4) 1035f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 3, 7, 0, 4) 1036f1e7449dSYegappan Lakshmanan 1037f1e7449dSYegappan Lakshmanan " Alt click 1038f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 3, 7, 0, 8) 1039f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 3, 7, 0, 8) 1040f1e7449dSYegappan Lakshmanan 1041f1e7449dSYegappan Lakshmanan " Ctrl click 1042f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(button, 3, 7, 0, 16) 1043f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 3, 7, 0, 16) 1044f1e7449dSYegappan Lakshmanan 1045f1e7449dSYegappan Lakshmanan call feedkeys("\<Esc>", 'Lx!') 1046f1e7449dSYegappan Lakshmanan endfor 1047f1e7449dSYegappan Lakshmanan 1048f1e7449dSYegappan Lakshmanan call assert_equal(['LeftMouse', 'LeftRelease', 'LeftMouse', '2-LeftMouse', 1049f1e7449dSYegappan Lakshmanan \ 'LeftMouse', '2-LeftMouse', '3-LeftMouse', 'S-LeftMouse', 1050f1e7449dSYegappan Lakshmanan \ 'A-LeftMouse', 'C-LeftMouse', 'MiddleMouse', 'MiddleRelease', 1051f1e7449dSYegappan Lakshmanan \ 'MiddleMouse', '2-MiddleMouse', 'MiddleMouse', '2-MiddleMouse', 1052f1e7449dSYegappan Lakshmanan \ '3-MiddleMouse', 'S-MiddleMouse', 'A-MiddleMouse', 'C-MiddleMouse', 1053f1e7449dSYegappan Lakshmanan \ 'RightMouse', 'RightRelease', 'RightMouse', '2-RightMouse', 1054f1e7449dSYegappan Lakshmanan \ 'RightMouse', '2-RightMouse', '3-RightMouse', 'S-RightMouse', 1055f1e7449dSYegappan Lakshmanan \ 'A-RightMouse', 'C-RightMouse', 'X1Mouse', 'S-X1Mouse', 'A-X1Mouse', 1056f1e7449dSYegappan Lakshmanan \ 'C-X1Mouse', 'X2Mouse', 'S-X2Mouse', 'A-X2Mouse', 'C-X2Mouse'], 1057f1e7449dSYegappan Lakshmanan \ g:events) 1058f1e7449dSYegappan Lakshmanan 1059f1e7449dSYegappan Lakshmanan for e in mouseEventCodes 1060f1e7449dSYegappan Lakshmanan exe 'nunmap ' .. e 1061f1e7449dSYegappan Lakshmanan endfor 1062f1e7449dSYegappan Lakshmanan 1063f1e7449dSYegappan Lakshmanan " modeless selection 1064f1e7449dSYegappan Lakshmanan set mouse= 1065f1e7449dSYegappan Lakshmanan let save_guioptions = &guioptions 1066f1e7449dSYegappan Lakshmanan set guioptions+=A 1067f1e7449dSYegappan Lakshmanan %d _ 1068f1e7449dSYegappan Lakshmanan call setline(1, ['one two three', 'four five sixteen']) 1069f1e7449dSYegappan Lakshmanan call cursor(1, 1) 1070f1e7449dSYegappan Lakshmanan redraw! 1071f1e7449dSYegappan Lakshmanan " Double click should select the word and copy it to clipboard 1072f1e7449dSYegappan Lakshmanan let @* = '' 1073f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 2, 11, 0, 0) 1074f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(0, 2, 11, 1, 0) 1075f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 2, 11, 0, 0) 1076f1e7449dSYegappan Lakshmanan call feedkeys("\<Esc>", 'Lx!') 1077f1e7449dSYegappan Lakshmanan call assert_equal([0, 1, 1, 0], getpos('.')) 1078f1e7449dSYegappan Lakshmanan call assert_equal('sixteen', @*) 1079f1e7449dSYegappan Lakshmanan " Right click should extend the selection from cursor 1080f1e7449dSYegappan Lakshmanan call cursor(1, 6) 1081f1e7449dSYegappan Lakshmanan redraw! 1082f1e7449dSYegappan Lakshmanan let @* = '' 1083f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(2, 1, 11, 0, 0) 1084f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 1, 11, 0, 0) 1085f1e7449dSYegappan Lakshmanan call feedkeys("\<Esc>", 'Lx!') 1086f1e7449dSYegappan Lakshmanan call assert_equal([0, 1, 6, 0], getpos('.')) 1087f1e7449dSYegappan Lakshmanan call assert_equal('wo thr', @*) 1088f1e7449dSYegappan Lakshmanan " Middle click should paste the clipboard contents 1089f1e7449dSYegappan Lakshmanan call cursor(2, 1) 1090f1e7449dSYegappan Lakshmanan redraw! 1091f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(1, 1, 11, 0, 0) 1092f1e7449dSYegappan Lakshmanan call test_gui_mouse_event(3, 1, 11, 0, 0) 1093f1e7449dSYegappan Lakshmanan call feedkeys("\<Esc>", 'Lx!') 1094f1e7449dSYegappan Lakshmanan call assert_equal([0, 2, 7, 0], getpos('.')) 1095f1e7449dSYegappan Lakshmanan call assert_equal('wo thrfour five sixteen', getline(2)) 1096f1e7449dSYegappan Lakshmanan set mouse& 1097f1e7449dSYegappan Lakshmanan let &guioptions = save_guioptions 1098f1e7449dSYegappan Lakshmanan 10997237cab8SYegappan Lakshmanan " Test invalid parameters for test_gui_mouse_event() 110083494b4aSYegappan Lakshmanan call assert_fails('call test_gui_mouse_event("", 1, 2, 3, 4)', 'E1210:') 110183494b4aSYegappan Lakshmanan call assert_fails('call test_gui_mouse_event(0, "", 2, 3, 4)', 'E1210:') 110283494b4aSYegappan Lakshmanan call assert_fails('call test_gui_mouse_event(0, 1, "", 3, 4)', 'E1210:') 110383494b4aSYegappan Lakshmanan call assert_fails('call test_gui_mouse_event(0, 1, 2, "", 4)', 'E1210:') 110483494b4aSYegappan Lakshmanan call assert_fails('call test_gui_mouse_event(0, 1, 2, 3, "")', 'E1210:') 11057237cab8SYegappan Lakshmanan 1106f1e7449dSYegappan Lakshmanan bw! 1107f1e7449dSYegappan Lakshmanan call test_override('no_query_mouse', 0) 1108f1e7449dSYegappan Lakshmanan set mousemodel& 110946cd43bdSBram Moolenaarendfunc 111046cd43bdSBram Moolenaar 11117237cab8SYegappan Lakshmanan" Test for 'guitablabel' and 'guitabtooltip' options 11127237cab8SYegappan Lakshmananfunc TestGuiTabLabel() 11137237cab8SYegappan Lakshmanan call add(g:TabLabels, v:lnum + 100) 11147237cab8SYegappan Lakshmanan let bufnrlist = tabpagebuflist(v:lnum) 11157237cab8SYegappan Lakshmanan return bufname(bufnrlist[tabpagewinnr(v:lnum) - 1]) 11167237cab8SYegappan Lakshmananendfunc 11177237cab8SYegappan Lakshmanan 11187237cab8SYegappan Lakshmananfunc TestGuiTabToolTip() 11197237cab8SYegappan Lakshmanan call add(g:TabToolTips, v:lnum + 200) 11207237cab8SYegappan Lakshmanan let bufnrlist = tabpagebuflist(v:lnum) 11217237cab8SYegappan Lakshmanan return bufname(bufnrlist[tabpagewinnr(v:lnum) - 1]) 11227237cab8SYegappan Lakshmananendfunc 11237237cab8SYegappan Lakshmanan 11247237cab8SYegappan Lakshmananfunc Test_gui_tablabel_tooltip() 1125fb773a3eSBram Moolenaar CheckNotFeature gui_athena 1126fb773a3eSBram Moolenaar 11277237cab8SYegappan Lakshmanan %bw! 11287237cab8SYegappan Lakshmanan " Removing the tabline at the end of this test, reduces the window height by 11297237cab8SYegappan Lakshmanan " one. Save and restore it after the test. 11307237cab8SYegappan Lakshmanan let save_lines = &lines 11317237cab8SYegappan Lakshmanan edit one 11327237cab8SYegappan Lakshmanan set modified 11337237cab8SYegappan Lakshmanan tabnew two 11347237cab8SYegappan Lakshmanan set modified 11357237cab8SYegappan Lakshmanan tabnew three 11367237cab8SYegappan Lakshmanan set modified 11377237cab8SYegappan Lakshmanan let g:TabLabels = [] 11387237cab8SYegappan Lakshmanan set guitablabel=%{TestGuiTabLabel()} 11397237cab8SYegappan Lakshmanan call test_override('starting', 1) 11407237cab8SYegappan Lakshmanan redrawtabline 11417237cab8SYegappan Lakshmanan call test_override('starting', 0) 11427237cab8SYegappan Lakshmanan call assert_true(index(g:TabLabels, 101) != -1) 11437237cab8SYegappan Lakshmanan call assert_true(index(g:TabLabels, 102) != -1) 11447237cab8SYegappan Lakshmanan call assert_true(index(g:TabLabels, 103) != -1) 11457237cab8SYegappan Lakshmanan set guitablabel& 11467237cab8SYegappan Lakshmanan unlet g:TabLabels 11477237cab8SYegappan Lakshmanan 11487237cab8SYegappan Lakshmanan if has('gui_gtk') 11497237cab8SYegappan Lakshmanan " Only on GTK+, the tooltip function is called even if the mouse is not 11507237cab8SYegappan Lakshmanan " on the tabline. on Win32 and Motif, the tooltip function is called only 11517237cab8SYegappan Lakshmanan " when the mouse pointer is over the tabline. 11527237cab8SYegappan Lakshmanan let g:TabToolTips = [] 11537237cab8SYegappan Lakshmanan set guitabtooltip=%{TestGuiTabToolTip()} 11547237cab8SYegappan Lakshmanan call test_override('starting', 1) 11557237cab8SYegappan Lakshmanan redrawtabline 11567237cab8SYegappan Lakshmanan call test_override('starting', 0) 11577237cab8SYegappan Lakshmanan call assert_true(index(g:TabToolTips, 201) != -1) 11587237cab8SYegappan Lakshmanan call assert_true(index(g:TabToolTips, 202) != -1) 11597237cab8SYegappan Lakshmanan call assert_true(index(g:TabToolTips, 203) != -1) 11607237cab8SYegappan Lakshmanan set guitabtooltip& 11617237cab8SYegappan Lakshmanan unlet g:TabToolTips 11627237cab8SYegappan Lakshmanan endif 11637237cab8SYegappan Lakshmanan %bw! 11647237cab8SYegappan Lakshmanan let &lines = save_lines 11657237cab8SYegappan Lakshmananendfunc 11667237cab8SYegappan Lakshmanan 116718d46587SYegappan Lakshmanan" Test for dropping files into a window in GUI 116818d46587SYegappan Lakshmananfunc DropFilesInCmdLine() 11691d1ce613SBram Moolenaar CheckFeature drop_file 11701d1ce613SBram Moolenaar 117118d46587SYegappan Lakshmanan call feedkeys(":\"", 'L') 117218d46587SYegappan Lakshmanan call test_gui_drop_files(['a.c', 'b.c'], &lines, 1, 0) 117318d46587SYegappan Lakshmanan call feedkeys("\<CR>", 'L') 117418d46587SYegappan Lakshmananendfunc 117518d46587SYegappan Lakshmanan 117618d46587SYegappan Lakshmananfunc Test_gui_drop_files() 11771d1ce613SBram Moolenaar CheckFeature drop_file 11781d1ce613SBram Moolenaar 11795bca906bSYegappan Lakshmanan call assert_fails('call test_gui_drop_files(1, 1, 1, 0)', 'E1211:') 11805bca906bSYegappan Lakshmanan call assert_fails('call test_gui_drop_files(["x"], "", 1, 0)', 'E1210:') 11815bca906bSYegappan Lakshmanan call assert_fails('call test_gui_drop_files(["x"], 1, "", 0)', 'E1210:') 11825bca906bSYegappan Lakshmanan call assert_fails('call test_gui_drop_files(["x"], 1, 1, "")', 'E1210:') 118318d46587SYegappan Lakshmanan 118418d46587SYegappan Lakshmanan %bw! 118518d46587SYegappan Lakshmanan %argdelete 118618d46587SYegappan Lakshmanan call test_gui_drop_files([], 1, 1, 0) 118718d46587SYegappan Lakshmanan call assert_equal([], argv()) 118818d46587SYegappan Lakshmanan call test_gui_drop_files([1, 2], 1, 1, 0) 118918d46587SYegappan Lakshmanan call assert_equal([], argv()) 119018d46587SYegappan Lakshmanan 119118d46587SYegappan Lakshmanan call test_gui_drop_files(['a.c', 'b.c'], 1, 1, 0) 119218d46587SYegappan Lakshmanan call assert_equal(['a.c', 'b.c'], argv()) 119318d46587SYegappan Lakshmanan %bw! 119418d46587SYegappan Lakshmanan %argdelete 119518d46587SYegappan Lakshmanan call test_gui_drop_files([], 1, 1, 0) 119618d46587SYegappan Lakshmanan call assert_equal([], argv()) 119718d46587SYegappan Lakshmanan %bw! 119818d46587SYegappan Lakshmanan " if the buffer in the window is modified, then the file should be opened in 119918d46587SYegappan Lakshmanan " a new window 120018d46587SYegappan Lakshmanan set modified 120118d46587SYegappan Lakshmanan call test_gui_drop_files(['x.c', 'y.c'], 1, 1, 0) 120218d46587SYegappan Lakshmanan call assert_equal(['x.c', 'y.c'], argv()) 120318d46587SYegappan Lakshmanan call assert_equal(2, winnr('$')) 120418d46587SYegappan Lakshmanan call assert_equal('x.c', bufname(winbufnr(1))) 120518d46587SYegappan Lakshmanan %bw! 120618d46587SYegappan Lakshmanan %argdelete 120718d46587SYegappan Lakshmanan " if Ctrl is pressed, then the file should be opened in a new window 120818d46587SYegappan Lakshmanan call test_gui_drop_files(['s.py', 't.py'], 1, 1, 0x10) 120918d46587SYegappan Lakshmanan call assert_equal(['s.py', 't.py'], argv()) 121018d46587SYegappan Lakshmanan call assert_equal(2, winnr('$')) 121118d46587SYegappan Lakshmanan call assert_equal('s.py', bufname(winbufnr(1))) 121218d46587SYegappan Lakshmanan %bw! 121318d46587SYegappan Lakshmanan %argdelete 121418d46587SYegappan Lakshmanan " drop the files in a non-current window 121518d46587SYegappan Lakshmanan belowright new 121618d46587SYegappan Lakshmanan call test_gui_drop_files(['a.py', 'b.py'], 1, 1, 0) 121718d46587SYegappan Lakshmanan call assert_equal(['a.py', 'b.py'], argv()) 121818d46587SYegappan Lakshmanan call assert_equal(2, winnr('$')) 121918d46587SYegappan Lakshmanan call assert_equal(1, winnr()) 122018d46587SYegappan Lakshmanan call assert_equal('a.py', bufname(winbufnr(1))) 122118d46587SYegappan Lakshmanan %bw! 122218d46587SYegappan Lakshmanan %argdelete 122318d46587SYegappan Lakshmanan " pressing shift when dropping files should change directory 122418d46587SYegappan Lakshmanan let save_cwd = getcwd() 122518d46587SYegappan Lakshmanan call mkdir('Xdir1') 122618d46587SYegappan Lakshmanan call writefile([], 'Xdir1/Xfile1') 122718d46587SYegappan Lakshmanan call writefile([], 'Xdir1/Xfile2') 122818d46587SYegappan Lakshmanan call test_gui_drop_files(['Xdir1/Xfile1', 'Xdir1/Xfile2'], 1, 1, 0x4) 122918d46587SYegappan Lakshmanan call assert_equal('Xdir1', fnamemodify(getcwd(), ':t')) 123018d46587SYegappan Lakshmanan call assert_equal('Xfile1', @%) 123118d46587SYegappan Lakshmanan call chdir(save_cwd) 123218d46587SYegappan Lakshmanan " pressing shift when dropping directory and files should change directory 123318d46587SYegappan Lakshmanan call test_gui_drop_files(['Xdir1', 'Xdir1/Xfile2'], 1, 1, 0x4) 123418d46587SYegappan Lakshmanan call assert_equal('Xdir1', fnamemodify(getcwd(), ':t')) 123518d46587SYegappan Lakshmanan call assert_equal('Xdir1', fnamemodify(@%, ':t')) 123618d46587SYegappan Lakshmanan call chdir(save_cwd) 123718d46587SYegappan Lakshmanan %bw! 123818d46587SYegappan Lakshmanan %argdelete 123918d46587SYegappan Lakshmanan " dropping a directory should edit it 124018d46587SYegappan Lakshmanan call test_gui_drop_files(['Xdir1'], 1, 1, 0) 124118d46587SYegappan Lakshmanan call assert_equal('Xdir1', @%) 124218d46587SYegappan Lakshmanan %bw! 124318d46587SYegappan Lakshmanan %argdelete 124418d46587SYegappan Lakshmanan " dropping only a directory name with Shift should ignore it 124518d46587SYegappan Lakshmanan call test_gui_drop_files(['Xdir1'], 1, 1, 0x4) 124618d46587SYegappan Lakshmanan call assert_equal('', @%) 124718d46587SYegappan Lakshmanan %bw! 124818d46587SYegappan Lakshmanan %argdelete 124918d46587SYegappan Lakshmanan call delete('Xdir1', 'rf') 125018d46587SYegappan Lakshmanan " drop files in the command line. The GUI drop files adds the file names to 125118d46587SYegappan Lakshmanan " the low level input buffer. So need to use a cmdline map and feedkeys() 125218d46587SYegappan Lakshmanan " with 'Lx!' to process it in this function itself. 125318d46587SYegappan Lakshmanan cnoremap <expr> <buffer> <F4> DropFilesInCmdLine() 125418d46587SYegappan Lakshmanan call feedkeys(":\"\<F4>\<CR>", 'xt') 125518d46587SYegappan Lakshmanan call feedkeys('k', 'Lx!') 125618d46587SYegappan Lakshmanan call assert_equal('"a.c b.c', @:) 125718d46587SYegappan Lakshmanan cunmap <buffer> <F4> 125818d46587SYegappan Lakshmananendfunc 125918d46587SYegappan Lakshmanan 12600e05de46SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1261