#! /bin/sh ###-------------------------------------------------------------------------- ### Framework. prog=${1?prog} progbase=${prog##*/} lose=0 clean () { rm -f test.out test.err test.rc } run () { clean echo >&2 "Running $prog $*" $prog "$@" >test.out 2>test.err echo $? >test.rc for i in out err rc; do echo "$i" sed 's/^/ /' test.$i done >&2 } lose () { echo >&2 "$*" lose=1 } insist () { case $(cat test.$1) in $2) ;; *) lose "!!! expected $1 to match \`$2'." ;; esac } insist_fail () { insist rc "[!0]*" insist err "*$progbase: $1" } insist_win () { insist rc 0 insist out "$1" } ###-------------------------------------------------------------------------- ### Tests. tree_a="((a)b((c)d(e)))" tree_b="((((a)b(c))d)e)" tree_c="((((a)c(b))d)e)" tree_x="(((a)b((c)d(e)))f((((g)h(i))j(k))l(m)))" tree_y="(((a)b((c)d(e(f))))g(((h)i((j)k(l)))m))" tree_z="(((a)b((c)d(e)))f((((g)h)j(k))l(m)))" run insist_fail "bad args" run foo bar baz insist_fail "bad args" run $tree_a insist_win "abcde" run "((a)b((c)d(e))" insist_fail "missing )" run "((a)b((c)d(e)))z" insist_fail "trailing junk" run "((a)b((c)d(" insist_fail "no data" run $tree_a $tree_b insist_win "match" run $tree_a $tree_c insist_win "no match" run $tree_x $tree_y insist_win "match" run $tree_x $tree_z insist_win "no match" run $tree_z $tree_y insist_win "no match" ###-------------------------------------------------------------------------- ### Done. clean exit $lose ###----- That's all, folks --------------------------------------------------