summaryrefslogtreecommitdiff
path: root/t/metaclasses/meta_name.t
diff options
context:
space:
mode:
Diffstat (limited to 't/metaclasses/meta_name.t')
-rw-r--r--t/metaclasses/meta_name.t73
1 files changed, 73 insertions, 0 deletions
diff --git a/t/metaclasses/meta_name.t b/t/metaclasses/meta_name.t
new file mode 100644
index 0000000..d947a18
--- /dev/null
+++ b/t/metaclasses/meta_name.t
@@ -0,0 +1,73 @@
+use strict;
+use warnings;
+use Test::More;
+
+{
+ # so we don't pick up stuff from Moose::Object
+ package Base;
+ sub foo { } # touch it so that 'extends' doesn't try to load it
+}
+
+{
+ package Foo;
+ use Moose;
+ extends 'Base';
+ no Moose;
+}
+can_ok('Foo', 'meta');
+is(Foo->meta, Class::MOP::class_of('Foo'), 'Foo is a class_of Foo, via Foo->meta');
+isa_ok(Foo->meta->get_method('meta'), 'Moose::Meta::Method::Meta');
+
+{
+ package Bar;
+ use Moose -meta_name => 'bar_meta';
+ extends 'Base';
+ no Moose;
+}
+ok(!Bar->can('meta'), q{Bar->cant('meta')});
+can_ok('Bar', 'bar_meta');
+is(Bar->bar_meta, Class::MOP::class_of('Bar'), 'Bar is a class_of Bar, via Bar->bar_meta');
+isa_ok(Bar->bar_meta->get_method('bar_meta'), 'Moose::Meta::Method::Meta');
+
+{
+ package Baz;
+ use Moose -meta_name => undef;
+ extends 'Base';
+ no Moose;
+}
+ok(!Baz->can('meta'), q{Baz->cant('meta')});
+
+my $universal_method_count = scalar Class::MOP::class_of('UNIVERSAL')->get_all_methods;
+# 1 because of the dummy method we installed in Base
+is(
+ ( scalar Class::MOP::class_of('Baz')->get_all_methods ) - $universal_method_count,
+ 1,
+ 'Baz has one method',
+);
+
+{
+ package Qux;
+ use Moose -meta_name => 'qux_meta';
+}
+
+can_ok('Qux', 'qux_meta');
+is(Qux->qux_meta, Class::MOP::class_of('Qux'), 'Qux is a class_of Qux, via Qux->qux_meta');
+isa_ok(Qux->qux_meta->get_method('qux_meta'), 'Moose::Meta::Method::Meta');
+
+{
+ package FooBar;
+ sub meta { 42 }
+ use Moose -meta_name => 'foo_bar_meta';
+}
+
+is(FooBar->meta, 42, 'FooBar->meta returns 42, not metaclass object');
+
+{
+ package FooBar::Child;
+ use Moose -meta_name => 'foo_bar_child_meta';
+ extends 'FooBar';
+}
+
+is(FooBar::Child->meta, 42, 'FooBar::Child->meta returns 42, not metaclass object');
+
+done_testing;