Commit | Line | Data |
2eb717d5 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
1a7ebbb3 |
6 | use Test::More tests => 64; |
2eb717d5 |
7 | use Test::Exception; |
8 | |
9 | BEGIN { |
727919c5 |
10 | use_ok('Class::MOP'); |
2eb717d5 |
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 { |
cbd9f942 |
93 | Class::MOP::Attribute->new('$foo', ( |
2eb717d5 |
94 | accessor => 'foo', |
95 | reader => 'get_foo', |
96 | )); |
97 | } '... cannot create accessors with reader/writers'; |
98 | |
99 | dies_ok { |
cbd9f942 |
100 | Class::MOP::Attribute->new('$foo', ( |
2eb717d5 |
101 | accessor => 'foo', |
102 | writer => 'set_foo', |
103 | )); |
104 | } '... cannot create accessors with reader/writers'; |
105 | |
106 | dies_ok { |
cbd9f942 |
107 | Class::MOP::Attribute->new('$foo', ( |
2eb717d5 |
108 | accessor => 'foo', |
109 | reader => 'get_foo', |
110 | writer => 'set_foo', |
111 | )); |
112 | } '... cannot create accessors with reader/writers'; |
113 | |
cbd9f942 |
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 | |
2eb717d5 |
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 | } |