merging the immutable branch into trunk
[gitmo/Class-MOP.git] / t / 000_load.t
CommitLineData
8b978dd5 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
d90b42a6 6use Test::More tests => 29;
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
4d47b77f 40ok($_->is_immutable(), '... ' . $_->name . ' is immutable') for values %METAS;
41
d41e86f2 42is_deeply(
be7677c7 43 { Class::MOP::get_all_metaclasses },
c23184fc 44 {
45 %METAS,
46 $CLASS_MOP_CLASS_IMMUTABLE_CLASS => $CLASS_MOP_CLASS_IMMUTABLE_CLASS->meta
47 },
d41e86f2 48 '... got all the metaclasses');
49
50is_deeply(
be7677c7 51 [ sort { $a->name cmp $b->name } Class::MOP::get_all_metaclass_instances ],
2243a22b 52 [
ba38bf08 53 Class::MOP::Attribute->meta,
2243a22b 54 Class::MOP::Class->meta,
c23184fc 55 $CLASS_MOP_CLASS_IMMUTABLE_CLASS->meta,
2243a22b 56 Class::MOP::Instance->meta,
57 Class::MOP::Method->meta,
d90b42a6 58 Class::MOP::Method::Accessor->meta,
59 Class::MOP::Method::Constructor->meta,
b6164407 60 Class::MOP::Method::Wrapped->meta,
6e57504d 61 Class::MOP::Module->meta,
62 Class::MOP::Object->meta,
c23184fc 63 Class::MOP::Package->meta,
2243a22b 64 ],
d41e86f2 65 '... got all the metaclass instances');
66
67is_deeply(
be7677c7 68 [ sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ],
c23184fc 69 [ sort qw/
ba38bf08 70 Class::MOP::Attribute
2243a22b 71 Class::MOP::Class
72 Class::MOP::Instance
73 Class::MOP::Method
d90b42a6 74 Class::MOP::Method::Accessor
75 Class::MOP::Method::Constructor
b6164407 76 Class::MOP::Method::Wrapped
2243a22b 77 Class::MOP::Module
6e57504d 78 Class::MOP::Object
2243a22b 79 Class::MOP::Package
c23184fc 80 /, $CLASS_MOP_CLASS_IMMUTABLE_CLASS ],
b1897d4d 81 '... got all the metaclass names');
82
83is_deeply(
84 [ map { $_->meta->identifier } sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ],
85 [
86 "Class::MOP::Attribute-" . $Class::MOP::Attribute::VERSION . "-cpan:STEVAN",
b1897d4d 87 "Class::MOP::Class-" . $Class::MOP::Class::VERSION . "-cpan:STEVAN",
c23184fc 88 $CLASS_MOP_CLASS_IMMUTABLE_CLASS,
b1897d4d 89 "Class::MOP::Instance-" . $Class::MOP::Instance::VERSION . "-cpan:STEVAN",
90 "Class::MOP::Method-" . $Class::MOP::Method::VERSION . "-cpan:STEVAN",
ba38bf08 91 "Class::MOP::Method::Accessor-" . $Class::MOP::Method::Accessor::VERSION . "-cpan:STEVAN",
d90b42a6 92 "Class::MOP::Method::Constructor-" . $Class::MOP::Method::Constructor::VERSION . "-cpan:STEVAN",
b1897d4d 93 "Class::MOP::Method::Wrapped-" . $Class::MOP::Method::Wrapped::VERSION . "-cpan:STEVAN",
94 "Class::MOP::Module-" . $Class::MOP::Module::VERSION . "-cpan:STEVAN",
95 "Class::MOP::Object-" . $Class::MOP::Object::VERSION . "-cpan:STEVAN",
96 "Class::MOP::Package-" . $Class::MOP::Package::VERSION . "-cpan:STEVAN",
97 ],
98 '... got all the metaclass identifiers');
dc76a410 99
100# testing the meta-circularity of the system
101
102is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta,
103 '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta');
104
105is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta,
106 '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta');
107
108is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta->meta,
109 '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta->meta');
110
111
112