refactored the Constructor to support inlining better and Accessors some too
[gitmo/Class-MOP.git] / t / 000_load.t
CommitLineData
8b978dd5 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
565f0cbb 6use Test::More tests => 42;
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');
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 26my $CLASS_MOP_CLASS_IMMUTABLE_CLASS = 'Class::MOP::Class::__ANON__::SERIAL::1';
27
d41e86f2 28my %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 42ok(Class::MOP::is_class_loaded($_), '... ' . $_ . ' is loaded') for keys %METAS;
43
4d47b77f 44ok($_->is_immutable(), '... ' . $_->name . ' is immutable') for values %METAS;
45
d41e86f2 46is_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
54is_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
72is_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
89is_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
109is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta,
110 '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta');
111
112is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta,
113 '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta');
114
115is(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