2014-10-02 22:59:24 +00:00
|
|
|
# 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
|
2015-05-17 21:17:01 +00:00
|
|
|
|
|
|
|
# Test that -a does not mix up the function name with arguments
|
|
|
|
# See #2068
|
|
|
|
function name1 -a arg1 arg2 ; end
|
|
|
|
function -a arg1 arg2 name2 ; end
|
|
|
|
function name3 --argument-names arg1 arg2 ; end
|
|
|
|
function --argument-names arg1 arg2 name4 ; end
|
|
|
|
for i in (seq 4)
|
|
|
|
if functions -q name$i
|
|
|
|
echo "Function name$i found"
|
|
|
|
else
|
|
|
|
echo "Function name$i not found, but should have been"
|
|
|
|
end
|
|
|
|
end
|
2016-05-08 22:57:56 +00:00
|
|
|
|
|
|
|
# Test that we can't define a function that shadows a builtin by accident.
|
|
|
|
function pwd; end
|
|
|
|
or echo 'yes, it failed as expected' >&2
|
|
|
|
|
|
|
|
# Test that we can define a function that shadows a builtin if we use the
|
|
|
|
# right flag.
|
|
|
|
function pwd --shadow-builtin; end
|
|
|
|
and echo '"function pwd --shadow-builtin" worked'
|
|
|
|
|
|
|
|
# Using --shadow-builtin for a non-builtin function name also fails.
|
|
|
|
function not_builtin --shadow-builtin; end
|
|
|
|
or echo 'yes, it failed as expected' >&2
|