diff options
author | Denys Vlasenko | 2017-07-21 13:37:25 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-07-21 13:37:25 +0200 |
commit | 0eed355eac5a8f589f607825a56c87b6c93db79a (patch) | |
tree | 9063c1d8cd1d7a1377463abffc4a2fe8d17de340 | |
parent | 42ba757d5e80ba25cc192939aa3525049f9e092f (diff) | |
download | busybox-0eed355eac5a8f589f607825a56c87b6c93db79a.zip busybox-0eed355eac5a8f589f607825a56c87b6c93db79a.tar.gz |
ash: suppress readonly1.tests false positive; add readonly0.tests
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/ash_test/ash-vars/readonly0.right | 13 | ||||
-rwxr-xr-x | shell/ash_test/ash-vars/readonly0.tests | 45 | ||||
-rw-r--r-- | shell/ash_test/ash-vars/readonly1.right | 4 | ||||
-rwxr-xr-x | shell/ash_test/ash-vars/readonly1.tests | 4 |
4 files changed, 62 insertions, 4 deletions
diff --git a/shell/ash_test/ash-vars/readonly0.right b/shell/ash_test/ash-vars/readonly0.right new file mode 100644 index 0000000..f3a6bde --- /dev/null +++ b/shell/ash_test/ash-vars/readonly0.right @@ -0,0 +1,13 @@ +readonly a='A' +readonly b='B' +Ok:0 + +./readonly0.tests: line 19: a: is read only +Fail:2 +./readonly0.tests: readonly: line 21: a: is read only +Fail:2 + +./readonly0.tests: export: line 27: a: is read only +Fail:2 + +Fail:1 diff --git a/shell/ash_test/ash-vars/readonly0.tests b/shell/ash_test/ash-vars/readonly0.tests new file mode 100755 index 0000000..94af790 --- /dev/null +++ b/shell/ash_test/ash-vars/readonly0.tests @@ -0,0 +1,45 @@ +unset a b +# +readonly a=A +b=B +readonly b +# readonly on already readonly var is harmless: +readonly b a +readonly | grep '^readonly [ab]=' +# this should work: +export a b +export -n a b +echo Ok:$? +env | grep -e^a= -e^b= # shows nothing + +echo +# these should all fail (despite the same value being assigned) +# bash does not abort even in non-interactive more (in script) +# ash does, using subshell to continue +true; (a=A) +echo Fail:$? +true; (readonly a=A) +echo Fail:$? + +echo +# in bash, assignment in export fails, but export succeeds! :) +# we don't mimic that! +true; (export a=Z) +echo Fail:$? +#env | grep '^a=' +#echo "^^^a is exported" +export -n a # undo that bashism, if it happens + +## ash: assignment errors in "a=Z CMD" lead to CMD not executed +## echo +## export b +## # this fails to both set and export a: +## a=Z env | echo grep '^[ab]=' +## echo "^^^a is not exported" +## # but external command does get executed, and $? is not mangled (stays 42): +## (exit 42); a=Z env echo Visible:$? + +echo +# ash: this fails *silently*, bug? bash says "cannot unset: readonly variable" +true; unset a +echo Fail:$? diff --git a/shell/ash_test/ash-vars/readonly1.right b/shell/ash_test/ash-vars/readonly1.right index 2b363e3..1f5be64 100644 --- a/shell/ash_test/ash-vars/readonly1.right +++ b/shell/ash_test/ash-vars/readonly1.right @@ -1,2 +1,2 @@ -One:1 -One:1 +Fail:2 +Fail:2 diff --git a/shell/ash_test/ash-vars/readonly1.tests b/shell/ash_test/ash-vars/readonly1.tests index 81b461f..f3cccd9 100755 --- a/shell/ash_test/ash-vars/readonly1.tests +++ b/shell/ash_test/ash-vars/readonly1.tests @@ -1,7 +1,7 @@ readonly bla=123 # Bare "eval bla=123" should abort ("eval" is a special builtin): (eval bla=123 2>/dev/null; echo BUG) -echo One:$? +echo Fail:$? # "command BLTIN" disables "special-ness", should not abort: command eval bla=123 2>/dev/null -echo One:$? +echo Fail:$? |