diff src/testdir/test_suspend.vim @ 23165:a916fca16d4b v8.2.2128

patch 8.2.2128: there is no way to do something on CTRL-Z Commit: https://github.com/vim/vim/commit/100118c73ac068137cd298d22953896242752523 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Dec 11 19:30:34 2020 +0100 patch 8.2.2128: there is no way to do something on CTRL-Z Problem: There is no way to do something on CTRL-Z. Solution: Add VimSuspend and VimResume autocommand events. (closes https://github.com/vim/vim/issues/7450)
author Bram Moolenaar <Bram@vim.org>
date Fri, 11 Dec 2020 19:45:04 +0100
parents 08940efa6b4e
children 3071d91e52f0
line wrap: on
line diff
--- a/src/testdir/test_suspend.vim
+++ b/src/testdir/test_suspend.vim
@@ -61,4 +61,48 @@ func Test_suspend()
   call delete('Xfoo')
 endfunc
 
+func Test_suspend_autocmd()
+  CheckFeature terminal
+  CheckExecutable /bin/sh
+
+  let buf = term_start('/bin/sh', #{term_rows: 6})
+  " Wait for shell prompt.
+  call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))})
+
+  call term_sendkeys(buf, v:progpath
+        \               . " --clean -X"
+        \               . " -c 'set nu'"
+        \               . " -c 'let g:count = 0'"
+        \               . " -c 'au VimSuspend * let g:count += 1'"
+        \               . " -c 'au VimResume * let g:count += 1'"
+        \               . " -c 'call setline(1, \"foo\")'"
+        \               . " Xfoo\<CR>")
+  " Cursor in terminal buffer should be on first line in spawned vim.
+  call WaitForAssert({-> assert_equal('  1 foo', term_getline(buf, '.'))})
+
+  for suspend_cmd in [":suspend\<CR>",
+        \             ":stop\<CR>",
+        \             ":suspend!\<CR>",
+        \             ":stop!\<CR>",
+        \             "\<C-Z>"]
+    " Suspend and wait for shell prompt.  Then "fg" will restore Vim.
+    call term_sendkeys(buf, suspend_cmd)
+    call CheckSuspended(buf, 0)
+  endfor
+
+  call term_sendkeys(buf, ":echo g:count\<CR>")
+  call TermWait(buf)
+  call WaitForAssert({-> assert_match('^10', term_getline(buf, 6))})
+
+  " Quit gracefully to dump coverage information.
+  call term_sendkeys(buf, ":qall!\<CR>")
+  call TermWait(buf)
+  " Wait until Vim actually exited and shell shows a prompt
+  call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))})
+  call StopShellInTerminal(buf)
+
+  exe buf . 'bwipe!'
+  call delete('Xfoo')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab