]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ar/func.sh
Initial import of elftoolchain r2974.
[FreeBSD/FreeBSD.git] / test / ar / func.sh
1 # $Id: func.sh 2080 2011-10-27 04:23:24Z jkoshy $
2 # `init' initializes test engine global data.
3 #
4 init() {
5     THISDIR=`/bin/pwd`
6     TOPDIR=${THISDIR}/../..
7     AR=${TOPDIR}/ar/ar
8     RANLIB=${TOPDIR}/ar/ranlib
9
10     # keep a record of total tests and number of tests passed.
11     TOTALCT=/tmp/bsdar-test-total
12     PASSEDCT=/tmp/bsdar-test-passed
13     echo 0 > ${TOTALCT}
14     echo 0 > ${PASSEDCT}
15 }
16
17 # `inittest' initializes individual test process. (set up temp dirs,
18 # make copies of files used in the test if necessary, etc.)
19 #
20 inittest() {
21     if [ $# -ne 2 ]; then
22         echo "usage: inittest tcname tcdir"
23         exit 1
24     fi
25
26     TC=$1
27     TCDIR=$2
28     TESTDIR=/tmp/bsdar-${TC}
29     OUTDIR=/tmp/bsdar-${TC}-out
30     RLTDIR=/tmp/bsdar-${TC}-rlt
31     rm -rf ${TESTDIR}
32     rm -rf ${OUTDIR}
33     rm -rf ${RLTDIR}
34     mkdir -p ${TESTDIR} || exit 1
35     mkdir -p ${OUTDIR} || exit 1
36     mkdir -p ${RLTDIR} || exit 1
37
38     if [ -d "${TCDIR}/in" ]; then
39         cp -R ${TCDIR}/in/* ${TESTDIR} || exit 1
40     fi
41
42     if [ -d "${TCDIR}/out" ]; then
43         cp -R ${TCDIR}/out/* ${RLTDIR} || exit 1
44     fi
45 }
46
47 # `extshar' extracts shar file in the specific dir,
48 # then uudecode the resulting file(s).
49 #
50 extshar() {
51     if [ $# -ne 1 ]; then
52         echo "usage: extshar dir"
53         exit 1
54     fi
55
56     cd $1 || exit 1
57     for f in *.shar; do
58         sh $f > /dev/null 2>&1 || exit 1
59         rm -rf $f
60     done
61
62     udecode $1
63 }
64
65 # `udecode' calls uudecode to decode files encoded by
66 # uuencode in the specific dir.
67 #
68 udecode() {
69     if [ $# -ne 1 ]; then
70         echo "usage: uudecode dir"
71         exit 1
72     fi
73
74     cd $1 || exit 1
75     find . -type f -execdir uudecode {} \;
76     find . -type f -name '*.uu' -delete
77 }
78
79 # `runcmd' runs `cmd' on the work/result dir.
80 #
81 # cmd: command to execute
82 # loc: work/result
83 # rec: true (keep a record of the stdout and stderr)
84 #      false (do not record)
85 #
86 runcmd() {
87     if [ $# -ne 3 ]; then
88         echo "usage: runcmd cmd loc rec"
89         exit 1
90     fi
91
92     # prefix executable with abolute pathname.
93     executable=`echo $1 | cut -f 1 -d ' '`
94     relapath=`dirname ${executable}`
95     cd ${THISDIR}
96     absolpath=`cd ${relapath} && /bin/pwd`
97     newcmd=${absolpath}/`basename ${executable}`" "`echo $1 | cut -f 2- -d ' '`
98     redirin=`echo $newcmd | cut -f 2- -d '<'`
99     if [ "$redirin" != "$newcmd" ]; then
100         newcmd=`echo $newcmd | cut -f 1 -d '<'`
101         redirin=`echo ${redirin} | sed 's/^ *\(.*\) *$/\1/'`
102     fi
103
104     if [ "$2" = work ]; then
105         cd ${TESTDIR} || exit 1
106     elif [ "$2" = result ]; then
107         cd ${RLTDIR} || exit 1
108     else
109         echo "loc must be work or result."
110         exit 1
111     fi
112
113     if [ "$3" = true ]; then
114         if [ "$redirin" != "$newcmd" ]; then
115             ${newcmd} < ${redirin} > ${OUTDIR}/${TC}.out 2> ${OUTDIR}/${TC}.err
116         else
117             ${newcmd} > ${OUTDIR}/${TC}.out 2> ${OUTDIR}/${TC}.err
118         fi
119         echo $? > ${OUTDIR}/${TC}.eval
120     elif [ "$3" = false ]; then
121         if [ "$redirin" != "$newcmd" ]; then
122             ${newcmd} < ${redirin}
123         else
124             ${newcmd}
125         fi
126     else
127         echo "rec must be true of false."
128         exit 1
129     fi
130
131     cd ${THISDIR}
132 }
133
134 # `rundiff' performs standard diff to compare exit value,
135 # stdout output, stderr output and resulting files with
136 # "standard answers".
137 #
138 rundiff() {
139     # $1 indicates whether we should compare resulting files.
140     if [ $# -ne 1 ]; then
141         echo "usage: rundiff [true|false]"
142         exit 1
143     fi
144     cd ${THISDIR} || exit 1
145     if [ -f ${TCDIR}/${TC}.eval ]; then
146         incct ${TOTALCT}
147         diff -urN ${TCDIR}/${TC}.eval ${OUTDIR}/${TC}.eval
148         if [ $? -eq 0 ]; then
149             echo "${TC} exit value - ok"
150             incct ${PASSEDCT}
151         else
152             echo "${TC} exit value - not ok"
153         fi
154     fi
155
156     if [ -f ${TCDIR}/${TC}.out ]; then
157         incct ${TOTALCT}
158         diff -urN ${TCDIR}/${TC}.out ${OUTDIR}/${TC}.out
159         if [ $? -eq 0 ]; then
160             echo "${TC} stdout - ok"
161             incct ${PASSEDCT}
162         else
163             echo "${TC} stdout - not ok"
164         fi
165     fi
166
167     if [ -f ${TCDIR}/${TC}.err ]; then
168         incct ${TOTALCT}
169         diff -urN ${TCDIR}/${TC}.err ${OUTDIR}/${TC}.err
170         if [ $? -eq 0 ]; then
171             echo "${TC} stderr - ok"
172             incct ${PASSEDCT}
173         else
174             echo "${TC} stderr - not ok"
175         fi
176     fi
177
178     if [ "$1" = true ]; then
179         incct ${TOTALCT}
180         diff -urN ${RLTDIR} ${TESTDIR}
181         if [ $? -eq 0 ]; then
182             echo "${TC} resulting files - ok"
183             incct ${PASSEDCT}
184         else
185             echo "${TC} resulting files - not ok"
186         fi
187     fi
188 }
189
190 # `innct' increase specified counter by 1.
191 incct() {
192     if [ $# -ne 1 ]; then
193         echo "usage: incct counterfile"
194         exit 1
195     fi
196     if [ -f $1 ]; then
197         exec 3< $1
198         read val <&3
199         exec 3<&-
200         newval=`expr ${val} + 1`
201         echo ${newval} > $1
202     else
203         echo "$1 not exist"
204         exit 1
205     fi
206 }
207
208 # `statistic' shows number of test passed.
209 #
210 statistic() {
211     exec 3< ${TOTALCT}
212     read tval <&3
213     exec 3<&-
214     exec 3< ${PASSEDCT}
215     read pval <&3
216     exec 3<&-
217
218     echo "${pval} out of ${tval} passed."
219 }