Commit | Line | Data |
8b978dd5 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
565f0cbb |
6 | use Test::More tests => 42; |
8b978dd5 |
7 | |
8 | BEGIN { |
1a7ebbb3 |
9 | use_ok('Class::MOP'); |
d90b42a6 |
10 | use_ok('Class::MOP::Package'); |
11 | use_ok('Class::MOP::Module'); |
8b978dd5 |
12 | use_ok('Class::MOP::Class'); |
c23184fc |
13 | use_ok('Class::MOP::Immutable'); |
8b978dd5 |
14 | use_ok('Class::MOP::Attribute'); |
d90b42a6 |
15 | use_ok('Class::MOP::Method'); |
16 | use_ok('Class::MOP::Method::Wrapped'); |
565f0cbb |
17 | use_ok('Class::MOP::Method::Generated'); |
d90b42a6 |
18 | use_ok('Class::MOP::Method::Accessor'); |
19 | use_ok('Class::MOP::Method::Constructor'); |
fd662d66 |
20 | use_ok('Class::MOP::Instance'); |
6e57504d |
21 | use_ok('Class::MOP::Object'); |
d41e86f2 |
22 | } |
23 | |
24 | # make sure we are tracking metaclasses correctly |
25 | |
c23184fc |
26 | my $CLASS_MOP_CLASS_IMMUTABLE_CLASS = 'Class::MOP::Class::__ANON__::SERIAL::1'; |
27 | |
d41e86f2 |
28 | my %METAS = ( |
b6164407 |
29 | 'Class::MOP::Attribute' => Class::MOP::Attribute->meta, |
565f0cbb |
30 | 'Class::MOP::Method::Generated' => Class::MOP::Method::Generated->meta, |
d90b42a6 |
31 | 'Class::MOP::Method::Accessor' => Class::MOP::Method::Accessor->meta, |
32 | 'Class::MOP::Method::Constructor' => Class::MOP::Method::Constructor->meta, |
b6164407 |
33 | 'Class::MOP::Package' => Class::MOP::Package->meta, |
34 | 'Class::MOP::Module' => Class::MOP::Module->meta, |
d90b42a6 |
35 | 'Class::MOP::Class' => Class::MOP::Class->meta, |
b6164407 |
36 | 'Class::MOP::Method' => Class::MOP::Method->meta, |
37 | 'Class::MOP::Method::Wrapped' => Class::MOP::Method::Wrapped->meta, |
38 | 'Class::MOP::Instance' => Class::MOP::Instance->meta, |
c23184fc |
39 | 'Class::MOP::Object' => Class::MOP::Object->meta, |
d41e86f2 |
40 | ); |
41 | |
448b6e55 |
42 | ok(Class::MOP::is_class_loaded($_), '... ' . $_ . ' is loaded') for keys %METAS; |
43 | |
4d47b77f |
44 | ok($_->is_immutable(), '... ' . $_->name . ' is immutable') for values %METAS; |
45 | |
d41e86f2 |
46 | is_deeply( |
be7677c7 |
47 | { Class::MOP::get_all_metaclasses }, |
c23184fc |
48 | { |
49 | %METAS, |
50 | $CLASS_MOP_CLASS_IMMUTABLE_CLASS => $CLASS_MOP_CLASS_IMMUTABLE_CLASS->meta |
51 | }, |
d41e86f2 |
52 | '... got all the metaclasses'); |
53 | |
54 | is_deeply( |
be7677c7 |
55 | [ sort { $a->name cmp $b->name } Class::MOP::get_all_metaclass_instances ], |
2243a22b |
56 | [ |
ba38bf08 |
57 | Class::MOP::Attribute->meta, |
2243a22b |
58 | Class::MOP::Class->meta, |
c23184fc |
59 | $CLASS_MOP_CLASS_IMMUTABLE_CLASS->meta, |
2243a22b |
60 | Class::MOP::Instance->meta, |
61 | Class::MOP::Method->meta, |
d90b42a6 |
62 | Class::MOP::Method::Accessor->meta, |
63 | Class::MOP::Method::Constructor->meta, |
565f0cbb |
64 | Class::MOP::Method::Generated->meta, |
b6164407 |
65 | Class::MOP::Method::Wrapped->meta, |
6e57504d |
66 | Class::MOP::Module->meta, |
67 | Class::MOP::Object->meta, |
c23184fc |
68 | Class::MOP::Package->meta, |
2243a22b |
69 | ], |
d41e86f2 |
70 | '... got all the metaclass instances'); |
71 | |
72 | is_deeply( |
be7677c7 |
73 | [ sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ], |
c23184fc |
74 | [ sort qw/ |
ba38bf08 |
75 | Class::MOP::Attribute |
2243a22b |
76 | Class::MOP::Class |
77 | Class::MOP::Instance |
78 | Class::MOP::Method |
d90b42a6 |
79 | Class::MOP::Method::Accessor |
565f0cbb |
80 | Class::MOP::Method::Constructor |
81 | Class::MOP::Method::Generated |
b6164407 |
82 | Class::MOP::Method::Wrapped |
2243a22b |
83 | Class::MOP::Module |
6e57504d |
84 | Class::MOP::Object |
2243a22b |
85 | Class::MOP::Package |
c23184fc |
86 | /, $CLASS_MOP_CLASS_IMMUTABLE_CLASS ], |
b1897d4d |
87 | '... got all the metaclass names'); |
88 | |
89 | is_deeply( |
90 | [ map { $_->meta->identifier } sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ], |
91 | [ |
92 | "Class::MOP::Attribute-" . $Class::MOP::Attribute::VERSION . "-cpan:STEVAN", |
b1897d4d |
93 | "Class::MOP::Class-" . $Class::MOP::Class::VERSION . "-cpan:STEVAN", |
c23184fc |
94 | $CLASS_MOP_CLASS_IMMUTABLE_CLASS, |
b1897d4d |
95 | "Class::MOP::Instance-" . $Class::MOP::Instance::VERSION . "-cpan:STEVAN", |
96 | "Class::MOP::Method-" . $Class::MOP::Method::VERSION . "-cpan:STEVAN", |
ba38bf08 |
97 | "Class::MOP::Method::Accessor-" . $Class::MOP::Method::Accessor::VERSION . "-cpan:STEVAN", |
565f0cbb |
98 | "Class::MOP::Method::Constructor-" . $Class::MOP::Method::Constructor::VERSION . "-cpan:STEVAN", |
99 | "Class::MOP::Method::Generated-" . $Class::MOP::Method::Generated::VERSION . "-cpan:STEVAN", |
b1897d4d |
100 | "Class::MOP::Method::Wrapped-" . $Class::MOP::Method::Wrapped::VERSION . "-cpan:STEVAN", |
101 | "Class::MOP::Module-" . $Class::MOP::Module::VERSION . "-cpan:STEVAN", |
102 | "Class::MOP::Object-" . $Class::MOP::Object::VERSION . "-cpan:STEVAN", |
103 | "Class::MOP::Package-" . $Class::MOP::Package::VERSION . "-cpan:STEVAN", |
104 | ], |
105 | '... got all the metaclass identifiers'); |
dc76a410 |
106 | |
107 | # testing the meta-circularity of the system |
108 | |
109 | is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta, |
110 | '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta'); |
111 | |
112 | is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta, |
113 | '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta'); |
114 | |
115 | is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta->meta, |
116 | '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta->meta'); |
117 | |
118 | |
119 | |