Modified source files and compiled any and armel versions of packages
[pkg-perl] / deb-src / libsub-uplevel-perl / libsub-uplevel-perl-0.1901 / t / 05_honor_prior_override.t
1 #!/usr/bin/perl -Tw
2
3 use lib qw(t/lib);
4 use strict;
5 use Test::More tests => 7;
6
7 # Goal of these tests: confirm that Sub::Uplevel will honor (use) a
8 # CORE::GLOBAL::caller override that occurs prior to Sub::Uplevel loading
9
10 #--------------------------------------------------------------------------#
11 # define a custom caller function that reverses the package name
12 #--------------------------------------------------------------------------#
13
14 sub _reverse_caller(;$) { 
15     my $height = $_[0];
16     my @caller = CORE::caller(++$height);
17     $caller[0] = reverse $caller[0];
18     if( wantarray and !@_ ) {
19         return @caller[0..2];
20     }
21     elsif (wantarray) {
22         return @caller;
23     }
24     else {
25         return $caller[0];
26     }
27 }
28
29 #--------------------------------------------------------------------------#
30 # redefine CORE::GLOBAL::caller then load Sub::Uplevel 
31 #--------------------------------------------------------------------------#
32
33 BEGIN {
34     ok( ! defined *CORE::GLOBAL::caller{CODE}, 
35         "no global override yet" 
36     );
37
38     {
39         # old style no warnings 'redefine'
40         my $old_W = $^W;
41         $^W = 0;
42         *CORE::GLOBAL::caller = \&_reverse_caller;
43         $^W = $old_W;
44     }
45
46     is( *CORE::GLOBAL::caller{CODE}, \&_reverse_caller,
47         "added custom caller override"
48     );
49
50     use_ok('Sub::Uplevel');
51
52     is( *CORE::GLOBAL::caller{CODE}, \&_reverse_caller,
53         "custom caller override still in place"
54     );
55
56
57 }
58
59 #--------------------------------------------------------------------------#
60 # define subs *after* caller has been redefined in BEGIN
61 #--------------------------------------------------------------------------#
62
63 sub test_caller { return scalar caller }
64
65 sub uplevel_caller { return uplevel 1, \&test_caller }
66
67 sub test_caller_w_uplevel { return uplevel_caller }
68
69 #--------------------------------------------------------------------------#
70 # Test for reversed package name both inside and outside an uplevel call
71 #--------------------------------------------------------------------------#
72
73 is( scalar caller(), '',
74     "caller from main package is empty string"
75 );
76
77 is( test_caller(), reverse("main"),
78     "caller from subroutine calls custom routine"
79 );
80
81 is( test_caller_w_uplevel(), reverse("main"),
82     "caller from uplevel subroutine calls custom routine"
83 );
84