use strict;
use warnings;
use Test::More tests => 21;
BEGIN {
use_ok('Log::Dispatch');
use_ok('Log::Dispatch::TextTable');
}
my $return;
{
my $dispatcher = Log::Dispatch->new;
isa_ok($dispatcher, 'Log::Dispatch');
my $table_dispatch = Log::Dispatch::TextTable->new(
name => 'tiny_bladder_log_TEEHEE',
min_level => 'debug',
send_to => sub { $return = "$_[0]" },
flush_if => sub { $_[0]->entry_count >= 5 },
);
isa_ok($table_dispatch, 'Log::Dispatch::TextTable');
isa_ok($table_dispatch, 'Log::Dispatch::Output');
$dispatcher->add($table_dispatch);
is($table_dispatch->table->body_height, 0, "no lines in body yet");
for (1..4) {
$dispatcher->alert("line $_");
is($table_dispatch->table->body_height, $_, "$_ line(s) in body");
is($return, undef, "nothing flushed yet");
}
$dispatcher->alert("line 5: the final chapter");
is($table_dispatch->table->body_height, 0, "flushed! nothing in body now");
like($return, qr/\Atime/, 'flushed into $return');
like($return, qr/line 5/, 'and it contains the line we expected');
$dispatcher->alert("line 6: a new beginning");
}
is(ref($return), '', 'stringified table is just a plain old scalar');
my @lines = split /\n/, $return;
is(@lines, 2, "there were two lines in the table");
like(
$lines[0],
qr/\Atime\s+\|\s+level\s+\|\s+message\s*\z/,
"first line is headers"
);
like(
$lines[1],
qr/a new beginning/,
"second line is the final line logged"
);