fish-shell/tests/function.in
Fabian Homborg ba8748877a tests/functions: Don't compare diff output
Turns out busybox diff (used on alpine) defaults to unified output,
which we can't use because that prints filenames, and those are
tempfiles made by psub.

Instead, we use builtins to print the first line and compare the others.
2019-01-01 14:52:26 +01:00

61 lines
1.9 KiB
Fish

# vim: set filetype=fish:
#
# Test the `function` builtin
logmsg Test the -V flag
set -g foo 'global foo'
set -l foo 'local foo'
set bar one 'two 2' \t '' 3
set baz
function frob -V foo -V bar -V baz
set --show foo bar baz
end
logmsg Testing -V
frob
logmsg Testing -V with changed variables
set foo 'bad foo'
set bar 'bad bar'
set baz 'bad baz'
frob
# This sequence of tests originally verified that functions `name2` and
# `name4` were created. See issue #2068. That behavior is not what we want.
# The function name must always be the first argument of the `function`
# command. See issue #2827.
function name1 -a arg1 arg2 ; echo hello; end
function -a arg1 arg2 name2 ; end
function name3 --argument-names arg1 arg2 ; echo hello; echo goodbye; end
function --argument-names arg1 arg2 name4 ; end
function name5 abc --argument-names def ; end
functions -q name1; and echo "Function name1 found"
functions -q name2; or echo "Function name2 not found as expected"
functions -q name3; and echo "Function name3 found"
functions -q name4; or echo "Function name4 not found as expected"
logmsg Verify that functions can be copied. Tests against regression of issue \#3601
functions -c name1 name1a
functions --copy name3 name3a
functions -q name1a
or echo "Function name1a not found as expected"
functions -q name3a
or echo "Function name3a not found as expected"
logmsg Checking that the copied functions are identical other than the name
# Poor man's diff because on some systems diff defaults to unified output, but that prints filenames.
#
set -l name1 (functions name1)
set -l name1a (functions name1a)
set -l name3 (functions name3)
set -l name3a (functions name3a)
echo $name1[1]
echo $name1a[1]
test "$name1[2..-1]" = "$name1a[2..-1]"; and echo "1 = 1a"
echo $name3[1]
echo $name3a[1]
test "$name3[2..-1]" = "$name3a[2..-1]"; and echo "3 = 3a"
logmsg Checking reserved names
function test; echo banana; end
exit 0