--- AnyEvent/t/handle/02_write.t 2008/04/27 19:08:38 1.2 +++ AnyEvent/t/handle/02_write.t 2008/05/15 09:03:43 1.3 @@ -1,38 +1,84 @@ #!perl - use strict; use AnyEvent::Impl::Perl; use AnyEvent::Handle; -use Test::More tests => 2; use Socket; +print "1..7\n"; + my $cv = AnyEvent->condvar; socketpair my $rd, my $wr, AF_UNIX, SOCK_STREAM, PF_UNSPEC; -my $rd_ae = AnyEvent::Handle->new (fh => $rd); +my $rd_ae = + AnyEvent::Handle->new ( + fh => $rd, + on_eof => sub { + warn "reader got EOF"; + $cv->broadcast + } + ); + +my $wr_ae = + AnyEvent::Handle->new ( + fh => $wr, + on_eof => sub { + warn "writer got EOF\n"; + $cv->broadcast + } + ); my $dat = ''; -my $write_cb_called = 0; -$rd_ae->read (5132, sub { +$rd_ae->push_read_chunk (5132, sub { my ($rd_ae, $data) = @_; $dat = substr $data, 0, 2; $dat .= substr $data, -5; - $rd_ae->read (1, sub { $cv->broadcast }); + + print "ok 4 - first read chunk\n"; + + $wr_ae->push_write ("A" x 5000); + $wr_ae->on_drain (sub { + my ($wr_ae) = @_; + $wr_ae->on_drain; + print "ok 5 - fourth write\n" + }); + + $rd_ae->push_read_chunk (1, sub { + print "ok 6 - second read chunk\n"; + $cv->broadcast + }); }); -my $wr_ae = AnyEvent::Handle->new (fh => $wr); +$wr_ae->push_write ("A" x 5000); +$wr_ae->push_write ("X" x 130); -$wr_ae->write ("A" x 5000); -$wr_ae->write (("X" x 130), sub { $write_cb_called++; }); -$wr_ae->write ("Y", sub { $write_cb_called++; }); -$wr_ae->write ("Z"); -$wr_ae->write (sub { $write_cb_called++; }); -$wr_ae->write ("A" x 5000); -$wr_ae->write (sub { $write_cb_called++ }); +# and now some extreme CPS action: +$wr_ae->on_drain (sub { + my ($wr_ae) = @_; + $wr_ae->on_drain; + print "ok 1 - first write\n"; + + $wr_ae->push_write ("Y"); + $wr_ae->on_drain (sub { + my ($wr_ae) = @_; + $wr_ae->on_drain; + print "ok 2 - second write\n"; + + $wr_ae->push_write ("Z"); + $wr_ae->on_drain (sub { + my ($wr_ae) = @_; + $wr_ae->on_drain; + print "ok 3 - third write\n"; + }); + }); +}); $cv->wait; -is ($dat, "AAXXXYZ", 'lines were read and written correctly'); -is ($write_cb_called, 4, 'write callbacks called correctly'); +if ($dat eq "AAXXXYZ") { + print "ok 7 - received data\n"; +} else { + warn "dat was '$dat'\n"; + print "not ok 7 - received data\n"; +}