The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
use Test::Stream::Util qw/get_tid/;
use Carp qw/confess/;
accessors => [qw/frame todo skip detail pid tid parent_todo/],
);
sub init {
confess "Frame is required"
unless $_[0]->{+FRAME};
$_[0]->{+PID} ||= $$;
$_[0]->{+TID} ||= get_tid();
}
sub snapshot { bless {%{$_[0]}}, __PACKAGE__ };
sub trace {
my $self = shift;
return $self->{+DETAIL} if $self->{+DETAIL};
my ($pkg, $file, $line) = $self->call;
return "at $file line $line";
}
sub alert {
my $self = shift;
my ($msg) = @_;
warn $msg . ' ' . $self->trace . ".\n";
}
sub throw {
my $self = shift;
my ($msg) = @_;
die $msg . ' ' . $self->trace . ".\n";
}
sub call { @{$_[0]->{+FRAME}} }
sub package { $_[0]->{+FRAME}->[0] }
sub file { $_[0]->{+FRAME}->[1] }
sub line { $_[0]->{+FRAME}->[2] }
sub subname { $_[0]->{+FRAME}->[3] }
sub no_diag {
my $self = shift;
return defined($self->{+TODO})
|| defined($self->{+SKIP})
|| defined($self->{+PARENT_TODO});
}
sub no_fail {
my $self = shift;
return defined($self->{+TODO})
|| defined($self->{+SKIP});
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Test::Stream::DebugInfo - Debug information for events
=head1 DEPRECATED
B<This distribution is deprecated> in favor of L<Test2>, L<Test2::Suite>, and
L<Test2::Workflow>.
See L<Test::Stream::Manual::ToTest2> for a conversion guide.
=head1 DESCRIPTION
All events need to have access to information about where they were created, as
well as if they are todo, or part of a skipped test. This object represents
that information.
=head1 SYNOPSIS
use Test::Stream::DebugInfo;
my $dbg = Test::Stream::DebugInfo->new(
frame => [$package, $file, $line, $subname],
);
=head1 METHODS
=over 4
=item $dbg->set_todo($reason)
=item $reason = $dbg->todo
Get/Set/Unset todo for the current debug-info.
=item $dbg->set_skip($reason)
=item $reason = $dbg->skip
Get/Set/Unset skip for the current debug-info.
=item $dbg->set_detail($msg)
=item $msg = $dbg->detail
Used to get/set a custom trace message that will be used INSTEAD of
C<< at <FILE> line <LINE> >> when calling C<< $dbg->trace >>.
=item $dbg->trace
Typically returns the string C<< at <FILE> line <LINE> >>. If C<detail> is set
then its value wil be returned instead.
=item $dbg->alert($MESSAGE)
This issues a warning at the frame (filename and line number where
errors should be reported).
=item $dbg->throw($MESSAGE)
This throws an exception at the frame (filename and line number where
errors should be reported).
=item $frame = $dbg->frame()
Get the call frame arrayref.
=item ($package, $file, $line, $subname) = $dbg->call()
Get the caller details for the debug-info. This is where errors should be
reported.
=item $pkg = $dbg->package
Get the debug-info package.
=item $file = $dbg->file
Get the debug-info filename.
=item $line = $dbg->line
Get the debug-info line number.
=item $subname = $dbg->subname
Get the debug-info subroutine name.
=back
=head1 SOURCE
The source code repository for Test::Stream can be found at
=head1 MAINTAINERS
=over 4
=item Chad Granum E<lt>exodist@cpan.orgE<gt>
=back
=head1 AUTHORS
=over 4
=item Chad Granum E<lt>exodist@cpan.orgE<gt>
=back
=head1 COPYRIGHT
Copyright 2015 Chad Granum E<lt>exodist7@gmail.comE<gt>.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut