fish-shell/tests/test3.in

220 lines
3.2 KiB
Text

# Environment variable tests
#Test if variables can be properly set
set smurf blue
if test $smurf = blue
echo Test 1 pass
else
echo Test 1 fail
end
# Test if variables can be erased
set -e smurf
if test $smurf
echo Test 2 fail
else
echo Test 2 pass
end
# Test if local variables go out of scope
set -e t3
if true
set -l t3 bar
end
if test $t3
echo Test 3 fail
else
echo Test 3 pass
end
# Test if globals can be set in block scope
if true
set -g baz qux
end
if test $baz = qux
echo Test 4 pass
else
echo Test 4 fail
end
#Test that scope is preserved when setting a new value
set t5 a
if true
set t5 b
end
if test $t5 = b
echo Test 5 pass
else
echo Test 5 fail
end
# Test that scope is preserved in double blocks
for i in 1
set t6 $i
for j in a
if test $t6$j = 1a
echo Test 6 pass
else
echo Test 6 fail
end
end
end
# Test if variables in for loop blocks do not go out of scope on new laps
set res fail
set -e t7
for i in 1 2
if test $i = 1
set t7 lala
else
if test $t7
set res pass
end
end
end
echo Test 7 $res
# Test if variables are properly exported
set -e t8
if true
set -lx t8 foo
if test (../fish -c "echo $t8") = foo
echo Test 8 pass
else
echo Test 8 fail
end
end
# Test if exported variables go out of scope
if test (../fish -c "echo $t8")
echo Test 9 fail
else
echo Test 9 pass
end
# Test erasing variables in specific scope
set -eU foo
set -g foo bar
begin
set -l foo baz
set -eg foo
end
if set -q foo
echo Test 10 fail
else
echo Test 10 pass
end
set foo abc def
set -e foo[1]
if test $foo '=' def
echo Test 11 pass
else
echo Test 11 fail
end
# Test combinations of export and scope
set -ge foo
set -Ue foo
set -Ux foo bar
set foo baz
if test (/bin/sh -c 'echo $foo') = baz -a (../fish -c 'echo $foo') = baz
echo Test 12 pass
else
echo Test 12 fail
end
set -Ue foo
set -Ux foo bar
set -U foo baz
if test (/bin/sh -c 'echo $foo') = baz -a (../fish -c 'echo $foo') = baz
echo Test 13 pass
else
echo Test 13 fail
end
set -Ux foo bar
set -u foo bar
if test (/bin/sh -c 'echo $foo') = '' -a (../fish -c 'echo $foo') = bar
echo Test 14 pass
else
echo Test 14 fail
end
set -Ux foo bar
set -Uu foo baz
if test (/bin/sh -c 'echo $foo') = '' -a (../fish -c 'echo $foo') = baz
echo Test 15 pass
else
echo Test 15 fail
end
set -eU foo
# test erasing variables without a specified scope
set -g test16res
set -U foo universal
set -g foo global
begin
set -l foo blocklocal
function test16
set -l foo function
begin
set -l foo functionblock
set test16res $test16res (echo $foo)
set -e foo
set test16res $test16res (echo $foo)
set -e foo
set test16res $test16res (echo $foo)
set -e foo
set test16res $test16res (echo $foo)
set -e foo
set test16res $test16res (echo $foo)
end
set test16res $test16res (echo $foo)
set -e foo
end
test16
set test16res $test16res (echo $foo)
end
set test16res $test16res (echo $foo)
#echo count: (count $test16res) "content:[$test16res]"
if test (count $test16res) = 8 -a "$test16res" = "functionblock function global universal blocklocal "
echo Test 16 pass
else
echo Test 16 fail
end
# clear foo for other shells
set -eU foo
true