1#!perl -T 2 3use strict; 4use warnings; 5use lib 't'; 6 7use Test::More; 8 9eval " use YAML "; 10plan skip_all => "YAML is not installed." if $@; 11plan 'no_plan'; 12 13use MyClass; 14for my $plugin (qw/ AliasMethod AliasMethod2 /) { 15 my $obj = MyClass->new({ load_plugins => [$plugin] }); 16 is $obj->call('bar'), 'baz'; 17 18 MyClass->load_components(qw/ Autocall::InjectMethod /); 19 my $obj2 = MyClass->new({ load_plugins => [$plugin] }); 20 is $obj2->bar, 'baz'; 21 clear_isa(); 22 { no strict 'refs'; delete ${'MyClass::'}{bar}; } 23 24 MyClass->load_components(qw/ Autocall::SingletonMethod /); 25 my $obj3 = MyClass->new({ load_plugins => [$plugin] }); 26 is $obj3->bar, 'baz'; 27 clear_isa(); 28 { no strict 'refs'; delete ${'MyClass::_Singletons::0::'}{bar}; } 29 30 MyClass->load_components(qw/ Autocall::Autoload /); 31 my $obj4 = MyClass->new({ load_plugins => [$plugin] }); 32 is $obj4->bar, 'baz'; 33 clear_isa(); 34} 35 36sub clear_isa { 37 @MyClass::ISA = ('Class::Component'); 38 for my $key (keys %{ Class::Component::Implement->default_components } ) { 39 delete Class::Component::Implement->default_components->{$key}; 40 } 41} 42 43