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