X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F000_load.t;h=3aa0fcd8ae8536ede5edf54644408a3d737ad570;hb=86a4d8730cfe673db674c692f7703632b700c7c9;hp=c7ba2c5569161d4151efba5acb5a356c865d2287;hpb=817c7cd51b8e7a9509c43428f47e231d0e21ff43;p=gitmo%2FClass-MOP.git diff --git a/t/000_load.t b/t/000_load.t index c7ba2c5..3aa0fcd 100644 --- a/t/000_load.t +++ b/t/000_load.t @@ -1,105 +1,134 @@ -#!/usr/bin/perl - use strict; use warnings; -use Test::More tests => 29; +use Test::More; BEGIN { use_ok('Class::MOP'); - use_ok('Class::MOP::Package'); - use_ok('Class::MOP::Module'); + use_ok('Class::MOP::Package'); + use_ok('Class::MOP::Module'); use_ok('Class::MOP::Class'); - use_ok('Class::MOP::Class::Immutable'); + use_ok('Class::MOP::Class::Immutable::Trait'); use_ok('Class::MOP::Attribute'); - use_ok('Class::MOP::Method'); - use_ok('Class::MOP::Method::Wrapped'); - use_ok('Class::MOP::Method::Accessor'); - use_ok('Class::MOP::Method::Constructor'); - use_ok('Class::MOP::Instance'); - use_ok('Class::MOP::Object'); + use_ok('Class::MOP::Method'); + use_ok('Class::MOP::Method::Wrapped'); + use_ok('Class::MOP::Method::Inlined'); + use_ok('Class::MOP::Method::Generated'); + use_ok('Class::MOP::Method::Accessor'); + use_ok('Class::MOP::Method::Constructor'); + use_ok('Class::MOP::Instance'); + use_ok('Class::MOP::Object'); } # make sure we are tracking metaclasses correctly my %METAS = ( - 'Class::MOP::Attribute' => Class::MOP::Attribute->meta, - 'Class::MOP::Method::Accessor' => Class::MOP::Method::Accessor->meta, - 'Class::MOP::Method::Constructor' => Class::MOP::Method::Constructor->meta, - 'Class::MOP::Package' => Class::MOP::Package->meta, - 'Class::MOP::Module' => Class::MOP::Module->meta, - 'Class::MOP::Class' => Class::MOP::Class->meta, - 'Class::MOP::Method' => Class::MOP::Method->meta, - 'Class::MOP::Method::Wrapped' => Class::MOP::Method::Wrapped->meta, - 'Class::MOP::Instance' => Class::MOP::Instance->meta, - 'Class::MOP::Object' => Class::MOP::Object->meta, + 'Class::MOP::Attribute' => Class::MOP::Attribute->meta, + 'Class::MOP::Method::Inlined' => Class::MOP::Method::Inlined->meta, + 'Class::MOP::Method::Generated' => Class::MOP::Method::Generated->meta, + 'Class::MOP::Method::Accessor' => Class::MOP::Method::Accessor->meta, + 'Class::MOP::Method::Constructor' => + Class::MOP::Method::Constructor->meta, + 'Class::MOP::Package' => Class::MOP::Package->meta, + 'Class::MOP::Module' => Class::MOP::Module->meta, + 'Class::MOP::Class' => Class::MOP::Class->meta, + 'Class::MOP::Method' => Class::MOP::Method->meta, + 'Class::MOP::Method::Wrapped' => Class::MOP::Method::Wrapped->meta, + 'Class::MOP::Instance' => Class::MOP::Instance->meta, + 'Class::MOP::Object' => Class::MOP::Object->meta, + 'Class::MOP::Class::Immutable::Trait' => Class::MOP::class_of('Class::MOP::Class::Immutable::Trait'), + 'Class::MOP::Class::Immutable::Class::MOP::Class' => Class::MOP::Class::Immutable::Class::MOP::Class->meta, ); -ok($_->is_immutable(), '... ' . $_->name . ' is immutable') for values %METAS; +ok( Class::MOP::is_class_loaded($_), '... ' . $_ . ' is loaded' ) + for keys %METAS; + +for my $meta (values %METAS) { + # the trait shouldn't be made immutable, it doesn't actually do anything, + # and it doesn't even matter because it's not a class that will be + # instantiated + if ($meta->name eq 'Class::MOP::Class::Immutable::Trait') { + ok( $meta->is_mutable(), '... ' . $meta->name . ' is mutable' ); + } + else { + ok( $meta->is_immutable(), '... ' . $meta->name . ' is immutable' ); + } +} is_deeply( - { Class::MOP::get_all_metaclasses }, + {Class::MOP::get_all_metaclasses}, \%METAS, - '... got all the metaclasses'); + '... got all the metaclasses' +); is_deeply( - [ sort { $a->name cmp $b->name } Class::MOP::get_all_metaclass_instances ], - [ - Class::MOP::Attribute->meta, - Class::MOP::Class->meta, - Class::MOP::Instance->meta, + [ + sort { $a->name cmp $b->name } Class::MOP::get_all_metaclass_instances + ], + [ + Class::MOP::Attribute->meta, + Class::MOP::Class->meta, + Class::MOP::Class::Immutable::Class::MOP::Class->meta, + Class::MOP::class_of('Class::MOP::Class::Immutable::Trait'), + Class::MOP::Instance->meta, Class::MOP::Method->meta, Class::MOP::Method::Accessor->meta, - Class::MOP::Method::Constructor->meta, + Class::MOP::Method::Constructor->meta, + Class::MOP::Method::Generated->meta, + Class::MOP::Method::Inlined->meta, Class::MOP::Method::Wrapped->meta, - Class::MOP::Module->meta, - Class::MOP::Object->meta, - Class::MOP::Package->meta, + Class::MOP::Module->meta, + Class::MOP::Object->meta, + Class::MOP::Package->meta, ], - '... got all the metaclass instances'); + '... got all the metaclass instances' +); is_deeply( [ sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ], - [ qw/ - Class::MOP::Attribute - Class::MOP::Class - Class::MOP::Instance - Class::MOP::Method - Class::MOP::Method::Accessor - Class::MOP::Method::Constructor - Class::MOP::Method::Wrapped - Class::MOP::Module - Class::MOP::Object - Class::MOP::Package - / ], - '... got all the metaclass names'); - -is_deeply( - [ map { $_->meta->identifier } sort { $a cmp $b } Class::MOP::get_all_metaclass_names() ], - [ - "Class::MOP::Attribute-" . $Class::MOP::Attribute::VERSION . "-cpan:STEVAN", - "Class::MOP::Class-" . $Class::MOP::Class::VERSION . "-cpan:STEVAN", - "Class::MOP::Instance-" . $Class::MOP::Instance::VERSION . "-cpan:STEVAN", - "Class::MOP::Method-" . $Class::MOP::Method::VERSION . "-cpan:STEVAN", - "Class::MOP::Method::Accessor-" . $Class::MOP::Method::Accessor::VERSION . "-cpan:STEVAN", - "Class::MOP::Method::Constructor-" . $Class::MOP::Method::Constructor::VERSION . "-cpan:STEVAN", - "Class::MOP::Method::Wrapped-" . $Class::MOP::Method::Wrapped::VERSION . "-cpan:STEVAN", - "Class::MOP::Module-" . $Class::MOP::Module::VERSION . "-cpan:STEVAN", - "Class::MOP::Object-" . $Class::MOP::Object::VERSION . "-cpan:STEVAN", - "Class::MOP::Package-" . $Class::MOP::Package::VERSION . "-cpan:STEVAN", + [ + sort qw/ + Class::MOP::Attribute + Class::MOP::Class + Class::MOP::Class::Immutable::Class::MOP::Class + Class::MOP::Class::Immutable::Trait + Class::MOP::Instance + Class::MOP::Method + Class::MOP::Method::Accessor + Class::MOP::Method::Constructor + Class::MOP::Method::Generated + Class::MOP::Method::Inlined + Class::MOP::Method::Wrapped + Class::MOP::Module + Class::MOP::Object + Class::MOP::Package + /, ], - '... got all the metaclass identifiers'); - + '... got all the metaclass names' +); + # testing the meta-circularity of the system -is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta, - '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta'); - -is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta, - '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta'); +is( + Class::MOP::Class->meta->meta, Class::MOP::Class->meta->meta->meta, + '... Class::MOP::Class->meta->meta == Class::MOP::Class->meta->meta->meta' +); -is(Class::MOP::Class->meta, Class::MOP::Class->meta->meta->meta->meta, - '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta->meta'); +is( + Class::MOP::Class->meta->meta->meta, Class::MOP::Class->meta->meta->meta->meta, + '... Class::MOP::Class->meta->meta->meta == Class::MOP::Class->meta->meta->meta->meta' +); +is( + Class::MOP::Class->meta->meta, Class::MOP::Class->meta->meta->meta->meta, + '... Class::MOP::Class->meta->meta == Class::MOP::Class->meta->meta->meta->meta' +); + +is( + Class::MOP::Class->meta->meta, Class::MOP::Class->meta->meta->meta->meta->meta, + '... Class::MOP::Class->meta->meta == Class::MOP::Class->meta->meta->meta->meta->meta' +); +isa_ok(Class::MOP::Class->meta, 'Class::MOP::Class'); +done_testing;