The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 9;

use FindBin;
use lib "$FindBin::Bin/lib";

use Moose::Util qw/does_role/;

BEGIN { use_ok 'SubClass'; }
BEGIN { use_ok 'SubClassUseBaseAndUseMoose'; }

my $meta = SubClass->meta;
my $meta2 = SubClassUseBaseAndUseMoose->meta;

ok( does_role(
        BaseClass->meta->method_metaclass
        => 'MooseX::MethodAttributes::Role::Meta::Method'
    ) => 'BaseClass does method meta role'
);
ok( does_role(
        $meta->method_metaclass
        => 'MooseX::MethodAttributes::Role::Meta::Method'
    ) => 'SubClass does method meta role'
);
ok( does_role(
        $meta2->method_metaclass
        => 'MooseX::MethodAttributes::Role::Meta::Method'
    ) => 'SubClassUseBaseAndUseMoose does method meta role'
);

is_deeply(
    $meta2->get_method('bar')->attributes,
    ['Bar'],
);

is_deeply(
    $meta->get_method('bar')->attributes,
    ['Bar'],
);

is_deeply(
    $meta->find_method_by_name('foo')->attributes,
    ['Foo'],
);

is_deeply(
    [map { [$_->name => $_->attributes] } SubClass->meta->get_all_methods_with_attributes],
    [['affe', ['Birne']],
     ['foo', ['Foo']],
     ['moo', ['Moo']],
     ['bar', ['Bar']]],
);