118aa13d1SBram Moolenaar" Tests for the terminal window. 218aa13d1SBram Moolenaar" This is split in two, because it can take a lot of time. 318aa13d1SBram Moolenaar" See test_terminal.vim and test_terminal2.vim for further tests. 418aa13d1SBram Moolenaar 518aa13d1SBram Moolenaarsource check.vim 618aa13d1SBram MoolenaarCheckFeature terminal 718aa13d1SBram Moolenaar 818aa13d1SBram Moolenaarsource shared.vim 918aa13d1SBram Moolenaarsource screendump.vim 1018aa13d1SBram Moolenaarsource mouse.vim 1118aa13d1SBram Moolenaarsource term_util.vim 1218aa13d1SBram Moolenaar 1318aa13d1SBram Moolenaarlet $PROMPT_COMMAND='' 1418aa13d1SBram Moolenaar 1518aa13d1SBram Moolenaarfunc Test_terminal_altscreen() 1618aa13d1SBram Moolenaar " somehow doesn't work on MS-Windows 1718aa13d1SBram Moolenaar CheckUnix 1818aa13d1SBram Moolenaar let cmd = "cat Xtext\<CR>" 1918aa13d1SBram Moolenaar 2018aa13d1SBram Moolenaar let buf = term_start(&shell, {}) 2118aa13d1SBram Moolenaar call writefile(["\<Esc>[?1047h"], 'Xtext') 2218aa13d1SBram Moolenaar call term_sendkeys(buf, cmd) 2318aa13d1SBram Moolenaar call WaitForAssert({-> assert_equal(1, term_getaltscreen(buf))}) 2418aa13d1SBram Moolenaar 2518aa13d1SBram Moolenaar call writefile(["\<Esc>[?1047l"], 'Xtext') 2618aa13d1SBram Moolenaar call term_sendkeys(buf, cmd) 2718aa13d1SBram Moolenaar call WaitForAssert({-> assert_equal(0, term_getaltscreen(buf))}) 2818aa13d1SBram Moolenaar 2918aa13d1SBram Moolenaar call term_sendkeys(buf, "exit\r") 3018aa13d1SBram Moolenaar exe buf . "bwipe!" 3118aa13d1SBram Moolenaar call delete('Xtext') 3218aa13d1SBram Moolenaarendfunc 3318aa13d1SBram Moolenaar 3418aa13d1SBram Moolenaarfunc Test_terminal_shell_option() 3518aa13d1SBram Moolenaar if has('unix') 3618aa13d1SBram Moolenaar " exec is a shell builtin command, should fail without a shell. 3718aa13d1SBram Moolenaar term exec ls runtest.vim 3818aa13d1SBram Moolenaar call WaitForAssert({-> assert_match('job failed', term_getline(bufnr(), 1))}) 3918aa13d1SBram Moolenaar bwipe! 4018aa13d1SBram Moolenaar 4118aa13d1SBram Moolenaar term ++shell exec ls runtest.vim 4218aa13d1SBram Moolenaar call WaitForAssert({-> assert_match('runtest.vim', term_getline(bufnr(), 1))}) 4318aa13d1SBram Moolenaar bwipe! 4418aa13d1SBram Moolenaar elseif has('win32') 4518aa13d1SBram Moolenaar " dir is a shell builtin command, should fail without a shell. 46066b12e3SBram Moolenaar " However, if dir.exe (which might be provided by Cygwin/MSYS2) exists in 47066b12e3SBram Moolenaar " the %PATH%, "term dir" succeeds unintentionally. Use dir.com instead. 4818aa13d1SBram Moolenaar try 49066b12e3SBram Moolenaar term dir.com /b runtest.vim 50066b12e3SBram Moolenaar call WaitForAssert({-> assert_match('job failed', term_getline(bufnr(), 1))}) 5118aa13d1SBram Moolenaar catch /CreateProcess/ 5218aa13d1SBram Moolenaar " ignore 5318aa13d1SBram Moolenaar endtry 5418aa13d1SBram Moolenaar bwipe! 5518aa13d1SBram Moolenaar 56066b12e3SBram Moolenaar " This should execute the dir builtin command even with ".com". 57066b12e3SBram Moolenaar term ++shell dir.com /b runtest.vim 5818aa13d1SBram Moolenaar call WaitForAssert({-> assert_match('runtest.vim', term_getline(bufnr(), 1))}) 5918aa13d1SBram Moolenaar bwipe! 606d91bcb4SBram Moolenaar else 616d91bcb4SBram Moolenaar throw 'Skipped: does not work on this platform' 6218aa13d1SBram Moolenaar endif 6318aa13d1SBram Moolenaarendfunc 6418aa13d1SBram Moolenaar 6518aa13d1SBram Moolenaarfunc Test_terminal_invalid_arg() 6618aa13d1SBram Moolenaar call assert_fails('terminal ++xyz', 'E181:') 6718aa13d1SBram Moolenaarendfunc 6818aa13d1SBram Moolenaar 69*87fd0924SBram Moolenaar" Check a terminal with different colors 70*87fd0924SBram Moolenaarfunc Terminal_color(group_name, highlight_cmds, highlight_opt, open_cmds) 71*87fd0924SBram Moolenaar CheckRunVimInTerminal 72*87fd0924SBram Moolenaar CheckUnix 73*87fd0924SBram Moolenaar 74*87fd0924SBram Moolenaar let lines = [ 75*87fd0924SBram Moolenaar \ 'call setline(1, range(20))', 76*87fd0924SBram Moolenaar \ 'func OpenTerm()', 77*87fd0924SBram Moolenaar \ ' set noruler', 78*87fd0924SBram Moolenaar \ " call term_start('cat', #{vertical: 1, " .. a:highlight_opt .. "})", 79*87fd0924SBram Moolenaar \ ] + a:open_cmds + [ 80*87fd0924SBram Moolenaar \ 'endfunc', 81*87fd0924SBram Moolenaar \ ] + a:highlight_cmds 82*87fd0924SBram Moolenaar call writefile(lines, 'XtermStart') 83*87fd0924SBram Moolenaar let buf = RunVimInTerminal('-S XtermStart', #{rows: 15}) 84*87fd0924SBram Moolenaar call TermWait(buf, 100) 85*87fd0924SBram Moolenaar call term_sendkeys(buf, ":call OpenTerm()\<CR>") 86*87fd0924SBram Moolenaar call TermWait(buf, 50) 87*87fd0924SBram Moolenaar call term_sendkeys(buf, "hello\<CR>") 88*87fd0924SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_color_' .. a:group_name, {}) 89*87fd0924SBram Moolenaar 90*87fd0924SBram Moolenaar call term_sendkeys(buf, "\<C-D>") 91*87fd0924SBram Moolenaar call TermWait(buf, 50) 92*87fd0924SBram Moolenaar call StopVimInTerminal(buf) 93*87fd0924SBram Moolenaar call delete('XtermStart') 94*87fd0924SBram Moolenaarendfunc 95*87fd0924SBram Moolenaar 96*87fd0924SBram Moolenaarfunc Test_terminal_color_Terminal() 97*87fd0924SBram Moolenaar call Terminal_color("Terminal", [ 98*87fd0924SBram Moolenaar \ "highlight Terminal ctermfg=blue ctermbg=yellow", 99*87fd0924SBram Moolenaar \ ], "", []) 100*87fd0924SBram Moolenaarendfunc 101*87fd0924SBram Moolenaar 102*87fd0924SBram Moolenaarfunc Test_terminal_color_group() 103*87fd0924SBram Moolenaar call Terminal_color("MyTermCol", [ 104*87fd0924SBram Moolenaar \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue", 105*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", []) 106*87fd0924SBram Moolenaarendfunc 107*87fd0924SBram Moolenaar 108*87fd0924SBram Moolenaarfunc Test_terminal_color_wincolor() 109*87fd0924SBram Moolenaar call Terminal_color("MyWinCol", [ 110*87fd0924SBram Moolenaar \ "highlight MyWinCol ctermfg=red ctermbg=darkyellow", 111*87fd0924SBram Moolenaar \ ], "", [ 112*87fd0924SBram Moolenaar \ 'set wincolor=MyWinCol', 113*87fd0924SBram Moolenaar \ ]) 114*87fd0924SBram Moolenaarendfunc 115*87fd0924SBram Moolenaar 116*87fd0924SBram Moolenaarfunc Test_terminal_color_group_over_Terminal() 117*87fd0924SBram Moolenaar call Terminal_color("MyTermCol_over_Terminal", [ 118*87fd0924SBram Moolenaar \ "highlight Terminal ctermfg=blue ctermbg=yellow", 119*87fd0924SBram Moolenaar \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue", 120*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", []) 121*87fd0924SBram Moolenaarendfunc 122*87fd0924SBram Moolenaar 123*87fd0924SBram Moolenaarfunc Test_terminal_color_wincolor_over_group() 124*87fd0924SBram Moolenaar call Terminal_color("MyWinCol_over_group", [ 125*87fd0924SBram Moolenaar \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue", 126*87fd0924SBram Moolenaar \ "highlight MyWinCol ctermfg=red ctermbg=darkyellow", 127*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", [ 128*87fd0924SBram Moolenaar \ 'set wincolor=MyWinCol', 129*87fd0924SBram Moolenaar \ ]) 130*87fd0924SBram Moolenaarendfunc 131*87fd0924SBram Moolenaar 132*87fd0924SBram Moolenaarfunc Test_terminal_color_wincolor_split() 133*87fd0924SBram Moolenaar CheckRunVimInTerminal 134*87fd0924SBram Moolenaar CheckUnix 135*87fd0924SBram Moolenaar 136*87fd0924SBram Moolenaar let lines = [ 137*87fd0924SBram Moolenaar \ 'call setline(1, range(20))', 138*87fd0924SBram Moolenaar \ 'func OpenTerm()', 139*87fd0924SBram Moolenaar \ ' set noruler', 140*87fd0924SBram Moolenaar \ " call term_start('cat', #{vertical: 1, term_highlight: 'MyTermCol'})", 141*87fd0924SBram Moolenaar \ 'endfunc', 142*87fd0924SBram Moolenaar \ 'highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue', 143*87fd0924SBram Moolenaar \ 'highlight MyWinCol ctermfg=red ctermbg=darkyellow', 144*87fd0924SBram Moolenaar \ 'highlight MyWinCol2 ctermfg=black ctermbg=blue', 145*87fd0924SBram Moolenaar \ ] 146*87fd0924SBram Moolenaar call writefile(lines, 'XtermStart') 147*87fd0924SBram Moolenaar let buf = RunVimInTerminal('-S XtermStart', #{rows: 15}) 148*87fd0924SBram Moolenaar call TermWait(buf, 100) 149*87fd0924SBram Moolenaar call term_sendkeys(buf, ":call OpenTerm()\<CR>") 150*87fd0924SBram Moolenaar call TermWait(buf, 50) 151*87fd0924SBram Moolenaar call term_sendkeys(buf, "hello\<CR>") 152*87fd0924SBram Moolenaar call TermWait(buf, 50) 153*87fd0924SBram Moolenaar 154*87fd0924SBram Moolenaar call term_sendkeys(buf, "\<C-W>:split\<CR>") 155*87fd0924SBram Moolenaar call term_sendkeys(buf, "\<C-W>:set wincolor=MyWinCol\<CR>") 156*87fd0924SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_wincolor_split_MyWinCol', {}) 157*87fd0924SBram Moolenaar 158*87fd0924SBram Moolenaar call term_sendkeys(buf, "\<C-W>b:2sb\<CR>") 159*87fd0924SBram Moolenaar call term_sendkeys(buf, "\<C-W>:set wincolor=MyWinCol2\<CR>") 160*87fd0924SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_wincolor_split_MyWinCol2', {}) 161*87fd0924SBram Moolenaar 162*87fd0924SBram Moolenaar call term_sendkeys(buf, "\<C-D>") 163*87fd0924SBram Moolenaar call TermWait(buf, 50) 164*87fd0924SBram Moolenaar call StopVimInTerminal(buf) 165*87fd0924SBram Moolenaar call delete('XtermStart') 166*87fd0924SBram Moolenaarendfunc 167*87fd0924SBram Moolenaar 168*87fd0924SBram Moolenaarfunc Test_terminal_color_transp_Terminal() 169*87fd0924SBram Moolenaar call Terminal_color("transp_Terminal", [ 170*87fd0924SBram Moolenaar \ "highlight Terminal ctermfg=blue", 171*87fd0924SBram Moolenaar \ ], "", []) 172*87fd0924SBram Moolenaarendfunc 173*87fd0924SBram Moolenaar 174*87fd0924SBram Moolenaarfunc Test_terminal_color_transp_group() 175*87fd0924SBram Moolenaar call Terminal_color("transp_MyTermCol", [ 176*87fd0924SBram Moolenaar \ "highlight MyTermCol ctermfg=darkgreen", 177*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", []) 178*87fd0924SBram Moolenaarendfunc 179*87fd0924SBram Moolenaar 180*87fd0924SBram Moolenaarfunc Test_terminal_color_transp_wincolor() 181*87fd0924SBram Moolenaar call Terminal_color("transp_MyWinCol", [ 182*87fd0924SBram Moolenaar \ "highlight MyWinCol ctermfg=red", 183*87fd0924SBram Moolenaar \ ], "", [ 184*87fd0924SBram Moolenaar \ 'set wincolor=MyWinCol', 185*87fd0924SBram Moolenaar \ ]) 186*87fd0924SBram Moolenaarendfunc 187*87fd0924SBram Moolenaar 188*87fd0924SBram Moolenaarfunc Test_terminal_color_gui_Terminal() 189*87fd0924SBram Moolenaar CheckFeature termguicolors 190*87fd0924SBram Moolenaar call Terminal_color("gui_Terminal", [ 191*87fd0924SBram Moolenaar \ "set termguicolors", 192*87fd0924SBram Moolenaar \ "highlight Terminal guifg=#3344ff guibg=#b0a700", 193*87fd0924SBram Moolenaar \ ], "", []) 194*87fd0924SBram Moolenaarendfunc 195*87fd0924SBram Moolenaar 196*87fd0924SBram Moolenaarfunc Test_terminal_color_gui_group() 197*87fd0924SBram Moolenaar CheckFeature termguicolors 198*87fd0924SBram Moolenaar call Terminal_color("gui_MyTermCol", [ 199*87fd0924SBram Moolenaar \ "set termguicolors", 200*87fd0924SBram Moolenaar \ "highlight MyTermCol guifg=#007800 guibg=#6789ff", 201*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", []) 202*87fd0924SBram Moolenaarendfunc 203*87fd0924SBram Moolenaar 204*87fd0924SBram Moolenaarfunc Test_terminal_color_gui_wincolor() 205*87fd0924SBram Moolenaar CheckFeature termguicolors 206*87fd0924SBram Moolenaar call Terminal_color("gui_MyWinCol", [ 207*87fd0924SBram Moolenaar \ "set termguicolors", 208*87fd0924SBram Moolenaar \ "highlight MyWinCol guifg=#fe1122 guibg=#818100", 209*87fd0924SBram Moolenaar \ ], "", [ 210*87fd0924SBram Moolenaar \ 'set wincolor=MyWinCol', 211*87fd0924SBram Moolenaar \ ]) 212*87fd0924SBram Moolenaarendfunc 213*87fd0924SBram Moolenaar 214*87fd0924SBram Moolenaarfunc Test_terminal_color_gui_transp_Terminal() 215*87fd0924SBram Moolenaar CheckFeature termguicolors 216*87fd0924SBram Moolenaar call Terminal_color("gui_transp_Terminal", [ 217*87fd0924SBram Moolenaar \ "set termguicolors", 218*87fd0924SBram Moolenaar \ "highlight Terminal guifg=#3344ff", 219*87fd0924SBram Moolenaar \ ], "", []) 220*87fd0924SBram Moolenaarendfunc 221*87fd0924SBram Moolenaar 222*87fd0924SBram Moolenaarfunc Test_terminal_color_gui_transp_group() 223*87fd0924SBram Moolenaar CheckFeature termguicolors 224*87fd0924SBram Moolenaar call Terminal_color("gui_transp_MyTermCol", [ 225*87fd0924SBram Moolenaar \ "set termguicolors", 226*87fd0924SBram Moolenaar \ "highlight MyTermCol guifg=#007800", 227*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", []) 228*87fd0924SBram Moolenaarendfunc 229*87fd0924SBram Moolenaar 230*87fd0924SBram Moolenaarfunc Test_terminal_color_gui_transp_wincolor() 231*87fd0924SBram Moolenaar CheckFeature termguicolors 232*87fd0924SBram Moolenaar call Terminal_color("gui_transp_MyWinCol", [ 233*87fd0924SBram Moolenaar \ "set termguicolors", 234*87fd0924SBram Moolenaar \ "highlight MyWinCol guifg=#fe1122", 235*87fd0924SBram Moolenaar \ ], "", [ 236*87fd0924SBram Moolenaar \ 'set wincolor=MyWinCol', 237*87fd0924SBram Moolenaar \ ]) 238*87fd0924SBram Moolenaarendfunc 239*87fd0924SBram Moolenaar 24018aa13d1SBram Moolenaarfunc Test_terminal_in_popup() 24118aa13d1SBram Moolenaar CheckRunVimInTerminal 24218aa13d1SBram Moolenaar 24318aa13d1SBram Moolenaar let text =<< trim END 24418aa13d1SBram Moolenaar some text 24518aa13d1SBram Moolenaar to edit 24618aa13d1SBram Moolenaar in a popup window 24718aa13d1SBram Moolenaar END 24818aa13d1SBram Moolenaar call writefile(text, 'Xtext') 24918aa13d1SBram Moolenaar let cmd = GetVimCommandCleanTerm() 25018aa13d1SBram Moolenaar let lines = [ 25118aa13d1SBram Moolenaar \ 'call setline(1, range(20))', 25218aa13d1SBram Moolenaar \ 'hi PopTerm ctermbg=grey', 25318aa13d1SBram Moolenaar \ 'func OpenTerm(setColor)', 25418aa13d1SBram Moolenaar \ " set noruler", 25518aa13d1SBram Moolenaar \ " let s:buf = term_start('" .. cmd .. " Xtext', #{hidden: 1, term_finish: 'close'})", 25618aa13d1SBram Moolenaar \ ' let g:winid = popup_create(s:buf, #{minwidth: 45, minheight: 7, border: [], drag: 1, resize: 1})', 25718aa13d1SBram Moolenaar \ ' if a:setColor', 25818aa13d1SBram Moolenaar \ ' call win_execute(g:winid, "set wincolor=PopTerm")', 25918aa13d1SBram Moolenaar \ ' endif', 26018aa13d1SBram Moolenaar \ 'endfunc', 26118aa13d1SBram Moolenaar \ 'func HidePopup()', 26218aa13d1SBram Moolenaar \ ' call popup_hide(g:winid)', 26318aa13d1SBram Moolenaar \ 'endfunc', 26418aa13d1SBram Moolenaar \ 'func ClosePopup()', 26518aa13d1SBram Moolenaar \ ' call popup_close(g:winid)', 26618aa13d1SBram Moolenaar \ 'endfunc', 26718aa13d1SBram Moolenaar \ 'func ReopenPopup()', 26818aa13d1SBram Moolenaar \ ' call popup_create(s:buf, #{minwidth: 40, minheight: 6, border: []})', 26918aa13d1SBram Moolenaar \ 'endfunc', 27018aa13d1SBram Moolenaar \ ] 27118aa13d1SBram Moolenaar call writefile(lines, 'XtermPopup') 27218aa13d1SBram Moolenaar let buf = RunVimInTerminal('-S XtermPopup', #{rows: 15}) 27318aa13d1SBram Moolenaar call TermWait(buf, 100) 27418aa13d1SBram Moolenaar call term_sendkeys(buf, ":call OpenTerm(0)\<CR>") 2754d8c96d4SBram Moolenaar call TermWait(buf, 500) 27618aa13d1SBram Moolenaar call term_sendkeys(buf, ":\<CR>") 27718aa13d1SBram Moolenaar call TermWait(buf, 100) 27818aa13d1SBram Moolenaar call term_sendkeys(buf, "\<C-W>:echo getwinvar(g:winid, \"&buftype\") win_gettype(g:winid)\<CR>") 27918aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_1', {}) 28018aa13d1SBram Moolenaar 28118aa13d1SBram Moolenaar call term_sendkeys(buf, ":q\<CR>") 28218aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_2', {}) 28318aa13d1SBram Moolenaar 28418aa13d1SBram Moolenaar call term_sendkeys(buf, ":call OpenTerm(1)\<CR>") 2854d8c96d4SBram Moolenaar call TermWait(buf, 500) 28618aa13d1SBram Moolenaar call term_sendkeys(buf, ":set hlsearch\<CR>") 28718aa13d1SBram Moolenaar call TermWait(buf, 100) 28818aa13d1SBram Moolenaar call term_sendkeys(buf, "/edit\<CR>") 28918aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_3', {}) 29018aa13d1SBram Moolenaar 29118aa13d1SBram Moolenaar call term_sendkeys(buf, "\<C-W>:call HidePopup()\<CR>") 29218aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_4', {}) 29318aa13d1SBram Moolenaar call term_sendkeys(buf, "\<CR>") 29418aa13d1SBram Moolenaar call TermWait(buf, 50) 29518aa13d1SBram Moolenaar 29618aa13d1SBram Moolenaar call term_sendkeys(buf, "\<C-W>:call ClosePopup()\<CR>") 29718aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_5', {}) 29818aa13d1SBram Moolenaar 29918aa13d1SBram Moolenaar call term_sendkeys(buf, "\<C-W>:call ReopenPopup()\<CR>") 30018aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_6', {}) 30118aa13d1SBram Moolenaar 30218aa13d1SBram Moolenaar " Go to terminal-Normal mode and visually select text. 30318aa13d1SBram Moolenaar call term_sendkeys(buf, "\<C-W>Ngg/in\<CR>vww") 30418aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_7', {}) 30518aa13d1SBram Moolenaar 30618aa13d1SBram Moolenaar " Back to job mode, redraws 30718aa13d1SBram Moolenaar call term_sendkeys(buf, "A") 30818aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_8', {}) 30918aa13d1SBram Moolenaar 31018aa13d1SBram Moolenaar call TermWait(buf, 50) 31118aa13d1SBram Moolenaar call term_sendkeys(buf, ":q\<CR>") 3124d8c96d4SBram Moolenaar call TermWait(buf, 250) " wait for terminal to vanish 31318aa13d1SBram Moolenaar 31418aa13d1SBram Moolenaar call StopVimInTerminal(buf) 31518aa13d1SBram Moolenaar call delete('Xtext') 31618aa13d1SBram Moolenaar call delete('XtermPopup') 31718aa13d1SBram Moolenaarendfunc 31818aa13d1SBram Moolenaar 3198e7d6223SBram Moolenaar" Check a terminal in popup window uses the default minimum size. 32018aa13d1SBram Moolenaarfunc Test_terminal_in_popup_min_size() 32118aa13d1SBram Moolenaar CheckRunVimInTerminal 32218aa13d1SBram Moolenaar 32318aa13d1SBram Moolenaar let text =<< trim END 32418aa13d1SBram Moolenaar another text 32518aa13d1SBram Moolenaar to show 32618aa13d1SBram Moolenaar in a popup window 32718aa13d1SBram Moolenaar END 32818aa13d1SBram Moolenaar call writefile(text, 'Xtext') 32918aa13d1SBram Moolenaar let lines = [ 33018aa13d1SBram Moolenaar \ 'call setline(1, range(20))', 33118aa13d1SBram Moolenaar \ 'func OpenTerm()', 33218aa13d1SBram Moolenaar \ " let s:buf = term_start('cat Xtext', #{hidden: 1})", 33318aa13d1SBram Moolenaar \ ' let g:winid = popup_create(s:buf, #{ border: []})', 33418aa13d1SBram Moolenaar \ 'endfunc', 33518aa13d1SBram Moolenaar \ ] 33618aa13d1SBram Moolenaar call writefile(lines, 'XtermPopup') 33718aa13d1SBram Moolenaar let buf = RunVimInTerminal('-S XtermPopup', #{rows: 15}) 33818aa13d1SBram Moolenaar call TermWait(buf, 100) 33918aa13d1SBram Moolenaar call term_sendkeys(buf, ":set noruler\<CR>") 34018aa13d1SBram Moolenaar call term_sendkeys(buf, ":call OpenTerm()\<CR>") 34118aa13d1SBram Moolenaar call TermWait(buf, 50) 34218aa13d1SBram Moolenaar call term_sendkeys(buf, ":\<CR>") 34318aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_m1', {}) 34418aa13d1SBram Moolenaar 34518aa13d1SBram Moolenaar call TermWait(buf, 50) 34618aa13d1SBram Moolenaar call term_sendkeys(buf, ":q\<CR>") 34718aa13d1SBram Moolenaar call TermWait(buf, 50) " wait for terminal to vanish 34818aa13d1SBram Moolenaar call StopVimInTerminal(buf) 34918aa13d1SBram Moolenaar call delete('Xtext') 35018aa13d1SBram Moolenaar call delete('XtermPopup') 35118aa13d1SBram Moolenaarendfunc 35218aa13d1SBram Moolenaar 35318aa13d1SBram Moolenaar" Check a terminal in popup window with different colors 354*87fd0924SBram Moolenaarfunc Terminal_in_popup_color(group_name, highlight_cmds, highlight_opt, popup_cmds, popup_opt) 35518aa13d1SBram Moolenaar CheckRunVimInTerminal 35618aa13d1SBram Moolenaar CheckUnix 35718aa13d1SBram Moolenaar 35818aa13d1SBram Moolenaar let lines = [ 35918aa13d1SBram Moolenaar \ 'call setline(1, range(20))', 36018aa13d1SBram Moolenaar \ 'func OpenTerm()', 36118aa13d1SBram Moolenaar \ " let s:buf = term_start('cat', #{hidden: 1, " 36218aa13d1SBram Moolenaar \ .. a:highlight_opt .. "})", 363*87fd0924SBram Moolenaar \ ' let g:winid = popup_create(s:buf, #{border: [], ' 364*87fd0924SBram Moolenaar \ .. a:popup_opt .. '})', 365*87fd0924SBram Moolenaar \ ] + a:popup_cmds + [ 36618aa13d1SBram Moolenaar \ 'endfunc', 367*87fd0924SBram Moolenaar \ ] + a:highlight_cmds 36818aa13d1SBram Moolenaar call writefile(lines, 'XtermPopup') 36918aa13d1SBram Moolenaar let buf = RunVimInTerminal('-S XtermPopup', #{rows: 15}) 37018aa13d1SBram Moolenaar call TermWait(buf, 100) 37118aa13d1SBram Moolenaar call term_sendkeys(buf, ":set noruler\<CR>") 37218aa13d1SBram Moolenaar call term_sendkeys(buf, ":call OpenTerm()\<CR>") 37318aa13d1SBram Moolenaar call TermWait(buf, 50) 37418aa13d1SBram Moolenaar call term_sendkeys(buf, "hello\<CR>") 37518aa13d1SBram Moolenaar call VerifyScreenDump(buf, 'Test_terminal_popup_' .. a:group_name, {}) 37618aa13d1SBram Moolenaar 37718aa13d1SBram Moolenaar call term_sendkeys(buf, "\<C-D>") 37818aa13d1SBram Moolenaar call TermWait(buf, 50) 37918aa13d1SBram Moolenaar call term_sendkeys(buf, ":q\<CR>") 38018aa13d1SBram Moolenaar call TermWait(buf, 50) " wait for terminal to vanish 38118aa13d1SBram Moolenaar call StopVimInTerminal(buf) 38218aa13d1SBram Moolenaar call delete('XtermPopup') 38318aa13d1SBram Moolenaarendfunc 38418aa13d1SBram Moolenaar 385*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_Terminal() 386*87fd0924SBram Moolenaar call Terminal_in_popup_color("Terminal", [ 387*87fd0924SBram Moolenaar \ "highlight Terminal ctermfg=blue ctermbg=yellow", 388*87fd0924SBram Moolenaar \ ], "", [], "") 38918aa13d1SBram Moolenaarendfunc 39018aa13d1SBram Moolenaar 391*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_group() 392*87fd0924SBram Moolenaar call Terminal_in_popup_color("MyTermCol", [ 393*87fd0924SBram Moolenaar \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue", 394*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", [], "") 395*87fd0924SBram Moolenaarendfunc 396*87fd0924SBram Moolenaar 397*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_wincolor() 398*87fd0924SBram Moolenaar call Terminal_in_popup_color("MyWinCol", [ 399*87fd0924SBram Moolenaar \ "highlight MyWinCol ctermfg=red ctermbg=darkyellow", 400*87fd0924SBram Moolenaar \ ], "", [ 401*87fd0924SBram Moolenaar \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")', 402*87fd0924SBram Moolenaar \ ], "") 403*87fd0924SBram Moolenaarendfunc 404*87fd0924SBram Moolenaar 405*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_popup_highlight() 406*87fd0924SBram Moolenaar call Terminal_in_popup_color("MyPopupHlCol", [ 407*87fd0924SBram Moolenaar \ "highlight MyPopupHlCol ctermfg=cyan ctermbg=green", 408*87fd0924SBram Moolenaar \ ], "", [], "highlight: 'MyPopupHlCol'") 409*87fd0924SBram Moolenaarendfunc 410*87fd0924SBram Moolenaar 411*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_group_over_Terminal() 412*87fd0924SBram Moolenaar call Terminal_in_popup_color("MyTermCol_over_Terminal", [ 413*87fd0924SBram Moolenaar \ "highlight Terminal ctermfg=blue ctermbg=yellow", 414*87fd0924SBram Moolenaar \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue", 415*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", [], "") 416*87fd0924SBram Moolenaarendfunc 417*87fd0924SBram Moolenaar 418*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_wincolor_over_group() 419*87fd0924SBram Moolenaar call Terminal_in_popup_color("MyWinCol_over_group", [ 420*87fd0924SBram Moolenaar \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue", 421*87fd0924SBram Moolenaar \ "highlight MyWinCol ctermfg=red ctermbg=darkyellow", 422*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", [ 423*87fd0924SBram Moolenaar \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")', 424*87fd0924SBram Moolenaar \ ], "") 425*87fd0924SBram Moolenaarendfunc 426*87fd0924SBram Moolenaar 427*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_transp_Terminal() 428*87fd0924SBram Moolenaar call Terminal_in_popup_color("transp_Terminal", [ 429*87fd0924SBram Moolenaar \ "highlight Terminal ctermfg=blue", 430*87fd0924SBram Moolenaar \ ], "", [], "") 431*87fd0924SBram Moolenaarendfunc 432*87fd0924SBram Moolenaar 433*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_transp_group() 434*87fd0924SBram Moolenaar call Terminal_in_popup_color("transp_MyTermCol", [ 435*87fd0924SBram Moolenaar \ "highlight MyTermCol ctermfg=darkgreen", 436*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", [], "") 437*87fd0924SBram Moolenaarendfunc 438*87fd0924SBram Moolenaar 439*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_transp_wincolor() 440*87fd0924SBram Moolenaar call Terminal_in_popup_color("transp_MyWinCol", [ 441*87fd0924SBram Moolenaar \ "highlight MyWinCol ctermfg=red", 442*87fd0924SBram Moolenaar \ ], "", [ 443*87fd0924SBram Moolenaar \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")', 444*87fd0924SBram Moolenaar \ ], "") 445*87fd0924SBram Moolenaarendfunc 446*87fd0924SBram Moolenaar 447*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_transp_popup_highlight() 448*87fd0924SBram Moolenaar call Terminal_in_popup_color("transp_MyPopupHlCol", [ 449*87fd0924SBram Moolenaar \ "highlight MyPopupHlCol ctermfg=cyan", 450*87fd0924SBram Moolenaar \ ], "", [], "highlight: 'MyPopupHlCol'") 451*87fd0924SBram Moolenaarendfunc 452*87fd0924SBram Moolenaar 453*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_gui_Terminal() 454*87fd0924SBram Moolenaar CheckFeature termguicolors 455*87fd0924SBram Moolenaar call Terminal_in_popup_color("gui_Terminal", [ 456*87fd0924SBram Moolenaar \ "set termguicolors", 457*87fd0924SBram Moolenaar \ "highlight Terminal guifg=#3344ff guibg=#b0a700", 458*87fd0924SBram Moolenaar \ ], "", [], "") 459*87fd0924SBram Moolenaarendfunc 460*87fd0924SBram Moolenaar 461*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_gui_group() 462*87fd0924SBram Moolenaar CheckFeature termguicolors 463*87fd0924SBram Moolenaar call Terminal_in_popup_color("gui_MyTermCol", [ 464*87fd0924SBram Moolenaar \ "set termguicolors", 465*87fd0924SBram Moolenaar \ "highlight MyTermCol guifg=#007800 guibg=#6789ff", 466*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", [], "") 467*87fd0924SBram Moolenaarendfunc 468*87fd0924SBram Moolenaar 469*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_gui_wincolor() 470*87fd0924SBram Moolenaar CheckFeature termguicolors 471*87fd0924SBram Moolenaar call Terminal_in_popup_color("gui_MyWinCol", [ 472*87fd0924SBram Moolenaar \ "set termguicolors", 473*87fd0924SBram Moolenaar \ "highlight MyWinCol guifg=#fe1122 guibg=#818100", 474*87fd0924SBram Moolenaar \ ], "", [ 475*87fd0924SBram Moolenaar \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")', 476*87fd0924SBram Moolenaar \ ], "") 477*87fd0924SBram Moolenaarendfunc 478*87fd0924SBram Moolenaar 479*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_gui_popup_highlight() 480*87fd0924SBram Moolenaar CheckFeature termguicolors 481*87fd0924SBram Moolenaar call Terminal_in_popup_color("gui_MyPopupHlCol", [ 482*87fd0924SBram Moolenaar \ "set termguicolors", 483*87fd0924SBram Moolenaar \ "highlight MyPopupHlCol guifg=#00e8f0 guibg=#126521", 484*87fd0924SBram Moolenaar \ ], "", [], "highlight: 'MyPopupHlCol'") 485*87fd0924SBram Moolenaarendfunc 486*87fd0924SBram Moolenaar 487*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_gui_transp_Terminal() 488*87fd0924SBram Moolenaar CheckFeature termguicolors 489*87fd0924SBram Moolenaar call Terminal_in_popup_color("gui_transp_Terminal", [ 490*87fd0924SBram Moolenaar \ "set termguicolors", 491*87fd0924SBram Moolenaar \ "highlight Terminal guifg=#3344ff", 492*87fd0924SBram Moolenaar \ ], "", [], "") 493*87fd0924SBram Moolenaarendfunc 494*87fd0924SBram Moolenaar 495*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_gui_transp_group() 496*87fd0924SBram Moolenaar CheckFeature termguicolors 497*87fd0924SBram Moolenaar call Terminal_in_popup_color("gui_transp_MyTermCol", [ 498*87fd0924SBram Moolenaar \ "set termguicolors", 499*87fd0924SBram Moolenaar \ "highlight MyTermCol guifg=#007800", 500*87fd0924SBram Moolenaar \ ], "term_highlight: 'MyTermCol',", [], "") 501*87fd0924SBram Moolenaarendfunc 502*87fd0924SBram Moolenaar 503*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_gui_transp_wincolor() 504*87fd0924SBram Moolenaar CheckFeature termguicolors 505*87fd0924SBram Moolenaar call Terminal_in_popup_color("gui_transp_MyWinCol", [ 506*87fd0924SBram Moolenaar \ "set termguicolors", 507*87fd0924SBram Moolenaar \ "highlight MyWinCol guifg=#fe1122", 508*87fd0924SBram Moolenaar \ ], "", [ 509*87fd0924SBram Moolenaar \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")', 510*87fd0924SBram Moolenaar \ ], "") 511*87fd0924SBram Moolenaarendfunc 512*87fd0924SBram Moolenaar 513*87fd0924SBram Moolenaarfunc Test_terminal_in_popup_color_gui_transp_popup_highlight() 514*87fd0924SBram Moolenaar CheckFeature termguicolors 515*87fd0924SBram Moolenaar call Terminal_in_popup_color("gui_transp_MyPopupHlCol", [ 516*87fd0924SBram Moolenaar \ "set termguicolors", 517*87fd0924SBram Moolenaar \ "highlight MyPopupHlCol guifg=#00e8f0", 518*87fd0924SBram Moolenaar \ ], "", [], "highlight: 'MyPopupHlCol'") 51918aa13d1SBram Moolenaarendfunc 52018aa13d1SBram Moolenaar 52118aa13d1SBram Moolenaarfunc Test_double_popup_terminal() 52218aa13d1SBram Moolenaar let buf1 = term_start(&shell, #{hidden: 1}) 52318aa13d1SBram Moolenaar let win1 = popup_create(buf1, {}) 52418aa13d1SBram Moolenaar let buf2 = term_start(&shell, #{hidden: 1}) 52518aa13d1SBram Moolenaar call assert_fails('call popup_create(buf2, {})', 'E861:') 52618aa13d1SBram Moolenaar call popup_close(win1) 52718aa13d1SBram Moolenaar exe buf1 .. 'bwipe!' 52818aa13d1SBram Moolenaar exe buf2 .. 'bwipe!' 52918aa13d1SBram Moolenaarendfunc 53018aa13d1SBram Moolenaar 53118aa13d1SBram Moolenaarfunc Test_issue_5607() 53218aa13d1SBram Moolenaar let wincount = winnr('$') 53318aa13d1SBram Moolenaar exe 'terminal' &shell &shellcmdflag 'exit' 53418aa13d1SBram Moolenaar let job = term_getjob(bufnr()) 53518aa13d1SBram Moolenaar call WaitForAssert({-> assert_equal("dead", job_status(job))}) 53618aa13d1SBram Moolenaar 53718aa13d1SBram Moolenaar let old_wincolor = &wincolor 53818aa13d1SBram Moolenaar try 53918aa13d1SBram Moolenaar set wincolor= 54018aa13d1SBram Moolenaar finally 54118aa13d1SBram Moolenaar let &wincolor = old_wincolor 54218aa13d1SBram Moolenaar bw! 54318aa13d1SBram Moolenaar endtry 54418aa13d1SBram Moolenaarendfunc 54518aa13d1SBram Moolenaar 54618aa13d1SBram Moolenaarfunc Test_hidden_terminal() 54718aa13d1SBram Moolenaar let buf = term_start(&shell, #{hidden: 1}) 54818aa13d1SBram Moolenaar call assert_equal('', bufname('^$')) 54918aa13d1SBram Moolenaar call StopShellInTerminal(buf) 55018aa13d1SBram Moolenaarendfunc 55118aa13d1SBram Moolenaar 55218aa13d1SBram Moolenaarfunc Test_term_nasty_callback() 55318aa13d1SBram Moolenaar CheckExecutable sh 55418aa13d1SBram Moolenaar 55518aa13d1SBram Moolenaar set hidden 55618aa13d1SBram Moolenaar let g:buf0 = term_start('sh', #{hidden: 1, term_finish: 'close'}) 55718aa13d1SBram Moolenaar call popup_create(g:buf0, {}) 55818aa13d1SBram Moolenaar call assert_fails("call term_start(['sh', '-c'], #{curwin: 1})", 'E863:') 55918aa13d1SBram Moolenaar 56018aa13d1SBram Moolenaar call popup_clear(1) 56118aa13d1SBram Moolenaar set hidden& 56218aa13d1SBram Moolenaarendfunc 56318aa13d1SBram Moolenaar 56418aa13d1SBram Moolenaarfunc Test_term_and_startinsert() 56518aa13d1SBram Moolenaar CheckRunVimInTerminal 56618aa13d1SBram Moolenaar CheckUnix 56718aa13d1SBram Moolenaar 56818aa13d1SBram Moolenaar let lines =<< trim EOL 56918aa13d1SBram Moolenaar put='some text' 57018aa13d1SBram Moolenaar term 57118aa13d1SBram Moolenaar startinsert 57218aa13d1SBram Moolenaar EOL 57318aa13d1SBram Moolenaar call writefile(lines, 'XTest_startinsert') 57418aa13d1SBram Moolenaar let buf = RunVimInTerminal('-S XTest_startinsert', {}) 57518aa13d1SBram Moolenaar 57618aa13d1SBram Moolenaar call term_sendkeys(buf, "exit\r") 57718aa13d1SBram Moolenaar call WaitForAssert({-> assert_equal("some text", term_getline(buf, 1))}) 57818aa13d1SBram Moolenaar call term_sendkeys(buf, "0l") 57918aa13d1SBram Moolenaar call term_sendkeys(buf, "A<\<Esc>") 58018aa13d1SBram Moolenaar call WaitForAssert({-> assert_equal("some text<", term_getline(buf, 1))}) 58118aa13d1SBram Moolenaar 58218aa13d1SBram Moolenaar call StopVimInTerminal(buf) 58318aa13d1SBram Moolenaar call delete('XTest_startinsert') 58418aa13d1SBram Moolenaarendfunc 58518aa13d1SBram Moolenaar 58618aa13d1SBram Moolenaar" Test for passing invalid arguments to terminal functions 58718aa13d1SBram Moolenaarfunc Test_term_func_invalid_arg() 58818aa13d1SBram Moolenaar call assert_fails('let b = term_getaltscreen([])', 'E745:') 58918aa13d1SBram Moolenaar call assert_fails('let a = term_getattr(1, [])', 'E730:') 59018aa13d1SBram Moolenaar call assert_fails('let c = term_getcursor([])', 'E745:') 59118aa13d1SBram Moolenaar call assert_fails('let l = term_getline([], 1)', 'E745:') 59218aa13d1SBram Moolenaar call assert_fails('let l = term_getscrolled([])', 'E745:') 59318aa13d1SBram Moolenaar call assert_fails('let s = term_getsize([])', 'E745:') 59418aa13d1SBram Moolenaar call assert_fails('let s = term_getstatus([])', 'E745:') 59518aa13d1SBram Moolenaar call assert_fails('let s = term_scrape([], 1)', 'E745:') 59618aa13d1SBram Moolenaar call assert_fails('call term_sendkeys([], "a")', 'E745:') 59718aa13d1SBram Moolenaar call assert_fails('call term_setapi([], "")', 'E745:') 59818aa13d1SBram Moolenaar call assert_fails('call term_setrestore([], "")', 'E745:') 59918aa13d1SBram Moolenaar call assert_fails('call term_setkill([], "")', 'E745:') 60018aa13d1SBram Moolenaar if has('gui') || has('termguicolors') 60118aa13d1SBram Moolenaar call assert_fails('let p = term_getansicolors([])', 'E745:') 60218aa13d1SBram Moolenaar call assert_fails('call term_setansicolors([], [])', 'E745:') 60318aa13d1SBram Moolenaar endif 604a1070eaeSBram Moolenaar let buf = term_start('echo') 605a1070eaeSBram Moolenaar call assert_fails('call term_setapi(' .. buf .. ', {})', 'E731:') 606a1070eaeSBram Moolenaar call assert_fails('call term_setkill(' .. buf .. ', {})', 'E731:') 607a1070eaeSBram Moolenaar call assert_fails('call term_setrestore(' .. buf .. ', {})', 'E731:') 608a1070eaeSBram Moolenaar exe buf . "bwipe!" 60918aa13d1SBram Moolenaarendfunc 61018aa13d1SBram Moolenaar 61118aa13d1SBram Moolenaar" Test for sending various special keycodes to a terminal 61218aa13d1SBram Moolenaarfunc Test_term_keycode_translation() 61318aa13d1SBram Moolenaar CheckRunVimInTerminal 61418aa13d1SBram Moolenaar 61518aa13d1SBram Moolenaar let buf = RunVimInTerminal('', {}) 61618aa13d1SBram Moolenaar call term_sendkeys(buf, ":set nocompatible\<CR>") 6174d8c96d4SBram Moolenaar call term_sendkeys(buf, ":set timeoutlen=20\<CR>") 61818aa13d1SBram Moolenaar 61918aa13d1SBram Moolenaar let keys = ["\<F1>", "\<F2>", "\<F3>", "\<F4>", "\<F5>", "\<F6>", "\<F7>", 62018aa13d1SBram Moolenaar \ "\<F8>", "\<F9>", "\<F10>", "\<F11>", "\<F12>", "\<Home>", 62118aa13d1SBram Moolenaar \ "\<S-Home>", "\<C-Home>", "\<End>", "\<S-End>", "\<C-End>", 62218aa13d1SBram Moolenaar \ "\<Ins>", "\<Del>", "\<Left>", "\<S-Left>", "\<C-Left>", "\<Right>", 62318aa13d1SBram Moolenaar \ "\<S-Right>", "\<C-Right>", "\<Up>", "\<S-Up>", "\<Down>", 62418aa13d1SBram Moolenaar \ "\<S-Down>"] 62518aa13d1SBram Moolenaar let output = ['<F1>', '<F2>', '<F3>', '<F4>', '<F5>', '<F6>', '<F7>', 62618aa13d1SBram Moolenaar \ '<F8>', '<F9>', '<F10>', '<F11>', '<F12>', '<Home>', '<S-Home>', 62718aa13d1SBram Moolenaar \ '<C-Home>', '<End>', '<S-End>', '<C-End>', '<Insert>', '<Del>', 62818aa13d1SBram Moolenaar \ '<Left>', '<S-Left>', '<C-Left>', '<Right>', '<S-Right>', 62918aa13d1SBram Moolenaar \ '<C-Right>', '<Up>', '<S-Up>', '<Down>', '<S-Down>'] 63018aa13d1SBram Moolenaar 63118aa13d1SBram Moolenaar call term_sendkeys(buf, "i") 63218aa13d1SBram Moolenaar for i in range(len(keys)) 63318aa13d1SBram Moolenaar call term_sendkeys(buf, "\<C-U>\<C-K>" .. keys[i]) 6344d8c96d4SBram Moolenaar call WaitForAssert({-> assert_equal(output[i], term_getline(buf, 1))}, 200) 63518aa13d1SBram Moolenaar endfor 63618aa13d1SBram Moolenaar 63718aa13d1SBram Moolenaar let keypad_keys = ["\<k0>", "\<k1>", "\<k2>", "\<k3>", "\<k4>", "\<k5>", 63818aa13d1SBram Moolenaar \ "\<k6>", "\<k7>", "\<k8>", "\<k9>", "\<kPoint>", "\<kPlus>", 63918aa13d1SBram Moolenaar \ "\<kMinus>", "\<kMultiply>", "\<kDivide>"] 64018aa13d1SBram Moolenaar let keypad_output = ['0', '1', '2', '3', '4', '5', 64118aa13d1SBram Moolenaar \ '6', '7', '8', '9', '.', '+', 64218aa13d1SBram Moolenaar \ '-', '*', '/'] 64318aa13d1SBram Moolenaar for i in range(len(keypad_keys)) 64418aa13d1SBram Moolenaar " TODO: Mysteriously keypad 3 and 9 do not work on some systems. 64518aa13d1SBram Moolenaar if keypad_output[i] == '3' || keypad_output[i] == '9' 64618aa13d1SBram Moolenaar continue 64718aa13d1SBram Moolenaar endif 64818aa13d1SBram Moolenaar call term_sendkeys(buf, "\<C-U>" .. keypad_keys[i]) 6494d8c96d4SBram Moolenaar call WaitForAssert({-> assert_equal(keypad_output[i], term_getline(buf, 1))}, 100) 65018aa13d1SBram Moolenaar endfor 65118aa13d1SBram Moolenaar 65218aa13d1SBram Moolenaar call feedkeys("\<C-U>\<kEnter>\<BS>one\<C-W>.two", 'xt') 65318aa13d1SBram Moolenaar call WaitForAssert({-> assert_equal('two', term_getline(buf, 1))}) 65418aa13d1SBram Moolenaar 65518aa13d1SBram Moolenaar call StopVimInTerminal(buf) 65618aa13d1SBram Moolenaarendfunc 65718aa13d1SBram Moolenaar 65818aa13d1SBram Moolenaar" Test for using the mouse in a terminal 65918aa13d1SBram Moolenaarfunc Test_term_mouse() 66018aa13d1SBram Moolenaar CheckNotGui 66118aa13d1SBram Moolenaar CheckRunVimInTerminal 66218aa13d1SBram Moolenaar 66318aa13d1SBram Moolenaar let save_mouse = &mouse 66418aa13d1SBram Moolenaar let save_term = &term 66518aa13d1SBram Moolenaar let save_ttymouse = &ttymouse 66618aa13d1SBram Moolenaar let save_clipboard = &clipboard 66718aa13d1SBram Moolenaar set mouse=a term=xterm ttymouse=sgr mousetime=200 clipboard= 66818aa13d1SBram Moolenaar 66918aa13d1SBram Moolenaar let lines =<< trim END 67018aa13d1SBram Moolenaar one two three four five 67118aa13d1SBram Moolenaar red green yellow red blue 67218aa13d1SBram Moolenaar vim emacs sublime nano 67318aa13d1SBram Moolenaar END 67418aa13d1SBram Moolenaar call writefile(lines, 'Xtest_mouse') 67518aa13d1SBram Moolenaar 67618aa13d1SBram Moolenaar " Create a terminal window running Vim for the test with mouse enabled 67718aa13d1SBram Moolenaar let prev_win = win_getid() 67818aa13d1SBram Moolenaar let buf = RunVimInTerminal('Xtest_mouse -n', {}) 67918aa13d1SBram Moolenaar call term_sendkeys(buf, ":set nocompatible\<CR>") 68018aa13d1SBram Moolenaar call term_sendkeys(buf, ":set mouse=a term=xterm ttymouse=sgr\<CR>") 68118aa13d1SBram Moolenaar call term_sendkeys(buf, ":set clipboard=\<CR>") 68218aa13d1SBram Moolenaar call term_sendkeys(buf, ":set mousemodel=extend\<CR>") 683733d259aSBram Moolenaar call TermWait(buf) 68418aa13d1SBram Moolenaar redraw! 68518aa13d1SBram Moolenaar 68618aa13d1SBram Moolenaar " Use the mouse to enter the terminal window 68718aa13d1SBram Moolenaar call win_gotoid(prev_win) 68818aa13d1SBram Moolenaar call feedkeys(MouseLeftClickCode(1, 1), 'x') 68918aa13d1SBram Moolenaar call feedkeys(MouseLeftReleaseCode(1, 1), 'x') 69018aa13d1SBram Moolenaar call assert_equal(1, getwininfo(win_getid())[0].terminal) 69118aa13d1SBram Moolenaar 69218aa13d1SBram Moolenaar " Test for <LeftMouse> click/release 69318aa13d1SBram Moolenaar call test_setmouse(2, 5) 69418aa13d1SBram Moolenaar call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt') 69518aa13d1SBram Moolenaar call test_setmouse(3, 8) 69618aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftMouse>\<LeftRelease>") 697733d259aSBram Moolenaar call TermWait(buf, 50) 69818aa13d1SBram Moolenaar call term_sendkeys(buf, ":call writefile([json_encode(getpos('.'))], 'Xbuf')\<CR>") 699733d259aSBram Moolenaar call TermWait(buf, 50) 70018aa13d1SBram Moolenaar let pos = json_decode(readfile('Xbuf')[0]) 70118aa13d1SBram Moolenaar call assert_equal([3, 8], pos[1:2]) 70218aa13d1SBram Moolenaar 70318aa13d1SBram Moolenaar " Test for selecting text using mouse 70418aa13d1SBram Moolenaar call delete('Xbuf') 70518aa13d1SBram Moolenaar call test_setmouse(2, 11) 70618aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftMouse>") 70718aa13d1SBram Moolenaar call test_setmouse(2, 16) 70818aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftRelease>y") 709733d259aSBram Moolenaar call TermWait(buf, 50) 71018aa13d1SBram Moolenaar call term_sendkeys(buf, ":call writefile([@\"], 'Xbuf')\<CR>") 711733d259aSBram Moolenaar call TermWait(buf, 50) 71218aa13d1SBram Moolenaar call assert_equal('yellow', readfile('Xbuf')[0]) 71318aa13d1SBram Moolenaar 71418aa13d1SBram Moolenaar " Test for selecting text using double click 71518aa13d1SBram Moolenaar call delete('Xbuf') 71618aa13d1SBram Moolenaar call test_setmouse(1, 11) 71718aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftMouse>\<LeftRelease>\<LeftMouse>") 71818aa13d1SBram Moolenaar call test_setmouse(1, 17) 71918aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftRelease>y") 720733d259aSBram Moolenaar call TermWait(buf, 50) 72118aa13d1SBram Moolenaar call term_sendkeys(buf, ":call writefile([@\"], 'Xbuf')\<CR>") 722733d259aSBram Moolenaar call TermWait(buf, 50) 72318aa13d1SBram Moolenaar call assert_equal('three four', readfile('Xbuf')[0]) 72418aa13d1SBram Moolenaar 72518aa13d1SBram Moolenaar " Test for selecting a line using triple click 72618aa13d1SBram Moolenaar call delete('Xbuf') 72718aa13d1SBram Moolenaar call test_setmouse(3, 2) 72818aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftMouse>\<LeftRelease>\<LeftMouse>\<LeftRelease>\<LeftMouse>\<LeftRelease>y") 729733d259aSBram Moolenaar call TermWait(buf, 50) 73018aa13d1SBram Moolenaar call term_sendkeys(buf, ":call writefile([@\"], 'Xbuf')\<CR>") 731733d259aSBram Moolenaar call TermWait(buf, 50) 73218aa13d1SBram Moolenaar call assert_equal("vim emacs sublime nano\n", readfile('Xbuf')[0]) 73318aa13d1SBram Moolenaar 734*87fd0924SBram Moolenaar " Test for selecting a block using quadruple click 73518aa13d1SBram Moolenaar call delete('Xbuf') 73618aa13d1SBram Moolenaar call test_setmouse(1, 11) 73718aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftMouse>\<LeftRelease>\<LeftMouse>\<LeftRelease>\<LeftMouse>\<LeftRelease>\<LeftMouse>") 73818aa13d1SBram Moolenaar call test_setmouse(3, 13) 73918aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftRelease>y") 740733d259aSBram Moolenaar call TermWait(buf, 50) 74118aa13d1SBram Moolenaar call term_sendkeys(buf, ":call writefile([@\"], 'Xbuf')\<CR>") 742733d259aSBram Moolenaar call TermWait(buf, 50) 74318aa13d1SBram Moolenaar call assert_equal("ree\nyel\nsub", readfile('Xbuf')[0]) 74418aa13d1SBram Moolenaar 74518aa13d1SBram Moolenaar " Test for extending a selection using right click 74618aa13d1SBram Moolenaar call delete('Xbuf') 74718aa13d1SBram Moolenaar call test_setmouse(2, 9) 74818aa13d1SBram Moolenaar call term_sendkeys(buf, "\<LeftMouse>\<LeftRelease>") 74918aa13d1SBram Moolenaar call test_setmouse(2, 16) 75018aa13d1SBram Moolenaar call term_sendkeys(buf, "\<RightMouse>\<RightRelease>y") 751733d259aSBram Moolenaar call TermWait(buf, 50) 75218aa13d1SBram Moolenaar call term_sendkeys(buf, ":call writefile([@\"], 'Xbuf')\<CR>") 753733d259aSBram Moolenaar call TermWait(buf, 50) 75418aa13d1SBram Moolenaar call assert_equal("n yellow", readfile('Xbuf')[0]) 75518aa13d1SBram Moolenaar 75618aa13d1SBram Moolenaar " Test for pasting text using middle click 75718aa13d1SBram Moolenaar call delete('Xbuf') 75818aa13d1SBram Moolenaar call term_sendkeys(buf, ":let @r='bright '\<CR>") 75918aa13d1SBram Moolenaar call test_setmouse(2, 22) 76018aa13d1SBram Moolenaar call term_sendkeys(buf, "\"r\<MiddleMouse>\<MiddleRelease>") 761733d259aSBram Moolenaar call TermWait(buf, 50) 76218aa13d1SBram Moolenaar call term_sendkeys(buf, ":call writefile([getline(2)], 'Xbuf')\<CR>") 763733d259aSBram Moolenaar call TermWait(buf, 50) 76418aa13d1SBram Moolenaar call assert_equal("red bright blue", readfile('Xbuf')[0][-15:]) 76518aa13d1SBram Moolenaar 76618aa13d1SBram Moolenaar " cleanup 767733d259aSBram Moolenaar call TermWait(buf) 76818aa13d1SBram Moolenaar call StopVimInTerminal(buf) 76918aa13d1SBram Moolenaar let &mouse = save_mouse 77018aa13d1SBram Moolenaar let &term = save_term 77118aa13d1SBram Moolenaar let &ttymouse = save_ttymouse 77218aa13d1SBram Moolenaar let &clipboard = save_clipboard 77318aa13d1SBram Moolenaar set mousetime& 77418aa13d1SBram Moolenaar call delete('Xtest_mouse') 77518aa13d1SBram Moolenaar call delete('Xbuf') 77618aa13d1SBram Moolenaarendfunc 77718aa13d1SBram Moolenaar 7788b9abfd8SBram Moolenaar" Test for sync buffer cwd with shell's pwd 7798b9abfd8SBram Moolenaarfunc Test_terminal_sync_shell_dir() 7808b9abfd8SBram Moolenaar CheckUnix 7818b9abfd8SBram Moolenaar " The test always use sh (see src/testdir/unix.vim). 7828b9abfd8SBram Moolenaar " However, BSD's sh doesn't seem to play well with OSC 7 escape sequence. 7838b9abfd8SBram Moolenaar CheckNotBSD 7848b9abfd8SBram Moolenaar 7858b9abfd8SBram Moolenaar set asd 7868b9abfd8SBram Moolenaar " , is 7878b9abfd8SBram Moolenaar " 1. a valid character for directory names 7888b9abfd8SBram Moolenaar " 2. a reserved character in url-encoding 7898b9abfd8SBram Moolenaar let chars = ",a" 7908b9abfd8SBram Moolenaar " "," is url-encoded as '%2C' 7918b9abfd8SBram Moolenaar let chars_url = "%2Ca" 7928b9abfd8SBram Moolenaar let tmpfolder = fnamemodify(tempname(),':h').'/'.chars 7938b9abfd8SBram Moolenaar let tmpfolder_url = fnamemodify(tempname(),':h').'/'.chars_url 7948b9abfd8SBram Moolenaar call mkdir(tmpfolder, "p") 7958b9abfd8SBram Moolenaar let buf = Run_shell_in_terminal({}) 7968b9abfd8SBram Moolenaar call term_sendkeys(buf, "echo -ne $'\\e\]7;file://".tmpfolder_url."\\a'\<CR>") 7978b9abfd8SBram Moolenaar "call term_sendkeys(buf, "cd ".tmpfolder."\<CR>") 7988b9abfd8SBram Moolenaar call TermWait(buf) 7998b9abfd8SBram Moolenaar if has("mac") 8008b9abfd8SBram Moolenaar let expected = "/private".tmpfolder 8018b9abfd8SBram Moolenaar else 8028b9abfd8SBram Moolenaar let expected = tmpfolder 8038b9abfd8SBram Moolenaar endif 8048b9abfd8SBram Moolenaar call assert_equal(expected, getcwd(winnr())) 80582820d9bSBram Moolenaar 80682820d9bSBram Moolenaar set noasd 8078b9abfd8SBram Moolenaarendfunc 8088b9abfd8SBram Moolenaar 80918aa13d1SBram Moolenaar" Test for modeless selection in a terminal 81018aa13d1SBram Moolenaarfunc Test_term_modeless_selection() 81118aa13d1SBram Moolenaar CheckUnix 81218aa13d1SBram Moolenaar CheckNotGui 81318aa13d1SBram Moolenaar CheckRunVimInTerminal 81418aa13d1SBram Moolenaar CheckFeature clipboard_working 81518aa13d1SBram Moolenaar 81618aa13d1SBram Moolenaar let save_mouse = &mouse 81718aa13d1SBram Moolenaar let save_term = &term 81818aa13d1SBram Moolenaar let save_ttymouse = &ttymouse 81918aa13d1SBram Moolenaar set mouse=a term=xterm ttymouse=sgr mousetime=200 82018aa13d1SBram Moolenaar set clipboard=autoselectml 82118aa13d1SBram Moolenaar 82218aa13d1SBram Moolenaar let lines =<< trim END 82318aa13d1SBram Moolenaar one two three four five 82418aa13d1SBram Moolenaar red green yellow red blue 82518aa13d1SBram Moolenaar vim emacs sublime nano 82618aa13d1SBram Moolenaar END 82718aa13d1SBram Moolenaar call writefile(lines, 'Xtest_modeless') 82818aa13d1SBram Moolenaar 82918aa13d1SBram Moolenaar " Create a terminal window running Vim for the test with mouse disabled 83018aa13d1SBram Moolenaar let prev_win = win_getid() 83118aa13d1SBram Moolenaar let buf = RunVimInTerminal('Xtest_modeless -n', {}) 83218aa13d1SBram Moolenaar call term_sendkeys(buf, ":set nocompatible\<CR>") 83318aa13d1SBram Moolenaar call term_sendkeys(buf, ":set mouse=\<CR>") 834733d259aSBram Moolenaar call TermWait(buf) 83518aa13d1SBram Moolenaar redraw! 83618aa13d1SBram Moolenaar 83718aa13d1SBram Moolenaar " Use the mouse to enter the terminal window 83818aa13d1SBram Moolenaar call win_gotoid(prev_win) 83918aa13d1SBram Moolenaar call feedkeys(MouseLeftClickCode(1, 1), 'x') 84018aa13d1SBram Moolenaar call feedkeys(MouseLeftReleaseCode(1, 1), 'x') 841733d259aSBram Moolenaar call TermWait(buf) 84218aa13d1SBram Moolenaar call assert_equal(1, getwininfo(win_getid())[0].terminal) 84318aa13d1SBram Moolenaar 84418aa13d1SBram Moolenaar " Test for copying a modeless selection to clipboard 84518aa13d1SBram Moolenaar let @* = 'clean' 84618aa13d1SBram Moolenaar " communicating with X server may take a little time 84718aa13d1SBram Moolenaar sleep 100m 84818aa13d1SBram Moolenaar call feedkeys(MouseLeftClickCode(2, 3), 'x') 84918aa13d1SBram Moolenaar call feedkeys(MouseLeftDragCode(2, 11), 'x') 85018aa13d1SBram Moolenaar call feedkeys(MouseLeftReleaseCode(2, 11), 'x') 85118aa13d1SBram Moolenaar call assert_equal("d green y", @*) 85218aa13d1SBram Moolenaar 85318aa13d1SBram Moolenaar " cleanup 854733d259aSBram Moolenaar call TermWait(buf) 85518aa13d1SBram Moolenaar call StopVimInTerminal(buf) 85618aa13d1SBram Moolenaar let &mouse = save_mouse 85718aa13d1SBram Moolenaar let &term = save_term 85818aa13d1SBram Moolenaar let &ttymouse = save_ttymouse 85918aa13d1SBram Moolenaar set mousetime& clipboard& 86018aa13d1SBram Moolenaar call delete('Xtest_modeless') 86118aa13d1SBram Moolenaar new | only! 86218aa13d1SBram Moolenaarendfunc 86318aa13d1SBram Moolenaar 864a4b44261SBram Moolenaarfunc Test_terminal_getwinpos() 865a4b44261SBram Moolenaar CheckRunVimInTerminal 866a4b44261SBram Moolenaar 867a4b44261SBram Moolenaar " split, go to the bottom-right window 868a4b44261SBram Moolenaar split 869a4b44261SBram Moolenaar wincmd j 870a4b44261SBram Moolenaar set splitright 871a4b44261SBram Moolenaar 87242095217SBram Moolenaar let buf = RunVimInTerminal('', {'cols': 60}) 87342095217SBram Moolenaar call TermWait(buf, 100) 87442095217SBram Moolenaar call term_sendkeys(buf, ":echo getwinpos(500)\<CR>") 875a4b44261SBram Moolenaar 876a4b44261SBram Moolenaar " Find the output of getwinpos() in the bottom line. 877a4b44261SBram Moolenaar let rows = term_getsize(buf)[0] 878a4b44261SBram Moolenaar call WaitForAssert({-> assert_match('\[\d\+, \d\+\]', term_getline(buf, rows))}) 879a4b44261SBram Moolenaar let line = term_getline(buf, rows) 880a4b44261SBram Moolenaar let xpos = str2nr(substitute(line, '\[\(\d\+\), \d\+\]', '\1', '')) 881a4b44261SBram Moolenaar let ypos = str2nr(substitute(line, '\[\d\+, \(\d\+\)\]', '\1', '')) 882a4b44261SBram Moolenaar 883a4b44261SBram Moolenaar " Position must be bigger than the getwinpos() result of Vim itself. 884a4b44261SBram Moolenaar " The calculation in the console assumes a 10 x 7 character cell. 885a4b44261SBram Moolenaar " In the GUI it can be more, let's assume a 20 x 14 cell. 886a4b44261SBram Moolenaar " And then add 100 / 200 tolerance. 887a4b44261SBram Moolenaar let [xroot, yroot] = getwinpos() 888a4b44261SBram Moolenaar let winpos = 50->getwinpos() 889a4b44261SBram Moolenaar call assert_equal(xroot, winpos[0]) 890a4b44261SBram Moolenaar call assert_equal(yroot, winpos[1]) 8917dfc5ce7SBram Moolenaar let [winrow, wincol] = win_screenpos(0) 892a4b44261SBram Moolenaar let xoff = wincol * (has('gui_running') ? 14 : 7) + 100 893a4b44261SBram Moolenaar let yoff = winrow * (has('gui_running') ? 20 : 10) + 200 894a4b44261SBram Moolenaar call assert_inrange(xroot + 2, xroot + xoff, xpos) 895a4b44261SBram Moolenaar call assert_inrange(yroot + 2, yroot + yoff, ypos) 896a4b44261SBram Moolenaar 897a4b44261SBram Moolenaar call TermWait(buf) 898a4b44261SBram Moolenaar call term_sendkeys(buf, ":q\<CR>") 899a4b44261SBram Moolenaar call StopVimInTerminal(buf) 900a4b44261SBram Moolenaar set splitright& 901a4b44261SBram Moolenaar only! 902a4b44261SBram Moolenaarendfunc 903a4b44261SBram Moolenaar 90418aa13d1SBram Moolenaar 90518aa13d1SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 906