1 |
$|=1; |
2 |
print "1..4\n"; |
3 |
|
4 |
# note: the fourth test falls into an infinite loop in older versions of Coro |
5 |
|
6 |
use AnyEvent::Util; (); |
7 |
|
8 |
use Coro; |
9 |
use Coro::Handle; |
10 |
|
11 |
my @sep = ("\n", "e", undef, ""); |
12 |
my @ex = ( |
13 |
"one\n:two\n:\n:three\n:\n:\n:four\n:\n:\n:five\n:six\n:seven:", |
14 |
"one:\ntwo\n\nthre:e:\n\n\nfour\n\n\nfive:\nsix\nse:ve:n:", |
15 |
"one\ntwo\n\nthree\n\n\nfour\n\n\nfive\nsix\nseven:", |
16 |
"one\ntwo\n\n:three\n\n:four\n\n:five\nsix\nseven:", |
17 |
); |
18 |
|
19 |
for my $c (0..3) { |
20 |
my ($R, $W) = AnyEvent::Util::portable_pipe |
21 |
or die "error creating pipe pair: $!"; |
22 |
|
23 |
$R = unblock $R; |
24 |
$W = unblock $W; |
25 |
|
26 |
$W->autoflush(1); |
27 |
async { |
28 |
$W->print("one\ntwo\n\nthree\n\n\nfour\n\n\nfive\nsix\nseven"); |
29 |
$W->close; |
30 |
} |
31 |
|
32 |
my $p; |
33 |
while (defined(my $i = $R->readline($sep[$c]))) { |
34 |
$p .= $i . ":"; |
35 |
} |
36 |
|
37 |
$ex[$c] eq $p or |
38 |
print "not "; |
39 |
print "ok " . (1 + $c) . "\n"; |
40 |
} |