Algorithm-C3

 view release on metacpan or  search on metacpan

t/001_merge.t  view on Meta::CPAN

use warnings;

use Test::More tests => 4;

use Algorithm::C3;

{
    package My::A;
    package My::C;
    our @ISA = ('My::A');
    package My::B;
    our @ISA = ('My::A');
    package My::D;
    our @ISA = ('My::B', 'My::C');
}

{
    my @merged = Algorithm::C3::merge(
        'My::D',
        sub {
            no strict 'refs';
            @{$_[0] . '::ISA'};
        }
    );

    is_deeply(
        \@merged,
        [ qw/My::D My::B My::C My::A/ ],
        '... merged the lists correctly');
}

{
    package My::E;

    sub supers {
        no strict 'refs';
        @{$_[0] . '::ISA'};
    }

    package My::F;
    our @ISA = ('My::E');
    package My::G;
    our @ISA = ('My::E');
    package My::H;
    our @ISA = ('My::G', 'My::F');
    sub method_exists_only_in_H { @ISA }
}

{
    my @merged = Algorithm::C3::merge('My::H', 'supers');

    is_deeply(
        \@merged,
        [ qw/My::H My::G My::F My::E/ ],
        '... merged the lists correctly');
}

eval {
    Algorithm::C3::merge(
        'My::H',
        'this_method_does_not_exist'
    );
};
ok($@, '... this died as we expected');

eval {
    Algorithm::C3::merge(
        'My::H',
        'method_exists_only_in_H'
    );
};
ok($@, '... this died as we expected');



( run in 0.773 second using v1.01-cache-2.11-cpan-df04353d9ac )