fish-shell/tests/function.in
Kurtis Rader 7cfe028b9d fix functions --copy
Fixes #3601
2016-11-28 18:04:37 -08:00

60 lines
1.9 KiB
Fish

# vim: set filetype=fish:
#
# Test the `function` builtin
# utility function
function show_ary -a name --no-scope-shadowing
set -l count (count $$name)
echo "\$$name: ($count)"
if test $count -gt 0
for i in (seq $count)
echo "$i: '$$name[1][$i]'"
end
end
end
# 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
show_ary foo
show_ary bar
show_ary baz
end
echo "Testing -V"
frob
echo "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"
# 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"
echo Checking that the copied functions are identical other than the name
diff (functions name1 | psub) (functions name1a | psub)
diff (functions name3 | psub) (functions name3a | psub)
# The diff would cause us to exit with a non-zero status even if it produces
# the expected output.
exit 0