--- /dev/null
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 4;
+use Test::Exception;
+
+my @calls;
+my ($before, $after, $around);
+
+do {
+ package Role;
+ use Mouse::Role;
+
+ $before = sub {
+ push @calls, 'Role::foo:before';
+ };
+ before foo => $before;
+
+ $after = sub {
+ push @calls, 'Role::foo:after';
+ };
+ after foo => $after;
+
+ $around = sub {
+ my $orig = shift;
+ push @calls, 'Role::foo:around_before';
+ $orig->(@_);
+ push @calls, 'Role::foo:around_after';
+ };
+ around foo => $around;
+
+ no Mouse::Role;
+};
+
+is_deeply([Role->meta->get_before_method_modifiers('foo')], [$before]);
+is_deeply([Role->meta->get_after_method_modifiers('foo')], [$after]);
+is_deeply([Role->meta->get_around_method_modifiers('foo')], [$around]);
+
+do {
+ package Class;
+ use Mouse;
+ with 'Role';
+
+ sub foo {
+ push @calls, 'Class::foo';
+ }
+
+ no Mouse;
+};
+
+Class->foo;
+is_deeply([splice @calls], [
+ 'Role::foo:before',
+ 'Role::foo:around_before',
+ 'Class::foo',
+ 'Role::foo:around_after',
+ 'Role::foo:after',
+]);
+