14887Schin# This program runs ksh regression tests
28462SApril.Chin@Sun.COM# shtests [ name=value ... ] [ --all | --compile ] [ --time ] [ a.sh b.sh ... ]
34887Schin
4*10898Sroland.mainz@nrubsig.orgtimesensitive='*@(options|sigchld|subshell).sh'
5*10898Sroland.mainz@nrubsig.org
6*10898Sroland.mainz@nrubsig.orgunset DISPLAY ENV FIGNORE HISTFILE
74887SchinLANG=C
84887SchinLC_ALL=C
98462SApril.Chin@Sun.COMcompile=1
108462SApril.Chin@Sun.COMscript=1
114887Schintime=1
12*10898Sroland.mainz@nrubsig.orgvmdebug=a
134887Schinwhile	:
144887Schindo	case $1 in
158462SApril.Chin@Sun.COM	-a|--a*)compile=2
168462SApril.Chin@Sun.COM		script=2
178462SApril.Chin@Sun.COM		;;
188462SApril.Chin@Sun.COM	-c|--c*)compile=2
198462SApril.Chin@Sun.COM		script=
208462SApril.Chin@Sun.COM		;;
218462SApril.Chin@Sun.COM	-s|--s*)compile=
228462SApril.Chin@Sun.COM		script=2
238462SApril.Chin@Sun.COM		;;
248462SApril.Chin@Sun.COM	-t|--not*)time=
258462SApril.Chin@Sun.COM		;;
268462SApril.Chin@Sun.COM	-v|--nov*)vmdebug=
278462SApril.Chin@Sun.COM		;;
288462SApril.Chin@Sun.COM	-*)	echo $0: $1: invalid option >&2
298462SApril.Chin@Sun.COM		exit 2
308462SApril.Chin@Sun.COM		;;
314887Schin	*=*)	n=${1%%=*}
324887Schin		v=${1#*=}
334887Schin		eval $n=\'$v\'
344887Schin		export $n
354887Schin		;;
364887Schin	*)	break
374887Schin		;;
384887Schin	esac
394887Schin	shift
404887Schindone
418462SApril.Chin@Sun.COMif	[[ ! $vmdebug ]]
428462SApril.Chin@Sun.COMthen	unset VMDEBUG
43*10898Sroland.mainz@nrubsig.orgelif	[[ $VMDEBUG ]]
44*10898Sroland.mainz@nrubsig.orgthen	vmdebug=$VMDEBUG
45*10898Sroland.mainz@nrubsig.orgelse	export VMDEBUG=$vmdebug
468462SApril.Chin@Sun.COMfi
47*10898Sroland.mainz@nrubsig.org[[ $VMDEBUG ]] || timesensitive=.
484887Schinexport LANG LC_ALL PATH PWD SHELL
494887SchinPWD=`pwd`
504887SchinSHELL=${SHELL-ksh}
514887Schincase $0 in
524887Schin/*)	d=`dirname $0`;;
534887Schin*/*)	d=$PWD/`dirname $0`;;
544887Schin*)	d=$PWD;;
554887Schinesac
564887Schincase $SHELL in
574887Schin/*)	;;
584887Schin*/*)	SHELL=$d/$SHELL;;
594887Schin*)	SHELL=$(whence $SHELL);;
604887Schinesac
614887SchinPATH=/bin:/usr/bin
624887Schinif	[[ -d /usr/ucb ]]
634887Schinthen	PATH=$PATH:/usr/ucb
644887Schinfi
654887SchinPATH=$PATH:$d
668462SApril.Chin@Sun.COMif	[[ $INSTALLROOT && -r $INSTALLROOT/bin/.paths ]]
674887Schinthen	PATH=$INSTALLROOT/bin:$PATH
684887Schinfi
698462SApril.Chin@Sun.COMif	[[ $compile ]]
708462SApril.Chin@Sun.COMthen	SHCOMP=${SHCOMP:-shcomp}
718462SApril.Chin@Sun.COM	if	whence $SHCOMP > /dev/null
72*10898Sroland.mainz@nrubsig.org	then	tmp=$(mktemp -dt) || { echo mktemp -dt failed >&2; exit 1; }
73*10898Sroland.mainz@nrubsig.org		trap "cd /; rm -rf $tmp" EXIT
748462SApril.Chin@Sun.COM	elif	[[ $compile != 1 ]]
758462SApril.Chin@Sun.COM	then	echo $0: --compile: $SHCOMP not found >&2
768462SApril.Chin@Sun.COM		exit 1
778462SApril.Chin@Sun.COM	else	compile=
788462SApril.Chin@Sun.COM	fi
798462SApril.Chin@Sun.COMfi
808462SApril.Chin@Sun.COMtypeset -A tests
814887Schinfor i in ${*-*.sh}
828462SApril.Chin@Sun.COMdo	t=$(grep -c err_exit $i)
838462SApril.Chin@Sun.COM	if	(( $t > 2 ))
848462SApril.Chin@Sun.COM	then	(( t = $t - 2 ))
854887Schin	fi
868462SApril.Chin@Sun.COM	tests[$i]=$t
874887Schin	T=test
884887Schin	if	(( $t != 1 ))
894887Schin	then	T=${T}s
904887Schin	fi
914887Schin	E=error
928462SApril.Chin@Sun.COM	if	[[ $script ]]
938462SApril.Chin@Sun.COM	then	echo test $i begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
94*10898Sroland.mainz@nrubsig.org		if	[[ $i == $timesensitive ]]
95*10898Sroland.mainz@nrubsig.org		then	unset VMDEBUG
96*10898Sroland.mainz@nrubsig.org		fi
978462SApril.Chin@Sun.COM		if	$SHELL $i
988462SApril.Chin@Sun.COM		then	echo test $i passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
998462SApril.Chin@Sun.COM		else	e=$?
1008462SApril.Chin@Sun.COM			if	(( e > 256 ))
1018462SApril.Chin@Sun.COM			then	e=1
1028462SApril.Chin@Sun.COM				E=signal
1038462SApril.Chin@Sun.COM			fi
1048462SApril.Chin@Sun.COM			if	(( $e != 1 ))
1058462SApril.Chin@Sun.COM			then	E=${E}s
1068462SApril.Chin@Sun.COM			fi
1078462SApril.Chin@Sun.COM			echo test $i failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
1084887Schin		fi
109*10898Sroland.mainz@nrubsig.org		if	[[ $i == $timesensitive ]]
110*10898Sroland.mainz@nrubsig.org		then	export VMDEBUG=$vmdebug
111*10898Sroland.mainz@nrubsig.org		fi
1124887Schin	fi
1134887Schindone
1148462SApril.Chin@Sun.COMif	[[ $compile ]]
1158462SApril.Chin@Sun.COMthen	for i in ${*-*.sh}
1168462SApril.Chin@Sun.COM	do	t=${tests[$i]}
1178462SApril.Chin@Sun.COM		T=test
1188462SApril.Chin@Sun.COM		if	(( $t != 1 ))
1198462SApril.Chin@Sun.COM		then	T=${T}s
1208462SApril.Chin@Sun.COM		fi
1218462SApril.Chin@Sun.COM		o=${i##*/}
1228462SApril.Chin@Sun.COM		o=shcomp-${o%.sh}.ksh
1238462SApril.Chin@Sun.COM		echo test $o begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
1248462SApril.Chin@Sun.COM		E=error
1258462SApril.Chin@Sun.COM		if	$SHCOMP $i > $tmp/$o
126*10898Sroland.mainz@nrubsig.org		then	if	[[ $i == $timesensitive ]]
127*10898Sroland.mainz@nrubsig.org			then	unset VMDEBUG
128*10898Sroland.mainz@nrubsig.org			fi
129*10898Sroland.mainz@nrubsig.org			if	$SHELL $tmp/$o
1308462SApril.Chin@Sun.COM			then	echo test $o passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
1318462SApril.Chin@Sun.COM			else	e=$?
1328462SApril.Chin@Sun.COM				if	(( e > 256 ))
1338462SApril.Chin@Sun.COM				then	e=1
1348462SApril.Chin@Sun.COM					E=signal
1358462SApril.Chin@Sun.COM				fi
1368462SApril.Chin@Sun.COM				if	(( $e != 1 ))
1378462SApril.Chin@Sun.COM				then	E=${E}s
1388462SApril.Chin@Sun.COM				fi
1398462SApril.Chin@Sun.COM				echo test $o failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
1408462SApril.Chin@Sun.COM			fi
141*10898Sroland.mainz@nrubsig.org			if	[[ $i == $timesensitive ]]
142*10898Sroland.mainz@nrubsig.org			then	export VMDEBUG=$vmdebug
143*10898Sroland.mainz@nrubsig.org			fi
1448462SApril.Chin@Sun.COM		else	e=$?
1458462SApril.Chin@Sun.COM			t=1
1468462SApril.Chin@Sun.COM			T=test
1478462SApril.Chin@Sun.COM			echo test $o failed to compile ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T 1 $E ]"
1488462SApril.Chin@Sun.COM		fi
1498462SApril.Chin@Sun.COM	done
1508462SApril.Chin@Sun.COMfi
151