]> arthur.barton.de Git - bup.git/blob - wvtest.sh
Update to latest wvtest.py, wvtest.sh, and wvtestrun from wvtest project.
[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         _wvfind_caller()
18         {
19                 LVL=$1
20                 WVCALLER_FILE=${BASH_SOURCE[2]}
21                 WVCALLER_LINE=${BASH_LINENO[1]}
22         }
23 else
24         _wvfind_caller()
25         {
26                 LVL=$1
27                 WVCALLER_FILE="unknown"
28                 WVCALLER_LINE=0
29         }
30 fi
31
32
33 _wvcheck()
34 {
35         CODE="$1"
36         TEXT=$(_wvtextclean "$2")
37         OK=ok
38         if [ "$CODE" -ne 0 ]; then
39                 OK=FAILED
40         fi
41         echo "! $WVCALLER_FILE:$WVCALLER_LINE  $TEXT  $OK" >&2
42         if [ "$CODE" -ne 0 ]; then
43                 exit $CODE
44         else
45                 return 0
46         fi
47 }
48
49
50 WVPASS()
51 {
52         TEXT="$*"
53
54         _wvfind_caller
55         if "$@"; then
56                 _wvcheck 0 "$TEXT"
57                 return 0
58         else
59                 _wvcheck 1 "$TEXT"
60                 # NOTREACHED
61                 return 1
62         fi
63 }
64
65
66 WVFAIL()
67 {
68         TEXT="$*"
69
70         _wvfind_caller
71         if "$@"; then
72                 _wvcheck 1 "NOT($TEXT)"
73                 # NOTREACHED
74                 return 1
75         else
76                 _wvcheck 0 "NOT($TEXT)"
77                 return 0
78         fi
79 }
80
81
82 _wvgetrv()
83 {
84         ( "$@" >&2 )
85         echo -n $?
86 }
87
88
89 WVPASSEQ()
90 {
91         _wvfind_caller
92         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
93         echo "Comparing:" >&2
94         echo "$1" >&2
95         echo "--" >&2
96         echo "$2" >&2
97         _wvcheck $(_wvgetrv [ "$1" = "$2" ]) "'$1' = '$2'"
98 }
99
100
101 WVPASSNE()
102 {
103         _wvfind_caller
104         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
105         echo "Comparing:" >&2
106         echo "$1" >&2
107         echo "--" >&2
108         echo "$2" >&2
109         _wvcheck $(_wvgetrv [ "$1" != "$2" ]) "'$1' != '$2'"
110 }
111
112
113 WVPASSRC()
114 {
115         RC=$?
116         _wvfind_caller
117         _wvcheck $(_wvgetrv [ $RC -eq 0 ]) "return code($RC) == 0"
118 }
119
120
121 WVFAILRC()
122 {
123         RC=$?
124         _wvfind_caller
125         _wvcheck $(_wvgetrv [ $RC -ne 0 ]) "return code($RC) != 0"
126 }
127
128
129 WVSTART()
130 {
131         echo >&2
132         _wvfind_caller
133         echo "Testing \"$*\" in $WVCALLER_FILE:" >&2
134 }