1###########################################
2# Test Suite for Log::Log4perl
3# warp_message cases
4# Mike Schilli, 2003 (m@perlmeister.com)
5###########################################
6
7BEGIN { 
8    if($ENV{INTERNAL_DEBUG}) {
9        require Log::Log4perl::InternalDebug;
10        Log::Log4perl::InternalDebug->enable();
11    }
12}
13
14#########################
15# change 'tests => 1' to 'tests => last_test_to_print';
16#########################
17use Test::More tests => 5;
18
19use Log::Log4perl;
20use Log::Log4perl::Appender::TestBuffer;
21
22my $EG_DIR = "eg";
23$EG_DIR = "../eg" unless -d $EG_DIR;
24
25######################################################################
26# warp_message undef: Concatenation
27######################################################################
28Log::Log4perl->init( \ <<EOT );
29    log4perl.rootLogger=DEBUG, A1
30    log4perl.appender.A1=Log::Log4perl::Appender::TestBuffer
31    log4perl.appender.A1.layout=PatternLayout
32    log4perl.appender.A1.layout.ConversionPattern=%m%n
33EOT
34
35my $app = Log::Log4perl::Appender::TestBuffer->by_name("A1");
36my $logger = Log::Log4perl->get_logger("");
37$logger->debug("Chunk1", "Chunk2", "Chunk3");
38
39is($app->buffer(), "Chunk1Chunk2Chunk3\n", "warp_message undef"); 
40
41######################################################################
42# warp_message undef: Concatenation plus JOIN_MSG_ARRAY_CHAR
43######################################################################
44Log::Log4perl->init( \ <<EOT );
45    log4perl.rootLogger=DEBUG, A1
46    log4perl.appender.A1=Log::Log4perl::Appender::TestBuffer
47    log4perl.appender.A1.layout=PatternLayout
48    log4perl.appender.A1.layout.ConversionPattern=%m%n
49EOT
50
51$Log::Log4perl::JOIN_MSG_ARRAY_CHAR = "bang!";
52
53$app = Log::Log4perl::Appender::TestBuffer->by_name("A1");
54$logger = Log::Log4perl->get_logger("");
55$logger->debug("Chunk1", "Chunk2", "Chunk3");
56
57is($app->buffer(), "Chunk1bang!Chunk2bang!Chunk3\n", 
58   "warp_message undef (JOIN_MSG_ARRAY_CHAR)"); 
59
60$Log::Log4perl::JOIN_MSG_ARRAY_CHAR = ""; # back to default
61
62######################################################################
63# warp_message 0
64######################################################################
65Log::Log4perl->init( \ <<EOT );
66    log4perl.rootLogger=DEBUG, A1
67    log4perl.appender.A1=Log::Log4perl::Appender::TestArrayBuffer
68    log4perl.appender.A1.layout=NoopLayout
69    log4perl.appender.A1.warp_message=0
70EOT
71
72$app = Log::Log4perl::Appender::TestArrayBuffer->by_name("A1");
73$logger = Log::Log4perl->get_logger("");
74$logger->debug("Chunk1", "Chunk2", "Chunk3");
75
76is($app->buffer(), "[Chunk1,Chunk2,Chunk3]", 
77   "warp_message 0 (NoopLayout)"); 
78
79######################################################################
80# warp_message = code ref
81######################################################################
82Log::Log4perl->init( \ <<'EOT' );
83    log4perl.rootLogger=DEBUG, A1
84    log4perl.appender.A1=Log::Log4perl::Appender::TestArrayBuffer
85    log4perl.appender.A1.layout=NoopLayout
86    log4perl.appender.A1.warp_message = sub { $#_ = 2 if @_ > 3; \
87                                           return @_; }
88EOT
89
90$app = Log::Log4perl::Appender::TestArrayBuffer->by_name("A1");
91$logger = Log::Log4perl->get_logger("");
92$logger->debug("Chunk1", "Chunk2", "Chunk3", "Chunk4");
93
94is($app->buffer(), "[Chunk1,Chunk2,Chunk3]", 
95   "warp_message = function (by cref)");
96
97
98######################################################################
99# warp_message = function
100######################################################################
101my $COUNTER = 0;
102sub warp_my_message {
103    my @chunks = @_;
104    unshift @chunks, ++$COUNTER;
105    return @chunks;
106}
107
108Log::Log4perl->init( \ <<'EOT' );
109    log4perl.rootLogger=DEBUG, A1
110    log4perl.appender.A1=Log::Log4perl::Appender::TestArrayBuffer
111    log4perl.appender.A1.layout=NoopLayout
112    log4perl.appender.A1.warp_message = main::warp_my_message
113EOT
114
115$app = Log::Log4perl::Appender::TestArrayBuffer->by_name("A1");
116$logger = Log::Log4perl->get_logger("");
117$logger->debug("Chunk1", "Chunk2", "Chunk3");
118
119is($app->buffer(), "[1,Chunk1,Chunk2,Chunk3]", 
120   "warp_message = function (by name)");
121