ash testsuite: add return_in_trap1.tests
Currently it fails Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
5
shell/hush_test/hush-signals/catch.right
Normal file
5
shell/hush_test/hush-signals/catch.right
Normal file
@@ -0,0 +1,5 @@
|
||||
sending USR2
|
||||
caught
|
||||
sending USR2
|
||||
sending USR2
|
||||
USR2
|
||||
20
shell/hush_test/hush-signals/catch.tests
Executable file
20
shell/hush_test/hush-signals/catch.tests
Executable file
@@ -0,0 +1,20 @@
|
||||
# avoid ugly warnings about signals not being caught
|
||||
trap ":" USR1 USR2
|
||||
|
||||
"$THIS_SH" -c '
|
||||
trap "echo caught" USR2
|
||||
echo "sending USR2"
|
||||
kill -USR2 $$
|
||||
|
||||
trap "" USR2
|
||||
echo "sending USR2"
|
||||
kill -USR2 $$
|
||||
|
||||
trap "-" USR2
|
||||
echo "sending USR2"
|
||||
kill -USR2 $$
|
||||
|
||||
echo "not reached"
|
||||
'
|
||||
|
||||
trap "-" USR1 USR2
|
||||
12
shell/hush_test/hush-signals/exit.right
Normal file
12
shell/hush_test/hush-signals/exit.right
Normal file
@@ -0,0 +1,12 @@
|
||||
cow
|
||||
moo
|
||||
Traps1:
|
||||
trap -- 'exitfunc' EXIT
|
||||
Traps2:
|
||||
trap -- 'echo Should not run' EXIT
|
||||
Check1: 42
|
||||
Traps1:
|
||||
trap -- 'exitfunc' EXIT
|
||||
Traps2:
|
||||
trap -- 'echo Should not run' EXIT
|
||||
Check2: 42
|
||||
34
shell/hush_test/hush-signals/exit.tests
Executable file
34
shell/hush_test/hush-signals/exit.tests
Executable file
@@ -0,0 +1,34 @@
|
||||
"$THIS_SH" -c 'trap "echo cow" 0'
|
||||
"$THIS_SH" -c 'trap "echo moo" EXIT'
|
||||
"$THIS_SH" -c 'trap "echo no" 0; trap 0'
|
||||
|
||||
(
|
||||
exitfunc() {
|
||||
echo "Traps1:"
|
||||
trap
|
||||
# EXIT trap is disabled after it is triggered,
|
||||
# it can not be "re-armed" like this:
|
||||
trap "echo Should not run" EXIT
|
||||
echo "Traps2:"
|
||||
trap
|
||||
}
|
||||
trap 'exitfunc' EXIT
|
||||
exit 42
|
||||
)
|
||||
echo Check1: $?
|
||||
|
||||
(
|
||||
exitfunc() {
|
||||
echo "Traps1:"
|
||||
trap
|
||||
# EXIT trap is disabled after it is triggered,
|
||||
# it can not be "re-armed" like this:
|
||||
trap "echo Should not run" EXIT
|
||||
echo "Traps2:"
|
||||
trap
|
||||
exit 42
|
||||
}
|
||||
trap 'exitfunc' EXIT
|
||||
exit 66
|
||||
)
|
||||
echo Check2: $?
|
||||
4
shell/hush_test/hush-signals/return_in_trap1.right
Normal file
4
shell/hush_test/hush-signals/return_in_trap1.right
Normal file
@@ -0,0 +1,4 @@
|
||||
a:2
|
||||
b:0
|
||||
Trap
|
||||
d:3
|
||||
18
shell/hush_test/hush-signals/return_in_trap1.tests
Executable file
18
shell/hush_test/hush-signals/return_in_trap1.tests
Executable file
@@ -0,0 +1,18 @@
|
||||
a() {
|
||||
(exit 2)
|
||||
echo a:$?
|
||||
(kill -s USR1 $$; echo b:$?; exit 3)
|
||||
echo c:$? # does not execute
|
||||
(exit 4)
|
||||
}
|
||||
|
||||
trap "echo Trap; return" USR1
|
||||
a
|
||||
|
||||
echo d:$?
|
||||
# It's debatable what is the correct value above.
|
||||
# Does 'return' in trap sees $? == 2 or $? == 3?
|
||||
# IOW: after (kill..), does shell first wait for its completion
|
||||
# and sets $?, then checks pending signals and runs a trap handler,
|
||||
# or does it first checks pending signals and runs handler?
|
||||
# hush does the former, and prints 3.
|
||||
2
shell/hush_test/hush-signals/save-ret.right
Normal file
2
shell/hush_test/hush-signals/save-ret.right
Normal file
@@ -0,0 +1,2 @@
|
||||
YEAH
|
||||
0
|
||||
4
shell/hush_test/hush-signals/save-ret.tests
Executable file
4
shell/hush_test/hush-signals/save-ret.tests
Executable file
@@ -0,0 +1,4 @@
|
||||
# make sure we do not corrupt $? across traps
|
||||
trap "echo YEAH; false" USR1
|
||||
kill -USR1 $$
|
||||
echo $?
|
||||
8
shell/hush_test/hush-signals/savetrap.right
Normal file
8
shell/hush_test/hush-signals/savetrap.right
Normal file
@@ -0,0 +1,8 @@
|
||||
trap -- 'echo Exiting' EXIT
|
||||
trap -- 'echo WINCH!' WINCH
|
||||
trap -- 'echo Exiting' EXIT
|
||||
trap -- 'echo WINCH!' WINCH
|
||||
trap -- 'echo Exiting' EXIT
|
||||
trap -- 'echo WINCH!' WINCH
|
||||
Done
|
||||
Exiting
|
||||
9
shell/hush_test/hush-signals/savetrap.tests
Executable file
9
shell/hush_test/hush-signals/savetrap.tests
Executable file
@@ -0,0 +1,9 @@
|
||||
trap 'echo Exiting' EXIT
|
||||
trap 'echo WINCH!' SIGWINCH
|
||||
v=` trap `
|
||||
echo "$v"
|
||||
v=$( trap )
|
||||
echo "$v"
|
||||
v=`trap`
|
||||
echo "$v"
|
||||
echo Done
|
||||
1
shell/hush_test/hush-signals/signal7.right
Normal file
1
shell/hush_test/hush-signals/signal7.right
Normal file
@@ -0,0 +1 @@
|
||||
Bug detected: 0
|
||||
18
shell/hush_test/hush-signals/signal7.tests
Executable file
18
shell/hush_test/hush-signals/signal7.tests
Executable file
@@ -0,0 +1,18 @@
|
||||
bug() {
|
||||
trap : exit
|
||||
# Bug was causing sh to be run in subshell,
|
||||
# as if this line is replaced with (sh -c ...; exit $?) &
|
||||
# here:
|
||||
sh -c 'echo REAL_CHILD=$$' &
|
||||
echo PARENTS_IDEA_OF_CHILD=$!
|
||||
wait # make sure bkgd shell completes
|
||||
}
|
||||
|
||||
bug | {
|
||||
while read varval; do
|
||||
eval $varval
|
||||
done
|
||||
test x"$REAL_CHILD" != x"" \
|
||||
&& test x"$REAL_CHILD" = x"$PARENTS_IDEA_OF_CHILD"
|
||||
echo "Bug detected: $?"
|
||||
}
|
||||
1
shell/hush_test/hush-signals/signal_read1.right
Normal file
1
shell/hush_test/hush-signals/signal_read1.right
Normal file
@@ -0,0 +1 @@
|
||||
Got HUP:0
|
||||
5
shell/hush_test/hush-signals/signal_read1.tests
Executable file
5
shell/hush_test/hush-signals/signal_read1.tests
Executable file
@@ -0,0 +1,5 @@
|
||||
(sleep 1; kill -HUP $$) &
|
||||
trap 'echo "Got HUP:$?"; exit' HUP
|
||||
while true; do
|
||||
read ignored
|
||||
done
|
||||
2
shell/hush_test/hush-signals/signal_read2.right
Normal file
2
shell/hush_test/hush-signals/signal_read2.right
Normal file
@@ -0,0 +1,2 @@
|
||||
HUP
|
||||
Done:129
|
||||
7
shell/hush_test/hush-signals/signal_read2.tests
Executable file
7
shell/hush_test/hush-signals/signal_read2.tests
Executable file
@@ -0,0 +1,7 @@
|
||||
$THIS_SH -c '
|
||||
(sleep 1; kill -HUP $$) &
|
||||
while true; do
|
||||
read ignored
|
||||
done
|
||||
'
|
||||
echo "Done:$?"
|
||||
21
shell/hush_test/hush-signals/subshell.right
Normal file
21
shell/hush_test/hush-signals/subshell.right
Normal file
@@ -0,0 +1,21 @@
|
||||
trap -- '' HUP
|
||||
trap -- '' QUIT
|
||||
trap -- '' SYS
|
||||
Ok
|
||||
trap -- '' HUP
|
||||
trap -- '' QUIT
|
||||
trap -- '' SYS
|
||||
Ok
|
||||
trap -- '' HUP
|
||||
trap -- '' QUIT
|
||||
trap -- '' SYS
|
||||
Ok
|
||||
trap -- '' HUP
|
||||
trap -- '' QUIT
|
||||
trap -- '' SYS
|
||||
Ok
|
||||
trap -- '' HUP
|
||||
trap -- '' QUIT
|
||||
trap -- '' SYS
|
||||
TERM
|
||||
Done
|
||||
19
shell/hush_test/hush-signals/subshell.tests
Executable file
19
shell/hush_test/hush-signals/subshell.tests
Executable file
@@ -0,0 +1,19 @@
|
||||
# Non-empty traps should be reset in subshell
|
||||
|
||||
# HUP is special in interactive shells
|
||||
trap '' HUP
|
||||
# QUIT is always special
|
||||
trap '' QUIT
|
||||
# SYS is not special
|
||||
trap '' SYS
|
||||
# WINCH is harmless
|
||||
trap 'bad: caught WINCH' WINCH
|
||||
# With TERM we'll check whether it is reset
|
||||
trap 'bad: caught TERM' TERM
|
||||
|
||||
(trap; "$THIS_SH" -c 'kill -HUP $PPID'; echo Ok)
|
||||
(trap; "$THIS_SH" -c 'kill -QUIT $PPID'; echo Ok)
|
||||
(trap; "$THIS_SH" -c 'kill -SYS $PPID'; echo Ok)
|
||||
(trap; "$THIS_SH" -c 'kill -WINCH $PPID'; echo Ok)
|
||||
(trap; "$THIS_SH" -c 'kill -TERM $PPID'; echo Bad: TERM is not reset)
|
||||
echo Done
|
||||
14
shell/hush_test/hush-signals/usage.right
Normal file
14
shell/hush_test/hush-signals/usage.right
Normal file
@@ -0,0 +1,14 @@
|
||||
___
|
||||
___
|
||||
___
|
||||
trap -- 'a' EXIT
|
||||
trap -- 'a' INT
|
||||
trap -- 'a' USR1
|
||||
trap -- 'a' USR2
|
||||
___
|
||||
___
|
||||
trap -- 'a' USR1
|
||||
trap -- 'a' USR2
|
||||
___
|
||||
___
|
||||
trap -- 'a' USR2
|
||||
23
shell/hush_test/hush-signals/usage.tests
Executable file
23
shell/hush_test/hush-signals/usage.tests
Executable file
@@ -0,0 +1,23 @@
|
||||
# no output -- default state
|
||||
echo ___
|
||||
trap
|
||||
|
||||
# assign some traps
|
||||
echo ___
|
||||
trap "a" EXIT INT USR1 USR2
|
||||
|
||||
# show them all
|
||||
echo ___
|
||||
trap
|
||||
|
||||
# clear one
|
||||
echo ___
|
||||
trap 0 INT
|
||||
echo ___
|
||||
trap
|
||||
|
||||
# clear another
|
||||
echo ___
|
||||
trap "-" USR1
|
||||
echo ___
|
||||
trap
|
||||
Reference in New Issue
Block a user