@@ -61,4 +61,48 @@ func Test_suspend()
6161 call delete (' Xfoo' )
6262endfunc
6363
64+ func Test_suspend_autocmd ()
65+ CheckFeature terminal
66+ CheckExecutable /bin/ sh
67+
68+ let buf = term_start (' /bin/sh' , #{term_rows: 6 })
69+ " Wait for shell prompt.
70+ call WaitForAssert ({- > assert_match (' [$#] $' , term_getline (buf , ' .' ))})
71+
72+ call term_sendkeys (buf , v: progpath
73+ \ . " --clean -X"
74+ \ . " -c 'set nu'"
75+ \ . " -c 'let g:count = 0'"
76+ \ . " -c 'au VimSuspend * let g:count += 1'"
77+ \ . " -c 'au VimResume * let g:count += 1'"
78+ \ . " -c 'call setline(1, \" foo\" )'"
79+ \ . " Xfoo\<CR> " )
80+ " Cursor in terminal buffer should be on first line in spawned vim.
81+ call WaitForAssert ({- > assert_equal (' 1 foo' , term_getline (buf , ' .' ))})
82+
83+ for suspend_cmd in [" :suspend\<CR> " ,
84+ \ " :stop\<CR> " ,
85+ \ " :suspend!\<CR> " ,
86+ \ " :stop!\<CR> " ,
87+ \ " \<C-Z> " ]
88+ " Suspend and wait for shell prompt. Then "fg" will restore Vim.
89+ call term_sendkeys (buf , suspend_cmd)
90+ call CheckSuspended (buf , 0 )
91+ endfor
92+
93+ call term_sendkeys (buf , " :echo g:count\<CR> " )
94+ call TermWait (buf )
95+ call WaitForAssert ({- > assert_match (' ^10' , term_getline (buf , 6 ))})
96+
97+ " Quit gracefully to dump coverage information.
98+ call term_sendkeys (buf , " :qall!\<CR> " )
99+ call TermWait (buf )
100+ " Wait until Vim actually exited and shell shows a prompt
101+ call WaitForAssert ({- > assert_match (' [$#] $' , term_getline (buf , ' .' ))})
102+ call StopShellInTerminal (buf )
103+
104+ exe buf . ' bwipe!'
105+ call delete (' Xfoo' )
106+ endfunc
107+
64108" vim: shiftwidth = 2 sts = 2 expandtab
0 commit comments