pkgsrc/pkgtools/pkg_regress/files/pkg_regress.sh
gavan 3c495e7aeb Move invocation of make into a do_test_default, and provide overridable
function do_test, which by default just invokes do_test_default.

For jlam's overriding pleasure.
2005-05-07 15:45:59 +00:00

158 lines
2.1 KiB
Bash
Executable file

#!@SH@ -e
#
# $NetBSD: pkg_regress.sh,v 1.3 2005/05/07 15:46:00 gavan Exp $
#
if [ -z "$PKGSRCDIR" ]
then
PKGSRCDIR=@PKGSRCDIR@
fi
TEST_EGREP="@EGREP@"
TEST_MAKE="@MAKE@"
# hooks overridable by test spec file
do_setup()
{
return
}
do_cleanup()
{
return
}
do_test()
{
do_test_default
}
do_test_default()
{
# Run the test. We use an if statement to ensure that the script
# isn't terminated if it is executed with sh -e.
if ${TEST_MAKE} ${MAKEARGS_TEST} >${TEST_OUTFILE} 2>&1
then
TEST_EXITSTATUS=$?
else
TEST_EXITSTATUS=$?
fi
}
check_result()
{
return
}
# result checking routines
exit_status()
{
# Test exit status
if [ "$1" -ne "${TEST_EXITSTATUS}" ]
then
TEST_RESULT=1
fi
}
output_require()
{
# Test positive match against output
for PATTERN in "$@"
do
if ! ${TEST_EGREP} -q "${PATTERN}" <${TEST_OUTFILE} >/dev/null
then
TEST_RESULT=1
fi
done
}
output_prohibit()
{
# Test negative match against output
for PATTERN in "$@"
do
if ${TEST_EGREP} -q "${PATTERN}" <${TEST_OUTFILE} >/dev/null
then
TEST_RESULT=1
fi
done
}
# runtest runs a test in a subshell, so that environment settings etc in
# one test do not interfere with other tests.
runtest() {
if (
cd $1
TEST_RESULT=0
TEST_EXITSTATUS=0
TEST_OUTFILE=`mktemp -t pkg_regress` || exit 1
. ./spec
do_setup
do_test
check_result
# Perform cleanup
do_cleanup
if [ -n "${MAKEARGS_CLEAN}" ]
then
${TEST_MAKE} ${MAKEARGS_CLEAN} >>${TEST_OUTFILE}
fi
if [ -n "${TEST_VERBOSE}" ]
then
cat ${TEST_OUTFILE}
fi
rm -f ${TEST_OUTFILE}
exit ${TEST_RESULT}
)
then
TEST_PASS=`expr ${TEST_PASS} + 1`
else
TEST_FAIL=`expr ${TEST_FAIL} + 1`
TEST_FAILURES="${TEST_FAILURES} $1"
fi
}
TEST_PASS=0
TEST_FAIL=0
TEST_FAILURES=
cd $PKGSRCDIR/regress
case $1 in
-v) TEST_VERBOSE=1
shift ;;
esac
if [ $# -ne 0 ]
then
TEST_LIST="$@"
else
TEST_LIST="*"
fi
for dir in ${TEST_LIST}
do
if [ -f $dir/spec ]
then
runtest $dir
fi
done
if [ -n "${TEST_FAILURES}" ]
then
echo "Tests failed: ${TEST_FAILURES}"
echo
fi
echo "Statistics:"
echo " $TEST_PASS passed, $TEST_FAIL failed"