1194517Sjilles# $FreeBSD: releng/11.0/bin/sh/tests/builtins/trap2.0 194517 2009-06-19 22:15:59Z jilles $
2194517Sjilles# This is really a test for outqstr(), which is readily accessible via trap.
3194517Sjilles
4194517Sjillesruntest()
5194517Sjilles{
6194517Sjilles	teststring=$1
7194517Sjilles	trap -- "$teststring" USR1
8194517Sjilles	traps=$(trap)
9194517Sjilles	if [ "$teststring" != "-" ] && [ -z "$traps" ]; then
10194517Sjilles		# One possible reading of POSIX requires the above to return an
11194517Sjilles		# empty string because backquote commands are executed in a
12194517Sjilles		# subshell and subshells shall reset traps. However, an example
13194517Sjilles		# in the normative description of the trap builtin shows the
14194517Sjilles		# same usage as here, it is useful and our /bin/sh allows it.
15194517Sjilles		echo '$(trap) is broken'
16194517Sjilles		exit 1
17194517Sjilles	fi
18194517Sjilles	trap - USR1
19194517Sjilles	eval "$traps"
20194517Sjilles	traps2=$(trap)
21194517Sjilles	if [ "$traps" != "$traps2" ]; then
22194517Sjilles		echo "Mismatch for '$teststring'"
23194517Sjilles		exit 1
24194517Sjilles	fi
25194517Sjilles}
26194517Sjilles
27194517Sjillesruntest 'echo'
28194517Sjillesruntest 'echo hi'
29194517Sjillesruntest "'echo' 'hi'"
30194517Sjillesruntest '"echo" $PATH'
31194517Sjillesruntest '\echo "$PATH"'
32194517Sjillesruntest ' 0'
33194517Sjillesruntest '0 '
34194517Sjillesruntest ' 1'
35194517Sjillesruntest '1 '
36194517Sjillesi=1
37194517Sjilleswhile [ $i -le 127 ]; do
38194517Sjilles	c=$(printf \\"$(printf %o $i)")
39194517Sjilles	if [ $i -lt 48 ] || [ $i -gt 57 ]; then
40194517Sjilles		runtest "$c"
41194517Sjilles	fi
42194517Sjilles	runtest " $c$c"
43194517Sjilles	runtest "a$c"
44194517Sjilles	i=$((i+1))
45194517Sjillesdone
46194517SjillesIFS=,
47194517Sjillesruntest ' '
48194517Sjillesruntest ','
49194517Sjillesunset IFS
50194517Sjillesruntest ' '
51194517Sjilles
52194517Sjillesexit 0
53