chiark / gitweb /
go-fringe.go: Language change: `closed' function on channels has gone.
[fringe] / test
1 #! /bin/sh
2
3 ###--------------------------------------------------------------------------
4 ### Framework.
5
6 prog=${1?prog}
7 progbase=${prog##*/}
8 lose=0
9
10 clean () {
11   rm -f test.out test.err test.rc
12 }
13
14 run () {
15   clean
16   echo >&2 "Running $prog $*"
17   $prog "$@" >test.out 2>test.err
18   echo $? >test.rc
19   for i in out err rc; do
20     echo "$i"
21     sed 's/^/   /' test.$i
22   done >&2
23 }
24
25 lose () {
26   echo >&2 "$*"
27   lose=1
28 }
29
30 insist () {
31   case $(cat test.$1) in
32     $2) ;;
33     *) lose "!!! expected $1 to match \`$2'." ;;
34   esac
35 }
36
37 insist_fail () {
38   insist rc "[!0]*"
39   insist err "*$progbase: $1"
40 }
41
42 insist_win () {
43   insist rc 0
44   insist out "$1"
45 }
46
47 ###--------------------------------------------------------------------------
48 ### Tests.
49
50 tree_a="((a)b((c)d(e)))"
51 tree_b="((((a)b(c))d)e)"
52 tree_c="((((a)c(b))d)e)"
53
54 tree_x="(((a)b((c)d(e)))f((((g)h(i))j(k))l(m)))"
55 tree_y="(((a)b((c)d(e(f))))g(((h)i((j)k(l)))m))"
56 tree_z="(((a)b((c)d(e)))f((((g)h)j(k))l(m)))"
57
58 run
59         insist_fail "bad args"
60
61 run foo bar baz
62         insist_fail "bad args"
63
64 run $tree_a
65         insist_win "abcde"
66
67 run "((a)b((c)d(e))"
68         insist_fail "missing )"
69
70 run "((a)b((c)d(e)))z"
71         insist_fail "trailing junk"
72
73 run "((a)b((c)d("
74         insist_fail "no data"
75
76 run $tree_a $tree_b
77         insist_win "match"
78
79 run $tree_a $tree_c
80         insist_win "no match"
81
82 run $tree_x $tree_y
83         insist_win "match"
84
85 run $tree_x $tree_z
86         insist_win "no match"
87
88 run $tree_z $tree_y
89         insist_win "no match"
90
91 ###--------------------------------------------------------------------------
92 ### Done.
93
94 clean
95 exit $lose
96
97 ###----- That's all, folks --------------------------------------------------