shtests revision 34f9b3eef6fdadbda0a846aa4d68691ac40eace5
10b77f97a176647caa068363224704062325ec4aDavid Mathog# This program runs ksh regression tests
10b77f97a176647caa068363224704062325ec4aDavid Mathog# shtests [ name=value ... ] [ --all | --compile ] [ --time ] [ a.sh b.sh ... ]
10b77f97a176647caa068363224704062325ec4aDavid Mathog
10b77f97a176647caa068363224704062325ec4aDavid Mathogtimesensitive='*@(options|sigchld|subshell).sh'
10b77f97a176647caa068363224704062325ec4aDavid Mathog
10b77f97a176647caa068363224704062325ec4aDavid Mathogunset DISPLAY ENV FIGNORE HISTFILE
10b77f97a176647caa068363224704062325ec4aDavid MathogLANG=C
10b77f97a176647caa068363224704062325ec4aDavid MathogLC_ALL=C
10b77f97a176647caa068363224704062325ec4aDavid Mathogcompile=1
10b77f97a176647caa068363224704062325ec4aDavid Mathogscript=1
10b77f97a176647caa068363224704062325ec4aDavid Mathogtime=1
10b77f97a176647caa068363224704062325ec4aDavid Mathogvmdebug=a
10b77f97a176647caa068363224704062325ec4aDavid Mathogwhile :
6a55cc6751be1162fa737fa656ffae0729c2e2a0Krzysztof Kosińskido case $1 in
1df6105803c4c56c020a56301c7c9c4890fd4158mathog -a|--a*)compile=2
10b77f97a176647caa068363224704062325ec4aDavid Mathog script=2
10b77f97a176647caa068363224704062325ec4aDavid Mathog ;;
10b77f97a176647caa068363224704062325ec4aDavid Mathog -c|--c*)compile=2
10b77f97a176647caa068363224704062325ec4aDavid Mathog script=
10b77f97a176647caa068363224704062325ec4aDavid Mathog ;;
10b77f97a176647caa068363224704062325ec4aDavid Mathog -s|--s*)compile=
10b77f97a176647caa068363224704062325ec4aDavid Mathog script=2
10b77f97a176647caa068363224704062325ec4aDavid Mathog ;;
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog -t|--not*)time=
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog ;;
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog -v|--nov*)vmdebug=
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog ;;
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog -*) echo $0: $1: invalid option >&2
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free exit 2
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free ;;
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free *=*) n=${1%%=*}
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free v=${1#*=}
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free eval $n=\'$v\'
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free export $n
10b77f97a176647caa068363224704062325ec4aDavid Mathog ;;
10b77f97a176647caa068363224704062325ec4aDavid Mathog *) break
10b77f97a176647caa068363224704062325ec4aDavid Mathog ;;
10b77f97a176647caa068363224704062325ec4aDavid Mathog esac
10b77f97a176647caa068363224704062325ec4aDavid Mathog shift
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freedone
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freeif [[ ! $vmdebug ]]
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freethen unset VMDEBUG
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freeelif [[ $VMDEBUG ]]
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freethen vmdebug=$VMDEBUG
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freeelse export VMDEBUG=$vmdebug
10b77f97a176647caa068363224704062325ec4aDavid Mathogfi
10b77f97a176647caa068363224704062325ec4aDavid Mathog[[ $VMDEBUG ]] || timesensitive=.
10b77f97a176647caa068363224704062325ec4aDavid Mathogexport LANG LC_ALL PATH PWD SHELL
10b77f97a176647caa068363224704062325ec4aDavid MathogPWD=`pwd`
10b77f97a176647caa068363224704062325ec4aDavid MathogSHELL=${SHELL-ksh}
10b77f97a176647caa068363224704062325ec4aDavid Mathogcase $0 in
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free/*) d=`dirname $0`;;
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free*/*) d=$PWD/`dirname $0`;;
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free*) d=$PWD;;
034d7ccaa6acbcd03e37974a2d164706862c32a2mathogesac
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freecase $SHELL in
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free/*) ;;
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free*/*) SHELL=$d/$SHELL;;
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free*) SHELL=$(whence $SHELL);;
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freeesac
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freePATH=/bin:/usr/bin
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freeif [[ -d /usr/ucb ]]
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freethen PATH=$PATH:/usr/ucb
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freefi
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freePATH=$PATH:$d
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freeif [[ $INSTALLROOT && -r $INSTALLROOT/bin/.paths ]]
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freethen PATH=$INSTALLROOT/bin:$PATH
2d7e3411a6d25ef5810453c17fe591dcf04d5d05mathogfi
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freeif [[ $compile ]]
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freethen SHCOMP=${SHCOMP:-shcomp}
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free if whence $SHCOMP > /dev/null
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free then tmp=$(mktemp -dt) || { echo mktemp -dt failed >&2; exit 1; }
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free trap "cd /; rm -rf $tmp" EXIT
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free elif [[ $compile != 1 ]]
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free then echo $0: --compile: $SHCOMP not found >&2
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free exit 1
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free else compile=
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
034d7ccaa6acbcd03e37974a2d164706862c32a2mathogfi
10b77f97a176647caa068363224704062325ec4aDavid Mathogtypeset -A tests
10b77f97a176647caa068363224704062325ec4aDavid Mathogfor i in ${*-*.sh}
10b77f97a176647caa068363224704062325ec4aDavid Mathogdo t=$(grep -c err_exit $i)
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog if (( $t > 2 ))
10b77f97a176647caa068363224704062325ec4aDavid Mathog then (( t = $t - 2 ))
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog tests[$i]=$t
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog T=test
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog if (( $t != 1 ))
10b77f97a176647caa068363224704062325ec4aDavid Mathog then T=${T}s
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog E=error
10b77f97a176647caa068363224704062325ec4aDavid Mathog if [[ $script ]]
10b77f97a176647caa068363224704062325ec4aDavid Mathog then echo test $i begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
10b77f97a176647caa068363224704062325ec4aDavid Mathog if [[ $i == $timesensitive ]]
10b77f97a176647caa068363224704062325ec4aDavid Mathog then unset VMDEBUG
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog if $SHELL $i
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog then echo test $i passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
10b77f97a176647caa068363224704062325ec4aDavid Mathog else e=$?
5530d4cb2db040e48228f2f4a525e3dabb15b057David Mathog if (( e > 256 ))
10b77f97a176647caa068363224704062325ec4aDavid Mathog then e=1
10b77f97a176647caa068363224704062325ec4aDavid Mathog E=signal
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog if (( $e != 1 ))
10b77f97a176647caa068363224704062325ec4aDavid Mathog then E=${E}s
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog echo test $i failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog if [[ $i == $timesensitive ]]
10b77f97a176647caa068363224704062325ec4aDavid Mathog then export VMDEBUG=$vmdebug
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freedone
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freeif [[ $compile ]]
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-freethen for i in ${*-*.sh}
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free do t=${tests[$i]}
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free T=test
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free if (( $t != 1 ))
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free then T=${T}s
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free fi
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free o=${i##*/}
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free o=shcomp-${o%.sh}.ksh
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free echo test $o begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free E=error
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free if $SHCOMP $i > $tmp/$o
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free then if [[ $i == $timesensitive ]]
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free then unset VMDEBUG
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free fi
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free if $SHELL $tmp/$o
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free then echo test $o passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free else e=$?
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free if (( e > 256 ))
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free then e=1
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free E=signal
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free fi
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free if (( $e != 1 ))
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free then E=${E}s
ca85f4101a2ba0d627592c372cc5c6590c9cbd5ftavmjong-free fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog echo test $o failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog if [[ $i == $timesensitive ]]
10b77f97a176647caa068363224704062325ec4aDavid Mathog then export VMDEBUG=$vmdebug
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog else e=$?
10b77f97a176647caa068363224704062325ec4aDavid Mathog t=1
10b77f97a176647caa068363224704062325ec4aDavid Mathog T=test
10b77f97a176647caa068363224704062325ec4aDavid Mathog echo test $o failed to compile ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T 1 $E ]"
10b77f97a176647caa068363224704062325ec4aDavid Mathog fi
10b77f97a176647caa068363224704062325ec4aDavid Mathog done
10b77f97a176647caa068363224704062325ec4aDavid Mathogfi
10b77f97a176647caa068363224704062325ec4aDavid Mathog