ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/67_tk_09_multi.t
Revision: 1.2
Committed: Thu Aug 4 09:14:03 2011 UTC (12 years, 10 months ago) by root
Content type: application/x-troff
Branch: MAIN
Changes since 1.1: +16 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.2 BEGIN {
2     # check for broken perls
3     if ($^O =~ /mswin32/i) {
4     my $ok;
5     local $SIG{CHLD} = sub { $ok = 1 };
6     kill 'CHLD', 0;
7    
8     unless ($ok) {
9     print <<EOF;
10     1..0 # SKIP Your perl interpreter is badly BROKEN. Child watchers will not work, ever. Try upgrading to a newer perl or a working perl (cygwin's perl is known to work). If that is not an option, you should be able to use the remaining functionality of AnyEvent, but child watchers WILL NOT WORK.
11     EOF
12     exit 0;
13     }
14     }
15     }
16    
17 root 1.1 use AnyEvent;
18     use AnyEvent::Util;
19     BEGIN { eval q{use AnyEvent::Impl::Tk;1} or ((print qq{1..0 # SKIP AnyEvent::Impl::Tk not loadable
20     }), exit 0) }
21    
22     $| = 1; print "1..14\n";
23    
24     print "ok 1\n";
25    
26     my ($a, $b) = AnyEvent::Util::portable_socketpair;
27    
28     # I/O write
29     {
30     my $cv = AE::cv;
31     my $wt = AE::timer 0.1, 0, $cv;
32     my $s = 0;
33    
34     $cv->begin; my $wa = AE::io $a, 1, sub { $cv->end; $s |= 1 };
35     $cv->begin; my $wb = AE::io $a, 1, sub { $cv->end; $s |= 2 };
36    
37     $cv->recv;
38    
39     print $s == 3 ? "" : "not ", "ok 2 # $s\n";
40     }
41    
42     # I/O read
43     {
44     my $cv = AE::cv;
45     my $wt = AE::timer 0.1, 0, $cv;
46     my $s = 0;
47    
48     my $wa = AE::io $a, 0, sub { $cv->end; $s |= 1 };
49     my $wb = AE::io $a, 0, sub { $cv->end; $s |= 2 };
50    
51     $cv->recv;
52    
53     print $s == 0 ? "" : "not ", "ok 3 # $s\n";
54    
55     syswrite $b, "x";
56    
57     $cv = AE::cv;
58     $wt = AE::timer 0.1, 0, $cv;
59    
60     $s = 0;
61     $cv->begin;
62     $cv->begin;
63     $cv->recv;
64    
65     print $s == 3 ? "" : "not ", "ok 4 # $s\n";
66    
67     sysread $a, my $dummy, 1;
68    
69     $cv = AE::cv;
70     $wt = AE::timer 0.1, 0, $cv;
71    
72     $s = 0;
73     $cv->recv;
74    
75     print $s == 0 ? "" : "not ", "ok 5 # $s\n";
76     }
77    
78     # signal
79     {
80     my $cv = AE::cv;
81     my $wt = AE::timer 0.1, 0, $cv;
82     my $s = 0;
83    
84     $cv->begin; my $wa = AE::signal INT => sub { $cv->end; $s |= 1 };
85     $cv->begin; my $wb = AE::signal INT => sub { $cv->end; $s |= 2 };
86    
87     $cv->recv;
88    
89     print $s == 0 ? "" : "not ", "ok 6 # $s\n";
90    
91     kill INT => $$;
92    
93     $cv = AE::cv;
94     $wt = AE::timer 0.1, 0, $cv;
95    
96     $s = 0;
97     $cv->recv;
98    
99     print $s == 3 ? "" : "not ", "ok 7 # $s\n";
100    
101     $cv = AE::cv;
102     $wt = AE::timer 0.1, 0, $cv;
103    
104     $s = 0;
105     $cv->recv;
106    
107     print $s == 0 ? "" : "not ", "ok 8 # $s\n";
108     }
109    
110     $AnyEvent::MAX_SIGNAL_LATENCY = 0.2;
111    
112     # child
113     {
114     my $cv = AE::cv;
115     my $wt = AE::timer 0.1, 0, $cv;
116     my $s = 0;
117    
118     my $pid = fork;
119    
120     unless ($pid) {
121     sleep 2;
122     exit 1;
123     }
124    
125     my ($apid, $bpid, $astatus, $bstatus);
126    
127     $cv->begin; my $wa = AE::child $pid, sub { ($apid, $astatus) = @_; $cv->end; $s |= 1 };
128     $cv->begin; my $wb = AE::child $pid, sub { ($bpid, $bstatus) = @_; $cv->end; $s |= 2 };
129    
130     $cv->recv;
131    
132     print $s == 0 ? "" : "not ", "ok 9 # $s\n";
133    
134     kill 9, $pid;
135    
136     $cv = AE::cv;
137     $wt = AE::timer 0.1, 0, $cv;
138    
139     $s = 0;
140     $cv->recv;
141    
142     print $s == 3 ? "" : "not ", "ok 10 # $s\n";
143     print $apid == $pid && $bpid == $pid ? "" : "not ", "ok 11 # $apid == $bpid == $pid\n";
144     print $astatus == 9 && $bstatus == 9 ? "" : "not ", "ok 12 # $astatus == $bstatus == 9\n";
145    
146     $cv = AE::cv;
147     $wt = AE::timer 0.1, 0, $cv;
148    
149     $s = 0;
150     $cv->recv;
151    
152     print $s == 0 ? "" : "not ", "ok 13 # $s\n";
153     }
154    
155     print "ok 14\n";
156    
157     exit 0;
158