Commit | Line | Data |
8b978dd5 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
dc76a410 |
6 | use Test::More tests => 22; |
8b978dd5 |
7 | |
8 | BEGIN { |
1a7ebbb3 |
9 | use_ok('Class::MOP'); |
8b978dd5 |
10 | use_ok('Class::MOP::Class'); |
11 | use_ok('Class::MOP::Attribute'); |
12 | use_ok('Class::MOP::Method'); |
fd662d66 |
13 | use_ok('Class::MOP::Instance'); |
6e57504d |
14 | use_ok('Class::MOP::Object'); |
d41e86f2 |
15 | } |
16 | |
17 | # make sure we are tracking metaclasses correctly |
18 | |
19 | my %METAS = ( |
b6164407 |
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, |
d41e86f2 |
29 | ); |
30 | |
4d47b77f |
31 | ok($_->is_immutable(), '... ' . $_->name . ' is immutable') for values %METAS; |
32 | |
d41e86f2 |
33 | is_deeply( |
be7677c7 |
34 | { Class::MOP::get_all_metaclasses }, |
d41e86f2 |
35 | \%METAS, |
36 | '... got all the metaclasses'); |
37 | |
38 | is_deeply( |
be7677c7 |
39 | [ sort { $a->name cmp $b->name } Class::MOP::get_all_metaclass_instances ], |
2243a22b |
40 | [ |
b6164407 |
41 | Class::MOP::Attribute->meta, |
42 | Class::MOP::Attribute::Accessor->meta, |
2243a22b |
43 | Class::MOP::Class->meta, |
44 | Class::MOP::Instance->meta, |
45 | Class::MOP::Method->meta, |
b6164407 |
46 | Class::MOP::Method::Wrapped->meta, |
6e57504d |
47 | Class::MOP::Module->meta, |
48 | Class::MOP::Object->meta, |
2243a22b |
49 | Class::MOP::Package->meta, |
50 | ], |
d41e86f2 |
51 | '... got all the metaclass instances'); |
52 | |
53 | is_deeply( |
be7677c7 |
54 | [ sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ], |
2243a22b |
55 | [ qw/ |
b6164407 |
56 | Class::MOP::Attribute |
57 | Class::MOP::Attribute::Accessor |
2243a22b |
58 | Class::MOP::Class |
59 | Class::MOP::Instance |
60 | Class::MOP::Method |
b6164407 |
61 | Class::MOP::Method::Wrapped |
2243a22b |
62 | Class::MOP::Module |
6e57504d |
63 | Class::MOP::Object |
2243a22b |
64 | Class::MOP::Package |
65 | / ], |
b1897d4d |
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'); |
dc76a410 |
82 | |
83 | # testing the meta-circularity of the system |
84 | |
85 | is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta, |
86 | '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta'); |
87 | |
88 | is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta, |
89 | '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta'); |
90 | |
91 | is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta->meta, |
92 | '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta->meta'); |
93 | |
94 | |
95 | |