d23820d9bd3e86cd87cc76087316e2efcc479c1e
[gitmo/Class-MOP.git] / t / 020_attribute.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 64;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Class::MOP');
11     use_ok('Class::MOP::Attribute');
12 }
13
14 {
15     my $attr = Class::MOP::Attribute->new('$foo');
16     isa_ok($attr, 'Class::MOP::Attribute');
17
18     is($attr->name, '$foo', '... $attr->name == $foo');
19     
20     ok(!$attr->has_accessor, '... $attr does not have an accessor');
21     ok(!$attr->has_reader, '... $attr does not have an reader');
22     ok(!$attr->has_writer, '... $attr does not have an writer');
23     ok(!$attr->has_init_arg, '... $attr does not have an init_arg');
24     ok(!$attr->has_default, '... $attr does not have an default');                
25 }
26
27 {
28     my $attr = Class::MOP::Attribute->new('$foo', (
29         init_arg => '-foo',
30         default  => 'BAR'
31     ));
32     isa_ok($attr, 'Class::MOP::Attribute');
33
34     is($attr->name, '$foo', '... $attr->name == $foo');
35     
36     ok($attr->has_init_arg, '... $attr does have an init_arg');
37     is($attr->init_arg, '-foo', '... $attr->init_arg == -foo');
38     ok($attr->has_default, '... $attr does have an default');    
39     is($attr->default, 'BAR', '... $attr->default == BAR');
40     
41     ok(!$attr->has_accessor, '... $attr does not have an accessor');
42     ok(!$attr->has_reader, '... $attr does not have an reader');
43     ok(!$attr->has_writer, '... $attr does not have an writer');               
44 }
45
46 {
47     my $attr = Class::MOP::Attribute->new('$foo', (
48         accessor => 'foo',
49         init_arg => '-foo',
50         default  => 'BAR'
51     ));
52     isa_ok($attr, 'Class::MOP::Attribute');
53
54     is($attr->name, '$foo', '... $attr->name == $foo');
55     
56     ok($attr->has_init_arg, '... $attr does have an init_arg');
57     is($attr->init_arg, '-foo', '... $attr->init_arg == -foo');
58     ok($attr->has_default, '... $attr does have an default');    
59     is($attr->default, 'BAR', '... $attr->default == BAR');
60
61     ok($attr->has_accessor, '... $attr does have an accessor');    
62     is($attr->accessor, 'foo', '... $attr->accessor == foo');
63     
64     ok(!$attr->has_reader, '... $attr does not have an reader');
65     ok(!$attr->has_writer, '... $attr does not have an writer');               
66 }
67
68 {
69     my $attr = Class::MOP::Attribute->new('$foo', (
70         reader   => 'get_foo',
71         writer   => 'set_foo',        
72         init_arg => '-foo',
73         default  => 'BAR'
74     ));
75     isa_ok($attr, 'Class::MOP::Attribute');
76
77     is($attr->name, '$foo', '... $attr->name == $foo');
78     
79     ok($attr->has_init_arg, '... $attr does have an init_arg');
80     is($attr->init_arg, '-foo', '... $attr->init_arg == -foo');
81     ok($attr->has_default, '... $attr does have an default');    
82     is($attr->default, 'BAR', '... $attr->default == BAR');
83
84     ok($attr->has_reader, '... $attr does have an reader');
85     is($attr->reader, 'get_foo', '... $attr->reader == get_foo');    
86     ok($attr->has_writer, '... $attr does have an writer');
87     is($attr->writer, 'set_foo', '... $attr->writer == set_foo');    
88
89     ok(!$attr->has_accessor, '... $attr does not have an accessor');    
90 }
91
92 dies_ok {
93     Class::MOP::Attribute->new('$foo', (
94         accessor => 'foo',
95         reader   => 'get_foo',
96     ));
97 } '... cannot create accessors with reader/writers';
98
99 dies_ok {
100     Class::MOP::Attribute->new('$foo', (
101         accessor => 'foo',
102         writer   => 'set_foo',
103     ));
104 } '... cannot create accessors with reader/writers';
105
106 dies_ok {
107     Class::MOP::Attribute->new('$foo', (
108         accessor => 'foo',
109         reader   => 'get_foo',        
110         writer   => 'set_foo',
111     ));
112 } '... cannot create accessors with reader/writers';
113
114 dies_ok {
115     Class::MOP::Attribute->new();
116 } '... no name argument';
117
118 dies_ok {
119     Class::MOP::Attribute->new('');
120 } '... bad name argument';
121
122 dies_ok {
123     Class::MOP::Attribute->new(0);
124 } '... bad name argument';
125
126 dies_ok {
127     Class::MOP::Attribute->install_accessors();
128 } '... bad install_accessors argument';
129
130 dies_ok {
131     Class::MOP::Attribute->install_accessors(bless {} => 'Fail');
132 } '... bad install_accessors argument';
133
134 dies_ok {
135     Class::MOP::Attribute->remove_accessors();
136 } '... bad remove_accessors argument';
137
138 dies_ok {
139     Class::MOP::Attribute->remove_accessors(bless {} => 'Fail');
140 } '... bad remove_accessors argument';
141
142
143 {
144     my $meta = Class::MOP::Attribute->meta();
145     isa_ok($meta, 'Class::MOP::Class');
146     
147     foreach my $method_name (qw(
148         meta 
149         new
150         has_accessor accessor
151         has_writer   writer
152         has_reader   reader
153         has_init_arg init_arg
154         has_default  default
155         install_accessors
156         remove_accessors
157         )) {
158         ok($meta->has_method($method_name), '... Class::MOP::Attribute->has_method(' . $method_name . ')');
159     }
160     
161     
162 }