coolio
[gitmo/Moose.git] / t / 060_moose_for_meta.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 16;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Moose');           
11 }
12
13 {
14     package My::Meta::Class;
15     use strict;
16     use warnings;
17     use Moose;
18     
19     extends 'Moose::Meta::Class';
20 }
21
22 my $anon = My::Meta::Class->create_anon_class();
23 isa_ok($anon, 'My::Meta::Class');
24 isa_ok($anon, 'Moose::Meta::Class');
25 isa_ok($anon, 'Class::MOP::Class');
26
27 {
28     package My::Meta::Attribute::DefaultReadOnly;
29     use strict;
30     use warnings;
31     use Moose;
32     
33     extends 'Moose::Meta::Attribute';
34     
35     around 'new' => sub {
36         my $next = shift;
37         my $self = shift;
38         my $name = shift;
39         $next->($self, $name, (is => 'ro'), @_);
40     };    
41 }
42
43 {
44     my $attr = My::Meta::Attribute::DefaultReadOnly->new('foo');
45     isa_ok($attr, 'My::Meta::Attribute::DefaultReadOnly');
46     isa_ok($attr, 'Moose::Meta::Attribute');
47     isa_ok($attr, 'Class::MOP::Attribute');
48
49     ok($attr->has_reader, '... the attribute has a reader (as expected)');
50     ok(!$attr->has_writer, '... the attribute does not have a writer (as expected)');
51     ok(!$attr->has_accessor, '... the attribute does not have an accessor (as expected)');
52 }
53
54 {
55     my $attr = My::Meta::Attribute::DefaultReadOnly->new('foo', (is => 'rw'));
56     isa_ok($attr, 'My::Meta::Attribute::DefaultReadOnly');
57     isa_ok($attr, 'Moose::Meta::Attribute');
58     isa_ok($attr, 'Class::MOP::Attribute');
59
60     ok(!$attr->has_reader, '... the attribute does not have a reader (as expected)');
61     ok(!$attr->has_writer, '... the attribute does not have a writer (as expected)');
62     ok($attr->has_accessor, '... the attribute does have an accessor (as expected)');
63 }
64