1f273245fSBram Moolenaar" Tests for setting 'buftype' to "prompt" 2f273245fSBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram MoolenaarCheckFeature channel 5f273245fSBram Moolenaar 6f273245fSBram Moolenaarsource shared.vim 7f273245fSBram Moolenaarsource screendump.vim 8f273245fSBram Moolenaar 96b810d92SBram Moolenaarfunc CanTestPromptBuffer() 10f273245fSBram Moolenaar " We need to use a terminal window to be able to feed keys without leaving 11f273245fSBram Moolenaar " Insert mode. 126d91bcb4SBram Moolenaar CheckFeature terminal 136d91bcb4SBram Moolenaar 146b810d92SBram Moolenaar " TODO: make the tests work on MS-Windows 156d91bcb4SBram Moolenaar CheckNotMSWindows 166b810d92SBram Moolenaarendfunc 176b810d92SBram Moolenaar 186b810d92SBram Moolenaarfunc WriteScript(name) 19f273245fSBram Moolenaar call writefile([ 20f273245fSBram Moolenaar \ 'func TextEntered(text)', 21f273245fSBram Moolenaar \ ' if a:text == "exit"', 2271ef1ba5SBram Moolenaar \ ' " Reset &modified to allow the buffer to be closed.', 2371ef1ba5SBram Moolenaar \ ' set nomodified', 24f273245fSBram Moolenaar \ ' stopinsert', 25f273245fSBram Moolenaar \ ' close', 26f273245fSBram Moolenaar \ ' else', 27f273245fSBram Moolenaar \ ' " Add the output above the current prompt.', 28f273245fSBram Moolenaar \ ' call append(line("$") - 1, "Command: \"" . a:text . "\"")', 29f273245fSBram Moolenaar \ ' " Reset &modified to allow the buffer to be closed.', 30f273245fSBram Moolenaar \ ' set nomodified', 31f273245fSBram Moolenaar \ ' call timer_start(20, {id -> TimerFunc(a:text)})', 32f273245fSBram Moolenaar \ ' endif', 33f273245fSBram Moolenaar \ 'endfunc', 34f273245fSBram Moolenaar \ '', 35f273245fSBram Moolenaar \ 'func TimerFunc(text)', 36f273245fSBram Moolenaar \ ' " Add the output above the current prompt.', 37f273245fSBram Moolenaar \ ' call append(line("$") - 1, "Result: \"" . a:text . "\"")', 383339d3daSBram Moolenaar \ ' " Reset &modified to allow the buffer to be closed.', 393339d3daSBram Moolenaar \ ' set nomodified', 40f273245fSBram Moolenaar \ 'endfunc', 41f273245fSBram Moolenaar \ '', 42f273245fSBram Moolenaar \ 'call setline(1, "other buffer")', 433339d3daSBram Moolenaar \ 'set nomodified', 44f273245fSBram Moolenaar \ 'new', 45f273245fSBram Moolenaar \ 'set buftype=prompt', 46f273245fSBram Moolenaar \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))', 473f4f3d8eSBram Moolenaar \ 'eval bufnr("")->prompt_setprompt("cmd: ")', 48f273245fSBram Moolenaar \ 'startinsert', 496b810d92SBram Moolenaar \ ], a:name) 506b810d92SBram Moolenaarendfunc 516b810d92SBram Moolenaar 526b810d92SBram Moolenaarfunc Test_prompt_basic() 536d91bcb4SBram Moolenaar call CanTestPromptBuffer() 546b810d92SBram Moolenaar let scriptName = 'XpromptscriptBasic' 556b810d92SBram Moolenaar call WriteScript(scriptName) 566b810d92SBram Moolenaar 576b810d92SBram Moolenaar let buf = RunVimInTerminal('-S ' . scriptName, {}) 583f4f3d8eSBram Moolenaar call WaitForAssert({-> assert_equal('cmd:', term_getline(buf, 1))}) 59f273245fSBram Moolenaar 60f273245fSBram Moolenaar call term_sendkeys(buf, "hello\<CR>") 613f4f3d8eSBram Moolenaar call WaitForAssert({-> assert_equal('cmd: hello', term_getline(buf, 1))}) 62f273245fSBram Moolenaar call WaitForAssert({-> assert_equal('Command: "hello"', term_getline(buf, 2))}) 63f273245fSBram Moolenaar call WaitForAssert({-> assert_equal('Result: "hello"', term_getline(buf, 3))}) 64f273245fSBram Moolenaar 65f273245fSBram Moolenaar call term_sendkeys(buf, "exit\<CR>") 66f273245fSBram Moolenaar call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))}) 67f273245fSBram Moolenaar 68f273245fSBram Moolenaar call StopVimInTerminal(buf) 696b810d92SBram Moolenaar call delete(scriptName) 706b810d92SBram Moolenaarendfunc 716b810d92SBram Moolenaar 726b810d92SBram Moolenaarfunc Test_prompt_editing() 736d91bcb4SBram Moolenaar call CanTestPromptBuffer() 746b810d92SBram Moolenaar let scriptName = 'XpromptscriptEditing' 756b810d92SBram Moolenaar call WriteScript(scriptName) 766b810d92SBram Moolenaar 776b810d92SBram Moolenaar let buf = RunVimInTerminal('-S ' . scriptName, {}) 783f4f3d8eSBram Moolenaar call WaitForAssert({-> assert_equal('cmd:', term_getline(buf, 1))}) 796b810d92SBram Moolenaar 806b810d92SBram Moolenaar let bs = "\<BS>" 816b810d92SBram Moolenaar call term_sendkeys(buf, "hello" . bs . bs) 823f4f3d8eSBram Moolenaar call WaitForAssert({-> assert_equal('cmd: hel', term_getline(buf, 1))}) 836b810d92SBram Moolenaar 846b810d92SBram Moolenaar let left = "\<Left>" 856b810d92SBram Moolenaar call term_sendkeys(buf, left . left . left . bs . '-') 863f4f3d8eSBram Moolenaar call WaitForAssert({-> assert_equal('cmd: -hel', term_getline(buf, 1))}) 876b810d92SBram Moolenaar 88ee8b787bSBram Moolenaar call term_sendkeys(buf, "\<C-O>lz") 89ee8b787bSBram Moolenaar call WaitForAssert({-> assert_equal('cmd: -hzel', term_getline(buf, 1))}) 90ee8b787bSBram Moolenaar 916b810d92SBram Moolenaar let end = "\<End>" 926b810d92SBram Moolenaar call term_sendkeys(buf, end . "x") 93ee8b787bSBram Moolenaar call WaitForAssert({-> assert_equal('cmd: -hzelx', term_getline(buf, 1))}) 946b810d92SBram Moolenaar 956b810d92SBram Moolenaar call term_sendkeys(buf, "\<C-U>exit\<CR>") 966b810d92SBram Moolenaar call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))}) 976b810d92SBram Moolenaar 986b810d92SBram Moolenaar call StopVimInTerminal(buf) 996b810d92SBram Moolenaar call delete(scriptName) 100f273245fSBram Moolenaarendfunc 10175a1a941SBram Moolenaar 10275a1a941SBram Moolenaarfunc Test_prompt_garbage_collect() 10375a1a941SBram Moolenaar func MyPromptCallback(x, text) 10475a1a941SBram Moolenaar " NOP 10575a1a941SBram Moolenaar endfunc 10675a1a941SBram Moolenaar func MyPromptInterrupt(x) 10775a1a941SBram Moolenaar " NOP 10875a1a941SBram Moolenaar endfunc 10975a1a941SBram Moolenaar 11075a1a941SBram Moolenaar new 11175a1a941SBram Moolenaar set buftype=prompt 1123f4f3d8eSBram Moolenaar eval bufnr('')->prompt_setcallback(function('MyPromptCallback', [{}])) 1133f4f3d8eSBram Moolenaar eval bufnr('')->prompt_setinterrupt(function('MyPromptInterrupt', [{}])) 11475a1a941SBram Moolenaar call test_garbagecollect_now() 11575a1a941SBram Moolenaar " Must not crash 11675a1a941SBram Moolenaar call feedkeys("\<CR>\<C-C>", 'xt') 11775a1a941SBram Moolenaar call assert_true(v:true) 11875a1a941SBram Moolenaar 119ca68ae13SBram Moolenaar call assert_fails("call prompt_setcallback(bufnr(), [])", 'E921:') 120ca68ae13SBram Moolenaar call assert_equal(0, prompt_setcallback({}, '')) 121ca68ae13SBram Moolenaar call assert_fails("call prompt_setinterrupt(bufnr(), [])", 'E921:') 122ca68ae13SBram Moolenaar call assert_equal(0, prompt_setinterrupt({}, '')) 123ca68ae13SBram Moolenaar 12475a1a941SBram Moolenaar delfunc MyPromptCallback 12575a1a941SBram Moolenaar bwipe! 12675a1a941SBram Moolenaarendfunc 127f5f1e10dSBram Moolenaar 1286f624485SBram Moolenaarfunc Test_prompt_backspace() 1296f624485SBram Moolenaar new 1306f624485SBram Moolenaar set buftype=prompt 1316f624485SBram Moolenaar call feedkeys("A123456\<Left>\<BS>\<Esc>", 'xt') 1326f624485SBram Moolenaar call assert_equal('% 12346', getline(1)) 1336f624485SBram Moolenaar bwipe! 1346f624485SBram Moolenaarendfunc 1356f624485SBram Moolenaar 136f5f1e10dSBram Moolenaar" Test for editing the prompt buffer 137f5f1e10dSBram Moolenaarfunc Test_prompt_buffer_edit() 138f5f1e10dSBram Moolenaar new 139f5f1e10dSBram Moolenaar set buftype=prompt 140f5f1e10dSBram Moolenaar normal! i 141f5f1e10dSBram Moolenaar call assert_beeps('normal! dd') 142f5f1e10dSBram Moolenaar call assert_beeps('normal! ~') 1431671f448SBram Moolenaar call assert_beeps('normal! o') 1441671f448SBram Moolenaar call assert_beeps('normal! O') 1451671f448SBram Moolenaar call assert_beeps('normal! p') 1461671f448SBram Moolenaar call assert_beeps('normal! P') 1471671f448SBram Moolenaar call assert_beeps('normal! u') 1481671f448SBram Moolenaar call assert_beeps('normal! ra') 1491671f448SBram Moolenaar call assert_beeps('normal! s') 1501671f448SBram Moolenaar call assert_beeps('normal! S') 1511671f448SBram Moolenaar call assert_beeps("normal! \<C-A>") 1521671f448SBram Moolenaar call assert_beeps("normal! \<C-X>") 153*3044324eSYegappan Lakshmanan call assert_beeps("normal! dp") 154*3044324eSYegappan Lakshmanan call assert_beeps("normal! do") 155845e0ee5SBram Moolenaar " pressing CTRL-W in the prompt buffer should trigger the window commands 156845e0ee5SBram Moolenaar call assert_equal(1, winnr()) 157845e0ee5SBram Moolenaar exe "normal A\<C-W>\<C-W>" 158845e0ee5SBram Moolenaar call assert_equal(2, winnr()) 159845e0ee5SBram Moolenaar wincmd w 160f5f1e10dSBram Moolenaar close! 161ad48e6c1SBram Moolenaar call assert_equal(0, prompt_setprompt([], '')) 162f5f1e10dSBram Moolenaarendfunc 163f5f1e10dSBram Moolenaar 164077cc7aaSBram Moolenaarfunc Test_prompt_buffer_getbufinfo() 165077cc7aaSBram Moolenaar new 166077cc7aaSBram Moolenaar call assert_equal('', prompt_getprompt('%')) 167077cc7aaSBram Moolenaar call assert_equal('', prompt_getprompt(bufnr('%'))) 168077cc7aaSBram Moolenaar let another_buffer = bufnr('%') 169077cc7aaSBram Moolenaar 170077cc7aaSBram Moolenaar set buftype=prompt 171077cc7aaSBram Moolenaar call assert_equal('% ', prompt_getprompt('%')) 172077cc7aaSBram Moolenaar call prompt_setprompt( bufnr( '%' ), 'This is a test: ' ) 173077cc7aaSBram Moolenaar call assert_equal('This is a test: ', prompt_getprompt('%')) 174077cc7aaSBram Moolenaar 175077cc7aaSBram Moolenaar call prompt_setprompt( bufnr( '%' ), '' ) 176077cc7aaSBram Moolenaar call assert_equal('', '%'->prompt_getprompt()) 177077cc7aaSBram Moolenaar 178077cc7aaSBram Moolenaar call prompt_setprompt( bufnr( '%' ), 'Another: ' ) 179077cc7aaSBram Moolenaar call assert_equal('Another: ', prompt_getprompt('%')) 180077cc7aaSBram Moolenaar let another = bufnr('%') 181077cc7aaSBram Moolenaar 182077cc7aaSBram Moolenaar new 183077cc7aaSBram Moolenaar 184077cc7aaSBram Moolenaar call assert_equal('', prompt_getprompt('%')) 185077cc7aaSBram Moolenaar call assert_equal('Another: ', prompt_getprompt(another)) 186077cc7aaSBram Moolenaar 187077cc7aaSBram Moolenaar " Doesn't exist 188077cc7aaSBram Moolenaar let buffers_before = len( getbufinfo() ) 189077cc7aaSBram Moolenaar call assert_equal('', prompt_getprompt( bufnr('$') + 1)) 190077cc7aaSBram Moolenaar call assert_equal(buffers_before, len( getbufinfo())) 191077cc7aaSBram Moolenaar 192077cc7aaSBram Moolenaar " invalid type 193077cc7aaSBram Moolenaar call assert_fails('call prompt_getprompt({})', 'E728:') 194077cc7aaSBram Moolenaar 195077cc7aaSBram Moolenaar %bwipe! 196077cc7aaSBram Moolenaarendfunc 197077cc7aaSBram Moolenaar 1984537bcc8SBram Moolenaarfunction! Test_prompt_while_writing_to_hidden_buffer() 1994537bcc8SBram Moolenaar call CanTestPromptBuffer() 2004537bcc8SBram Moolenaar CheckUnix 2014537bcc8SBram Moolenaar 2024537bcc8SBram Moolenaar " Make a job continuously write to a hidden buffer, check that the prompt 2034537bcc8SBram Moolenaar " buffer is not affected. 2044537bcc8SBram Moolenaar let scriptName = 'XpromptscriptHiddenBuf' 2054537bcc8SBram Moolenaar let script =<< trim END 2064537bcc8SBram Moolenaar set buftype=prompt 2074537bcc8SBram Moolenaar call prompt_setprompt( bufnr(), 'cmd:' ) 2084537bcc8SBram Moolenaar let job = job_start(['/bin/sh', '-c', 2094537bcc8SBram Moolenaar \ 'while true; 2104537bcc8SBram Moolenaar \ do echo line; 2114537bcc8SBram Moolenaar \ sleep 0.1; 2124537bcc8SBram Moolenaar \ done'], #{out_io: 'buffer', out_name: ''}) 2134537bcc8SBram Moolenaar startinsert 2144537bcc8SBram Moolenaar END 2154537bcc8SBram Moolenaar eval script->writefile(scriptName) 2164537bcc8SBram Moolenaar 2174537bcc8SBram Moolenaar let buf = RunVimInTerminal('-S ' .. scriptName, {}) 2184537bcc8SBram Moolenaar call WaitForAssert({-> assert_equal('cmd:', term_getline(buf, 1))}) 2194537bcc8SBram Moolenaar 2204537bcc8SBram Moolenaar call term_sendkeys(buf, 'test') 2214537bcc8SBram Moolenaar call WaitForAssert({-> assert_equal('cmd:test', term_getline(buf, 1))}) 2224537bcc8SBram Moolenaar call term_sendkeys(buf, 'test') 2234537bcc8SBram Moolenaar call WaitForAssert({-> assert_equal('cmd:testtest', term_getline(buf, 1))}) 2244537bcc8SBram Moolenaar call term_sendkeys(buf, 'test') 2254537bcc8SBram Moolenaar call WaitForAssert({-> assert_equal('cmd:testtesttest', term_getline(buf, 1))}) 2264537bcc8SBram Moolenaar 2274537bcc8SBram Moolenaar call StopVimInTerminal(buf) 2284537bcc8SBram Moolenaar call delete(scriptName) 2294537bcc8SBram Moolenaarendfunc 2304537bcc8SBram Moolenaar 231f5f1e10dSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 232