use strict;
use warnings;
use Test::More;
use Test::FailWarnings;
use Test::Exception;
use Socket;
use IO::File (); #so blocking() will work
BEGIN {
unshift @INC, '../lib';
}
use IO::Framed::Read ();
my ($r, $w);
if ($^O eq 'MSWin32'){
require Win32::Socketpair;
($r, $w) = Win32::Socketpair::winsocketpair();
} else {
pipe $r, $w;
}
syswrite $w, 'x' x 3;
my $rdr = IO::Framed::Read->new( $r );
is(
$rdr->read_until("y"),
undef,
'“until” character isn’t there',
);
syswrite $w, 'xxxxyxy';
is(
$rdr->read_until("y"),
'xxxxxxxy',
'got expected input',
);
is(
$rdr->read_until("y"),
'xy',
'got expected input (probably from buffer)',
);
close $w;
throws_ok(
sub { $rdr->read_until("y") },
'IO::Framed::X::EmptyRead',
'exception on empty read',
);
$rdr->allow_empty_read();
is(
$rdr->read_until("y"),
q<>,
'allow_empty_read() - empty string on empty read',
);
done_testing();