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