use strict;
use warnings;
use Test::More tests => 23;
use Log::Handler;
my $MESSAGES = 13;
my $RECEIVED = 0;
my %LEVELS = (
DEBUG => 1,
INFO => 1,
NOTICE => 1,
WARNING => 2,
ERROR => 2,
CRITICAL => 2,
ALERT => 1,
EMERGENCY => 2,
FATAL => 1,
);
my @LEVELS = (qw/
debug
info
notice
warning
warn
error
err
critical
crit
alert
emergency
emerg
fatal
/);
sub forward {
my $m = shift;
if ($m->{message} =~ /([A-Z]+) foo/) {
my $level = $1;
if (exists $LEVELS{$level}) {
$LEVELS{$level}--;
}
$RECEIVED++;
}
}
my $log = Log::Handler->new();
$log->add(
forward => {
maxlevel => 'debug',
forward_to => \&forward,
message_layout => '%L %m',
}
);
# die
foreach my $level (@LEVELS) {
my $ul = uc($level);
eval { $log->die($level => 'foo') };
ok($@ =~ /foo/, "test die $level");
}
# count messages
ok($RECEIVED == $MESSAGES, "count messages ($RECEIVED:$MESSAGES)");
# got all messages?
while ( my ($level, $count) = each %LEVELS ) {
ok($count == 0, "test level $level ($count)");
}