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