foo
[gitmo/Moose.git] / t / 036_attribute_custom_metaclass.t
CommitLineData
b0ea39ef 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
590868a3 6use Test::More tests => 11;
b0ea39ef 7use Test::Exception;
8
9BEGIN {
10 use_ok('Moose');
11}
12
590868a3 13{
b0ea39ef 14 package Foo::Meta::Attribute;
d500266f 15 use Moose;
b0ea39ef 16
d500266f 17 extends 'Moose::Meta::Attribute';
b0ea39ef 18
d500266f 19 around 'new' => sub {
20 my $next = shift;
21 my $self = shift;
22 my $name = shift;
23 $next->($self, $name, (is => 'rw', isa => 'Foo'), @_);
24 };
b0ea39ef 25
26 package Foo;
b0ea39ef 27 use Moose;
28
29 has 'foo' => (metaclass => 'Foo::Meta::Attribute');
30}
31
32my $foo = Foo->new;
33isa_ok($foo, 'Foo');
34
35my $foo_attr = Foo->meta->get_attribute('foo');
36isa_ok($foo_attr, 'Foo::Meta::Attribute');
37isa_ok($foo_attr, 'Moose::Meta::Attribute');
38
39is($foo_attr->name, 'foo', '... got the right name for our meta-attribute');
40ok($foo_attr->has_accessor, '... our meta-attrubute created the accessor for us');
41
42ok($foo_attr->has_type_constraint, '... our meta-attrubute created the type_constraint for us');
43
44my $foo_attr_type_constraint = $foo_attr->type_constraint;
45isa_ok($foo_attr_type_constraint, 'Moose::Meta::TypeConstraint');
46
47is($foo_attr_type_constraint->name, 'Foo', '... got the right type constraint name');
48is($foo_attr_type_constraint->parent->name, 'Object', '... got the right type constraint parent name');
590868a3 49
50{
51 package Bar::Meta::Attribute;
d500266f 52 use Moose;
590868a3 53
d500266f 54 extends 'Class::MOP::Attribute';
590868a3 55
56 package Bar;
590868a3 57 use Moose;
58
d500266f 59 ::lives_ok {
590868a3 60 has 'bar' => (metaclass => 'Bar::Meta::Attribute');
d500266f 61 } '... the attribute metaclass need not be a Moose::Meta::Attribute as long as it behaves';
590868a3 62}
63