Trim bootstrap jimsh
[jimtcl.git] / tests / signal.test
blobe21250112ab6fe9ce4792979cb9da036cd8d6406
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.4
85                 foreach i [range 10] {
86                         sleep 0.1
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 {3 4 5}}] $msg
96 } {1 SIGALRM}
98 testreport