X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F070_immutable_metaclass.t;h=8d57f5d8ee843f7db1b1202d449f14ad198ae862;hb=6db5c459d895adc8cea8f285f26aca1ea3c3cd14;hp=6a1c356faceb5dc335b0152110f69ac029241d27;hpb=119f3a92af2a078a06fc82d2db1a02018a0b8463;p=gitmo%2FClass-MOP.git diff --git a/t/070_immutable_metaclass.t b/t/070_immutable_metaclass.t index 6a1c356..8d57f5d 100644 --- a/t/070_immutable_metaclass.t +++ b/t/070_immutable_metaclass.t @@ -1,14 +1,10 @@ -#!/usr/bin/perl - use strict; use warnings; -use Test::More tests => 85; +use Test::More tests => 73; use Test::Exception; -BEGIN { - use_ok('Class::MOP'); -} +use Class::MOP; { package Foo; @@ -41,220 +37,231 @@ BEGIN { } { - my $meta = Foo->meta; - - my $transformer; - lives_ok{ $transformer = $meta->create_immutable_transformer } - "Created immutable transformer"; - isa_ok($transformer, 'Class::MOP::Immutable', '... transformer isa Class::MOP::Immutable'); - my $methods = $transformer->create_methods_for_immutable_metaclass; - - my $immutable_metaclass = $transformer->immutable_metaclass; - is($transformer->metaclass, $meta, '... transformer has correct metaclass'); - ok($immutable_metaclass->is_anon_class, '... immutable_metaclass is an anonymous class'); - - #I don't understand why i need to ->meta here... - my $obj = $immutable_metaclass->name; - ok(!$obj->is_mutable, '... immutable_metaclass is not mutable'); - ok($obj->is_immutable, '... immutable_metaclass is immutable'); - ok(!$obj->make_immutable, '... immutable_metaclass make_mutable is noop'); - is($obj->meta, $immutable_metaclass, '... immutable_metaclass meta hack works'); - - is_deeply( - [ $immutable_metaclass->superclasses ], - [ Scalar::Util::blessed($meta) ], - '... immutable_metaclass superclasses are correct' - ); - ok($immutable_metaclass->has_method('get_mutable_metaclass_name')); + my $meta = Foo->meta; + my $original_metaclass_name = ref $meta; -} + $meta->make_immutable; -{ - my $meta = Foo->meta; - is($meta->name, 'Foo', '... checking the Foo metaclass'); + my $immutable_metaclass = $meta->_immutable_metaclass->meta; - ok($meta->is_mutable, '... our class is mutable'); - ok(!$meta->is_immutable, '... our class is not immutable'); + my $immutable_class_name = $immutable_metaclass->name; - my $transformer = $meta->get_immutable_transformer; + ok( !$immutable_class_name->is_mutable, '... immutable_metaclass is not mutable' ); + ok( $immutable_class_name->is_immutable, '... immutable_metaclass is immutable' ); + is( $immutable_class_name->meta, $immutable_metaclass, + '... immutable_metaclass meta hack works' ); - lives_ok { - $meta->make_immutable(); - } '... changed Foo to be immutable'; + isa_ok( $meta, "Class::MOP::Class" ); +} - is($transformer, $meta->get_immutable_transformer, '... immutable transformer cache works'); - ok(!$meta->make_immutable, '... make immutable now returns nothing'); +{ + my $meta = Foo->meta; + is( $meta->name, 'Foo', '... checking the Foo metaclass' ); - ok(!$meta->is_mutable, '... our class is no longer mutable'); - ok($meta->is_immutable, '... our class is now immutable'); + ok( !$meta->is_mutable, '... our class is not mutable' ); + ok( $meta->is_immutable, '... our class is immutable' ); - isa_ok($meta, 'Class::MOP::Class'); + isa_ok( $meta, 'Class::MOP::Class' ); - dies_ok { $meta->add_method() } '... exception thrown as expected'; - dies_ok { $meta->alias_method() } '... exception thrown as expected'; + dies_ok { $meta->add_method() } '... exception thrown as expected'; + dies_ok { $meta->alias_method() } '... exception thrown as expected'; dies_ok { $meta->remove_method() } '... exception thrown as expected'; - dies_ok { $meta->add_attribute() } '... exception thrown as expected'; + dies_ok { $meta->add_attribute() } '... exception thrown as expected'; dies_ok { $meta->remove_attribute() } '... exception thrown as expected'; - dies_ok { $meta->add_package_symbol() } '... exception thrown as expected'; - dies_ok { $meta->remove_package_symbol() } '... exception thrown as expected'; + dies_ok { $meta->add_package_symbol() } + '... exception thrown as expected'; + dies_ok { $meta->remove_package_symbol() } + '... exception thrown as expected'; - lives_ok { $meta->identifier() } '... no exception for get_package_symbol special case'; + lives_ok { $meta->identifier() } + '... no exception for get_package_symbol special case'; my @supers; lives_ok { @supers = $meta->superclasses; - } '... got the superclasses okay'; + } + '... got the superclasses okay'; - dies_ok { $meta->superclasses([ 'UNIVERSAL' ]) } '... but could not set the superclasses okay'; + dies_ok { $meta->superclasses( ['UNIVERSAL'] ) } + '... but could not set the superclasses okay'; my $meta_instance; lives_ok { $meta_instance = $meta->get_meta_instance; - } '... got the meta instance okay'; - isa_ok($meta_instance, 'Class::MOP::Instance'); - is($meta_instance, $meta->get_meta_instance, '... and we know it is cached'); + } + '... got the meta instance okay'; + isa_ok( $meta_instance, 'Class::MOP::Instance' ); + is( $meta_instance, $meta->get_meta_instance, + '... and we know it is cached' ); my @cpl; lives_ok { @cpl = $meta->class_precedence_list; - } '... got the class precedence list okay'; + } + '... got the class precedence list okay'; is_deeply( - \@cpl, - [ 'Foo' ], - '... we just have ourselves in the class precedence list'); + \@cpl, + ['Foo'], + '... we just have ourselves in the class precedence list' + ); my @attributes; lives_ok { - @attributes = $meta->compute_all_applicable_attributes; - } '... got the attribute list okay'; + @attributes = $meta->get_all_attributes; + } + '... got the attribute list okay'; is_deeply( - \@attributes, - [ $meta->get_attribute('bar') ], - '... got the right list of attributes'); + \@attributes, + [ $meta->get_attribute('bar') ], + '... got the right list of attributes' + ); } { my $meta = Bar->meta; - is($meta->name, 'Bar', '... checking the Bar metaclass'); + is( $meta->name, 'Bar', '... checking the Bar metaclass' ); - ok($meta->is_mutable, '... our class is mutable'); - ok(!$meta->is_immutable, '... our class is not immutable'); + ok( $meta->is_mutable, '... our class is mutable' ); + ok( !$meta->is_immutable, '... our class is not immutable' ); lives_ok { $meta->make_immutable(); - } '... changed Bar to be immutable'; + } + '... changed Bar to be immutable'; - ok(!$meta->make_immutable, '... make immutable now returns nothing'); + ok( !$meta->make_immutable, '... make immutable now returns nothing' ); - ok(!$meta->is_mutable, '... our class is no longer mutable'); - ok($meta->is_immutable, '... our class is now immutable'); + ok( !$meta->is_mutable, '... our class is no longer mutable' ); + ok( $meta->is_immutable, '... our class is now immutable' ); - isa_ok($meta, 'Class::MOP::Class'); + isa_ok( $meta, 'Class::MOP::Class' ); - dies_ok { $meta->add_method() } '... exception thrown as expected'; - dies_ok { $meta->alias_method() } '... exception thrown as expected'; + dies_ok { $meta->add_method() } '... exception thrown as expected'; + dies_ok { $meta->alias_method() } '... exception thrown as expected'; dies_ok { $meta->remove_method() } '... exception thrown as expected'; - dies_ok { $meta->add_attribute() } '... exception thrown as expected'; + dies_ok { $meta->add_attribute() } '... exception thrown as expected'; dies_ok { $meta->remove_attribute() } '... exception thrown as expected'; - dies_ok { $meta->add_package_symbol() } '... exception thrown as expected'; - dies_ok { $meta->remove_package_symbol() } '... exception thrown as expected'; + dies_ok { $meta->add_package_symbol() } + '... exception thrown as expected'; + dies_ok { $meta->remove_package_symbol() } + '... exception thrown as expected'; my @supers; lives_ok { @supers = $meta->superclasses; - } '... got the superclasses okay'; + } + '... got the superclasses okay'; - dies_ok { $meta->superclasses([ 'UNIVERSAL' ]) } '... but could not set the superclasses okay'; + dies_ok { $meta->superclasses( ['UNIVERSAL'] ) } + '... but could not set the superclasses okay'; my $meta_instance; lives_ok { $meta_instance = $meta->get_meta_instance; - } '... got the meta instance okay'; - isa_ok($meta_instance, 'Class::MOP::Instance'); - is($meta_instance, $meta->get_meta_instance, '... and we know it is cached'); + } + '... got the meta instance okay'; + isa_ok( $meta_instance, 'Class::MOP::Instance' ); + is( $meta_instance, $meta->get_meta_instance, + '... and we know it is cached' ); my @cpl; lives_ok { @cpl = $meta->class_precedence_list; - } '... got the class precedence list okay'; + } + '... got the class precedence list okay'; is_deeply( - \@cpl, - [ 'Bar', 'Foo'], - '... we just have ourselves in the class precedence list'); + \@cpl, + [ 'Bar', 'Foo' ], + '... we just have ourselves in the class precedence list' + ); my @attributes; lives_ok { - @attributes = $meta->compute_all_applicable_attributes; - } '... got the attribute list okay'; + @attributes = $meta->get_all_attributes; + } + '... got the attribute list okay'; is_deeply( - [ sort { $a->name cmp $b->name } @attributes ], - [ Foo->meta->get_attribute('bar'), $meta->get_attribute('baz') ], - '... got the right list of attributes'); + [ sort { $a->name cmp $b->name } @attributes ], + [ Foo->meta->get_attribute('bar'), $meta->get_attribute('baz') ], + '... got the right list of attributes' + ); } { my $meta = Baz->meta; - is($meta->name, 'Baz', '... checking the Baz metaclass'); + is( $meta->name, 'Baz', '... checking the Baz metaclass' ); - ok($meta->is_mutable, '... our class is mutable'); - ok(!$meta->is_immutable, '... our class is not immutable'); + ok( $meta->is_mutable, '... our class is mutable' ); + ok( !$meta->is_immutable, '... our class is not immutable' ); lives_ok { $meta->make_immutable(); - } '... changed Baz to be immutable'; + } + '... changed Baz to be immutable'; - ok(!$meta->make_immutable, '... make immutable now returns nothing'); + ok( !$meta->make_immutable, '... make immutable now returns nothing' ); - ok(!$meta->is_mutable, '... our class is no longer mutable'); - ok($meta->is_immutable, '... our class is now immutable'); + ok( !$meta->is_mutable, '... our class is no longer mutable' ); + ok( $meta->is_immutable, '... our class is now immutable' ); - isa_ok($meta, 'Class::MOP::Class'); + isa_ok( $meta, 'Class::MOP::Class' ); - dies_ok { $meta->add_method() } '... exception thrown as expected'; - dies_ok { $meta->alias_method() } '... exception thrown as expected'; + dies_ok { $meta->add_method() } '... exception thrown as expected'; + dies_ok { $meta->alias_method() } '... exception thrown as expected'; dies_ok { $meta->remove_method() } '... exception thrown as expected'; - dies_ok { $meta->add_attribute() } '... exception thrown as expected'; + dies_ok { $meta->add_attribute() } '... exception thrown as expected'; dies_ok { $meta->remove_attribute() } '... exception thrown as expected'; - dies_ok { $meta->add_package_symbol() } '... exception thrown as expected'; - dies_ok { $meta->remove_package_symbol() } '... exception thrown as expected'; + dies_ok { $meta->add_package_symbol() } + '... exception thrown as expected'; + dies_ok { $meta->remove_package_symbol() } + '... exception thrown as expected'; my @supers; lives_ok { @supers = $meta->superclasses; - } '... got the superclasses okay'; + } + '... got the superclasses okay'; - dies_ok { $meta->superclasses([ 'UNIVERSAL' ]) } '... but could not set the superclasses okay'; + dies_ok { $meta->superclasses( ['UNIVERSAL'] ) } + '... but could not set the superclasses okay'; my $meta_instance; lives_ok { $meta_instance = $meta->get_meta_instance; - } '... got the meta instance okay'; - isa_ok($meta_instance, 'Class::MOP::Instance'); - is($meta_instance, $meta->get_meta_instance, '... and we know it is cached'); + } + '... got the meta instance okay'; + isa_ok( $meta_instance, 'Class::MOP::Instance' ); + is( $meta_instance, $meta->get_meta_instance, + '... and we know it is cached' ); my @cpl; lives_ok { @cpl = $meta->class_precedence_list; - } '... got the class precedence list okay'; + } + '... got the class precedence list okay'; is_deeply( - \@cpl, - [ 'Baz', 'Bar', 'Foo'], - '... we just have ourselves in the class precedence list'); + \@cpl, + [ 'Baz', 'Bar', 'Foo' ], + '... we just have ourselves in the class precedence list' + ); my @attributes; lives_ok { - @attributes = $meta->compute_all_applicable_attributes; - } '... got the attribute list okay'; + @attributes = $meta->get_all_attributes; + } + '... got the attribute list okay'; is_deeply( - [ sort { $a->name cmp $b->name } @attributes ], - [ $meta->get_attribute('bah'), Foo->meta->get_attribute('bar'), Bar->meta->get_attribute('baz') ], - '... got the right list of attributes'); + [ sort { $a->name cmp $b->name } @attributes ], + [ + $meta->get_attribute('bah'), Foo->meta->get_attribute('bar'), + Bar->meta->get_attribute('baz') + ], + '... got the right list of attributes' + ); } - -