1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#!perl
use strict;
use warnings;
use Test::More tests => 2;
my $proxy_called;
my $parent_called;
package Parent;
sub call_me
{
$parent_called++;
}
package Proxied;
@Proxied::ISA = 'Parent';
sub new { bless {}, shift }
package Proxy;
use SUPER;
use Scalar::Util 'blessed';
sub __get_parents
{
my $self = shift;
my $proxied = $$self;
return do { no strict 'refs'; @{ blessed( $proxied ) . '::ISA' } };
}
sub new
{
my ($class, $proxied) = @_;
bless \$proxied, $class;
}
sub call_me
{
my $self = shift;
$proxy_called++;
return $self->SUPER();
}
package main;
my $proxied = Proxied->new();
my $proxy = Proxy->new( $proxied );
$proxy->call_me();
ok( $proxy_called, 'Proxy should get called' );
ok( $parent_called, '... and SUPER should find parent' );
|