summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/hush_test/hush-trap/catch.right4
-rw-r--r--shell/hush_test/hush-trap/catch.tests20
-rw-r--r--shell/hush_test/hush-trap/exit.right2
-rw-r--r--shell/hush_test/hush-trap/exit.tests3
-rw-r--r--shell/hush_test/hush-trap/save-ret.right2
-rw-r--r--shell/hush_test/hush-trap/save-ret.tests4
-rw-r--r--shell/hush_test/hush-trap/usage.right14
-rw-r--r--shell/hush_test/hush-trap/usage.tests23
8 files changed, 72 insertions, 0 deletions
diff --git a/shell/hush_test/hush-trap/catch.right b/shell/hush_test/hush-trap/catch.right
new file mode 100644
index 0000000..9e34c4c
--- /dev/null
+++ b/shell/hush_test/hush-trap/catch.right
@@ -0,0 +1,4 @@
+sending USR2
+caught
+sending USR2
+sending USR2
diff --git a/shell/hush_test/hush-trap/catch.tests b/shell/hush_test/hush-trap/catch.tests
new file mode 100644
index 0000000..b1a4ed9
--- /dev/null
+++ b/shell/hush_test/hush-trap/catch.tests
@@ -0,0 +1,20 @@
+# avoid ugly warnings about signals not being caught
+trap ":" USR1 USR2
+
+hush -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
diff --git a/shell/hush_test/hush-trap/exit.right b/shell/hush_test/hush-trap/exit.right
new file mode 100644
index 0000000..b4932fb
--- /dev/null
+++ b/shell/hush_test/hush-trap/exit.right
@@ -0,0 +1,2 @@
+cow
+moo
diff --git a/shell/hush_test/hush-trap/exit.tests b/shell/hush_test/hush-trap/exit.tests
new file mode 100644
index 0000000..174e74f
--- /dev/null
+++ b/shell/hush_test/hush-trap/exit.tests
@@ -0,0 +1,3 @@
+hush -c 'trap "echo cow" 0'
+hush -c 'trap "echo moo" EXIT'
+hush -c 'trap "echo no" 0; trap 0'
diff --git a/shell/hush_test/hush-trap/save-ret.right b/shell/hush_test/hush-trap/save-ret.right
new file mode 100644
index 0000000..a3e12ce
--- /dev/null
+++ b/shell/hush_test/hush-trap/save-ret.right
@@ -0,0 +1,2 @@
+YEAH
+0
diff --git a/shell/hush_test/hush-trap/save-ret.tests b/shell/hush_test/hush-trap/save-ret.tests
new file mode 100644
index 0000000..0786b6d
--- /dev/null
+++ b/shell/hush_test/hush-trap/save-ret.tests
@@ -0,0 +1,4 @@
+# make sure we do not corrupt $? across traps
+trap "echo YEAH; false" USR1
+kill -USR1 $$
+echo $?
diff --git a/shell/hush_test/hush-trap/usage.right b/shell/hush_test/hush-trap/usage.right
new file mode 100644
index 0000000..c0dbd6c
--- /dev/null
+++ b/shell/hush_test/hush-trap/usage.right
@@ -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
diff --git a/shell/hush_test/hush-trap/usage.tests b/shell/hush_test/hush-trap/usage.tests
new file mode 100644
index 0000000..d29c6e7
--- /dev/null
+++ b/shell/hush_test/hush-trap/usage.tests
@@ -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