1########################################### 2# Test Suite for :no_extra_logdie_message 3# Mike Schilli, 2005 (m@perlmeister.com) 4########################################### 5 6BEGIN { 7 if($ENV{INTERNAL_DEBUG}) { 8 require Log::Log4perl::InternalDebug; 9 Log::Log4perl::InternalDebug->enable(); 10 } 11} 12 13use warnings; 14use strict; 15 16use Log::Log4perl qw(:easy :no_extra_logdie_message); 17use Test::More; 18 19BEGIN { 20 if ($] < 5.008) { 21 plan skip_all => "Only with perl >= 5.008"; 22 } else { 23 plan tests => 11; 24 } 25} 26 27END { 28 unlink "t/tmp/easy"; 29 rmdir "t/tmp"; 30} 31 32mkdir "t/tmp" unless -d "t/tmp"; 33 34use Log::Log4perl::Appender::TestBuffer; 35 36is($Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR, 0, "internal variable set"); 37 38my $conf = qq( 39log4perl.category = DEBUG, Screen 40 41 # Regular Screen Appender 42log4perl.appender.Screen = Log::Log4perl::Appender::TestBuffer 43log4perl.appender.Screen.layout = PatternLayout 44log4perl.appender.Screen.layout.ConversionPattern = %d %p %c %m %n 45); 46 47Log::Log4perl->init(\$conf); 48 49######################################################################### 50# Capture STDERR to a temporary file and a filehandle to read from it 51 52my $TMP_FILE = File::Spec->catfile(qw(t tmp easy)); 53$TMP_FILE = "tmp/easy" if ! -d "t"; 54 55open STDERR, ">$TMP_FILE"; 56select STDERR; $| = 1; #needed on win32 57open IN, "<$TMP_FILE" or die "Cannot open $TMP_FILE"; binmode IN, ":utf8"; 58sub readstderr { return join("", <IN>); } 59 60END { unlink $TMP_FILE; 61 close IN; 62 } 63######################################################################### 64 65my $buf = Log::Log4perl::Appender::TestBuffer->by_name("Screen"); 66 67$buf->buffer(""); 68my $line_ref = __LINE__ + 1; 69LOGCARP("logcarp"); 70 71like(readstderr(), qr/logcarp at /, "Output to stderr"); 72SKIP: { use Carp; 73 skip "Detected buggy Carp.pm (upgrade to perl-5.8.*)", 3 unless 74 defined $Carp::VERSION; 75 like($buf->buffer(), qr/logcarp.*$line_ref/, "Appender output intact"); 76 $line_ref += 9; 77 $buf->buffer(""); 78 LOGCARP("logcarp"); 79 like(readstderr(), qr/logcarp at /, "Output to stderr"); 80 like($buf->buffer(), qr/logcarp.*$line_ref/, "Appender output intact"); 81} 82 83$line_ref += 6; 84$buf->clear; 85LOGWARN("Doesn't call 'exit'"); 86is(readstderr(), "", "No output to stderr"); 87like($buf->buffer(), qr/Doesn't call 'exit'/, "Appender output intact"); 88######################################################################### 89# Turn default behaviour back on 90######################################################################### 91$Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR ^= 1; 92$buf->buffer(""); 93 94package Foo; 95use Log::Log4perl qw(:easy); 96sub foo { 97 LOGCARP("logcarp"); 98} 99package main; 100 101Foo::foo(); 102 103$line_ref += 17; 104like(readstderr(), qr/logcarp.*$line_ref/, "Output to stderr"); 105like($buf->buffer(), qr/logcarp.*$line_ref/, "Appender output intact"); 106 107$buf->buffer(""); 108eval { 109 LOGDIE("logdie"); 110}; 111$line_ref += 8; 112like($@, qr/logdie.*$line_ref/, "Output to stderr"); 113like($buf->buffer(), qr/logdie/, "Appender output intact"); 114