sh: Add some testcases for ${v=w}, ${v-w}, ${v+w}.
These expansions, which were already in the Bourne shell, work correctly for the most part. The testcases are only about the parts that already work correctly.
This commit is contained in:
parent
9df3a16421
commit
0de1173276
37
tools/regression/bin/sh/expansion/assign1.0
Normal file
37
tools/regression/bin/sh/expansion/assign1.0
Normal file
@ -0,0 +1,37 @@
|
||||
# $FreeBSD$
|
||||
|
||||
e= q='?' a='*' t=texttext s='ast*que?non' p='/et[c]/' w='a b c' b='{{(#)}}'
|
||||
h='##'
|
||||
failures=''
|
||||
ok=''
|
||||
|
||||
testcase() {
|
||||
code="$1"
|
||||
expected="$2"
|
||||
oIFS="$IFS"
|
||||
eval "$code"
|
||||
IFS='|'
|
||||
result="$#|$*"
|
||||
IFS="$oIFS"
|
||||
if [ "x$result" = "x$expected" ]; then
|
||||
ok=x$ok
|
||||
else
|
||||
failures=x$failures
|
||||
echo "For $code, expected $expected actual $result"
|
||||
fi
|
||||
}
|
||||
|
||||
testcase 'v=; set -- ${v=a b} $v' '0|'
|
||||
testcase 'unset v; set -- ${v=a b} $v' '4|a|b|a|b'
|
||||
testcase 'v=; set -- ${v:=a b} $v' '4|a|b|a|b'
|
||||
testcase 'v=; set -- "${v:=a b}" "$v"' '2|a b|a b'
|
||||
# expect sensible behaviour, although it disagrees with POSIX
|
||||
testcase 'v=; set -- ${v:=a\ b} $v' '4|a|b|a|b'
|
||||
testcase 'v=; set -- ${v:=$p} $v' '2|/etc/|/etc/'
|
||||
testcase 'v=; set -- "${v:=$p}" "$v"' '2|/et[c]/|/et[c]/'
|
||||
testcase 'v=; set -- "${v:=a\ b}" "$v"' '2|a\ b|a\ b'
|
||||
testcase 'v=; set -- ${v:="$p"} $v' '2|/etc/|/etc/'
|
||||
# whether $p is quoted or not shouldn't really matter
|
||||
testcase 'v=; set -- "${v:="$p"}" "$v"' '2|/et[c]/|/et[c]/'
|
||||
|
||||
test "x$failures" = x
|
81
tools/regression/bin/sh/expansion/plus-minus1.0
Normal file
81
tools/regression/bin/sh/expansion/plus-minus1.0
Normal file
@ -0,0 +1,81 @@
|
||||
# $FreeBSD$
|
||||
|
||||
e= q='?' a='*' t=texttext s='ast*que?non' p='/et[c]/' w='a b c' b='{{(#)}}'
|
||||
h='##'
|
||||
failures=''
|
||||
ok=''
|
||||
|
||||
testcase() {
|
||||
code="$1"
|
||||
expected="$2"
|
||||
oIFS="$IFS"
|
||||
eval "$code"
|
||||
IFS='|'
|
||||
result="$#|$*"
|
||||
IFS="$oIFS"
|
||||
if [ "x$result" = "x$expected" ]; then
|
||||
ok=x$ok
|
||||
else
|
||||
failures=x$failures
|
||||
echo "For $code, expected $expected actual $result"
|
||||
fi
|
||||
}
|
||||
|
||||
testcase 'set -- a b' '2|a|b'
|
||||
testcase 'set --' '0|'
|
||||
testcase 'set -- ${e}' '0|'
|
||||
testcase 'set -- "${e}"' '1|'
|
||||
|
||||
testcase 'set -- $p' '1|/etc/'
|
||||
testcase 'set -- "$p"' '1|/et[c]/'
|
||||
testcase 'set -- ${s+$p}' '1|/etc/'
|
||||
testcase 'set -- "${s+$p}"' '1|/et[c]/'
|
||||
testcase 'set -- ${s+"$p"}' '1|/et[c]/'
|
||||
# Dquotes in dquotes is undefined for Bourne shell operators
|
||||
#testcase 'set -- "${s+"$p"}"' '1|/et[c]/'
|
||||
testcase 'set -- ${e:-$p}' '1|/etc/'
|
||||
testcase 'set -- "${e:-$p}"' '1|/et[c]/'
|
||||
testcase 'set -- ${e:-"$p"}' '1|/et[c]/'
|
||||
# Dquotes in dquotes is undefined for Bourne shell operators
|
||||
#testcase 'set -- "${e:-"$p"}"' '1|/et[c]/'
|
||||
testcase 'set -- ${e:+"$e"}' '0|'
|
||||
testcase 'set -- ${e:+$w"$e"}' '0|'
|
||||
testcase 'set -- ${w:+"$w"}' '1|a b c'
|
||||
testcase 'set -- ${w:+$w"$w"}' '3|a|b|ca b c'
|
||||
|
||||
# These two are known broken in FreeBSD /bin/sh
|
||||
#testcase 'set -- ${s+a b}' '2|a|b'
|
||||
#testcase 'set -- ${e:-a b}' '2|a|b'
|
||||
testcase 'set -- "${s+a b}"' '1|a b'
|
||||
testcase 'set -- "${e:-a b}"' '1|a b'
|
||||
testcase 'set -- ${e:-\}}' '1|}'
|
||||
# Currently broken in FreeBSD /bin/sh
|
||||
#testcase 'set -- "${e:-\}}"' '1|}'
|
||||
testcase 'set -- ${e:+{}}' '1|}'
|
||||
testcase 'set -- "${e:+{}}"' '1|}'
|
||||
|
||||
testcase 'set -- ${e+x}${e+x}' '1|xx'
|
||||
testcase 'set -- "${e+x}"${e+x}' '1|xx'
|
||||
testcase 'set -- ${e+x}"${e+x}"' '1|xx'
|
||||
testcase 'set -- "${e+x}${e+x}"' '1|xx'
|
||||
testcase 'set -- "${e+x}""${e+x}"' '1|xx'
|
||||
|
||||
testcase 'set -- ${e:-${e:-$p}}' '1|/etc/'
|
||||
testcase 'set -- "${e:-${e:-$p}}"' '1|/et[c]/'
|
||||
testcase 'set -- ${e:-"${e:-$p}"}' '1|/et[c]/'
|
||||
testcase 'set -- ${e:-${e:-"$p"}}' '1|/et[c]/'
|
||||
testcase 'set -- ${e:-${e:-${e:-$w}}}' '3|a|b|c'
|
||||
testcase 'set -- ${e:-${e:-${e:-"$w"}}}' '1|a b c'
|
||||
testcase 'set -- ${e:-${e:-"${e:-$w}"}}' '1|a b c'
|
||||
testcase 'set -- ${e:-"${e:-${e:-$w}}"}' '1|a b c'
|
||||
testcase 'set -- "${e:-${e:-${e:-$w}}}"' '1|a b c'
|
||||
|
||||
testcase 'shift $#; set -- ${1+"$@"}' '0|'
|
||||
testcase 'set -- ""; set -- ${1+"$@"}' '1|'
|
||||
testcase 'set -- "" a; set -- ${1+"$@"}' '2||a'
|
||||
testcase 'set -- a ""; set -- ${1+"$@"}' '2|a|'
|
||||
testcase 'set -- a b; set -- ${1+"$@"}' '2|a|b'
|
||||
testcase 'set -- a\ b; set -- ${1+"$@"}' '1|a b'
|
||||
testcase 'set -- " " ""; set -- ${1+"$@"}' '2| |'
|
||||
|
||||
test "x$failures" = x
|
Loading…
Reference in New Issue
Block a user