]> rtime.felk.cvut.cz Git - omk.git/blob - tests/wvtest.sh
Update wvtool
[omk.git] / tests / wvtest.sh
1 #
2 # Include this file in your shell script by using:
3 #         #!/bin/bash
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         trap 'echo "! ${BASH_SOURCE[0]}:${LINENO} ${BASH_COMMAND} FAILED"' ERR
18
19         _wvfind_caller()
20         {
21                 LVL=$1
22                 WVCALLER_FILE=${BASH_SOURCE[2]}
23                 WVCALLER_LINE=${BASH_LINENO[1]}
24         }
25 else
26         _wvfind_caller()
27         {
28                 LVL=$1
29                 WVCALLER_FILE="unknown"
30                 WVCALLER_LINE=0
31         }
32 fi
33
34
35 _wvcheck()
36 {
37         CODE="$1"
38         TEXT=$(_wvtextclean "$2")
39         OK=ok
40         if [ "$CODE" -ne 0 ]; then
41                 OK=FAILED
42         fi
43         echo "! $WVCALLER_FILE:$WVCALLER_LINE  $TEXT  $OK" >&2
44         if [ "$CODE" -ne 0 ]; then
45                 exit $CODE
46         else
47                 return 0
48         fi
49 }
50
51
52 WVPASS()
53 {
54         TEXT="$*"
55
56         _wvfind_caller
57         if "$@"; then
58                 _wvcheck 0 "$TEXT"
59                 return 0
60         else
61                 _wvcheck 1 "$TEXT"
62                 # NOTREACHED
63                 return 1
64         fi
65 }
66
67
68 WVFAIL()
69 {
70         TEXT="$*"
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                 return 0
80         fi
81 }
82
83
84 _wvgetrv()
85 {
86         ( "$@" >&2 )
87         echo -n $?
88 }
89
90
91 WVPASSEQ()
92 {
93         _wvfind_caller
94         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
95         echo "Comparing:" >&2
96         echo "$1" >&2
97         echo "--" >&2
98         echo "$2" >&2
99         _wvcheck $(_wvgetrv [ "$1" = "$2" ]) "'$1' = '$2'"
100 }
101
102
103 WVPASSNE()
104 {
105         _wvfind_caller
106         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
107         echo "Comparing:" >&2
108         echo "$1" >&2
109         echo "--" >&2
110         echo "$2" >&2
111         _wvcheck $(_wvgetrv [ "$1" != "$2" ]) "'$1' != '$2'"
112 }
113
114
115 WVPASSRC()
116 {
117         RC=$?
118         _wvfind_caller
119         _wvcheck $(_wvgetrv [ $RC -eq 0 ]) "return code($RC) == 0"
120 }
121
122
123 WVFAILRC()
124 {
125         RC=$?
126         _wvfind_caller
127         _wvcheck $(_wvgetrv [ $RC -ne 0 ]) "return code($RC) != 0"
128 }
129
130
131 WVSTART()
132 {
133         echo >&2
134         _wvfind_caller
135         echo "Testing \"$* ($OMK_RULES)\" in $WVCALLER_FILE:" >&2
136         cd "$WV_BASE_DIR"
137         local dir=test.$(echo $* | tr -s '[[:blank:]]' _ | tr "A-Z" "a-z")
138         rm -rf "$dir"
139         mkdir -p "$dir"
140         WVPASS cd "$WV_BASE_DIR/$dir"
141         WVPASS cp "$OMK_TESTSROOT"/../rules/$OMK_RULES/* .
142         WVPASS cp "$OMK_TESTSROOT"/../snippets/Makefile.rules.$OMK_RULES Makefile.rules
143         WVPASS cp "$OMK_TESTSROOT/../leaf-makefile/Makefile" .
144 }
145
146 omkize()
147 {
148     WVPASS cp "$OMK_TESTSROOT/../leaf-makefile/Makefile" .
149     for i in `find -L . -mindepth 2 -name Makefile.omk`; do
150         d=`dirname ${i}`
151         WVPASS cp Makefile "${d}/Makefile"
152     done
153 }
154
155 needs_valid_CC()
156 {
157     CC=$(make omk-get-var VAR=CC|sed -ne '/^CC=/ s///p')
158     if ! which ${CC%% *} > /dev/null; then
159         echo "Warning: '$CC' not found - skipping the test"
160         exit 0
161     fi
162
163     if [[ $OMK_RULES = sysless-keil16x ]] && ! which cygpath; then
164         echo "Warning: cygpath command not found - skipping the test"
165         exit 0
166     fi
167
168     if [[ $OMK_RULES = sysless-keil51 ]] && ! which l51; then
169         echo "Warning: l51 command not found - skipping the test"
170         exit 0
171     fi
172 }
173
174 OMK_TESTSROOT=${OMK_TESTSROOT:-$(readlink --canonicalize $(dirname $0))}
175 OMK_RULES=${OMK_RULES:-linux}   # When run manually, we use linux rules
176
177 if [[ -f "${OMK_TESTSROOT}/${OMK_RULES}.env" ]]; then
178     WVPASS . "${OMK_TESTSROOT}/${OMK_RULES}.env"
179 fi
180
181 case $OMK_RULES in
182     rtems)
183         [[ -z "$RTEMS_MAKEFILE_PATH" ]] && exit 0
184         ;;
185     vxworks)
186         [[ -z "$WRENV" ]] && exit 0
187         ;;
188 esac
189
190 echo "Testing \"$OMK_RULES rules\" in $(basename $0):" >&2
191 testdir="tmp/$(basename $0 .sh).$OMK_RULES"
192 [[ -d "$testdir" ]] && WVPASS rm -rf "$testdir"
193 WVPASS mkdir -p "$testdir"
194 WVPASS cd "$testdir"
195 WVPASS cp "$OMK_TESTSROOT"/../rules/$OMK_RULES/* .
196 WVPASS cp "$OMK_TESTSROOT"/../snippets/Makefile.rules.$OMK_RULES Makefile.rules
197 WVPASS cp "$OMK_TESTSROOT/../leaf-makefile/Makefile" .
198
199 WV_BASE_DIR="$PWD"
200 export MAKEFLAGS="--include-dir=$OMK_TESTSROOT/../snippets"
201 export LC_ALL=C