ash: add a few tests from hush-vars/*
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Jul 2017 12:55:05 +0000 (14:55 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Jul 2017 12:55:05 +0000 (14:55 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash_test/ash-vars/param_expand_alt.right [new file with mode: 0644]
shell/ash_test/ash-vars/param_expand_alt.tests [new file with mode: 0755]
shell/ash_test/ash-vars/param_expand_assign.right [new file with mode: 0644]
shell/ash_test/ash-vars/param_expand_assign.tests [new file with mode: 0755]
shell/ash_test/ash-vars/param_expand_bash_substring.right [new file with mode: 0644]
shell/ash_test/ash-vars/param_expand_bash_substring.tests [new file with mode: 0755]
shell/hush_test/hush-vars/param_expand_alt.right
shell/hush_test/hush-vars/param_expand_alt.tests
shell/hush_test/hush-vars/param_expand_assign.tests
shell/hush_test/hush-vars/param_expand_bash_substring.tests

diff --git a/shell/ash_test/ash-vars/param_expand_alt.right b/shell/ash_test/ash-vars/param_expand_alt.right
new file mode 100644 (file)
index 0000000..c733c14
--- /dev/null
@@ -0,0 +1,9 @@
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+_0_ __
+_z_ _z_
+_ _ _ _ _
+_aaaa _ _ _word _word
+_ _ _ _ _
+_ _ _ _word _
+_fff _ _ _word _word
diff --git a/shell/ash_test/ash-vars/param_expand_alt.tests b/shell/ash_test/ash-vars/param_expand_alt.tests
new file mode 100755 (executable)
index 0000000..c9c4249
--- /dev/null
@@ -0,0 +1,28 @@
+# First try some invalid patterns. Do in subshell due to parsing error.
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+"$THIS_SH" -c 'echo ${+}  ; echo moo' SHELL
+"$THIS_SH" -c 'echo ${:+} ; echo moo' SHELL
+
+# now some funky ones.
+# ${V+word} "if V unset, then substitute nothing, else substitute word"
+# ${V:+word} "if V unset or '', then substitute nothing, else substitute word"
+# bash doesn't accept ${#+}. ash prints 0 (not $#).
+echo _${#+}_ _${#:+}_
+# Forms with non-empty word work as expected in both ash and bash.
+echo _${#+z}_ _${#:+z}_
+
+# now some valid ones
+set --
+echo _$1 _${1+} _${1:+} _${1+word} _${1:+word}
+
+set -- aaaa
+echo _$1 _${1+} _${1:+} _${1+word} _${1:+word}
+
+unset f
+echo _$f _${f+} _${f:+} _${f+word} _${f:+word}
+
+f=
+echo _$f _${f+} _${f:+} _${f+word} _${f:+word}
+
+f=fff
+echo _$f _${f+} _${f:+} _${f+word} _${f:+word}
diff --git a/shell/ash_test/ash-vars/param_expand_assign.right b/shell/ash_test/ash-vars/param_expand_assign.right
new file mode 100644 (file)
index 0000000..9b07d8c
--- /dev/null
@@ -0,0 +1,27 @@
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+0
+0
+SHELL: line 1: 1: bad variable name
+SHELL: line 1: 1: bad variable name
+SHELL: line 1: 1: bad variable name
+SHELL: line 1: 1: bad variable name
+_aa
+_aa
+_aa
+_aa
+_
+_
+_
+_word
+_word
+_
+_
+_
+_
+_word
+_fff
+_fff
+_fff
+_fff
+_fff
diff --git a/shell/ash_test/ash-vars/param_expand_assign.tests b/shell/ash_test/ash-vars/param_expand_assign.tests
new file mode 100755 (executable)
index 0000000..79de956
--- /dev/null
@@ -0,0 +1,39 @@
+# First try some invalid patterns. Do in subshell due to parsing error.
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+"$THIS_SH" -c 'echo ${=}' SHELL
+"$THIS_SH" -c 'echo ${:=}' SHELL
+
+# now some funky ones
+"$THIS_SH" -c 'echo ${#=}' SHELL
+"$THIS_SH" -c 'echo ${#:=}' SHELL
+
+# should error out
+"$THIS_SH" -c 'set --; echo _${1=}' SHELL
+"$THIS_SH" -c 'set --; echo _${1:=}' SHELL
+"$THIS_SH" -c 'set --; echo _${1=word}' SHELL
+"$THIS_SH" -c 'set --; echo _${1:=word}' SHELL
+
+# should not error
+"$THIS_SH" -c 'set aa; echo _${1=}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1:=}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1=word}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1:=word}' SHELL
+
+# should work fine
+unset f; echo _$f
+unset f; echo _${f=}
+unset f; echo _${f:=}
+unset f; echo _${f=word}
+unset f; echo _${f:=word}
+
+f=; echo _$f
+f=; echo _${f=}
+f=; echo _${f:=}
+f=; echo _${f=word}
+f=; echo _${f:=word}
+
+f=fff; echo _$f
+f=fff; echo _${f=}
+f=fff; echo _${f:=}
+f=fff; echo _${f=word}
+f=fff; echo _${f:=word}
diff --git a/shell/ash_test/ash-vars/param_expand_bash_substring.right b/shell/ash_test/ash-vars/param_expand_bash_substring.right
new file mode 100644 (file)
index 0000000..9ad6dbc
--- /dev/null
@@ -0,0 +1,64 @@
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: missing '}'
+1    =||
+1:1  =||
+1:1:2=||
+1::2 =||
+1:1: =||
+1::  =||
+1    =|0123|
+1:1  =|123|
+1:1:2=|12|
+1::2 =|01|
+1:1: =||
+1::  =||
+f    =||
+f:1  =||
+f:1:2=||
+f::2 =||
+f:1: =||
+f::  =||
+f    =||
+f:1  =||
+f:1:2=||
+f::2 =||
+f:1: =||
+f::  =||
+f    =|a|
+f:1  =||
+f:1:2=||
+f::2 =|a|
+f:1: =||
+f::  =||
+f    =|0123456789|
+f:1  =|123456789|
+f:1:2=|12|
+f::2 =|01|
+f:1: =||
+f::  =||
+Substrings from special vars
+?    =|0|
+?:1  =||
+?:1:2=||
+?::2 =|0|
+?:1: =||
+?::  =||
+#    =|11|
+#:1  =|1|
+#:1:2=|1|
+#::2 =|11|
+#:1: =||
+#::  =||
+Substrings with expressions
+f            =|01234567|
+f:1+1:2+2    =|2345|
+f:-1:2+2     =|01234567|
+f:1:f        =|1234567|
+f:1:$f       =|1234567|
+f:1:${f}     =|1234567|
+f:1:${f:3:1} =|123|
+f:1:1`echo 1`=|1|
+Done
diff --git a/shell/ash_test/ash-vars/param_expand_bash_substring.tests b/shell/ash_test/ash-vars/param_expand_bash_substring.tests
new file mode 100755 (executable)
index 0000000..cce9f12
--- /dev/null
@@ -0,0 +1,84 @@
+# first try some invalid patterns
+# do all of these in subshells since it's supposed to error out
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+export var=0123456789
+"$THIS_SH" -c 'echo ${:}' SHELL
+"$THIS_SH" -c 'echo ${::}' SHELL
+"$THIS_SH" -c 'echo ${:1}' SHELL
+"$THIS_SH" -c 'echo ${::1}' SHELL
+
+#this also is not valid in bash, hush accepts it:
+"$THIS_SH" -c 'echo ${var:}' SHELL
+
+# then some funky ones
+# UNFIXED BUG: this should work: "$THIS_SH" -c 'echo ${?:0}'
+
+# now some valid ones
+set --; echo "1    =|${1}|"
+set --; echo "1:1  =|${1:1}|"
+set --; echo "1:1:2=|${1:1:2}|"
+set --; echo "1::2 =|${1::2}|"
+set --; echo "1:1: =|${1:1:}|"
+set --; echo "1::  =|${1::}|"
+
+set -- 0123; echo "1    =|${1}|"
+set -- 0123; echo "1:1  =|${1:1}|"
+set -- 0123; echo "1:1:2=|${1:1:2}|"
+set -- 0123; echo "1::2 =|${1::2}|"
+set -- 0123; echo "1:1: =|${1:1:}|"
+set -- 0123; echo "1::  =|${1::}|"
+
+unset f; echo "f    =|$f|"
+unset f; echo "f:1  =|${f:1}|"
+unset f; echo "f:1:2=|${f:1:2}|"
+unset f; echo "f::2 =|${f::2}|"
+unset f; echo "f:1: =|${f:1:}|"
+unset f; echo "f::  =|${f::}|"
+
+f=; echo "f    =|$f|"
+f=; echo "f:1  =|${f:1}|"
+f=; echo "f:1:2=|${f:1:2}|"
+f=; echo "f::2 =|${f::2}|"
+f=; echo "f:1: =|${f:1:}|"
+f=; echo "f::  =|${f::}|"
+
+f=a; echo "f    =|$f|"
+f=a; echo "f:1  =|${f:1}|"
+f=a; echo "f:1:2=|${f:1:2}|"
+f=a; echo "f::2 =|${f::2}|"
+f=a; echo "f:1: =|${f:1:}|"
+f=a; echo "f::  =|${f::}|"
+
+f=0123456789; echo "f    =|$f|"
+f=0123456789; echo "f:1  =|${f:1}|"
+f=0123456789; echo "f:1:2=|${f:1:2}|"
+f=0123456789; echo "f::2 =|${f::2}|"
+f=0123456789; echo "f:1: =|${f:1:}|"
+f=0123456789; echo "f::  =|${f::}|"
+
+echo "Substrings from special vars"
+echo '?    '"=|$?|"
+echo '?:1  '"=|${?:1}|"
+echo '?:1:2'"=|${?:1:2}|"
+echo '?::2 '"=|${?::2}|"
+echo '?:1: '"=|${?:1:}|"
+echo '?::  '"=|${?::}|"
+set -- 1 2 3 4 5 6 7 8 9 10 11
+echo '#    '"=|$#|"
+echo '#:1  '"=|${#:1}|"
+echo '#:1:2'"=|${#:1:2}|"
+echo '#::2 '"=|${#::2}|"
+echo '#:1: '"=|${#:1:}|"
+echo '#::  '"=|${#::}|"
+
+echo "Substrings with expressions"
+f=01234567; echo 'f            '"=|$f|"
+f=01234567; echo 'f:1+1:2+2    '"=|${f:1+1:2+2}|"
+f=01234567; echo 'f:-1:2+2     '"=|${f:-1:2+2}|"
+f=01234567; echo 'f:1:f        '"=|${f:1:f}|"
+f=01234567; echo 'f:1:$f       '"=|${f:1:$f}|"
+f=01234567; echo 'f:1:${f}     '"=|${f:1:${f}}|"
+f=01234567; echo 'f:1:${f:3:1} '"=|${f:1:${f:3:1}}|"
+f=01234567; echo 'f:1:1`echo 1`'"=|${f:1:`echo 1`}|"
+
+echo Done
index 67f18d69c8ec68099dfbf4b67d66c7e166b15169..4f9eb29071ced0c5c2179f6115d11b23fb7596d4 100644 (file)
@@ -1,6 +1,7 @@
 hush: syntax error: unterminated ${name}
 hush: syntax error: unterminated ${name}
 __ __
+_z_ _z_
 _ _ _ _ _
 _aaaa _ _ _word _word
 _ _ _ _ _
index 3b646b142c85f170832f2bd434ec345552183ef1..c9c4249aff1b70a75c82d403a1686c74ae5f993e 100755 (executable)
@@ -1,9 +1,15 @@
-# first try some invalid patterns (do in subshell due to parsing error)
-"$THIS_SH" -c 'echo ${+}  ; echo moo'
-"$THIS_SH" -c 'echo ${:+} ; echo moo'
+# First try some invalid patterns. Do in subshell due to parsing error.
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+"$THIS_SH" -c 'echo ${+}  ; echo moo' SHELL
+"$THIS_SH" -c 'echo ${:+} ; echo moo' SHELL
 
-# now some funky ones. (bash doesn't accept ${#+})
+# now some funky ones.
+# ${V+word} "if V unset, then substitute nothing, else substitute word"
+# ${V:+word} "if V unset or '', then substitute nothing, else substitute word"
+# bash doesn't accept ${#+}. ash prints 0 (not $#).
 echo _${#+}_ _${#:+}_
+# Forms with non-empty word work as expected in both ash and bash.
+echo _${#+z}_ _${#:+z}_
 
 # now some valid ones
 set --
index 149cb20dfb1d10e90a2ab35d4493daae563504c9..79de956137233441b083a72ce85834f2a79ceb4f 100755 (executable)
@@ -1,22 +1,23 @@
-# first try some invalid patterns (do in subshell due to parsing error)
-"$THIS_SH" -c 'echo ${=}'
-"$THIS_SH" -c 'echo ${:=}'
+# First try some invalid patterns. Do in subshell due to parsing error.
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+"$THIS_SH" -c 'echo ${=}' SHELL
+"$THIS_SH" -c 'echo ${:=}' SHELL
 
 # now some funky ones
-"$THIS_SH" -c 'echo ${#=}'
-"$THIS_SH" -c 'echo ${#:=}'
+"$THIS_SH" -c 'echo ${#=}' SHELL
+"$THIS_SH" -c 'echo ${#:=}' SHELL
 
 # should error out
-"$THIS_SH" -c 'set --; echo _${1=}'
-"$THIS_SH" -c 'set --; echo _${1:=}'
-"$THIS_SH" -c 'set --; echo _${1=word}'
-"$THIS_SH" -c 'set --; echo _${1:=word}'
+"$THIS_SH" -c 'set --; echo _${1=}' SHELL
+"$THIS_SH" -c 'set --; echo _${1:=}' SHELL
+"$THIS_SH" -c 'set --; echo _${1=word}' SHELL
+"$THIS_SH" -c 'set --; echo _${1:=word}' SHELL
 
 # should not error
-"$THIS_SH" -c 'set aa; echo _${1=}'
-"$THIS_SH" -c 'set aa; echo _${1:=}'
-"$THIS_SH" -c 'set aa; echo _${1=word}'
-"$THIS_SH" -c 'set aa; echo _${1:=word}'
+"$THIS_SH" -c 'set aa; echo _${1=}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1:=}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1=word}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1:=word}' SHELL
 
 # should work fine
 unset f; echo _$f
index 5c9552dbabc13e01939142bfaf9159ca87bf9878..cce9f123e67645578fa5373db34e06690d18258a 100755 (executable)
@@ -1,13 +1,14 @@
 # first try some invalid patterns
 # do all of these in subshells since it's supposed to error out
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
 export var=0123456789
-"$THIS_SH" -c 'echo ${:}'
-"$THIS_SH" -c 'echo ${::}'
-"$THIS_SH" -c 'echo ${:1}'
-"$THIS_SH" -c 'echo ${::1}'
+"$THIS_SH" -c 'echo ${:}' SHELL
+"$THIS_SH" -c 'echo ${::}' SHELL
+"$THIS_SH" -c 'echo ${:1}' SHELL
+"$THIS_SH" -c 'echo ${::1}' SHELL
 
-#this also is not valid in bash, but we accept it:
-"$THIS_SH" -c 'echo ${var:}'
+#this also is not valid in bash, hush accepts it:
+"$THIS_SH" -c 'echo ${var:}' SHELL
 
 # then some funky ones
 # UNFIXED BUG: this should work: "$THIS_SH" -c 'echo ${?:0}'