]> rtime.felk.cvut.cz Git - omk.git/blob - tests/wvtest.sh
tests: Only include .files file if it exists
[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         _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 \"$* ($OMK_RULES)\" in $WVCALLER_FILE:" >&2
134 }
135
136 omkize()
137 {
138     WVPASS cp "$OMK_TESTSROOT/../leaf-makefile/Makefile" .
139     for i in `find -L . -mindepth 2 -name Makefile.omk`; do
140         d=`dirname ${i}`
141         WVPASS cp Makefile "${d}/Makefile"
142     done
143 }
144
145 needs_valid_CC()
146 {
147     CC=$(make omk-get-var VAR=CC|sed -ne '/^CC=/ s///p')
148     if ! which ${CC%% *} > /dev/null; then
149         echo "Warning: '$CC' not found - skipping the test"
150         exit 0
151     fi
152
153     if [[ $OMK_RULES = sysless-keil16x ]] && ! which cygpath; then
154         echo "Warning: cygpath command not found - skipping the test"
155         exit 0
156     fi
157
158     if [[ $OMK_RULES = sysless-keil51 ]] && ! which l51; then
159         echo "Warning: l51 command not found - skipping the test"
160         exit 0
161     fi
162 }
163
164 OMK_TESTSROOT=${OMK_TESTSROOT:-$(readlink --canonicalize $(dirname $0))}
165 OMK_RULES=${OMK_RULES:-linux}   # When run manually, we use linux rules
166
167 if [[ -f "${OMK_TESTSROOT}/${OMK_RULES}.env" ]]; then
168     WVPASS . "${OMK_TESTSROOT}/${OMK_RULES}.env"
169 fi
170
171 case $OMK_RULES in
172     rtems)
173         [[ -z "$RTEMS_MAKEFILE_PATH" ]] && exit 0
174         ;;
175     vxworks)
176         [[ -z "$WRENV" ]] && exit 0
177         ;;
178 esac
179
180 echo "Testing \"$OMK_RULES rules\" in $(basename $0):" >&2
181 testdir="tmp/$(basename $0 .sh).$OMK_RULES"
182 [[ -d "$testdir" ]] && WVPASS rm -rf "$testdir"
183 WVPASS mkdir -p "$testdir"
184 WVPASS cd "$testdir"
185 WVPASS cp "$OMK_TESTSROOT"/../rules/$OMK_RULES/* .