use strict;
use warnings;
-use Test::More tests => 6;
+use Test::More tests => 10;
-use Mouse ();
+{
+ package OtherClass;
+ sub method {}
-can_ok('Mouse::Meta::Class', 'meta');
-can_ok('Mouse::Meta::Role', 'meta');
+ package Class;
+ use Mouse;
-my $meta = Mouse::Meta::Class->meta;
-can_ok($meta->constructor_class, 'meta');
-can_ok($meta->destructor_class, 'meta');
-can_ok($meta->attribute_metaclass, 'meta');
+ # this attribute definition is intended to load submodules
-can_ok($meta->get_method('is_anon_class'), 'meta');
+ has foo => (
+ is => 'rw',
+ isa => 'OtherClass',
+ handles => qr/./,
+ );
+ __PACKAGE__->meta->make_immutable; # ensure metaclasses loaded
+
+ package Role;
+ use Mouse::Role;
+
+ sub bar {}
+}
+
+{
+ my $metaclass = Class->meta;
+
+ can_ok($metaclass, 'meta');
+
+ can_ok($metaclass->constructor_class, 'meta');
+ can_ok($metaclass->destructor_class, 'meta');
+ can_ok($metaclass->attribute_metaclass, 'meta');
+
+ can_ok($metaclass->get_method('foo'), 'meta');
+ can_ok($metaclass->get_attribute('foo'), 'meta');
+ can_ok($metaclass->get_attribute('foo')->accessor_metaclass, 'meta');
+ can_ok($metaclass->get_attribute('foo')->delegation_metaclass, 'meta');
+}
+
+{
+ my $metarole = Class->meta;
+
+ can_ok($metarole, 'meta');
+
+ can_ok($metarole->get_method('foo'), 'meta');
+}