mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 11:57:35 +00:00
Shell: Fix a FIXME in the a test about using functions
This commit is contained in:
parent
b3dd97a694
commit
e94ee08eca
1 changed files with 36 additions and 35 deletions
|
@ -3,13 +3,19 @@
|
||||||
# Are comments ignored?
|
# Are comments ignored?
|
||||||
# Sanity check: can we do && and || ?
|
# Sanity check: can we do && and || ?
|
||||||
true || exit 2
|
true || exit 2
|
||||||
false && exit 2
|
false
|
||||||
|
|
||||||
|
# Apply some useful aliases
|
||||||
|
fail() {
|
||||||
|
echo $*
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
# Can we chain &&'s?
|
# Can we chain &&'s?
|
||||||
false && exit 2 && echo "can't chain &&'s" && exit 2
|
false && exit 2 && fail "can't chain &&'s"
|
||||||
|
|
||||||
# Proper precedence between &&'s and ||'s
|
# Proper precedence between &&'s and ||'s
|
||||||
false && exit 2 || true && false && exit 2
|
false && exit 2 || true && false && fail Invalid precedence between '&&' and '||'
|
||||||
|
|
||||||
|
|
||||||
# Sanity check: can we pass arguments to 'test'?
|
# Sanity check: can we pass arguments to 'test'?
|
||||||
|
@ -17,75 +23,70 @@ test yes = yes || exit 2
|
||||||
|
|
||||||
# Sanity check: can we use $(command)?
|
# Sanity check: can we use $(command)?
|
||||||
test "$(echo yes)" = yes || exit 2
|
test "$(echo yes)" = yes || exit 2
|
||||||
|
|
||||||
# Apply some useful aliases
|
|
||||||
# FIXME: Convert these to functions when we have them
|
|
||||||
alias fail="echo Failure: "
|
|
||||||
|
|
||||||
# Redirections.
|
# Redirections.
|
||||||
test -z "$(echo foo > /dev/null)" || fail direct path redirection && exit 2
|
test -z "$(echo foo > /dev/null)" || fail direct path redirection
|
||||||
test -z "$(echo foo 2> /dev/null 1>&2)" || fail indirect redirection && exit 2
|
test -z "$(echo foo 2> /dev/null 1>&2)" || fail indirect redirection
|
||||||
test -n "$(echo foo 2> /dev/null)" || fail fds interfere with each other && exit 2
|
test -n "$(echo foo 2> /dev/null)" || fail fds interfere with each other
|
||||||
|
|
||||||
# Argument unpack
|
# Argument unpack
|
||||||
test "$(echo (yes))" = yes || fail arguments inside bare lists && exit 2
|
test "$(echo (yes))" = yes || fail arguments inside bare lists
|
||||||
test "$(echo (no)() yes)" = yes || fail arguments inside juxtaposition: empty && exit 2
|
test "$(echo (no)() yes)" = yes || fail arguments inside juxtaposition: empty
|
||||||
test "$(echo (y)(es))" = yes || fail arguments inside juxtaposition: list && exit 2
|
test "$(echo (y)(es))" = yes || fail arguments inside juxtaposition: list
|
||||||
test "$(echo "y"es)" = yes || fail arguments inside juxtaposition: string && exit 2
|
test "$(echo "y"es)" = yes || fail arguments inside juxtaposition: string
|
||||||
|
|
||||||
# String substitution
|
# String substitution
|
||||||
foo=yes
|
foo=yes
|
||||||
test "$(echo $foo)" = yes || fail simple string var lookup && exit 2
|
test "$(echo $foo)" = yes || fail simple string var lookup
|
||||||
test "$(echo "$foo")" = yes || fail stringified string var lookup && exit 2
|
test "$(echo "$foo")" = yes || fail stringified string var lookup
|
||||||
|
|
||||||
# List substitution
|
# List substitution
|
||||||
foo=(yes)
|
foo=(yes)
|
||||||
# Static lookup, as list
|
# Static lookup, as list
|
||||||
test "$(echo $foo)" = yes || fail simple list var lookup && exit 2
|
test "$(echo $foo)" = yes || fail simple list var lookup
|
||||||
# Static lookup, stringified
|
# Static lookup, stringified
|
||||||
test "$(echo "$foo")" = yes || fail stringified list var lookup && exit 2
|
test "$(echo "$foo")" = yes || fail stringified list var lookup
|
||||||
# Dynamic lookup through static expression
|
# Dynamic lookup through static expression
|
||||||
test "$(echo $'foo')" = yes || fail dynamic lookup through static exp && exit 2
|
test "$(echo $'foo')" = yes || fail dynamic lookup through static exp
|
||||||
# Dynamic lookup through dynamic expression
|
# Dynamic lookup through dynamic expression
|
||||||
ref_to_foo=foo
|
ref_to_foo=foo
|
||||||
test "$(echo $"$ref_to_foo")" = yes || fail dynamic lookup through dynamic exp && exit 2
|
test "$(echo $"$ref_to_foo")" = yes || fail dynamic lookup through dynamic exp
|
||||||
|
|
||||||
# More redirections
|
# More redirections
|
||||||
echo test > /tmp/sh-test
|
echo test > /tmp/sh-test
|
||||||
test "$(cat /tmp/sh-test)" = test || fail simple path redirect && exit 2
|
test "$(cat /tmp/sh-test)" = test || fail simple path redirect
|
||||||
rm /tmp/sh-test
|
rm /tmp/sh-test
|
||||||
|
|
||||||
# 'brace' expansions
|
# 'brace' expansions
|
||||||
test "$(echo x(yes no))" = "xyes xno" || fail simple juxtaposition expansion && exit 2
|
test "$(echo x(yes no))" = "xyes xno" || fail simple juxtaposition expansion
|
||||||
test "$(echo (y n)(es o))" = "yes yo nes no" || fail list-list juxtaposition expansion && exit 2
|
test "$(echo (y n)(es o))" = "yes yo nes no" || fail list-list juxtaposition expansion
|
||||||
test "$(echo ()(foo bar baz))" = "" || fail empty expansion && exit 2
|
test "$(echo ()(foo bar baz))" = "" || fail empty expansion
|
||||||
|
|
||||||
# Variables inside commands
|
# Variables inside commands
|
||||||
to_devnull=(>/dev/null)
|
to_devnull=(>/dev/null)
|
||||||
test "$(echo hewwo $to_devnull)" = "" || fail variable containing simple command && exit 2
|
test "$(echo hewwo $to_devnull)" = "" || fail variable containing simple command
|
||||||
|
|
||||||
word_count=(() | wc -w)
|
word_count=(() | wc -w)
|
||||||
test "$(echo well hello friends $word_count)" -eq 3 || fail variable containing pipeline && exit 2
|
test "$(echo well hello friends $word_count)" -eq 3 || fail variable containing pipeline
|
||||||
|
|
||||||
# Globs
|
# Globs
|
||||||
mkdir sh-test
|
mkdir sh-test
|
||||||
pushd sh-test
|
pushd sh-test
|
||||||
touch (a b c)(d e f)
|
touch (a b c)(d e f)
|
||||||
test "$(echo a*)" = "ad ae af" || fail '*' glob expansion && exit 2
|
test "$(echo a*)" = "ad ae af" || fail '*' glob expansion
|
||||||
test "$(echo a?)" = "ad ae af" || fail '?' glob expansion && exit 2
|
test "$(echo a?)" = "ad ae af" || fail '?' glob expansion
|
||||||
|
|
||||||
glob_in_var='*'
|
glob_in_var='*'
|
||||||
test "$(echo $glob_in_var)" = '*' || fail substituted string acts as glob && exit 2
|
test "$(echo $glob_in_var)" = '*' || fail substituted string acts as glob
|
||||||
|
|
||||||
test "$(echo (a*))" = "ad ae af" || fail globs in lists resolve wrong && exit 2
|
test "$(echo (a*))" = "ad ae af" || fail globs in lists resolve wrong
|
||||||
test "$(echo x(a*))" = "xad xae xaf" || fail globs in lists do not resolve to lists && exit 2
|
test "$(echo x(a*))" = "xad xae xaf" || fail globs in lists do not resolve to lists
|
||||||
test "$(echo "foo"a*)" = "fooad fooae fooaf" || fail globs join to dquoted strings && exit 2
|
test "$(echo "foo"a*)" = "fooad fooae fooaf" || fail globs join to dquoted strings
|
||||||
popd
|
popd
|
||||||
rm -fr sh-test
|
rm -fr sh-test
|
||||||
|
|
||||||
# Setopt
|
# Setopt
|
||||||
setopt --inline_exec_keep_empty_segments
|
setopt --inline_exec_keep_empty_segments
|
||||||
test "$(echo -n "a\n\nb")" = "a b" || fail inline_exec_keep_empty_segments has no effect && exit 2
|
test "$(echo -n "a\n\nb")" = "a b" || fail inline_exec_keep_empty_segments has no effect
|
||||||
|
|
||||||
setopt --no_inline_exec_keep_empty_segments
|
setopt --no_inline_exec_keep_empty_segments
|
||||||
test "$(echo -n "a\n\nb")" = "a b" || fail cannot unset inline_exec_keep_empty_segments && exit 2
|
test "$(echo -n "a\n\nb")" = "a b" || fail cannot unset inline_exec_keep_empty_segments
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue