ash: suppress readonly1.tests false positive; add readonly0.tests
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 21 Jul 2017 11:37:25 +0000 (13:37 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 21 Jul 2017 11:37:25 +0000 (13:37 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash_test/ash-vars/readonly0.right [new file with mode: 0644]
shell/ash_test/ash-vars/readonly0.tests [new file with mode: 0755]
shell/ash_test/ash-vars/readonly1.right
shell/ash_test/ash-vars/readonly1.tests

diff --git a/shell/ash_test/ash-vars/readonly0.right b/shell/ash_test/ash-vars/readonly0.right
new file mode 100644 (file)
index 0000000..f3a6bde
--- /dev/null
@@ -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 (executable)
index 0000000..94af790
--- /dev/null
@@ -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:$?
index 2b363e3256f83b914df36573a97b052d8e0f0d9c..1f5be64c7429ee41e46e963664deffd3606636a9 100644 (file)
@@ -1,2 +1,2 @@
-One:1
-One:1
+Fail:2
+Fail:2
index 81b461f5f611202d85bb6780ccc854860a54787f..f3cccd94063763c735497c9f7c6b424bf6b89c7a 100755 (executable)
@@ -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:$?