da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# This program runs ksh regression tests
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# shtests [ name=value ... ] [ --all | --compile ] [ --time ] [ a.sh b.sh ... ]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztimesensitive='*@(options|sigchld|subshell).sh'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzunset DISPLAY ENV FIGNORE HISTFILE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinLANG=C
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinLC_ALL=C
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chincompile=1
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinscript=1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintime=1
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknervmalloc_options=abort
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinwhile :
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindo case $1 in
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin -a|--a*)compile=2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin script=2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ;;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin -c|--c*)compile=2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin script=
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ;;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin -s|--s*)compile=
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin script=2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ;;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin -t|--not*)time=
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ;;
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner -v|--nov*)vmalloc_options=
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ;;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin -*) echo $0: $1: invalid option >&2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin exit 2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *=*) n=${1%%=*}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin v=${1#*=}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin eval $n=\'$v\'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin export $n
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *) break
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin esac
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin shift
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindone
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknerif [[ $VMALLOC_OPTIONS ]]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknerthen vmalloc_options=$VMALLOC_OPTIONS
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknerelse VMALLOC_OPTIONS=$vmalloc_options
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfi
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner[[ $VMALLOC_OPTIONS ]] || timesensitive=.
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknerexport LANG LC_ALL PATH PWD SHELL VMALLOC_OPTIONS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPWD=`pwd`
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinSHELL=${SHELL-ksh}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincase $0 in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*) d=`dirname $0`;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin*/*) d=$PWD/`dirname $0`;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin*) d=$PWD;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinesac
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincase $SHELL in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*) ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin*/*) SHELL=$d/$SHELL;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin*) SHELL=$(whence $SHELL);;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinesac
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=/bin:/usr/bin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ -d /usr/ucb ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen PATH=$PATH:/usr/ucb
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinPATH=$PATH:$d
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinif [[ $INSTALLROOT && -r $INSTALLROOT/bin/.paths ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen PATH=$INSTALLROOT/bin:$PATH
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinif [[ $compile ]]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen SHCOMP=${SHCOMP:-shcomp}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if whence $SHCOMP > /dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz then tmp=$(mktemp -dt) || { echo mktemp -dt failed >&2; exit 1; }
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz trap "cd /; rm -rf $tmp" EXIT
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin elif [[ $compile != 1 ]]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then echo $0: --compile: $SHCOMP not found >&2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin exit 1
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin else compile=
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintypeset -A tests
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfor i in ${*-*.sh}
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulknerdo if [[ ! -r $i ]]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner then echo $0: $i: not found >&2
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner continue
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner fi
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner t=$(grep -c err_exit $i)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if (( $t > 2 ))
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then (( t = $t - 2 ))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin tests[$i]=$t
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin T=test
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (( $t != 1 ))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then T=${T}s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin E=error
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if [[ $script ]]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then echo test $i begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz if [[ $i == $timesensitive ]]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner then VMALLOC_OPTIONS=
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if $SHELL $i
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then echo test $i passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin else e=$?
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if (( e > 256 ))
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then e=1
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin E=signal
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if (( $e != 1 ))
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then E=${E}s
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin echo test $i failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz if [[ $i == $timesensitive ]]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner then VMALLOC_OPTIONS=$vmalloc_options
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindone
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinif [[ $compile ]]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen for i in ${*-*.sh}
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner do if [[ ! -r $i ]]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner then continue
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner fi
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner t=${tests[$i]}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin T=test
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if (( $t != 1 ))
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then T=${T}s
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin o=${i##*/}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin o=shcomp-${o%.sh}.ksh
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin echo test $o begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin E=error
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if $SHCOMP $i > $tmp/$o
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz then if [[ $i == $timesensitive ]]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner then VMALLOC_OPTIONS=
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz fi
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz if $SHELL $tmp/$o
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then echo test $o passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin else e=$?
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if (( e > 256 ))
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then e=1
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin E=signal
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if (( $e != 1 ))
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then E=${E}s
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin echo test $o failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz if [[ $i == $timesensitive ]]
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner then VMALLOC_OPTIONS=$vmalloc_options
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin else e=$?
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin t=1
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin T=test
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin echo test $o failed to compile ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T 1 $E ]"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin done
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfi