mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 23:07:35 +00:00
Shell: Make tests use PASS/FAIL instead of exit codes
There's no guarantee that the last executed command will have a zero exit code, and so the shell exit code may or may not be zero, even if all the tests pass. Also changes the `test || echo fail && exit` to `if not test { echo fail && exit }`, since that's nicer-looking.
This commit is contained in:
parent
5ec139e728
commit
86f50aa74e
14 changed files with 177 additions and 128 deletions
|
@ -1,16 +1,12 @@
|
|||
#!/bin/sh
|
||||
|
||||
source test-commons.inc
|
||||
|
||||
# Are comments ignored?
|
||||
# Sanity check: can we do && and || ?
|
||||
true || exit 2
|
||||
false
|
||||
|
||||
# Apply some useful aliases
|
||||
fail() {
|
||||
echo $*
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Can we chain &&'s?
|
||||
false && exit 2 && fail "can't chain &&'s"
|
||||
|
||||
|
@ -19,74 +15,76 @@ false && exit 2 || true && false && fail Invalid precedence between '&&' and '||
|
|||
|
||||
|
||||
# Sanity check: can we pass arguments to 'test'?
|
||||
test yes = yes || exit 2
|
||||
if not test yes = yes { exit 2 }
|
||||
|
||||
# Sanity check: can we use $(command)?
|
||||
test "$(echo yes)" = yes || exit 2
|
||||
if not test "$(echo yes)" = yes { exit 2 }
|
||||
# Redirections.
|
||||
test -z "$(echo foo > /dev/null)" || fail direct path redirection
|
||||
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
|
||||
if not test -z "$(echo foo > /dev/null)" { fail direct path redirection }
|
||||
if not test -z "$(echo foo 2> /dev/null 1>&2)" { fail indirect redirection }
|
||||
if not test -n "$(echo foo 2> /dev/null)" { fail fds interfere with each other }
|
||||
|
||||
# Argument unpack
|
||||
test "$(echo (yes))" = yes || fail arguments inside bare lists
|
||||
test "$(echo (no)() yes)" = yes || fail arguments inside juxtaposition: empty
|
||||
test "$(echo (y)(es))" = yes || fail arguments inside juxtaposition: list
|
||||
test "$(echo "y"es)" = yes || fail arguments inside juxtaposition: string
|
||||
if not test "$(echo (yes))" = yes { fail arguments inside bare lists }
|
||||
if not test "$(echo (no)() yes)" = yes { fail arguments inside juxtaposition: empty }
|
||||
if not test "$(echo (y)(es))" = yes { fail arguments inside juxtaposition: list }
|
||||
if not test "$(echo "y"es)" = yes { fail arguments inside juxtaposition: string }
|
||||
|
||||
# String substitution
|
||||
foo=yes
|
||||
test "$(echo $foo)" = yes || fail simple string var lookup
|
||||
test "$(echo "$foo")" = yes || fail stringified string var lookup
|
||||
if not test "$(echo $foo)" = yes { fail simple string var lookup }
|
||||
if not test "$(echo "$foo")" = yes { fail stringified string var lookup }
|
||||
|
||||
# List substitution
|
||||
foo=(yes)
|
||||
# Static lookup, as list
|
||||
test "$(echo $foo)" = yes || fail simple list var lookup
|
||||
if not test "$(echo $foo)" = yes { fail simple list var lookup }
|
||||
# Static lookup, stringified
|
||||
test "$(echo "$foo")" = yes || fail stringified list var lookup
|
||||
if not test "$(echo "$foo")" = yes { fail stringified list var lookup }
|
||||
# Dynamic lookup through static expression
|
||||
test "$(echo $'foo')" = yes || fail dynamic lookup through static exp
|
||||
if not test "$(echo $'foo')" = yes { fail dynamic lookup through static exp }
|
||||
# Dynamic lookup through dynamic expression
|
||||
ref_to_foo=foo
|
||||
test "$(echo $"$ref_to_foo")" = yes || fail dynamic lookup through dynamic exp
|
||||
if not test "$(echo $"$ref_to_foo")" = yes { fail dynamic lookup through dynamic exp }
|
||||
|
||||
# More redirections
|
||||
echo test > /tmp/sh-test
|
||||
test "$(cat /tmp/sh-test)" = test || fail simple path redirect
|
||||
if not test "$(cat /tmp/sh-test)" = test { fail simple path redirect }
|
||||
rm /tmp/sh-test
|
||||
|
||||
# 'brace' expansions
|
||||
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
|
||||
test "$(echo ()(foo bar baz))" = "" || fail empty expansion
|
||||
if not test "$(echo x(yes no))" = "xyes xno" { fail simple juxtaposition expansion }
|
||||
if not test "$(echo (y n)(es o))" = "yes yo nes no" { fail list-list juxtaposition expansion }
|
||||
if not test "$(echo ()(foo bar baz))" = "" { fail empty expansion }
|
||||
|
||||
# Variables inside commands
|
||||
to_devnull=(>/dev/null)
|
||||
test "$(echo hewwo $to_devnull)" = "" || fail variable containing simple command
|
||||
if not test "$(echo hewwo $to_devnull)" = "" { fail variable containing simple command }
|
||||
|
||||
word_count=(() | wc -w)
|
||||
test "$(echo well hello friends $word_count)" -eq 3 || fail variable containing pipeline
|
||||
if not test "$(echo well hello friends $word_count)" -eq 3 { fail variable containing pipeline }
|
||||
|
||||
# Globs
|
||||
mkdir sh-test
|
||||
pushd sh-test
|
||||
touch (a b c)(d e f)
|
||||
test "$(echo a*)" = "ad ae af" || fail '*' glob expansion
|
||||
test "$(echo a?)" = "ad ae af" || fail '?' glob expansion
|
||||
if not test "$(echo a*)" = "ad ae af" { fail '*' glob expansion }
|
||||
if not test "$(echo a?)" = "ad ae af" { fail '?' glob expansion }
|
||||
|
||||
glob_in_var='*'
|
||||
test "$(echo $glob_in_var)" = '*' || fail substituted string acts as glob
|
||||
if not test "$(echo $glob_in_var)" = '*' { fail substituted string acts as glob }
|
||||
|
||||
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
|
||||
test "$(echo "foo"a*)" = "fooad fooae fooaf" || fail globs join to dquoted strings
|
||||
if not test "$(echo (a*))" = "ad ae af" { fail globs in lists resolve wrong }
|
||||
if not test "$(echo x(a*))" = "xad xae xaf" { fail globs in lists do not resolve to lists }
|
||||
if not test "$(echo "foo"a*)" = "fooad fooae fooaf" { fail globs join to dquoted strings }
|
||||
popd
|
||||
rm -fr sh-test
|
||||
|
||||
# Setopt
|
||||
setopt --inline_exec_keep_empty_segments
|
||||
test "$(echo -n "a\n\nb")" = "a b" || fail inline_exec_keep_empty_segments has no effect
|
||||
if not test "$(echo -n "a\n\nb")" = "a b" { fail inline_exec_keep_empty_segments has no effect }
|
||||
|
||||
setopt --no_inline_exec_keep_empty_segments
|
||||
test "$(echo -n "a\n\nb")" = "a b" || fail cannot unset inline_exec_keep_empty_segments
|
||||
if not test "$(echo -n "a\n\nb")" = "a b" { fail cannot unset inline_exec_keep_empty_segments }
|
||||
|
||||
echo PASS
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue