# Test expansion of variables

# We don't use the test utility function of the same name because we want
# different behavior. Specifically, that the expansion of any variables or
# other strings before we are invoked produce the expected expansion.
function show --description 'Prints argument count followed by arguments'
    echo (count $argv) $argv
end

set -l foo
show "$foo"
show $foo
show "prefix$foo"
show prefix$foo

show "$$foo"
show $$foo
show "prefix$$foo"
show prefix$$foo

set -l foo ''
show "$foo"
show $foo
show "prefix$foo"
show prefix$foo

show "$$foo"
show $$foo
show "prefix$$foo"
show prefix$$foo

set -l foo bar
set -l bar
show "$$foo"
show $$foo
show "prefix$$foo"
show prefix$$foo

set -l bar baz
show "$$foo"
show $$foo
show "prefix$$foo"
show prefix$$foo

set -l bar baz quux
show "$$foo"
show $$foo
show "prefix$$foo"
show prefix$$foo

set -l foo bar fooer fooest
set -l fooer
set -l fooest
show "$$foo"
show $$foo
show "prefix$$foo"
show prefix$$foo

set -l fooer ''
show $$foo
show prefix$$foo

set -l foo bar '' fooest
show "$$foo"
show $$foo
show "prefix$$foo"
show prefix$$foo
show $foo[-5..2]
show $foo[-2..-1]
show $foo[-10..-5]
show (printf '%s\n' $foo)[-5..2]
show (printf '%s\n' $foo)[-2..-1]
show (printf '%s\n' $foo)[-10..-5]

set -l foo
show "$foo[1]"
show $foo[1]
show "$foo[-1]"
show $foo[-1]
show "$foo[2]"
show $foo[2]
show "$foo[1 2]"
show $foo[1 2]
show "$foo[2 1]"
show $foo[2 1]
set -l foo a b c
show $foo[17]
show $foo[-17]
show $foo[17..18]

echo "$foo[d]"
echo $foo[d]

echo ()[1]
echo ()[d]

echo "Catch your breath"
set paren ')'
echo $$paren

# Test tilde expansion
# On OS X, /tmp is symlinked to /private/tmp
# $PWD is our best bet for resolving it
set -l saved $PWD
cd (mktemp -d)
set tmpdir $PWD
cd $saved
mkdir $tmpdir/realhome
ln -s $tmpdir/realhome $tmpdir/linkhome
set expandedtilde (env HOME=$tmpdir/linkhome ../test/root/bin/fish -c 'echo ~')
if test $expandedtilde != $tmpdir/realhome
	echo '~ expands to' $expandedtilde ' - expected ' $tmpdir/realhome
end
unlink $tmpdir/linkhome
rmdir $tmpdir/realhome
rmdir $tmpdir
