From ba4b2eea749aa6f9015058ed6b30ae9251d7007c Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 3 Jan 2025 14:39:29 +0000 Subject: [PATCH] Bug 38818: Add diag option to t::lib::Mocks::Logger This patch adds a diag method to the Mocks::Logger object. This aids in debugging logging errors by simply outputting all log lines to screen in a diag statement. Sponsored-by: PTFS Europe Signed-off-by: Kyle M Hall --- t/lib/Mocks/Logger.pm | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/t/lib/Mocks/Logger.pm b/t/lib/Mocks/Logger.pm index edbfab93258..c5135d92016 100644 --- a/t/lib/Mocks/Logger.pm +++ b/t/lib/Mocks/Logger.pm @@ -72,8 +72,9 @@ sub new { $mocked_logger->mock( $level, sub { - my $message = $_[1]; - push @{ $self->{$level} }, $message; + my $message = $_[1]; + my @caller_info = caller(2); + push @{ $self->{$level} }, { message => $message, caller => \@caller_info }; return $message; } ); @@ -82,6 +83,32 @@ sub new { return $self; } +=head3 diag + + $logger->diag(); + +Method to output all received logs. + +=cut + +sub diag { + my ($self) = @_; + my $tb = $CLASS->builder; + + foreach my $level ( levels() ) { + $tb->diag("$level:"); + if ( @{ $self->{$level} } ) { + foreach my $log_entry ( @{ $self->{$level} } ) { + my ( $package, $filename, $line ) = @{ $log_entry->{caller} }; + $tb->diag( " \"" . $log_entry->{message} . "\" at $filename line $line" ); + } + } else { + $tb->diag(" (No $level messages)"); + } + } + return; +} + =head3 debug_is $logger->debug_is($expected); @@ -311,9 +338,9 @@ sub generic_is { local $Test::Builder::Level = $Test::Builder::Level + 1; - my $string = shift @{ $self->{$level} }; - $string //= ''; - my $tb = $CLASS->builder; + my $log = shift @{ $self->{$level} }; + my $string = defined($log) ? $log->{message} : ''; + my $tb = $CLASS->builder; return $tb->is_eq( $string, $expect, $name ); } @@ -328,9 +355,9 @@ sub generic_like { local $Test::Builder::Level = $Test::Builder::Level + 1; - my $string = shift @{ $self->{$level} }; - $string //= ''; - my $tb = $CLASS->builder; + my $log = shift @{ $self->{$level} }; + my $string = defined($log) ? $log->{message} : ''; + my $tb = $CLASS->builder; return $tb->like( $string, $expect, $name ); } -- 2.48.1