merging the immutable branch into trunk
[gitmo/Class-MOP.git] / t / 014_attribute_introspection.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 49;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Class::MOP');        
11 }
12
13 {
14     my $attr = Class::MOP::Attribute->new('$test');
15     is($attr->meta, Class::MOP::Attribute->meta, '... instance and class both lead to the same meta');
16 }
17
18 {
19     my $meta = Class::MOP::Attribute->meta();
20     isa_ok($meta, 'Class::MOP::Class');
21     
22     my @methods = qw(
23         meta
24         new clone
25         
26         initialize_instance_slot
27         
28         name
29         has_accessor  accessor
30         has_writer    writer
31         has_reader    reader
32         has_predicate predicate
33         has_clearer   clearer
34         has_init_arg  init_arg
35         has_default   default    is_default_a_coderef
36         
37         slots
38         get_value
39         set_value
40         has_value
41         clear_value
42         
43         associated_class
44         attach_to_class detach_from_class 
45         
46         accessor_metaclass
47         
48         associated_methods
49         associate_method
50         
51         process_accessors
52         install_accessors
53         remove_accessors
54         );
55         
56     is_deeply(
57         [ sort $meta->get_method_list ],
58         [ sort @methods ],
59         '... our method list matches');        
60     
61     foreach my $method_name (@methods) {
62         ok($meta->has_method($method_name), '... Class::MOP::Attribute->has_method(' . $method_name . ')');
63     }
64     
65     my @attributes = (
66         '$!name',
67         '$!accessor',
68         '$!reader',
69         '$!writer',
70         '$!predicate',
71         '$!clearer',
72         '$!init_arg',
73         '$!default',
74         '$!associated_class',
75         '@!associated_methods',
76         );
77
78     is_deeply(
79         [ sort $meta->get_attribute_list ],
80         [ sort @attributes ],
81         '... our attribute list matches');
82     
83     foreach my $attribute_name (@attributes) {
84         ok($meta->has_attribute($attribute_name), '... Class::MOP::Attribute->has_attribute(' . $attribute_name . ')');        
85     }
86     
87     # We could add some tests here to make sure that 
88     # the attribute have the appropriate 
89     # accessor/reader/writer/predicate combinations, 
90     # but that is getting a little excessive so I  
91     # wont worry about it for now. Maybe if I get 
92     # bored I will do it.
93 }