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