ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/handle/02_write.t
(Generate patch)

Comparing AnyEvent/t/handle/02_write.t (file contents):
Revision 1.2 by root, Sun Apr 27 19:08:38 2008 UTC vs.
Revision 1.8 by elmex, Fri Jul 4 12:21:58 2008 UTC

1#!perl 1#!perl
2 2
3use strict; 3use strict;
4
4use AnyEvent::Impl::Perl; 5use AnyEvent::Impl::Perl;
5use AnyEvent::Handle; 6use AnyEvent::Handle;
6use Test::More tests => 2;
7use Socket; 7use Socket;
8
9print "1..7\n";
8 10
9my $cv = AnyEvent->condvar; 11my $cv = AnyEvent->condvar;
10 12
11socketpair my $rd, my $wr, AF_UNIX, SOCK_STREAM, PF_UNSPEC; 13socketpair my $rd, my $wr, AF_UNIX, SOCK_STREAM, PF_UNSPEC;
12 14
13my $rd_ae = AnyEvent::Handle->new (fh => $rd); 15my $rd_ae =
16 AnyEvent::Handle->new (
17 fh => $rd,
18 on_eof => sub {
19 warn "reader got EOF";
20 $cv->broadcast
21 }
22 );
23
24my $wr_ae =
25 AnyEvent::Handle->new (
26 fh => $wr,
27 on_eof => sub {
28 warn "writer got EOF\n";
29 $cv->broadcast
30 }
31 );
14 32
15my $dat = ''; 33my $dat = '';
16my $write_cb_called = 0;
17 34
18$rd_ae->read (5132, sub { 35$rd_ae->push_read (chunk => 5132, sub {
19 my ($rd_ae, $data) = @_; 36 my ($rd_ae, $data) = @_;
20 $dat = substr $data, 0, 2; 37 $dat = substr $data, 0, 2;
21 $dat .= substr $data, -5; 38 $dat .= substr $data, -5;
22 $rd_ae->read (1, sub { $cv->broadcast }); 39
40 print "ok 4 - first read chunk\n";
41 my $n = 5;
42 $wr_ae->push_write ("A" x 5000);
43 $wr_ae->on_drain (sub {
44 my ($wr_ae) = @_;
45 $wr_ae->on_drain;
46 print "ok " . $n++ . " - fourth write\n";
47
48 });
49
50 $rd_ae->push_read (chunk => 5000, sub {
51 print "ok " . $n++ . " - second read chunk\n";
52 $cv->broadcast
53 });
23}); 54});
24 55
25my $wr_ae = AnyEvent::Handle->new (fh => $wr); 56$wr_ae->push_write ("A" x 5000);
57$wr_ae->push_write ("X" x 130);
26 58
27$wr_ae->write ("A" x 5000); 59# and now some extreme CPS action:
28$wr_ae->write (("X" x 130), sub { $write_cb_called++; }); 60$wr_ae->on_drain (sub {
29$wr_ae->write ("Y", sub { $write_cb_called++; }); 61 my ($wr_ae) = @_;
62 $wr_ae->on_drain;
63 print "ok 1 - first write\n";
64
30$wr_ae->write ("Z"); 65 $wr_ae->push_write ("Y");
31$wr_ae->write (sub { $write_cb_called++; }); 66 $wr_ae->on_drain (sub {
32$wr_ae->write ("A" x 5000); 67 my ($wr_ae) = @_;
33$wr_ae->write (sub { $write_cb_called++ }); 68 $wr_ae->on_drain;
69 print "ok 2 - second write\n";
70
71 $wr_ae->push_write ("Z");
72 $wr_ae->on_drain (sub {
73 my ($wr_ae) = @_;
74 $wr_ae->on_drain;
75 print "ok 3 - third write\n";
76 });
77 });
78});
34 79
35$cv->wait; 80$cv->wait;
36 81
37is ($dat, "AAXXXYZ", 'lines were read and written correctly'); 82if ($dat eq "AAXXXYZ") {
38is ($write_cb_called, 4, 'write callbacks called correctly'); 83 print "ok 7 - received data\n";
84} else {
85 warn "dat was '$dat'\n";
86 print "not ok 7 - received data\n";
87}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines