jimregexp: rename local regex functions
[jimtcl.git] / tests / signal.test
blob0c3479d132cc081fd9ed7375c96c8813418fb525
1 source [file dirname [info script]]/testing.tcl
3 needs cmd signal
4 needs cmd pid
5 testConstraint try [expr {[info commands try] ne ""}]
7 test signal-1.1 "catch/throw" {
8         signal handle TERM
9         set x 1
10         set rc [catch -signal {
11                 signal throw -TERM
12                 incr x
13         } result]
14         signal default TERM
15         list [info returncode $rc] $result $x
16 } {signal SIGTERM 1}
18 test signal-1.2 "catch/kill" {
19         signal handle TERM
20         set x 1
21         set rc [catch -signal {
22                 kill -TERM [pid]
23                 incr x
24         } result]
25         signal default TERM
26         list [info returncode $rc] $result $x
27 } {signal SIGTERM 1}
29 test signal-1.3 "catch/alarm" {
30         signal handle ALRM
31         set x 1
32         set rc [catch -signal {
33                 alarm .2
34                 sleep 1
35                 incr x
36         } result]
37         signal default ALRM
38         list [info returncode $rc] $result $x
39 } {signal SIGALRM 1}
41 test signal-1.4 "multiple signals before catch" {
42         signal handle ALRM INT
43         kill -INT [pid]
44         alarm .2
45         sleep 1
46         set x 1
47         set rc [catch -signal {
48                 # Doesn't not execute because signals already active
49                 incr x
50         } result]
51         signal default ALRM INT
52         list [info returncode $rc] [lsort $result] $x
53 } {signal {SIGALRM SIGINT} 1}
55 test signal-1.5 "ignored signals" {
56         signal handle INT
57         signal ignore HUP
59         set x 1
60         catch -signal {
61                 # Send an ignored signal
62                 kill -HUP [pid]
63                 incr x
64                 # Now a caught signal
65                 kill -INT [pid]
66                 incr x
67         } result
68         signal default INT TERM
69         list [lsort $result] $x
70 } {SIGINT 2}
72 test signal-1.6 "check ignored signals" {
73         list [signal check SIGINT] [signal check]
74 } {{} SIGHUP}
76 test signal-1.7 "clearing ignored signals" {
77         signal check -clear
78         signal check
79 } {}
81 test signal-1.8 "try/signal" try {
82         signal handle ALRM
83         try -signal {
84                 alarm 0.8
85                 foreach i [range 10] {
86                         sleep 0.2
87                 }
88                 set msg ""
89         } on signal {msg} {
90                 # Just set msg here
91         } finally {
92                 alarm 0
93         }
94         signal default ALRM
95         list [expr {$i in {2 3 4}}] $msg
96 } {1 SIGALRM}
98 test signal-1.9 {throw an ignored signal} {
99         signal ignore SIGTERM
100         signal throw SIGTERM
101         signal check -clear SIGTERM
102 } {SIGTERM}
104 test signal-1.10 {throw with no signal} try {
105         # With no arg, signal throw means signal throw SIGINT
106         try -signal {
107                 signal throw
108         } on signal msg {
109         }
110         set msg
111 } SIGINT
113 test signal-2.1 {bad signal} -body {
114         signal handle NONEXISTENT
115 } -returnCodes error -result {unknown signal NONEXISTENT}
117 test signal-2.2 {bad signal} -body {
118         signal handle 999999
119 } -returnCodes error -result {unknown signal 999999}
121 test signal-2.3 {signal by number} {
122         signal handle 2
123         signal default 2
124 } {}
126 test signal-2.4 {signal block} {
127         signal block SIGINT
128         signal handle SIGINT
129         signal default SIGINT
130 } {}
132 test signal-2.5 {signal check invalid} -body {
133         signal check NONEXISTENT
134 } -returnCodes error -result {unknown signal NONEXISTENT}
136 test signal-2.6 {signal check invalid num} -body {
137         signal check 999999
138 } -returnCodes error -result {unknown signal 999999}
140 test signal-2.7 {signal throw invalid} -body {
141         signal throw NONEXISTENT
142 } -returnCodes error -result {unknown signal NONEXISTENT}
144 test signal-2.8 {signal throw invalid num} -body {
145         signal throw 999999
146 } -returnCodes error -result {unknown signal 999999}
148 test signal-2.9 {signal list} {
149         expr {"SIGINT" in [signal default]}
150 } {1}
152 test alarm-1.1 {alarm usage} -body {
153         alarm
154 } -returnCodes error -result {wrong # args: should be "alarm seconds"}
156 test alarm-1.2 {alarm usage} -body {
157         alarm too many args
158 } -returnCodes error -result {wrong # args: should be "alarm seconds"}
160 test alarm-1.3 {alarm usage} -body {
161         alarm badnum
162 } -returnCodes error -result {expected floating-point number but got "badnum"}
164 test alarm-1.4 {alarm seconds} {
165         alarm 2
166         alarm 0
167 } {}
169 test sleep-1.1 {sleep usage} -body {
170         sleep
171 } -returnCodes error -result {wrong # args: should be "sleep seconds"}
173 test sleep-1.2 {sleep usage} -body {
174         sleep too many args
175 } -returnCodes error -result {wrong # args: should be "sleep seconds"}
177 test sleep-1.3 {sleep usage} -body {
178         sleep badnum
179 } -returnCodes error -result {expected floating-point number but got "badnum"}
181 test kill-1.1 {kill usage} -body {
182         kill
183 } -returnCodes error -result {wrong # args: should be "kill ?SIG|-0? pid"}
185 test kill-1.2 {kill usage} -body {
186         kill too many args
187 } -returnCodes error -result {wrong # args: should be "kill ?SIG|-0? pid"}
189 test kill-1.3 {kill bad signal} -body {
190         kill NONEXISTENT [pid]
191 } -returnCodes error -result {unknown signal NONEXISTENT}
193 test kill-1.4 {kill -0} {
194         kill -0 [pid]
195 } {}
197 test kill-1.5 {kill 0 pid} {
198         kill 0 [pid]
199 } {}
201 test kill-1.6 {kill to invalid process} -body {
202         kill 0 9999999
203 } -returnCodes error -result {kill: Failed to deliver signal}
205 testreport