14887Schin# This program runs ksh regression tests 2*8462SApril.Chin@Sun.COM# shtests [ name=value ... ] [ --all | --compile ] [ --time ] [ a.sh b.sh ... ] 34887Schin 44887Schinunset DISPLAY ENV FIGNORE 54887SchinLANG=C 64887SchinLC_ALL=C 7*8462SApril.Chin@Sun.COMcompile=1 8*8462SApril.Chin@Sun.COMscript=1 94887Schintime=1 10*8462SApril.Chin@Sun.COMvmdebug=1 114887Schinwhile : 124887Schindo case $1 in 13*8462SApril.Chin@Sun.COM -a|--a*)compile=2 14*8462SApril.Chin@Sun.COM script=2 15*8462SApril.Chin@Sun.COM ;; 16*8462SApril.Chin@Sun.COM -c|--c*)compile=2 17*8462SApril.Chin@Sun.COM script= 18*8462SApril.Chin@Sun.COM ;; 19*8462SApril.Chin@Sun.COM -s|--s*)compile= 20*8462SApril.Chin@Sun.COM script=2 21*8462SApril.Chin@Sun.COM ;; 22*8462SApril.Chin@Sun.COM -t|--not*)time= 23*8462SApril.Chin@Sun.COM ;; 24*8462SApril.Chin@Sun.COM -v|--nov*)vmdebug= 25*8462SApril.Chin@Sun.COM ;; 26*8462SApril.Chin@Sun.COM -*) echo $0: $1: invalid option >&2 27*8462SApril.Chin@Sun.COM exit 2 28*8462SApril.Chin@Sun.COM ;; 294887Schin *=*) n=${1%%=*} 304887Schin v=${1#*=} 314887Schin eval $n=\'$v\' 324887Schin export $n 334887Schin ;; 344887Schin *) break 354887Schin ;; 364887Schin esac 374887Schin shift 384887Schindone 39*8462SApril.Chin@Sun.COMif [[ ! $vmdebug ]] 40*8462SApril.Chin@Sun.COMthen unset VMDEBUG 41*8462SApril.Chin@Sun.COMelif [[ ! $VMDEBUG ]] 42*8462SApril.Chin@Sun.COMthen export VMDEBUG=a 43*8462SApril.Chin@Sun.COMfi 444887Schinexport LANG LC_ALL PATH PWD SHELL 454887SchinPWD=`pwd` 464887SchinSHELL=${SHELL-ksh} 474887Schincase $0 in 484887Schin/*) d=`dirname $0`;; 494887Schin*/*) d=$PWD/`dirname $0`;; 504887Schin*) d=$PWD;; 514887Schinesac 524887Schincase $SHELL in 534887Schin/*) ;; 544887Schin*/*) SHELL=$d/$SHELL;; 554887Schin*) SHELL=$(whence $SHELL);; 564887Schinesac 574887SchinPATH=/bin:/usr/bin 584887Schinif [[ -d /usr/ucb ]] 594887Schinthen PATH=$PATH:/usr/ucb 604887Schinfi 614887SchinPATH=$PATH:$d 62*8462SApril.Chin@Sun.COMif [[ $INSTALLROOT && -r $INSTALLROOT/bin/.paths ]] 634887Schinthen PATH=$INSTALLROOT/bin:$PATH 644887Schinfi 65*8462SApril.Chin@Sun.COMif [[ $compile ]] 66*8462SApril.Chin@Sun.COMthen SHCOMP=${SHCOMP:-shcomp} 67*8462SApril.Chin@Sun.COM if whence $SHCOMP > /dev/null 68*8462SApril.Chin@Sun.COM then tmp=/tmp/ksh-$$ 69*8462SApril.Chin@Sun.COM trap 'rm -rf $tmp' EXIT 70*8462SApril.Chin@Sun.COM mkdir $tmp || exit 71*8462SApril.Chin@Sun.COM elif [[ $compile != 1 ]] 72*8462SApril.Chin@Sun.COM then echo $0: --compile: $SHCOMP not found >&2 73*8462SApril.Chin@Sun.COM exit 1 74*8462SApril.Chin@Sun.COM else compile= 75*8462SApril.Chin@Sun.COM fi 76*8462SApril.Chin@Sun.COMfi 77*8462SApril.Chin@Sun.COMtypeset -A tests 784887Schinfor i in ${*-*.sh} 79*8462SApril.Chin@Sun.COMdo t=$(grep -c err_exit $i) 80*8462SApril.Chin@Sun.COM if (( $t > 2 )) 81*8462SApril.Chin@Sun.COM then (( t = $t - 2 )) 824887Schin fi 83*8462SApril.Chin@Sun.COM tests[$i]=$t 844887Schin T=test 854887Schin if (( $t != 1 )) 864887Schin then T=${T}s 874887Schin fi 884887Schin E=error 89*8462SApril.Chin@Sun.COM if [[ $script ]] 90*8462SApril.Chin@Sun.COM then echo test $i begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} 91*8462SApril.Chin@Sun.COM if $SHELL $i 92*8462SApril.Chin@Sun.COM then echo test $i passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]" 93*8462SApril.Chin@Sun.COM else e=$? 94*8462SApril.Chin@Sun.COM if (( e > 256 )) 95*8462SApril.Chin@Sun.COM then e=1 96*8462SApril.Chin@Sun.COM E=signal 97*8462SApril.Chin@Sun.COM fi 98*8462SApril.Chin@Sun.COM if (( $e != 1 )) 99*8462SApril.Chin@Sun.COM then E=${E}s 100*8462SApril.Chin@Sun.COM fi 101*8462SApril.Chin@Sun.COM echo test $i failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]" 1024887Schin fi 1034887Schin fi 1044887Schindone 105*8462SApril.Chin@Sun.COMif [[ $compile ]] 106*8462SApril.Chin@Sun.COMthen for i in ${*-*.sh} 107*8462SApril.Chin@Sun.COM do t=${tests[$i]} 108*8462SApril.Chin@Sun.COM T=test 109*8462SApril.Chin@Sun.COM if (( $t != 1 )) 110*8462SApril.Chin@Sun.COM then T=${T}s 111*8462SApril.Chin@Sun.COM fi 112*8462SApril.Chin@Sun.COM o=${i##*/} 113*8462SApril.Chin@Sun.COM o=shcomp-${o%.sh}.ksh 114*8462SApril.Chin@Sun.COM echo test $o begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} 115*8462SApril.Chin@Sun.COM E=error 116*8462SApril.Chin@Sun.COM if $SHCOMP $i > $tmp/$o 117*8462SApril.Chin@Sun.COM then if $SHELL $tmp/$o 118*8462SApril.Chin@Sun.COM then echo test $o passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]" 119*8462SApril.Chin@Sun.COM else e=$? 120*8462SApril.Chin@Sun.COM if (( e > 256 )) 121*8462SApril.Chin@Sun.COM then e=1 122*8462SApril.Chin@Sun.COM E=signal 123*8462SApril.Chin@Sun.COM fi 124*8462SApril.Chin@Sun.COM if (( $e != 1 )) 125*8462SApril.Chin@Sun.COM then E=${E}s 126*8462SApril.Chin@Sun.COM fi 127*8462SApril.Chin@Sun.COM echo test $o failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]" 128*8462SApril.Chin@Sun.COM fi 129*8462SApril.Chin@Sun.COM else e=$? 130*8462SApril.Chin@Sun.COM t=1 131*8462SApril.Chin@Sun.COM T=test 132*8462SApril.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 ]" 133*8462SApril.Chin@Sun.COM fi 134*8462SApril.Chin@Sun.COM done 135*8462SApril.Chin@Sun.COMfi 136