# 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