--- /dev/null
+use strict;
+use warnings;
+{
+ package My::Role;
+ use Moose::Role;
+}
+{
+ package SomeClass;
+ use Moose -traits => 'My::Role';
+}
+{
+ package SubClassUseBase;
+ use base qw/SomeClass/;
+}
+{
+ package SubSubClassUseBase;
+ use base qw/SubClassUseBase/;
+}
+
+use Test::More tests => 2;
+use Moose::Util qw/find_meta does_role/;
+
+my $subsubclass_meta = Moose->init_meta( for_class => 'SubSubClassUseBase' );
+ok does_role($subsubclass_meta, 'My::Role'),
+ 'SubSubClass metaclass does role from grandparent metaclass';
+my $subclass_meta = find_meta('SubClassUseBase');
+ok does_role($subclass_meta, 'My::Role'),
+ 'SubClass metaclass does role from parent metaclass';
+
--- /dev/null
+use strict;
+use warnings;
+{
+ package ParentClass;
+ use Moose;
+}
+{
+ package SomeClass;
+ use base 'ParentClass';
+}
+{
+ package SubClassUseBase;
+ use base qw/SomeClass/;
+ use Moose;
+}
+
+use Test::More tests => 1;
+use Test::Exception;
+
+lives_ok {
+ Moose->init_meta(for_class => 'SomeClass');
+} 'Moose class => use base => Moose Class, then Moose->init_meta on middle class ok';
+
--- /dev/null
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+{
+ package My::Role;
+ use Moose::Role;
+}
+{
+ package SomeClass;
+ use Moose -traits => 'My::Role';
+}
+{
+ package SubClassUseBase;
+ use base qw/SomeClass/;
+}
+{
+ package SubSubClassUseBase;
+ use Moose;
+ use Test::Exception;
+ lives_ok {
+ extends 'SubClassUseBase';
+ } 'Can extend non-moose class whos parent class is a Moose class with a meta role';
+}
+