#! /bin/sh # Runs a set of test scripts given on stdin in :: # tuples usage() { echo "Usage: `basename $0` [--pretend] [--filter ] [-h] [--help] *" 1>&2 exit 1 } # set some global vars log="/tmp/test-$$.log" pretend=0 filter="" files="" errors=0 IFS=':' # colours colour=1 if [ $colour ]; then GOOD=$'\e[32;01m' WARN=$'\e[33;01m' BAD=$'\e[31;01m' NORMAL=$'\e[0m' else GOOD="" WARN="" BAD="" NORMAL="" fi # scan the command line while [ $# -gt 0 ] do case "$1" in --pretend) pretend=1 ;; --filter) filter=$2 shift ;; -h) usage;; --help) usage;; *) files="$files $1" ;; esac shift done if [ -z $files ]; then files="-" fi echo "cat $files" | /bin/sh | grep -v "^[ \t]*\#" | # strip comments grep -v "^[ \t]*$" | # strip blank lines { errors=0 while read keywords desc cmd; do if [ $filter ] && echo $keywords | grep -v -q $filter; then continue fi printf "%-50s" "$desc ..." echo "--- BEGIN ---" >> $log echo $cmd >> $log if [ $pretend -eq 1 ]; then echo "[${WARN}pretend${NORMAL}]" else if echo -n $cmd | sh >> $log 2>&1; then echo "[${GOOD}ok${NORMAL}]" else errors=`expr $errors + 1` echo "[${BAD}failed${NORMAL}]" fi fi echo -e "--- DONE ---\n" >> $log done exit $errors } errors=$? if [ $errors -eq 0 ]; then echo "${GOOD}All tests passed${NORMAL}" else echo "${BAD}$errors tests failed${NORMAL}, see $log for more details" fi if [ -f $log ]; then declare -i warn=`grep "WARN" $log | wc -l` if [ $warn -gt 0 ]; then echo "${WARN}$warn warnings{NORMAL}, see $log for more details" fi fi