mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-04 17:23:52 +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
274 lines
3.9 KiB
Fish
274 lines
3.9 KiB
Fish
#RUN: %fish %s | %filter-ctrlseqs
|
|
# Test scoping rules for functions and status
|
|
|
|
set -e smurf
|
|
|
|
function setter
|
|
set smurf green
|
|
end
|
|
|
|
function unsetter
|
|
set -e smurf
|
|
end
|
|
|
|
function call1
|
|
set smurf blue
|
|
setter
|
|
if test $smurf = blue
|
|
echo Test 1 pass
|
|
else
|
|
echo Test 1 fail
|
|
end
|
|
end
|
|
|
|
function call2
|
|
set smurf blue
|
|
unsetter
|
|
if test $smurf = blue
|
|
echo Test 2 pass
|
|
else
|
|
echo Test 2 fail
|
|
end
|
|
end
|
|
|
|
call1
|
|
#CHECK: Test 1 pass
|
|
call2
|
|
#CHECK: Test 2 pass
|
|
|
|
function call3
|
|
setter
|
|
if test $smurf = green
|
|
echo Test 3 pass
|
|
else
|
|
echo Test 3 fail
|
|
end
|
|
end
|
|
|
|
function call4
|
|
unsetter
|
|
if not set -q smurf
|
|
echo Test 4 pass
|
|
else
|
|
echo Test 4 fail
|
|
end
|
|
end
|
|
|
|
set -g smurf yellow
|
|
call3
|
|
#CHECK: Test 3 pass
|
|
call4
|
|
#CHECK: Test 4 pass
|
|
|
|
set -l foo 1
|
|
set -g bar 2
|
|
set -U baz 3
|
|
|
|
set -l -q foo
|
|
|
|
if test $status -ne 0
|
|
echo Test 5 fail
|
|
else
|
|
echo Test 5 pass
|
|
end
|
|
#CHECK: Test 5 pass
|
|
|
|
if not set -g -q bar
|
|
echo Test 6 fail
|
|
else
|
|
echo Test 6 pass
|
|
end
|
|
#CHECK: Test 6 pass
|
|
|
|
if not set -U -q baz
|
|
echo Test 7 fail
|
|
else
|
|
echo Test 7 pass
|
|
end
|
|
#CHECK: Test 7 pass
|
|
|
|
set -u -l -q foo
|
|
if test $status -ne 0
|
|
echo Test 8 fail
|
|
else
|
|
echo Test 8 pass
|
|
|
|
end
|
|
#CHECK: Test 8 pass
|
|
|
|
if not set -u -g -q bar
|
|
echo Test 9 fail
|
|
else
|
|
echo Test 9 pass
|
|
end
|
|
#CHECK: Test 9 pass
|
|
|
|
if not set -u -U -q baz
|
|
echo Test 10 fail
|
|
else
|
|
echo Test 10 pass
|
|
end
|
|
#CHECK: Test 10 pass
|
|
|
|
set -x -l -q foo
|
|
if test $status -eq 0
|
|
echo Test 11 fail
|
|
else
|
|
echo Test 11 pass
|
|
end
|
|
#CHECK: Test 11 pass
|
|
|
|
if set -x -g -q bar
|
|
echo Test 12 fail
|
|
else
|
|
echo Test 12 pass
|
|
end
|
|
#CHECK: Test 12 pass
|
|
|
|
if set -x -U -q baz
|
|
echo Test 13 fail
|
|
else
|
|
echo Test 13 pass
|
|
end
|
|
#CHECK: Test 13 pass
|
|
|
|
set -x -l foo 1
|
|
set -x -g bar 2
|
|
set -x -U baz 3
|
|
|
|
set -l -q foo
|
|
if test $status -ne 0
|
|
echo Test 14 fail
|
|
else
|
|
echo Test 14 pass
|
|
end
|
|
#CHECK: Test 14 pass
|
|
|
|
if not set -g -q bar
|
|
echo Test 15 fail
|
|
else
|
|
echo Test 15 pass
|
|
end
|
|
#CHECK: Test 15 pass
|
|
|
|
if not set -U -q baz
|
|
echo Test 16 fail
|
|
else
|
|
echo Test 16 pass
|
|
|
|
end
|
|
#CHECK: Test 16 pass
|
|
|
|
set -u -l -q foo
|
|
if test $status -ne 1
|
|
echo Test 17 fail
|
|
else
|
|
echo Test 17 pass
|
|
end
|
|
#CHECK: Test 17 pass
|
|
|
|
if set -u -g -q bar
|
|
echo Test 18 fail
|
|
else
|
|
echo Test 18 pass
|
|
end
|
|
#CHECK: Test 18 pass
|
|
|
|
if set -u -U -q baz
|
|
echo Test 19 fail
|
|
else
|
|
echo Test 19 pass
|
|
|
|
end
|
|
#CHECK: Test 19 pass
|
|
|
|
set -x -l -q foo
|
|
if test $status -ne 0
|
|
echo Test 20 fail
|
|
else
|
|
echo Test 20 pass
|
|
end
|
|
#CHECK: Test 20 pass
|
|
|
|
if not set -x -g -q bar
|
|
echo Test 21 fail
|
|
else
|
|
echo Test 21 pass
|
|
end
|
|
#CHECK: Test 21 pass
|
|
|
|
if not set -x -U -q baz
|
|
echo Test 22 fail
|
|
else
|
|
echo Test 22 pass
|
|
end
|
|
#CHECK: Test 22 pass
|
|
|
|
set -U -e baz
|
|
|
|
# Verify subcommand statuses
|
|
echo (false) $status (true) $status (false) $status
|
|
#CHECK: 1 0 1
|
|
|
|
# Verify that set passes through exit status, except when passed -n or -q or -e
|
|
false
|
|
set foo bar
|
|
echo 1 $status # passthrough
|
|
#CHECK: 1 1
|
|
true
|
|
set foo bar
|
|
echo 2 $status # passthrough
|
|
#CHECK: 2 0
|
|
false
|
|
set -q foo
|
|
echo 3 $status # no passthrough
|
|
#CHECK: 3 0
|
|
true
|
|
set -q foo
|
|
echo 4 $status # no passthrough
|
|
#CHECK: 4 0
|
|
false
|
|
set -n >/dev/null
|
|
echo 5 $status # no passthrough
|
|
#CHECK: 5 0
|
|
false
|
|
set -e foo
|
|
echo 6 $status # no passthrough
|
|
#CHECK: 6 0
|
|
true
|
|
set -e foo
|
|
echo 7 $status # no passthrough
|
|
#CHECK: 7 4
|
|
false
|
|
set -h >/dev/null
|
|
# CHECKERR: fish: set: missing man page
|
|
# CHECKERR: Documentation may not be installed.
|
|
# CHECKERR: `help set` will show an online version
|
|
|
|
echo 8 $status # no passthrough
|
|
#CHECK: 8 0
|
|
true
|
|
set -NOT_AN_OPTION 2>/dev/null
|
|
echo 9 $status # no passthrough
|
|
#CHECK: 9 2
|
|
false
|
|
set foo (echo A; true)
|
|
echo 10 $status $foo
|
|
#CHECK: 10 0 A
|
|
true
|
|
set foo (echo B; false)
|
|
echo 11 $status $foo
|
|
#CHECK: 11 1 B
|
|
true
|
|
|
|
function setql_check
|
|
set -l setql_foo val
|
|
if set -ql setql_foo
|
|
echo Pass
|
|
else
|
|
echo Fail
|
|
end
|
|
end
|
|
setql_check
|
|
#CHECK: Pass
|