mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-02 16:04:05 +08:00
8bf8b10f68
See the changelog additions for user-visible changes. Since we enable/disable terminal protocols whenever we pass terminal ownership, tests can no longer run in parallel on the same terminal. For the same reason, readline shortcuts in the gdb REPL will not work anymore. As a remedy, use gdbserver, or lobby for CSI u support in libreadline. Add sleep to some tests, otherwise they fall (both in CI and locally). There are two weird failures on FreeBSD remaining, disable them for now https://github.com/fish-shell/fish-shell/pull/10359/checks?check_run_id=23330096362 Design and implementation borrows heavily from Kakoune. In future, we should try to implement more of the kitty progressive enhancements. Closes #10359
88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
from pexpect_helper import SpawnedProc, control
|
|
|
|
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,
|
|
)
|
|
expect_prompt()
|
|
|
|
sendline("bind '~' 'handle_tilde'")
|
|
expect_prompt()
|
|
|
|
# printing the current buffer should not remove quoting
|
|
sendline(
|
|
"function handle_tilde; echo; echo '@GUARD:1@'; commandline -b; echo '@/GUARD:1@'; commandline -b ''; end"
|
|
)
|
|
expect_prompt()
|
|
sendline("echo \en one \"two three\" four'five six'{7} 'eight~")
|
|
expect_prompt("\r\n@GUARD:1@\r\n(.*)\r\n@/GUARD:1@\r\n")
|
|
|
|
# printing the buffer with -o should remove quoting
|
|
sendline(
|
|
"function handle_tilde; echo; echo '@GUARD:2@'; commandline -bx; echo '@/GUARD:2@'; commandline -b ''; end"
|
|
)
|
|
expect_prompt()
|
|
sendline("echo one \"two three\" four'five six'{7} 'eight~")
|
|
expect_prompt("\r\n@GUARD:2@\r\n(.*)\r\n@/GUARD:2@\r\n")
|
|
|
|
# Check that we don't infinitely loop here.
|
|
sendline("function fish_mode_prompt; commandline -f repaint; end")
|
|
expect_prompt()
|
|
|
|
sendline("echo foo")
|
|
expect_prompt("foo")
|
|
|
|
# commandline is empty when a command is executed.
|
|
sendline("set what (commandline)")
|
|
expect_prompt()
|
|
sendline('echo "<$what>"')
|
|
expect_prompt("<>")
|
|
|
|
# Test for undocumented -I flag.
|
|
# TODO: consider removing.
|
|
sendline("commandline -I foo")
|
|
expect_prompt("foo")
|
|
|
|
# See that the commandline is updated immediately inside completions.
|
|
sendline("complete -c foo -xa '(commandline)'")
|
|
expect_prompt()
|
|
send("foo bar \t")
|
|
expect_str("foo bar foo\ bar\ ")
|
|
send("\b" * 64)
|
|
|
|
# Commandline works when run on its own (#8807).
|
|
sendline("commandline whatever")
|
|
expect_re("prompt [0-9]+>whatever")
|
|
|
|
# Test --current-process output
|
|
send(control("u"))
|
|
sendline(r"bind ctrl-b 'set tmp (commandline --current-process)'")
|
|
expect_prompt()
|
|
send("echo process1; echo process2")
|
|
send(control("a"))
|
|
send(control("b"))
|
|
send(control("k"))
|
|
sendline("echo first process is [$tmp]")
|
|
expect_str("first process is [echo process1]")
|
|
|
|
send("echo process # comment")
|
|
send(control("a"))
|
|
send(control("b"))
|
|
send(control("k"))
|
|
sendline('echo "process extent is [$tmp]"')
|
|
expect_str("process extent is [echo process # comment]")
|
|
|
|
# DISABLED because it keeps failing under ASAN
|
|
# sendline(r"bind ctrl-b 'set tmp (commandline --current-process | count)'")
|
|
# sendline(r'commandline "echo line1 \\" "# comment" "line2"')
|
|
# send(control("b"))
|
|
# send(control("u") * 6)
|
|
# sendline('echo "process spans $tmp lines"')
|
|
# expect_str("process spans 3 lines")
|