diff options
Diffstat (limited to 't/020Easy.t')
-rw-r--r-- | t/020Easy.t | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/t/020Easy.t b/t/020Easy.t new file mode 100644 index 0000000..5b61f5a --- /dev/null +++ b/t/020Easy.t @@ -0,0 +1,235 @@ +# Tests for the lazy man:s logger with easy_init() + +BEGIN { + if($ENV{INTERNAL_DEBUG}) { + require Log::Log4perl::InternalDebug; + Log::Log4perl::InternalDebug->enable(); + } +} + +use warnings; +use strict; + +use Test::More; +use Log::Log4perl qw(:easy); +use File::Spec; + +my $WORK_DIR = "tmp"; +if(-d "t") { + $WORK_DIR = File::Spec->catfile(qw(t tmp)); +} +unless (-e "$WORK_DIR"){ + mkdir("$WORK_DIR", 0755) || die "can't create $WORK_DIR ($!)"; +} + +my $TMP_FILE = File::Spec->catfile(qw(t tmp easy)); +$TMP_FILE = "tmp/easy" if ! -d "t"; + +BEGIN { + if ($] < 5.006) { + plan skip_all => "Only with perl >= 5.006"; + } else { + plan tests => 21; + } +} + +END { unlink $TMP_FILE; + close IN; + } + +ok(1); # Initialized ok +unlink $TMP_FILE; + +# Capture STDOUT to a temporary file and a filehandle to read from it +open STDERR, ">$TMP_FILE"; +select STDERR; $| = 1; #needed on win32 +open IN, "<$TMP_FILE" or die "Cannot open $TMP_FILE"; +sub readstderr { return join("", <IN>); } + +############################################################ +# Typical easy setup +############################################################ +Log::Log4perl->easy_init($INFO); +my $log = get_logger(); +$log->debug("We don't want to see this"); +$log->info("But this we want to see"); +$log->error("And this also"); +my $stderr = readstderr(); +#print "STDERR='$stderr'\n"; + +unlike($stderr, qr/don't/); +like($stderr, qr/this we want/); +like($stderr, qr/this also/); + +############################################################ +# Advanced easy setup +############################################################ +Log::Log4perl->reset(); +close IN; + # Reopen stderr +open STDERR, ">&1"; +unlink $TMP_FILE; + +package Bar::Twix; +use Log::Log4perl qw(:easy); +sub crunch { DEBUG("Twix Not shown"); + ERROR("Twix mjam"); } + +package Bar::Mars; +use Log::Log4perl qw(:easy); +my $line = __LINE__ + 1; +sub crunch { ERROR("Mars mjam"); + INFO("Mars not shown"); } +package main; + +Log::Log4perl->easy_init( + { level => $INFO, + category => "Bar::Twix", + file => ">>$TMP_FILE", + layout => '%m%n', + }, + { level => $WARN, + category => "Bar::Mars", + file => ">>$TMP_FILE", + layout => '%F{1}-%L-%M: %m%n', + }, +); + +Bar::Mars::crunch(); +Bar::Twix::crunch(); + +open FILE, "<$TMP_FILE" or die "Cannot open $TMP_FILE"; +my $data = join '', <FILE>; +close FILE; + +is($data, "020Easy.t-$line-Bar::Mars::crunch: Mars mjam\nTwix mjam\n"); + +############################################################ +# LOGDIE and LOGWARN +############################################################ +# redir STDERR again +open STDERR, ">$TMP_FILE"; +select STDERR; $| = 1; #needed on win32 +open IN, "<$TMP_FILE" or die "Cannot open $TMP_FILE"; + +Log::Log4perl->easy_init($INFO); +$log = get_logger(); +$line = __LINE__ + 1; +eval { LOGDIE("logdie"); }; + +like($@, qr/logdie at .*?020Easy.t line $line/); +like(readstderr(), qr/^[\d:\/ ]+logdie$/m); + +LOGWARN("logwarn"); +like(readstderr(), qr/logwarn/); + +############################################################ +# Test logdie/logwarn with and without "\n"s +############################################################ +LOGWARN("message"); +like(readstderr(), qr/message at .*? line \d+/); + +LOGWARN("message\n"); +unlike(readstderr(), qr/message at .*? line \d+/); + +LOGWARN("message\nother"); +like(readstderr(), qr/other at .*? line \d+/); + +LOGWARN("message\nother\n"); +unlike(readstderr(), qr/other at .*? line \d+/); + + # logdie +eval { LOGDIE("logdie"); }; +like($@, qr/logdie at .*?020Easy.t line \d+/); + +eval { LOGDIE("logdie\n"); }; +unlike($@, qr/at .*?020Easy.t line \d+/); + +eval { LOGDIE("logdie\nother"); }; +like($@, qr/other at .*?020Easy.t line \d+/); + +eval { LOGDIE("logdie\nother\n"); }; +unlike($@, qr/at .*?020Easy.t line \d+/); + +############################################################ +# Test %T stack traces +############################################################ +Log::Log4perl->easy_init({ level => $INFO, layout => "%T: %m%n"}); + +sub foo { + bar(); +} + +sub bar { + my $log = get_logger(); + $log->info("info!"); +} + +foo(); +like(readstderr(), qr(main::bar.*?main::foo)); +close IN; + +############################################################ +# LOGCARP and LOGCROAK +############################################################ +# redir STDERR again +open STDERR, ">$TMP_FILE"; +select STDERR; $| = 1; #needed on win32 +open IN, "<$TMP_FILE" or die "Cannot open $TMP_FILE"; + +package Whack; +use Log::Log4perl qw(:easy); +sub whack { + LOGCROAK("logcroak in whack"); +} + +package main; + +Log::Log4perl->easy_init($INFO); +$log = get_logger(); +$line = __LINE__ + 1; +eval { Whack::whack() }; + +like($@, qr/logcroak in whack at .*?020Easy.t line $line/); +like(readstderr(), qr/^[\d:\/ ]+logcroak in whack.*$line/m); + +$line = __LINE__ + 8; +package Junk1; +use Log::Log4perl qw(:easy); +sub foo { + LOGCARP("LOGCARP"); +} +package Junk2; +sub foo { + Junk1::foo(); +} +package main; +Junk2::foo(); +SKIP: { + use Carp; + skip "Detected buggy Carp.pm (upgrade to perl-5.8.*)", 1 unless + defined $Carp::VERSION; + like(readstderr(), qr/LOGCARP.*020Easy.t line $line/); +} + +############################################################ +# LOGDIE and wrapper packages +############################################################ +package JunkWrapper; +use Log::Log4perl qw(:easy); +sub foo { + LOGDIE("Ahhh"); +} + +package main; + +Log::Log4perl->wrapper_register("JunkWrapper"); +$line = __LINE__ + 2; +eval { + JunkWrapper::foo(); +}; +like $@, qr/line $line/, "logdie with wrapper"; + +# Finally close +############################################################ +close IN; |