bunch more introspection tests, imporved attribute tests, made adjustments in the...
[gitmo/Class-MOP.git] / t / 020_attribute.t
CommitLineData
2eb717d5 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
7b31baf4 6use Test::More tests => 65;
2eb717d5 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');
7b31baf4 19 ok($attr->has_init_arg, '... $attr does have an init_arg');
20 is($attr->init_arg, '$foo', '... $attr init_arg is the name');
2eb717d5 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');
2eb717d5 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
93dies_ok {
cbd9f942 94 Class::MOP::Attribute->new('$foo', (
2eb717d5 95 accessor => 'foo',
96 reader => 'get_foo',
97 ));
98} '... cannot create accessors with reader/writers';
99
100dies_ok {
cbd9f942 101 Class::MOP::Attribute->new('$foo', (
2eb717d5 102 accessor => 'foo',
103 writer => 'set_foo',
104 ));
105} '... cannot create accessors with reader/writers';
106
107dies_ok {
cbd9f942 108 Class::MOP::Attribute->new('$foo', (
2eb717d5 109 accessor => 'foo',
110 reader => 'get_foo',
111 writer => 'set_foo',
112 ));
113} '... cannot create accessors with reader/writers';
114
cbd9f942 115dies_ok {
116 Class::MOP::Attribute->new();
117} '... no name argument';
118
119dies_ok {
120 Class::MOP::Attribute->new('');
121} '... bad name argument';
122
123dies_ok {
124 Class::MOP::Attribute->new(0);
125} '... bad name argument';
126
127dies_ok {
128 Class::MOP::Attribute->install_accessors();
129} '... bad install_accessors argument';
130
131dies_ok {
132 Class::MOP::Attribute->install_accessors(bless {} => 'Fail');
133} '... bad install_accessors argument';
134
135dies_ok {
136 Class::MOP::Attribute->remove_accessors();
137} '... bad remove_accessors argument';
138
139dies_ok {
140 Class::MOP::Attribute->remove_accessors(bless {} => 'Fail');
141} '... bad remove_accessors argument';
142
2eb717d5 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}