mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-18 04:23:38 +08:00
8b67a1b26f
I noticed while fixing issue #2702 that the fish program being tested was sourcing config.fish files outside of the current build. This also happens when Travis CI runs the tests but isn't an issue there because of how Travis is configured to execute the tests. I also noticed that running `make test` was polluting my personal fish history; which will become a bigger problem if and when the fishd universal var file is moved from $XDG_CONFIG_HOME to $XDG_DATA_HOME. This change makes it possible for an individual to run the tests on their local machine secure in the knowledge that only the config.fish and related files from their git repository will be used and doing so won't pollute their personal fish history. Resolves #469
278 lines
7.3 KiB
Fish
278 lines
7.3 KiB
Fish
# 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 (../test/root/bin/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 (../test/root/bin/fish -c "echo $t8")
|
|
echo Test 9 fail
|
|
else
|
|
echo Test 9 pass
|
|
end
|
|
|
|
# Test erasing variables in specific scope
|
|
|
|
set -eU __fish_test_universal_variables_variable_foo
|
|
set -g __fish_test_universal_variables_variable_foo bar
|
|
begin
|
|
set -l __fish_test_universal_variables_variable_foo baz
|
|
set -eg __fish_test_universal_variables_variable_foo
|
|
end
|
|
|
|
if set -q __fish_test_universal_variables_variable_foo
|
|
echo Test 10 fail
|
|
else
|
|
echo Test 10 pass
|
|
end
|
|
|
|
|
|
set __fish_test_universal_variables_variable_foo abc def
|
|
set -e __fish_test_universal_variables_variable_foo[1]
|
|
if test $__fish_test_universal_variables_variable_foo '=' def
|
|
echo Test 11 pass
|
|
else
|
|
echo Test 11 fail
|
|
end
|
|
|
|
# Test combinations of export and scope
|
|
|
|
set -ge __fish_test_universal_variables_variable_foo
|
|
|
|
set -Ue __fish_test_universal_variables_variable_foo
|
|
set -Ux __fish_test_universal_variables_variable_foo bar
|
|
set __fish_test_universal_variables_variable_foo baz
|
|
if test (/bin/sh -c 'echo $__fish_test_universal_variables_variable_foo') = baz -a (../test/root/bin/fish -c 'echo $__fish_test_universal_variables_variable_foo') = baz
|
|
echo Test 12 pass
|
|
else
|
|
echo Test 12 fail
|
|
end
|
|
|
|
set -Ue __fish_test_universal_variables_variable_foo
|
|
|
|
# Should no longer be in environment (#2046)
|
|
env | __fish_sgrep __fish_test_universal_variables_variable_foo
|
|
|
|
set -Ux __fish_test_universal_variables_variable_foo bar
|
|
set -U __fish_test_universal_variables_variable_foo baz
|
|
if test (/bin/sh -c 'echo $__fish_test_universal_variables_variable_foo') = baz -a (../test/root/bin/fish -c 'echo $__fish_test_universal_variables_variable_foo') = baz
|
|
echo Test 13 pass
|
|
else
|
|
echo Test 13 fail
|
|
end
|
|
|
|
set -Ux __fish_test_universal_variables_variable_foo bar
|
|
set -u __fish_test_universal_variables_variable_foo bar
|
|
if test (/bin/sh -c 'echo $__fish_test_universal_variables_variable_foo') = '' -a (../test/root/bin/fish -c 'echo $__fish_test_universal_variables_variable_foo') = bar
|
|
echo Test 14 pass
|
|
else
|
|
echo Test 14 fail
|
|
end
|
|
|
|
set -Ux __fish_test_universal_variables_variable_foo bar
|
|
set -Uu __fish_test_universal_variables_variable_foo baz
|
|
if test (/bin/sh -c 'echo $__fish_test_universal_variables_variable_foo') = '' -a (../test/root/bin/fish -c 'echo $__fish_test_universal_variables_variable_foo') = baz
|
|
echo Test 15 pass
|
|
else
|
|
echo Test 15 fail
|
|
end
|
|
|
|
set -eU __fish_test_universal_variables_variable_foo
|
|
function watch_foo --on-variable __fish_test_universal_variables_variable_foo
|
|
echo Foo change detected
|
|
end
|
|
|
|
set -U __fish_test_universal_variables_variable_foo 1234
|
|
set -eU __fish_test_universal_variables_variable_foo
|
|
|
|
functions -e watch_foo
|
|
|
|
|
|
# test erasing variables without a specified scope
|
|
|
|
set -g test16res
|
|
|
|
set -U __fish_test_universal_variables_variable_foo universal
|
|
set -g __fish_test_universal_variables_variable_foo global
|
|
begin
|
|
set -l __fish_test_universal_variables_variable_foo blocklocal
|
|
function test16
|
|
set -l __fish_test_universal_variables_variable_foo function
|
|
begin
|
|
set -l __fish_test_universal_variables_variable_foo functionblock
|
|
|
|
set test16res $test16res (echo $__fish_test_universal_variables_variable_foo)
|
|
set -e __fish_test_universal_variables_variable_foo
|
|
set test16res $test16res (echo $__fish_test_universal_variables_variable_foo)
|
|
set -e __fish_test_universal_variables_variable_foo
|
|
set test16res $test16res (echo $__fish_test_universal_variables_variable_foo)
|
|
set -e __fish_test_universal_variables_variable_foo
|
|
set test16res $test16res (echo $__fish_test_universal_variables_variable_foo)
|
|
set -e __fish_test_universal_variables_variable_foo
|
|
set test16res $test16res (echo $__fish_test_universal_variables_variable_foo)
|
|
end
|
|
set test16res $test16res (echo $__fish_test_universal_variables_variable_foo)
|
|
set -e __fish_test_universal_variables_variable_foo
|
|
end
|
|
test16
|
|
set test16res $test16res (echo $__fish_test_universal_variables_variable_foo)
|
|
end
|
|
set test16res $test16res (echo $__fish_test_universal_variables_variable_food)
|
|
|
|
#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
|
|
|
|
# Test that shadowing with a non-exported variable works
|
|
set -gx __fish_test_env17 UNSHADOWED
|
|
env | __fish_sgrep __fish_test_env17
|
|
function __fish_test_shadow
|
|
set -l __fish_test_env17
|
|
env | __fish_sgrep __fish_test_env17 ; or echo SHADOWED
|
|
end
|
|
__fish_test_shadow
|
|
|
|
# clear for other shells
|
|
set -eU __fish_test_universal_variables_variable_foo
|
|
|
|
# Test behavior of universals on startup (#1526)
|
|
echo Testing Universal Startup
|
|
set -U testu 0
|
|
../test/root/bin/fish -c 'set -U testu 1'
|
|
echo $testu
|
|
../test/root/bin/fish -c 'echo $testu'
|
|
|
|
../test/root/bin/fish -c 'set -U testu 2'
|
|
echo $testu
|
|
../test/root/bin/fish -c 'echo $testu'
|
|
|
|
../test/root/bin/fish -c 'set -e testu';
|
|
echo Missing: $testu
|
|
../test/root/bin/fish -c 'echo Missing: $testu'
|
|
|
|
# test SHLVL
|
|
# use a subshell to ensure a clean slate
|
|
env SHLVL= ../test/root/bin/fish -c 'echo SHLVL: $SHLVL; ../test/root/bin/fish -c \'echo SHLVL: $SHLVL\''
|
|
# exec should decrement SHLVL
|
|
env SHLVL= ../test/root/bin/fish -c 'echo SHLVL: $SHLVL; exec ../test/root/bin/fish -c \'echo SHLVL: $SHLVL\''
|
|
# garbage SHLVLs should be treated as garbage
|
|
env SHLVL=3foo ../test/root/bin/fish -c 'echo SHLVL: $SHLVL'
|
|
# whitespace is allowed though (for bash compatibility)
|
|
env SHLVL="3 " ../test/root/bin/fish -c 'echo SHLVL: $SHLVL'
|
|
env SHLVL=" 3" ../test/root/bin/fish -c 'echo SHLVL: $SHLVL'
|
|
|
|
# Test transformation of inherited variables
|
|
env DISPLAY="localhost:0.0" ../test/root/bin/fish -c 'echo Elements in DISPLAY: (count $DISPLAY)'
|
|
# We can't use PATH for this because the global configuration will modify PATH
|
|
# based on /etc/paths and /etc/paths.d.
|
|
# Exported arrays should use record separator, with a few exceptions. So we can use an arbitrary variable for this.
|
|
env FOO=one\x1etwo\x1ethree\x1efour ../test/root/bin/fish -c 'echo Elements in FOO: (count $FOO)'
|
|
# some must use colon separators!
|
|
set -lx MANPATH man1 man2 man3 ; env | grep MANPATH
|
|
|
|
true
|