xref: /titanic_51/usr/src/lib/libshell/common/tests/shtests (revision f34a71784df3fbc5d1227a7b6201fd318ad1667e)
1# This program runs ksh regression tests
2# shtests [ name=value ... ] [ --all | --compile ] [ --time ] [ a.sh b.sh ... ]
3
4unset DISPLAY ENV FIGNORE
5LANG=C
6LC_ALL=C
7compile=1
8script=1
9time=1
10vmdebug=1
11while	:
12do	case $1 in
13	-a|--a*)compile=2
14		script=2
15		;;
16	-c|--c*)compile=2
17		script=
18		;;
19	-s|--s*)compile=
20		script=2
21		;;
22	-t|--not*)time=
23		;;
24	-v|--nov*)vmdebug=
25		;;
26	-*)	echo $0: $1: invalid option >&2
27		exit 2
28		;;
29	*=*)	n=${1%%=*}
30		v=${1#*=}
31		eval $n=\'$v\'
32		export $n
33		;;
34	*)	break
35		;;
36	esac
37	shift
38done
39if	[[ ! $vmdebug ]]
40then	unset VMDEBUG
41elif	[[ ! $VMDEBUG ]]
42then	export VMDEBUG=a
43fi
44export LANG LC_ALL PATH PWD SHELL
45PWD=`pwd`
46SHELL=${SHELL-ksh}
47case $0 in
48/*)	d=`dirname $0`;;
49*/*)	d=$PWD/`dirname $0`;;
50*)	d=$PWD;;
51esac
52case $SHELL in
53/*)	;;
54*/*)	SHELL=$d/$SHELL;;
55*)	SHELL=$(whence $SHELL);;
56esac
57PATH=/bin:/usr/bin
58if	[[ -d /usr/ucb ]]
59then	PATH=$PATH:/usr/ucb
60fi
61PATH=$PATH:$d
62if	[[ $INSTALLROOT && -r $INSTALLROOT/bin/.paths ]]
63then	PATH=$INSTALLROOT/bin:$PATH
64fi
65if	[[ $compile ]]
66then	SHCOMP=${SHCOMP:-shcomp}
67	if	whence $SHCOMP > /dev/null
68	then	tmp=/tmp/ksh-$$
69		trap 'rm -rf $tmp' EXIT
70		mkdir $tmp || exit
71	elif	[[ $compile != 1 ]]
72	then	echo $0: --compile: $SHCOMP not found >&2
73		exit 1
74	else	compile=
75	fi
76fi
77typeset -A tests
78for i in ${*-*.sh}
79do	t=$(grep -c err_exit $i)
80	if	(( $t > 2 ))
81	then	(( t = $t - 2 ))
82	fi
83	tests[$i]=$t
84	T=test
85	if	(( $t != 1 ))
86	then	T=${T}s
87	fi
88	E=error
89	if	[[ $script ]]
90	then	echo test $i begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
91		if	$SHELL $i
92		then	echo test $i passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
93		else	e=$?
94			if	(( e > 256 ))
95			then	e=1
96				E=signal
97			fi
98			if	(( $e != 1 ))
99			then	E=${E}s
100			fi
101			echo test $i failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
102		fi
103	fi
104done
105if	[[ $compile ]]
106then	for i in ${*-*.sh}
107	do	t=${tests[$i]}
108		T=test
109		if	(( $t != 1 ))
110		then	T=${T}s
111		fi
112		o=${i##*/}
113		o=shcomp-${o%.sh}.ksh
114		echo test $o begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
115		E=error
116		if	$SHCOMP $i > $tmp/$o
117		then	if	$SHELL $tmp/$o
118			then	echo test $o passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
119			else	e=$?
120				if	(( e > 256 ))
121				then	e=1
122					E=signal
123				fi
124				if	(( $e != 1 ))
125				then	E=${E}s
126				fi
127				echo test $o failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
128			fi
129		else	e=$?
130			t=1
131			T=test
132			echo test $o failed to compile ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T 1 $E ]"
133		fi
134	done
135fi
136