#!/usr/bin/perl -w
# vim: ts=2 sw=2 filetype=perl expandtab
# Exercises POE::Filter::RecordBlock without the rest of POE
use strict;
use lib qw(t/10_units/05_filters);
use TestFilter;
use Test::More tests => 21 + $COUNT_FILTER_INTERFACE + $COUNT_FILTER_STANDARD;
use_ok("POE::Filter::RecordBlock");
test_filter_interface("POE::Filter::RecordBlock");
# standard tests and blocksize
{
my $filter = POE::Filter::RecordBlock->new( BlockSize => 4 );
test_filter_standard(
$filter,
[qw/1 2 3 4 5 6 7 8 9 10/],
[[qw/1 2 3 4/], [qw/5 6 7 8/]],
[qw/1 2 3 4 5 6 7 8/],
);
is($filter->blocksize(), 4, "blocksize() returns blocksize");
$filter->blocksize(2);
is($filter->blocksize(), 2, "blocksize() can be changed");
eval { $filter->blocksize(undef) };
eval { local $^W = 0; $filter->blocksize("elephant") };
eval { $filter->blocksize(-50) };
eval { $filter->blocksize(0) };
is($filter->blocksize(), 2, "blocksize() rejects invalid sizes");
}
# new() error checking
{
eval { POE::Filter::RecordBlock->new( BlockSize => 0 ) };
ok(!!$@, "BlockSize == 0 fails");
eval { POE::Filter::RecordBlock->new( ) };
ok(!!$@, "BlockSize must be given");
eval { local $^W = 0; POE::Filter::RecordBlock->new( BlockSize => "elephant" ) };
ok(!!$@, "BlockSize must not be an elephant");
eval { POE::Filter::RecordBlock->new( "one", "two", "odd number" ) };
ok(!!$@, "odd number of named parameters is invalid");
}
# test checkput
{
my $filter = POE::Filter::RecordBlock->new( BlockSize => 3, CheckPut => 1 );
is_deeply(
$filter->put( [[qw/1 2/], [qw/3 A/]] ),
[qw/1 2 3/],
"check put on: short blocks"
);
is_deeply(
$filter->put_pending(),
[qw/A/],
" put_pending"
);
is_deeply(
$filter->put( [[qw/2 3 1 2 3/], [qw/1 2 3 B/]] ),
[qw/A 2 3 1 2 3 1 2 3/],
"check put on: long blocks"
);
is_deeply(
$filter->put_pending(),
[qw/B/],
" put_pending"
);
is_deeply(
$filter->put( [[qw/2 3 1 2/], [qw/3 1/], [qw/2 3 1/], [qw/2 3/]] ),
[qw/B 2 3 1 2 3 1 2 3 1 2 3/],
"check put on: mixed blocks"
);
ok(!defined($filter->put_pending()), " put_pending");
ok($filter->checkput(), "checkput() returns CheckPut flag");
$filter->checkput(0);
ok(!$filter->checkput(), "checkput() can be changed");
}
# test checkput can be turned off!
{
my $filter = POE::Filter::RecordBlock->new( BlockSize => 3 );
ok(!$filter->checkput(), "checkput() returns CheckPut flag");
is_deeply(
$filter->put( [[qw/1 2/], [qw/1 2/]] ),
[qw/1 2 1 2/],
"check put off: short blocks"
);
ok(!defined($filter->put_pending()), " put_pending is empty");
is_deeply(
$filter->put( [[qw/1 2 3 4 5/], [qw/1 2 3 4/]] ),
[qw/1 2 3 4 5 1 2 3 4/],
"check put off: long blocks"
);
is_deeply(
$filter->put( [[qw/1 2 3 4/], [qw/1 2/], [qw/1 2 3/], [qw/1 2/]] ),
[qw/1 2 3 4 1 2 1 2 3 1 2/],
"check put off: mixed blocks"
);
}