mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-27 11:43:37 +08:00
2e38cf2a4b
This implements a way to use the `functions` command to perform introspection to learn about the characteristics of a function. Such as where it came from. Fixes #3295
60 lines
1.8 KiB
Fish
60 lines
1.8 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)
|
|
|
|
exit 0
|