5 use Test::More tests => 7;
7 # Goal of these tests: confirm that Sub::Uplevel will honor (use) a
8 # CORE::GLOBAL::caller that occurs after Sub::Uplevel is loaded
10 #--------------------------------------------------------------------------#
11 # define a custom caller function that reverses the package name
12 #--------------------------------------------------------------------------#
14 sub _reverse_caller(;$) {
16 my @caller = CORE::caller(++$height);
17 $caller[0] = reverse $caller[0];
18 if( wantarray and !@_ ) {
29 #--------------------------------------------------------------------------#
30 # load Sub::Uplevel then redefine CORE::GLOBAL::caller
31 #--------------------------------------------------------------------------#
34 ok( ! defined *CORE::GLOBAL::caller{CODE},
35 "no global override yet"
38 use_ok('Sub::Uplevel');
40 is( *CORE::GLOBAL::caller{CODE}, \&Sub::Uplevel::_normal_caller,
41 "Sub::Uplevel's normal caller override in place"
44 # old style no warnings 'redefine'
48 *CORE::GLOBAL::caller = \&_reverse_caller;
53 is( *CORE::GLOBAL::caller{CODE}, \&_reverse_caller,
54 "added new, custom caller override"
57 #--------------------------------------------------------------------------#
58 # define subs *after* caller has been redefined in BEGIN
59 #--------------------------------------------------------------------------#
61 sub test_caller { return scalar caller }
63 sub uplevel_caller { return uplevel 1, \&test_caller }
65 sub test_caller_w_uplevel { return uplevel_caller }
67 #--------------------------------------------------------------------------#
68 # Test for reversed package name both inside and outside an uplevel call
69 #--------------------------------------------------------------------------#
71 is( scalar caller(), '',
72 "caller from main package is empty string"
75 is( test_caller(), reverse("main"),
76 "caller from subroutine calls custom routine"
79 is( test_caller_w_uplevel(), reverse("main"),
80 "caller from uplevel subroutine calls custom routine"