Class::MOP - lots of knot tying, this should make subclassing more reliable and strai...
[gitmo/Class-MOP.git] / t / 020_attribute.t
CommitLineData
2eb717d5 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More no_plan => 1;
7use Test::Exception;
8
9BEGIN {
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
92dies_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
99dies_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
106dies_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 114dies_ok {
115 Class::MOP::Attribute->new();
116} '... no name argument';
117
118dies_ok {
119 Class::MOP::Attribute->new('');
120} '... bad name argument';
121
122dies_ok {
123 Class::MOP::Attribute->new(0);
124} '... bad name argument';
125
126dies_ok {
127 Class::MOP::Attribute->install_accessors();
128} '... bad install_accessors argument';
129
130dies_ok {
131 Class::MOP::Attribute->install_accessors(bless {} => 'Fail');
132} '... bad install_accessors argument';
133
134dies_ok {
135 Class::MOP::Attribute->remove_accessors();
136} '... bad remove_accessors argument';
137
138dies_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}