2020-02-07 22:10:55 +01:00
#RUN: %fish %s
2014-09-30 20:58:45 -07:00
status -b
2016-11-04 22:32:43 -07:00
and echo '"status -b" unexpectedly returned true at top level'
2014-09-30 20:58:45 -07:00
begin
status -b
2016-11-04 22:32:43 -07:00
or echo '"status -b" unexpectedly returned false inside a begin block'
2014-09-30 20:58:45 -07:00
end
2016-11-04 22:32:43 -07:00
status -l
and echo '"status -l" unexpectedly returned true for a non-login shell'
status -i
and echo '"status -i" unexpectedly returned true for a non-interactive shell'
status is-login
and echo '"status is-login" unexpectedly returned true for a non-login shell'
status is-interactive
and echo '"status is-interactive" unexpectedly returned true for a non-interactive shell'
# We should get an error message about an invalid combination of flags.
status --is-interactive --is-login
2021-11-03 22:52:17 -07:00
#CHECKERR: status: is-interactive is-login: options cannot be used together
2016-11-04 22:32:43 -07:00
# We should get an error message about an unexpected arg for `status
# is-block`.
status -b is-interactive
2021-11-03 22:52:17 -07:00
#CHECKERR: status: is-block is-interactive: options cannot be used together
# XXX this would be better if it referred to -b rather than what it is
2016-11-04 22:32:43 -07:00
# Try to set the job control to an invalid mode.
status job-control full1
2020-02-07 22:10:55 +01:00
#CHECKERR: status: Invalid job control mode 'full1'
2016-11-04 22:32:43 -07:00
status --job-control = 1none
2020-02-07 22:10:55 +01:00
#CHECKERR: status: Invalid job control mode '1none'
2016-11-04 22:32:43 -07:00
# Now set it to a valid mode.
status job-control none
2017-04-13 00:34:25 +02:00
# Check status -u outside functions
status current-function
2020-02-07 22:10:55 +01:00
#CHECK: Not a function
2017-04-13 00:34:25 +02:00
function test_function
status current-function
end
test_function
2020-02-07 22:10:55 +01:00
#CHECK: test_function
2018-04-24 14:02:15 -07:00
eval test_function
2020-02-07 22:10:55 +01:00
#CHECK: test_function
2018-04-24 14:02:15 -07:00
2020-02-07 22:10:55 +01:00
# Future Feature Flags
2018-04-24 14:02:15 -07:00
status features
2022-04-15 12:17:37 +02:00
#CHECK: stderr-nocaret on 3.0 ^ no longer redirects stderr (historical, can no longer be changed)
2021-06-29 19:30:27 +02:00
#CHECK: qmark-noglob off 3.0 ? no longer globs
2022-04-08 16:53:42 +02:00
#CHECK: regex-easyesc on 3.1 string replace -r needs fewer \'s
2022-04-08 17:45:41 +02:00
#CHECK: ampersand-nobg-in-token on 3.4 & only backgrounds if followed by a separator
2020-03-09 19:36:12 +01:00
status test-feature stderr-nocaret
echo $status
2021-04-07 22:43:49 +08:00
#CHECK: 0
2020-03-09 19:36:12 +01:00
status test-feature not-a-feature
echo $status
2020-02-07 22:10:55 +01:00
#CHECK: 2
2019-04-13 12:11:42 -05:00
2020-02-07 22:10:55 +01:00
# Ensure $status isn't reset before a function is executed
2019-04-13 12:11:42 -05:00
function echo_last
2020-03-09 19:36:12 +01:00
echo $status
2019-04-13 12:11:42 -05:00
end
2020-03-09 19:36:12 +01:00
false
echo_last
echo $status #1
2020-02-07 22:10:55 +01:00
#CHECK: 1
#CHECK: 0
2020-02-08 15:37:10 +01:00
# Verify that if swallows failure - see #1061
2020-03-09 19:36:12 +01:00
if false
end
echo $status
2020-02-08 15:37:10 +01:00
#CHECK: 0
2021-04-03 15:36:04 -07:00
# Verify errors from writes - see #7857.
if test -e /dev/full
# Failed writes to stdout produce 1.
echo foo > /dev/full
if test $status -ne 1
echo "Wrong status when writing to /dev/full"
end
# Here the builtin should fail with status 2,
# and also the write should fail with status 1.
# The builtin has precedence.
builtin string --not-a-valid-option 2 > /dev/full
if test $status -ne 2
echo "Wrong status for failing builtin"
end
echo "Failed write tests finished"
else
echo "Failed write tests skipped"
echo "write: skipped" 1 > & 2
echo "write: skipped" 1 > & 2
end
# CHECK: Failed write tests {{finished|skipped}}
# CHECKERR: write: {{.*}}
# CHECKERR: write: {{.*}}