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