13b30168fSBram Moolenaar" Test :suspend 23b30168fSBram Moolenaar 36d91bcb4SBram Moolenaarsource check.vim 47a39dd7fSBram Moolenaarsource term_util.vim 53b30168fSBram Moolenaar 6a8356bc1SBram Moolenaarfunc CheckSuspended(buf, fileExists) 7a8356bc1SBram Moolenaar call WaitForAssert({-> assert_match('[$#] $', term_getline(a:buf, '.'))}) 8a8356bc1SBram Moolenaar 9a8356bc1SBram Moolenaar if a:fileExists 10a8356bc1SBram Moolenaar call assert_equal(['foo'], readfile('Xfoo')) 11a8356bc1SBram Moolenaar else 12a8356bc1SBram Moolenaar " Without 'autowrite', buffer should not be written. 13a8356bc1SBram Moolenaar call assert_equal(0, filereadable('Xfoo')) 14a8356bc1SBram Moolenaar endif 15a8356bc1SBram Moolenaar 16a8356bc1SBram Moolenaar call term_sendkeys(a:buf, "fg\<CR>\<C-L>") 17a8356bc1SBram Moolenaar call WaitForAssert({-> assert_equal(' 1 foo', term_getline(a:buf, '.'))}) 18a8356bc1SBram Moolenaarendfunc 19a8356bc1SBram Moolenaar 203b30168fSBram Moolenaarfunc Test_suspend() 216d91bcb4SBram Moolenaar CheckFeature terminal 226d91bcb4SBram Moolenaar CheckExecutable /bin/sh 233b30168fSBram Moolenaar 243b30168fSBram Moolenaar let buf = term_start('/bin/sh') 253b30168fSBram Moolenaar " Wait for shell prompt. 260f62cf5bSBram Moolenaar call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))}) 273b30168fSBram Moolenaar 28185d68a9SBram Moolenaar call term_sendkeys(buf, v:progpath 29185d68a9SBram Moolenaar \ . " --clean -X" 303b30168fSBram Moolenaar \ . " -c 'set nu'" 313b30168fSBram Moolenaar \ . " -c 'call setline(1, \"foo\")'" 323b30168fSBram Moolenaar \ . " Xfoo\<CR>") 333b30168fSBram Moolenaar " Cursor in terminal buffer should be on first line in spawned vim. 343b30168fSBram Moolenaar call WaitForAssert({-> assert_equal(' 1 foo', term_getline(buf, '.'))}) 353b30168fSBram Moolenaar 363b30168fSBram Moolenaar for suspend_cmd in [":suspend\<CR>", 373b30168fSBram Moolenaar \ ":stop\<CR>", 383b30168fSBram Moolenaar \ ":suspend!\<CR>", 393b30168fSBram Moolenaar \ ":stop!\<CR>", 403b30168fSBram Moolenaar \ "\<C-Z>"] 413b30168fSBram Moolenaar " Suspend and wait for shell prompt. 423b30168fSBram Moolenaar call term_sendkeys(buf, suspend_cmd) 43a8356bc1SBram Moolenaar call CheckSuspended(buf, 0) 443b30168fSBram Moolenaar endfor 453b30168fSBram Moolenaar 463b30168fSBram Moolenaar " Test that :suspend! with 'autowrite' writes content of buffers if modified. 473b30168fSBram Moolenaar call term_sendkeys(buf, ":set autowrite\<CR>") 483b30168fSBram Moolenaar call assert_equal(0, filereadable('Xfoo')) 493b30168fSBram Moolenaar call term_sendkeys(buf, ":suspend\<CR>") 503b30168fSBram Moolenaar " Wait for shell prompt. 51a8356bc1SBram Moolenaar call CheckSuspended(buf, 1) 523b30168fSBram Moolenaar 533020ccb1SBram Moolenaar " Quit gracefully to dump coverage information. 543020ccb1SBram Moolenaar call term_sendkeys(buf, ":qall!\<CR>") 556a2c5a7dSBram Moolenaar call TermWait(buf) 5699922442SBram Moolenaar " Wait until Vim actually exited and shell shows a prompt 5799922442SBram Moolenaar call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))}) 587a39dd7fSBram Moolenaar call StopShellInTerminal(buf) 593020ccb1SBram Moolenaar 603b30168fSBram Moolenaar exe buf . 'bwipe!' 613b30168fSBram Moolenaar call delete('Xfoo') 623b30168fSBram Moolenaarendfunc 636d91bcb4SBram Moolenaar 64*100118c7SBram Moolenaarfunc Test_suspend_autocmd() 65*100118c7SBram Moolenaar CheckFeature terminal 66*100118c7SBram Moolenaar CheckExecutable /bin/sh 67*100118c7SBram Moolenaar 68*100118c7SBram Moolenaar let buf = term_start('/bin/sh', #{term_rows: 6}) 69*100118c7SBram Moolenaar " Wait for shell prompt. 70*100118c7SBram Moolenaar call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))}) 71*100118c7SBram Moolenaar 72*100118c7SBram Moolenaar call term_sendkeys(buf, v:progpath 73*100118c7SBram Moolenaar \ . " --clean -X" 74*100118c7SBram Moolenaar \ . " -c 'set nu'" 75*100118c7SBram Moolenaar \ . " -c 'let g:count = 0'" 76*100118c7SBram Moolenaar \ . " -c 'au VimSuspend * let g:count += 1'" 77*100118c7SBram Moolenaar \ . " -c 'au VimResume * let g:count += 1'" 78*100118c7SBram Moolenaar \ . " -c 'call setline(1, \"foo\")'" 79*100118c7SBram Moolenaar \ . " Xfoo\<CR>") 80*100118c7SBram Moolenaar " Cursor in terminal buffer should be on first line in spawned vim. 81*100118c7SBram Moolenaar call WaitForAssert({-> assert_equal(' 1 foo', term_getline(buf, '.'))}) 82*100118c7SBram Moolenaar 83*100118c7SBram Moolenaar for suspend_cmd in [":suspend\<CR>", 84*100118c7SBram Moolenaar \ ":stop\<CR>", 85*100118c7SBram Moolenaar \ ":suspend!\<CR>", 86*100118c7SBram Moolenaar \ ":stop!\<CR>", 87*100118c7SBram Moolenaar \ "\<C-Z>"] 88*100118c7SBram Moolenaar " Suspend and wait for shell prompt. Then "fg" will restore Vim. 89*100118c7SBram Moolenaar call term_sendkeys(buf, suspend_cmd) 90*100118c7SBram Moolenaar call CheckSuspended(buf, 0) 91*100118c7SBram Moolenaar endfor 92*100118c7SBram Moolenaar 93*100118c7SBram Moolenaar call term_sendkeys(buf, ":echo g:count\<CR>") 94*100118c7SBram Moolenaar call TermWait(buf) 95*100118c7SBram Moolenaar call WaitForAssert({-> assert_match('^10', term_getline(buf, 6))}) 96*100118c7SBram Moolenaar 97*100118c7SBram Moolenaar " Quit gracefully to dump coverage information. 98*100118c7SBram Moolenaar call term_sendkeys(buf, ":qall!\<CR>") 99*100118c7SBram Moolenaar call TermWait(buf) 100*100118c7SBram Moolenaar " Wait until Vim actually exited and shell shows a prompt 101*100118c7SBram Moolenaar call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))}) 102*100118c7SBram Moolenaar call StopShellInTerminal(buf) 103*100118c7SBram Moolenaar 104*100118c7SBram Moolenaar exe buf . 'bwipe!' 105*100118c7SBram Moolenaar call delete('Xfoo') 106*100118c7SBram Moolenaarendfunc 107*100118c7SBram Moolenaar 1086d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 109