2020-06-13 21:12:20 +08:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
from pexpect_helper import SpawnedProc
|
|
|
|
|
|
|
|
sp = SpawnedProc()
|
|
|
|
send, sendline, sleep, expect_prompt, expect_re, expect_str = (
|
|
|
|
sp.send,
|
|
|
|
sp.sendline,
|
|
|
|
sp.sleep,
|
|
|
|
sp.expect_prompt,
|
|
|
|
sp.expect_re,
|
|
|
|
sp.expect_str,
|
|
|
|
)
|
|
|
|
|
|
|
|
from time import sleep
|
|
|
|
from subprocess import call
|
2020-11-10 02:27:56 +08:00
|
|
|
import os
|
|
|
|
import signal
|
2020-06-13 21:12:20 +08:00
|
|
|
|
|
|
|
# Test job summary for interactive shells.
|
|
|
|
expect_prompt()
|
|
|
|
|
|
|
|
sendline("function fish_job_summary; string join ':' $argv; end")
|
|
|
|
expect_prompt()
|
|
|
|
|
|
|
|
# fish_job_summary is called when background job ends.
|
|
|
|
sendline("sleep 0.5 &")
|
|
|
|
expect_prompt()
|
2020-08-08 21:50:02 +08:00
|
|
|
expect_re("[0-9]+:0:sleep 0.5 &:ENDED", timeout=20)
|
2020-06-13 21:12:20 +08:00
|
|
|
sendline("")
|
|
|
|
expect_prompt()
|
|
|
|
|
|
|
|
# fish_job_summary is called when background job is signalled.
|
|
|
|
# cmd_line correctly prints only the actually backgrounded job.
|
2020-11-10 02:27:56 +08:00
|
|
|
sendline("false; sleep 20 &; true")
|
2020-06-13 21:12:20 +08:00
|
|
|
expect_prompt()
|
2020-11-10 02:27:56 +08:00
|
|
|
sendline("set -l my_pid $last_pid")
|
|
|
|
expect_prompt("")
|
2020-08-13 00:36:43 +08:00
|
|
|
sendline("jobs")
|
2020-08-13 06:04:53 +08:00
|
|
|
expect_re("Job.*Group.*(CPU)?.*State.*Command")
|
2020-11-10 02:27:56 +08:00
|
|
|
expect_re(".*running.*sleep 20 &")
|
2020-09-04 23:51:55 +08:00
|
|
|
expect_prompt()
|
2020-11-10 02:27:56 +08:00
|
|
|
sendline("echo $my_pid")
|
2020-11-22 21:39:48 +08:00
|
|
|
m = expect_re("\d+\r\n")
|
2020-08-13 00:36:43 +08:00
|
|
|
expect_prompt()
|
2020-11-10 02:27:56 +08:00
|
|
|
os.kill(int(m.group()), signal.SIGTERM)
|
|
|
|
expect_re("[0-9]+:0:sleep 20 &:SIGTERM:Polite quit request", timeout=20)
|
2020-06-13 21:12:20 +08:00
|
|
|
sendline("")
|
|
|
|
expect_prompt()
|
|
|
|
|
|
|
|
# fish_job_summary is called when foreground job is signalled.
|
|
|
|
# cmd_line contains the entire pipeline. proc_id and proc_name are set in a pipeline.
|
|
|
|
sendline("true | sleep 6")
|
|
|
|
sleep(0.100)
|
2021-09-05 04:32:51 +08:00
|
|
|
# Beware: Mac pkill requires that the -P argument come before the process name,
|
|
|
|
# else the -P argument is ignored.
|
|
|
|
call(["pkill", "-KILL", "-P", str(sp.spawn.pid), "sleep"])
|
2020-08-08 21:50:02 +08:00
|
|
|
expect_re("[0-9]+:1:true|sleep 6:SIGKILL:Forced quit:[0-9]+:sleep", timeout=20)
|