use warnings;
use strict;
use Test::Simple tests => 50;
use Log::Log4perl qw(get_logger);
use Log::Log4perl::Level;
use File::Spec;
my $warnstr;
local $SIG{__WARN__} = sub { $warnstr = join("", @_); };
local $SIG{__DIE__} = sub { $warnstr = join("", @_); };
sub warndietest {
my ($method, $in_str, $out_str, $app, $mname) = @_;
eval { &$method($in_str) };
ok($warnstr =~ /$out_str/, "$mname($in_str): STDERR contains \"$out_str\"");
ok($app->buffer() =~ /$out_str/, "$mname($in_str): Buffer contains \"$out_str\"");
$app->buffer("");
}
sub warndietest_nooutput {
my ($method, $in_str, $out_str, $app, $mname) = @_;
eval { &$method($in_str) };
ok($warnstr !~ /$out_str/, "$mname($in_str): STDERR does NOT contain \"$out_str\"");
ok($app->buffer() !~ /$out_str/, "$mname($in_str): Buffer does NOT contain \"$out_str\"");
}
sub dietest_nooutput {
my ($method, $in_str, $out_str, $app, $mname) = @_;
eval { &$method($in_str) };
ok($warnstr =~ /$out_str/, "$mname($in_str): STDERR contains \"$out_str\"");
ok($app->buffer() !~ /$out_str/, "$mname($in_str): Buffer does NOT contain \"$out_str\"");
}
ok(1, "Initialized OK");
my $log = Log::Log4perl::get_logger("abc.def");
my $app = Log::Log4perl::Appender->new(
"Log::Log4perl::Appender::TestBuffer");
$log->add_appender($app);
$log->level($DEBUG);
my $test = 1;
foreach my $f ("logwarn", "logdie", "logcarp", "logcroak", "logcluck",
"logconfess", "error_warn", "error_die") {
warndietest(sub {$log->$f(@_)}, "Test $test: $f", "Test $test: $f", $app, "$f");
$test++;
}
$log->level($ERROR);
foreach my $f ("logdie", "logcroak",
"logconfess", "error_warn", "error_die") {
warndietest(sub {$log->$f(@_)}, "Test $test: $f", "Test $test: $f", $app, "$f");
$test++;
}
foreach my $f ("logwarn", "logcarp", "logcluck",
) {
warndietest_nooutput(sub {$log->$f(@_)}, "Test $test: $f", "Test $test: $f", $app, "$f");
$test++;
}
$log->level($OFF);
foreach my $f ("logwarn", "logcarp", "logcluck", "error_warn") {
warndietest_nooutput(sub {$log->$f(@_)}, "Test $test: $f", "Test $test: $f", $app, "$f");
$test++;
}
foreach my $f ("error_die", "logdie", "logcroak", "logconfess") {
dietest_nooutput(sub {$log->$f(@_)}, "Test $test: $f", "Test $test: $f", $app, "$f");
$test++;
}
Log::Log4perl->init(\<<'EOT');
log4perl.rootLogger=DEBUG, A1
log4perl.appender.A1=Log::Log4perl::Appender::TestBuffer
log4perl.appender.A1.layout=org.apache.log4j.PatternLayout
log4perl.appender.A1.layout.ConversionPattern=%F-%L: %m
EOT
my $logger = get_logger("Twix::Bar");
eval { $logger->logdie("Log and die!"); };
my $app0 = Log::Log4perl::Appender::TestBuffer->by_name("A1");
my $expected = File::Spec->catfile('t','024WarnDieCarp.t-132').": Log and die!";
ok($app0->buffer() eq $expected, "%F-%L adjustment, got ".$app0->buffer().", expected $expected");