add_attribute fix, and version fixes, changes, etc
[gitmo/Class-MOP.git] / t / 000_load.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 19;
7
8 BEGIN {
9     use_ok('Class::MOP');
10     use_ok('Class::MOP::Class');
11     use_ok('Class::MOP::Attribute');
12     use_ok('Class::MOP::Method');            
13     use_ok('Class::MOP::Instance');            
14     use_ok('Class::MOP::Object');                
15 }
16
17 # make sure we are tracking metaclasses correctly
18
19 my %METAS = (
20     'Class::MOP::Attribute'           => Class::MOP::Attribute->meta, 
21     'Class::MOP::Attribute::Accessor' => Class::MOP::Attribute::Accessor->meta,     
22     'Class::MOP::Package'             => Class::MOP::Package->meta, 
23     'Class::MOP::Module'              => Class::MOP::Module->meta,     
24     'Class::MOP::Class'               => Class::MOP::Class->meta, 
25     'Class::MOP::Method'              => Class::MOP::Method->meta,  
26     'Class::MOP::Method::Wrapped'     => Class::MOP::Method::Wrapped->meta,      
27     'Class::MOP::Instance'            => Class::MOP::Instance->meta,   
28     'Class::MOP::Object'              => Class::MOP::Object->meta,          
29 );
30
31 ok($_->is_immutable(), '... ' . $_->name . ' is immutable') for values %METAS;
32
33 is_deeply(
34     { Class::MOP::get_all_metaclasses },
35     \%METAS,
36     '... got all the metaclasses');
37
38 is_deeply(
39     [ sort { $a->name cmp $b->name } Class::MOP::get_all_metaclass_instances ],
40     [ 
41         Class::MOP::Attribute->meta,
42         Class::MOP::Attribute::Accessor->meta, 
43         Class::MOP::Class->meta, 
44         Class::MOP::Instance->meta,         
45         Class::MOP::Method->meta,
46         Class::MOP::Method::Wrapped->meta,
47         Class::MOP::Module->meta, 
48         Class::MOP::Object->meta,          
49         Class::MOP::Package->meta,              
50     ],
51     '... got all the metaclass instances');
52
53 is_deeply(
54     [ sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ],
55     [ qw/
56         Class::MOP::Attribute   
57         Class::MOP::Attribute::Accessor    
58         Class::MOP::Class
59         Class::MOP::Instance
60         Class::MOP::Method
61         Class::MOP::Method::Wrapped
62         Class::MOP::Module  
63         Class::MOP::Object        
64         Class::MOP::Package                      
65     / ],
66     '... got all the metaclass names');
67     
68 is_deeply(
69     [ map { $_->meta->identifier } sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ],
70     [ 
71        "Class::MOP::Attribute-"           . $Class::MOP::Attribute::VERSION           . "-cpan:STEVAN",  
72        "Class::MOP::Attribute::Accessor-" . $Class::MOP::Attribute::Accessor::VERSION . "-cpan:STEVAN",          
73        "Class::MOP::Class-"               . $Class::MOP::Class::VERSION               . "-cpan:STEVAN",
74        "Class::MOP::Instance-"            . $Class::MOP::Instance::VERSION            . "-cpan:STEVAN",
75        "Class::MOP::Method-"              . $Class::MOP::Method::VERSION              . "-cpan:STEVAN",
76        "Class::MOP::Method::Wrapped-"     . $Class::MOP::Method::Wrapped::VERSION     . "-cpan:STEVAN",       
77        "Class::MOP::Module-"              . $Class::MOP::Module::VERSION              . "-cpan:STEVAN",
78        "Class::MOP::Object-"              . $Class::MOP::Object::VERSION              . "-cpan:STEVAN",
79        "Class::MOP::Package-"             . $Class::MOP::Package::VERSION             . "-cpan:STEVAN",
80     ],
81     '... got all the metaclass identifiers');    
82     
83