summaryrefslogtreecommitdiff
path: root/testsuite/check.sh
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/check.sh')
-rwxr-xr-xtestsuite/check.sh104
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