> If it's a one-off, though, you could try the following (untested):
>
> {
> my $ok = \&Test::Builder::ok;
> no warnings 'redefined';
> *Test::Builder::ok = sub {
> my ( $package, $filename, $line ) = caller;
> $_[0]->diag("ok() called in $package, $filename at line $line");
> goto $ok;
> };
> }
I've been using something very similar for quite a while, which not only allows
printing of line numbers (invaluable to me for reasons similar to the original
caller), but allows bailing out after a specified number of failures, e.g.:
no warnings;
sub is_deeply {
t($_[2],$_[3] || (caller)[2]);
return if Test::More::is_deeply($_[0],$_[1],$testmsg);
if ($bail_on_error > $total_errors++) {
my $line = (caller)[2];
my $time = time;
Test::More::diag("GOT: ".Dumper $_[0]);
Test::More::diag("EXPECTED: ".Dumper $_[1]);
Test::More::BAIL_OUT "Stopping on a failed 'is_deeply' test from
line $line. Time: $time";
}
} ## end of is_deeply
(The t() function provides some time measurements and formats the $testmsg to
provide things like line numbers. caller is used twice because there are times
when I want to pass in a line number to is_deeply directly.)
--
Greg Sabino Mullane [email protected]
End Point Corporation
PGP Key: 0x14964AC8
signature.asc
Description: OpenPGP digital signature
