summaryrefslogtreecommitdiff
path: root/t/020Easy.t
diff options
context:
space:
mode:
Diffstat (limited to 't/020Easy.t')
-rw-r--r--t/020Easy.t235
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;