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