]> arthur.barton.de Git - bup.git/blob - wvtest.sh
index: fix -H option
[bup.git] / wvtest.sh
1 #
2 # Include this file in your shell script by using:
3 #         #!/bin/sh
4 #         . ./wvtest.sh
5 #
6
7 # we don't quote $TEXT in case it contains newlines; newlines
8 # aren't allowed in test output.  However, we set -f so that
9 # at least shell glob characters aren't processed.
10 _wvtextclean()
11 {
12         ( set -f; echo $* )
13 }
14
15
16 if [ -n "$BASH_VERSION" ]; then
17         . ./wvtest-bash.sh  # This keeps sh from choking on the syntax.
18 else
19         _wvbacktrace() { true; }
20         _wvpushcall() { true; }
21         _wvpopcall() { true; }
22
23         _wvfind_caller()
24         {
25                 WVCALLER_FILE="unknown"
26                 WVCALLER_LINE=0
27         }
28 fi
29
30
31 _wvcheck()
32 {
33         local CODE="$1"
34         local TEXT=$(_wvtextclean "$2")
35         local OK=ok
36         if [ "$CODE" -ne 0 ]; then
37                 OK=FAILED
38         fi
39         echo "! $WVCALLER_FILE:$WVCALLER_LINE  $TEXT  $OK" >&2
40         if [ "$CODE" -ne 0 ]; then
41                 _wvbacktrace
42                 exit $CODE
43         else
44                 return 0
45         fi
46 }
47
48
49 WVPASS()
50 {
51         local TEXT="$*"
52         _wvpushcall "$@"
53
54         _wvfind_caller
55         if "$@"; then
56                 _wvpopcall
57                 _wvcheck 0 "$TEXT"
58                 return 0
59         else
60                 _wvcheck 1 "$TEXT"
61                 # NOTREACHED
62                 return 1
63         fi
64 }
65
66
67 WVFAIL()
68 {
69         local TEXT="$*"
70         _wvpushcall "$@"
71
72         _wvfind_caller
73         if "$@"; then
74                 _wvcheck 1 "NOT($TEXT)"
75                 # NOTREACHED
76                 return 1
77         else
78                 _wvcheck 0 "NOT($TEXT)"
79                 _wvpopcall
80                 return 0
81         fi
82 }
83
84
85 _wvgetrv()
86 {
87         ( "$@" >&2 )
88         echo -n $?
89 }
90
91
92 WVPASSEQ()
93 {
94         _wvpushcall "$@"
95         _wvfind_caller
96         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
97         echo "Comparing:" >&2
98         echo "$1" >&2
99         echo "--" >&2
100         echo "$2" >&2
101         _wvcheck $(_wvgetrv [ "$1" = "$2" ]) "'$1' = '$2'"
102         _wvpopcall
103 }
104
105
106 WVPASSNE()
107 {
108         _wvpushcall "$@"
109         _wvfind_caller
110         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
111         echo "Comparing:" >&2
112         echo "$1" >&2
113         echo "--" >&2
114         echo "$2" >&2
115         _wvcheck $(_wvgetrv [ "$1" != "$2" ]) "'$1' != '$2'"
116         _wvpopcall
117 }
118
119
120 WVPASSRC()
121 {
122         local RC=$?
123         _wvpushcall "$@"
124         _wvfind_caller
125         _wvcheck $(_wvgetrv [ $RC -eq 0 ]) "return code($RC) == 0"
126         _wvpopcall
127 }
128
129
130 WVFAILRC()
131 {
132         local RC=$?
133         _wvpushcall "$@"
134         _wvfind_caller
135         _wvcheck $(_wvgetrv [ $RC -ne 0 ]) "return code($RC) != 0"
136         _wvpopcall
137 }
138
139
140 WVSTART()
141 {
142         echo >&2
143         _wvfind_caller
144         echo "Testing \"$*\" in $WVCALLER_FILE:" >&2
145 }
146
147
148 WVDIE()
149 {
150         local TEXT=$(_wvtextclean "$@")
151         _wvpushcall "$@"
152         _wvfind_caller
153         echo "! $WVCALLER_FILE:$WVCALLER_LINE  $TEXT  FAILED" 1>&2
154         exit 1
155 }
156
157
158 # Local Variables:
159 # indent-tabs-mode: t
160 # sh-basic-offset: 8
161 # End: