mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-13 13:39:02 +00:00
really fix bug in export status of universal vars; add tests for that bug
This commit is contained in:
parent
3c116f6ab3
commit
9ee7b0a501
3 changed files with 92 additions and 3 deletions
6
env.cpp
6
env.cpp
|
@ -811,7 +811,7 @@ int env_set(const wcstring &key, const wchar_t *val, int var_mode)
|
||||||
|
|
||||||
if (var_mode & ENV_UNIVERSAL)
|
if (var_mode & ENV_UNIVERSAL)
|
||||||
{
|
{
|
||||||
int exportv = 0;
|
int exportv;
|
||||||
|
|
||||||
if (!(var_mode & ENV_EXPORT) &&
|
if (!(var_mode & ENV_EXPORT) &&
|
||||||
!(var_mode & ENV_UNEXPORT))
|
!(var_mode & ENV_UNEXPORT))
|
||||||
|
@ -868,12 +868,12 @@ int env_set(const wcstring &key, const wchar_t *val, int var_mode)
|
||||||
|
|
||||||
if (env_universal_get(key))
|
if (env_universal_get(key))
|
||||||
{
|
{
|
||||||
int exportv = 0;
|
int exportv;
|
||||||
|
|
||||||
if (!(var_mode & ENV_EXPORT) &&
|
if (!(var_mode & ENV_EXPORT) &&
|
||||||
!(var_mode & ENV_UNEXPORT))
|
!(var_mode & ENV_UNEXPORT))
|
||||||
{
|
{
|
||||||
env_universal_get_export(key);
|
exportv = env_universal_get_export(key);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -134,3 +134,87 @@ if test $foo '=' def
|
||||||
else
|
else
|
||||||
echo Test 11 fail
|
echo Test 11 fail
|
||||||
end
|
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
|
||||||
|
|
|
@ -9,3 +9,8 @@ Test 8 pass
|
||||||
Test 9 pass
|
Test 9 pass
|
||||||
Test 10 pass
|
Test 10 pass
|
||||||
Test 11 pass
|
Test 11 pass
|
||||||
|
Test 12 pass
|
||||||
|
Test 13 pass
|
||||||
|
Test 14 pass
|
||||||
|
Test 15 pass
|
||||||
|
Test 16 pass
|
||||||
|
|
Loading…
Reference in a new issue