05_honor_prior_override.t [plain text]
use lib qw(t/lib);
use strict;
use Test::More tests => 10;
my $caller_counter = 0;
sub _count_caller(;$) {
$caller_counter++;
my $height = $_[0];
my @caller = CORE::caller(++$height);
if( wantarray and !@_ ) {
return @caller[0..2];
}
elsif (wantarray) {
return @caller;
}
else {
return $caller[0];
}
}
BEGIN {
ok( ! defined *CORE::GLOBAL::caller{CODE},
"no global override yet"
);
{
my $old_W = $^W;
$^W = 0;
*CORE::GLOBAL::caller = \&_count_caller;
$^W = $old_W;
}
is( *CORE::GLOBAL::caller{CODE}, \&_count_caller,
"added custom caller override"
);
use_ok('Sub::Uplevel');
is( *CORE::GLOBAL::caller{CODE}, \&_count_caller,
"custom caller override still in place"
);
}
sub test_caller { return scalar caller }
sub uplevel_caller { return uplevel 1, \&test_caller }
sub test_caller_w_uplevel { return uplevel_caller }
my $old_caller_counter;
$old_caller_counter = $caller_counter;
is( scalar caller(), undef,
"caller from main package is undef"
);
ok( $caller_counter > $old_caller_counter, "custom caller() was used" );
$old_caller_counter = $caller_counter;
is( test_caller(), "main",
"caller from subroutine is main"
);
ok( $caller_counter > $old_caller_counter, "custom caller() was used" );
$old_caller_counter = $caller_counter;
is( test_caller_w_uplevel(), "main",
"caller from uplevel subroutine is main"
);
ok( $caller_counter > $old_caller_counter, "custom caller() was used" );