ash: add a few tests from hush-vars/*
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
							
								
								
									
										9
									
								
								shell/ash_test/ash-vars/param_expand_alt.right
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								shell/ash_test/ash-vars/param_expand_alt.right
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
							
								
								
									
										28
									
								
								shell/ash_test/ash-vars/param_expand_alt.tests
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								shell/ash_test/ash-vars/param_expand_alt.tests
									
									
									
									
									
										Executable file
									
								
							@@ -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}
 | 
			
		||||
							
								
								
									
										27
									
								
								shell/ash_test/ash-vars/param_expand_assign.right
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								shell/ash_test/ash-vars/param_expand_assign.right
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
							
								
								
									
										39
									
								
								shell/ash_test/ash-vars/param_expand_assign.tests
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								shell/ash_test/ash-vars/param_expand_assign.tests
									
									
									
									
									
										Executable file
									
								
							@@ -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}
 | 
			
		||||
							
								
								
									
										64
									
								
								shell/ash_test/ash-vars/param_expand_bash_substring.right
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								shell/ash_test/ash-vars/param_expand_bash_substring.right
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
							
								
								
									
										84
									
								
								shell/ash_test/ash-vars/param_expand_bash_substring.tests
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										84
									
								
								shell/ash_test/ash-vars/param_expand_bash_substring.tests
									
									
									
									
									
										Executable file
									
								
							@@ -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
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
hush: syntax error: unterminated ${name}
 | 
			
		||||
hush: syntax error: unterminated ${name}
 | 
			
		||||
__ __
 | 
			
		||||
_z_ _z_
 | 
			
		||||
_ _ _ _ _
 | 
			
		||||
_aaaa _ _ _word _word
 | 
			
		||||
_ _ _ _ _
 | 
			
		||||
 
 | 
			
		||||
@@ -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 --
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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}'
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user