1########################################### 2# Tests for Log4perl::DateFormat 3# Mike Schilli, 2002 (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 Test::More; 17 18BEGIN { plan tests => 36 } 19 20use Log::Log4perl qw(get_logger); 21use Log::Log4perl::DateFormat; 22use Log::Log4perl::Appender::TestBuffer; 23 24$Log::Log4perl::DateFormat::GMTIME = 1; 25 26my $GMTIME = 1030429942 - 7*3600; 27 28########################################### 29# Year 30########################################### 31my $formatter = Log::Log4perl::DateFormat->new("yyyy yy yyyy"); 32is($formatter->format($GMTIME), "2002 02 2002"); 33 34########################################### 35# Month 36########################################### 37$formatter = Log::Log4perl::DateFormat->new("MM M MMMM yyyy"); 38is($formatter->format($GMTIME), "08 8 August 2002"); 39 40########################################### 41# Month 42########################################### 43$formatter = Log::Log4perl::DateFormat->new("MMM yyyy"); 44is($formatter->format($GMTIME), "Aug 2002"); 45 46########################################### 47# Day-of-Month 48########################################### 49$formatter = Log::Log4perl::DateFormat->new("d ddd dd dddd yyyy"); 50is($formatter->format($GMTIME), "26 026 26 0026 2002"); 51 52########################################### 53# am/pm Hour 54########################################### 55$formatter = Log::Log4perl::DateFormat->new("h hh hhh hhhh"); 56is($formatter->format($GMTIME), "11 11 011 0011"); 57 58########################################### 59# 24 Hour 60########################################### 61$formatter = Log::Log4perl::DateFormat->new("H HH HHH HHHH"); 62is($formatter->format($GMTIME), "23 23 023 0023"); 63 64########################################### 65# Minute 66########################################### 67$formatter = Log::Log4perl::DateFormat->new("m mm mmm mmmm"); 68is($formatter->format($GMTIME), "32 32 032 0032"); 69 70########################################### 71# Second 72########################################### 73$formatter = Log::Log4perl::DateFormat->new("s ss sss ssss"); 74is($formatter->format($GMTIME), "22 22 022 0022"); 75 76########################################### 77# Day of Week 78########################################### 79$formatter = Log::Log4perl::DateFormat->new("E EE EEE EEEE"); 80is($formatter->format($GMTIME), "Mon Mon Mon Monday"); 81is($formatter->format($GMTIME+24*60*60*1), "Tue Tue Tue Tuesday"); 82is($formatter->format($GMTIME+24*60*60*2), "Wed Wed Wed Wednesday"); 83is($formatter->format($GMTIME+24*60*60*3), "Thu Thu Thu Thursday"); 84is($formatter->format($GMTIME+24*60*60*4), "Fri Fri Fri Friday"); 85is($formatter->format($GMTIME+24*60*60*5), "Sat Sat Sat Saturday"); 86is($formatter->format($GMTIME+24*60*60*6), "Sun Sun Sun Sunday"); 87 88########################################### 89# Day of Year 90########################################### 91$formatter = Log::Log4perl::DateFormat->new("D DD DDD DDDD"); 92is($formatter->format($GMTIME), "238 238 238 0238"); 93 94########################################### 95# AM/PM 96########################################### 97$formatter = Log::Log4perl::DateFormat->new("a aa"); 98is($formatter->format($GMTIME), "PM PM"); 99 100########################################### 101# Milliseconds 102########################################### 103$formatter = Log::Log4perl::DateFormat->new("S SS SSS SSSS SSSSS SSSSSS"); 104is($formatter->format($GMTIME, 123456), "1 12 123 1234 12345 123456"); 105 106########################################### 107# Predefined formats 108########################################### 109$formatter = Log::Log4perl::DateFormat->new("DATE"); 110is($formatter->format($GMTIME, 123456), "26 Aug 2002 23:32:22,123"); 111 112$formatter = Log::Log4perl::DateFormat->new("ISO8601"); 113is($formatter->format($GMTIME, 123456), "2002-08-26 23:32:22,123"); 114 115$formatter = Log::Log4perl::DateFormat->new("ABSOLUTE"); 116is($formatter->format($GMTIME, 123456), "23:32:22,123"); 117 118$formatter = Log::Log4perl::DateFormat->new("APACHE"); 119is($formatter->format($GMTIME, 123456), "[Mon Aug 26 23:32:22 2002]"); 120 121########################################### 122# Unknown 123########################################### 124$formatter = Log::Log4perl::DateFormat->new("xx K"); 125is($formatter->format($GMTIME), "xx -- 'K' not (yet) implemented --"); 126 127########################################### 128# DDD bugfix 129########################################### 130$formatter = Log::Log4perl::DateFormat->new("DDD"); 131 # 1/1/2006 132is($formatter->format(1136106000), "001"); 133$formatter = Log::Log4perl::DateFormat->new("D"); 134 # 1/1/2006 135is($formatter->format(1136106000), "1"); 136 137########################################### 138# In conjunction with Log4perl 139########################################### 140my $conf = q( 141log4perl.category.Bar.Twix = WARN, Buffer 142log4perl.appender.Buffer = Log::Log4perl::Appender::TestBuffer 143log4perl.appender.Buffer.layout = \ 144 Log::Log4perl::Layout::PatternLayout 145log4perl.appender.Buffer.layout.ConversionPattern = %d{HH:mm:ss} %p %m %n 146); 147 148Log::Log4perl::init(\$conf); 149 150my $logger = get_logger("Bar::Twix"); 151$logger->error("Blah"); 152 153like(Log::Log4perl::Appender::TestBuffer->by_name("Buffer")->buffer(), 154 qr/\d\d:\d\d:\d\d ERROR Blah/); 155 156########################################### 157# Allowing literal text in L4p >= 1.19 158########################################### 159my @tests = ( 160 q!yyyy-MM-dd'T'HH:mm:ss.SSS'Z'! => q!%04d-%02d-%02dT%02d:%02d:%02d.%sZ!, 161 q!yyyy-MM-dd''HH:mm:ss.SSS''! => q!%04d-%02d-%02d%02d:%02d:%02d.%s!, 162 q!yyyy-MM-dd''''HH:mm:ss.SSS! => q!%04d-%02d-%02d'%02d:%02d:%02d.%s!, 163 q!yyyy-MM-dd''''''HH:mm:ss.SSS! => q!%04d-%02d-%02d''%02d:%02d:%02d.%s!, 164 q!yyyy-MM-dd,HH:mm:ss.SSS! => q!%04d-%02d-%02d,%02d:%02d:%02d.%s!, 165 q!HH:mm:ss,SSS! => q!%02d:%02d:%02d,%s!, 166 q!dd MMM yyyy HH:mm:ss,SSS! => q!%02d %.3s %04d %02d:%02d:%02d,%s!, 167 q!hh 'o''clock' a! => q!%02d o'clock %1s!, 168 q!hh 'o'clock' a! => q!(undef)!, 169 q!yyyy-MM-dd 'at' HH:mm:ss! => q!%04d-%02d-%02d at %02d:%02d:%02d!, 170); 171 172#' calm down up vim syntax highlighting 173 174while ( my ( $src, $expected ) = splice @tests, 0, 2 ) { 175 my $df = eval { Log::Log4perl::DateFormat->new( $src ) }; 176 my $err = ''; 177 if ( $@ ) 178 { 179 chomp $@; 180 $err = "(error: $@)"; 181 } 182 my $got = $df->{fmt} || '(undef)'; 183 is($got, $expected, "literal $src"); 184} 185