openwrt-packages/lang/perl/files/perl-run_tests.sh

82 lines
2.0 KiB
Bash
Executable File

#!/bin/sh
PERL_TESTSDIR="/usr/share/perl/perl-tests"
PERL_LIBDIR="/usr/lib/perl5/%%PERL_VERSION%%/"
PERL_DISABLEDTESTS="%%PERL_DISABLEDTESTS%%"
no_run=""
manual_run=""
manual_run_no_base=""
while [ ! -z "$1" ]; do
case $1 in
-n)
no_run="yes"
;;
-m)
manual_run="yes"
;;
-mb)
manual_run="yes"
manual_run_no_base="yes"
;;
--help)
echo "run_tests.sh [-n|-m|-mb|--help]"
echo ""
echo "Options:"
echo " -n Just prepare the environment. Don't actually run any tests"
echo " -m Run tests manually according to MANIFEST, instead of whatever t/TEST chooses"
echo " -mb Don't run base tests. Implies -m"
echo " --help Print this help ;)"
echo ""
exit 0
;;
*)
echo "Invalid argument: $1"
;;
esac
shift
done
if [ ! -f "$PERL_TESTSDIR/__prepared" ]; then
# Many tests insist on having PERL5LIB in $PERL_TESTSDIR/lib. However,
# that directory may also contain tests. Some of them(FindBin.t in particular)
# also demand being located in a directory ending with "lib". So we can't do symlink
# trickery here.
# Our solution is to just copy PERL5LIB over.
if [ -d "$PERL_TESTSDIR/lib" ]; then
cp -a "$PERL_LIBDIR/"* "$PERL_TESTSDIR/lib/"
else
ln -s "$PERL_LIBDIR" "$PERL_TESTSDIR/lib"
fi
ln -s /usr/bin/perl "$PERL_TESTSDIR/perl"
ln -s /usr/bin/perl "$PERL_TESTSDIR/t/perl"
touch "$PERL_TESTSDIR/__prepared"
for i in $PERL_DISABLEDTESTS; do
echo "Disabling $i tests"
sed 's!^'$i'.*$!!' -i $PERL_TESTSDIR/MANIFEST
done
cat $PERL_TESTSDIR/MANIFEST | grep -v '^$' > $PERL_TESTSDIR/MANIFEST_NEW
rm $PERL_TESTSDIR/MANIFEST
mv $PERL_TESTSDIR/MANIFEST_NEW $PERL_TESTSDIR/MANIFEST
fi
if [ -z "$no_run" ]; then
cd "$PERL_TESTSDIR/t"
if [ ! -z "$manual_run" ]; then
for i in $(cat ../MANIFEST | sed 's/\t.*$//g' | grep '\.t$'); do
if [ ! -z "$manual_run_no_base" ] && [ ! -z "$(echo $i | grep '^t/')" ]; then
continue;
fi
echo "Running $i"
./TEST ../$i
echo ""
done
else
./perl TEST
fi
fi