xref: /vim-8.2.3635/src/testdir/test_suspend.vim (revision 100118c7)
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