# vim: set filetype=expect:
#
# Test handling of the `exit` command.
set pid [spawn $fish]
expect_prompt

# Verify that if we attempt to exit with a job in the background we get warned
# about that job and are told to type `exit` a second time.
send "sleep 111 &\r"
expect_prompt
send "exit\r"
expect -re "There are still jobs active:\r
\r
   PID  Command\r
 *\\d+  sleep 111 &\r
\r
A second attempt to exit will terminate them.\r
Use 'disown PID' to remove jobs from the list without terminating them.\r"
expect_prompt

# Running anything other than `exit` should result in the same warning with
# the shell still running.
send "sleep 113 &\r"
expect_prompt
send "exit\r"
expect -re "There are still jobs active:\r
\r
   PID  Command\r
  *\\d+  sleep 113 &\r
  *\\d+  sleep 111 &\r
\r
A second attempt to exit will terminate them.\r
Use 'disown PID' to remove jobs from the list without terminating them.\r"
expect_prompt

# Verify that asking to exit a second time does so.
send "exit\r"
catch {expect default exp_continue} output
wait

# Verify all child processes have been killed. We don't use `-p $pid` because
# if the shell has a bug the child processes might have been reparented to pid
# 1 rather than killed.
set status [catch {exec pgrep -l -f "sleep 11"} output]
if {$status == 0} {
    puts stderr "Commands spawned by the shell still running after `exit`"
    puts stderr $output
}
