diff options
Diffstat (limited to 'testsuite/check.sh')
-rwxr-xr-x | testsuite/check.sh | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/testsuite/check.sh b/testsuite/check.sh new file mode 100755 index 0000000..85b606b --- /dev/null +++ b/testsuite/check.sh @@ -0,0 +1,104 @@ +#! /bin/sh +# check script for GNU ed - The GNU line editor +# Copyright (C) 2006, 2007, 2008, 2009 Antonio Diaz Diaz. +# +# This script is free software; you have unlimited permission +# to copy, distribute and modify it. + +objdir=`pwd` +testdir=`cd "$1" ; pwd` +ED="${objdir}"/ed + +if [ ! -x "${ED}" ] ; then + echo "${ED}: cannot execute" + exit 1 +fi + +if [ -d tmp ] ; then rm -r tmp ; fi +mkdir tmp + +# Generate ed test scripts, with extensions .ed and .red, from +# .t and .err files, respectively. +echo "building test scripts for ed..." +cd "${testdir}" + +for i in *.t ; do + base=`echo "$i" | sed 's/\.t$//'` + ( + echo "#! /bin/sh" + echo "${ED} -s <<'EOT'" + echo H + echo "r ${testdir}/${base}.d" + cat "$i" + echo "w ${base}.o" + echo EOT + ) > "${objdir}/tmp/${base}.ed" + chmod u+x "${objdir}/tmp/${base}.ed" +done + +for i in *.err ; do + base=`echo "$i" | sed 's/\.err$//'` + ( + echo "#! /bin/sh -" + echo "${ED} -s <<'EOT'" + echo H + echo "r ${testdir}/${base}.err" + cat "$i" + echo "w ${base}.ro" + echo EOT + ) > "${objdir}/tmp/${base}.red" + chmod u+x "${objdir}/tmp/${base}.red" +done + + +# Run the .ed and .red scripts just generated +# and compare their output against the .r files, which contain +# the correct output. +echo "testing ed..." +cd "${objdir}"/tmp + +# Run the *.red scripts first, since these don't generate output; +# they exit with non-zero status +for i in *.red ; do + echo "$i" + if ./"$i" ; then + echo "*** The script $i exited abnormally ***" + fi +done > errs.ck 2>&1 + +# Run error scripts again as pipes - these should generate output and +# exit with error (>0) status. +for i in *.red ; do + base=`echo "$i" | sed 's/\.red$//'` + if cat ${base}.red | "${ED}" -s ; then + echo "*** The piped script $i exited abnormally ***" + else + if cmp -s ${base}.ro "${testdir}"/${base}.pr ; then + true + else + echo "*** Output ${base}.ro of piped script $i is incorrect ***" + fi + fi +done > pipes.ck 2>&1 + +# Run the remainding scripts; they exit with zero status +for i in *.ed ; do + base=`echo "$i" | sed 's/\.ed$//'` + if ./${base}.ed ; then + if cmp -s ${base}.o "${testdir}"/${base}.r ; then + true + else + echo "*** Output ${base}.o of script $i is incorrect ***" + fi + else + echo "*** The script $i exited abnormally ***" + fi +done > scripts.ck 2>&1 + +grep '\*\*\*' *.ck | sed 's/^[^*]*//' +if grep '\*\*\*' *.ck > /dev/null ; then + exit 127 +else + echo "tests completed successfully." + if cd "${objdir}" ; then rm -r tmp ; fi +fi |