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 <https://ptfs-europe.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Martin Renvoize 2025-01-03 14:39:29 +00:00 committed by Katrin Fischer
parent cc0aa072dd
commit 17b2b4cd6e
No known key found for this signature in database
GPG Key ID: 0EF6E2C03357A834
1 changed files with 35 additions and 8 deletions

View File

@ -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 );
}