got rid of all the use_ok junk except for 000_load.t
[gitmo/Class-MOP.git] / t / 070_immutable_metaclass.t
index b0294be..cfdb278 100644 (file)
@@ -3,12 +3,10 @@
 use strict;
 use warnings;
 
-use Test::More tests => 73;
+use Test::More tests => 84;
 use Test::Exception;
 
-BEGIN {
-    use_ok('Class::MOP');
-}
+use Class::MOP;
 
 {
     package Foo;
@@ -41,16 +39,48 @@ 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;
     is($meta->name, 'Foo', '... checking the Foo metaclass');
 
     ok($meta->is_mutable, '... our class is mutable');
     ok(!$meta->is_immutable, '... our class is not immutable');
 
+    my $transformer = $meta->get_immutable_transformer;
+
     lives_ok {
         $meta->make_immutable();
     } '... changed Foo to be immutable';
 
+    is($transformer, $meta->get_immutable_transformer, '... immutable transformer cache works');
     ok(!$meta->make_immutable, '... make immutable now returns nothing');
 
     ok(!$meta->is_mutable, '... our class is no longer mutable');
@@ -68,6 +98,8 @@ BEGIN {
     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';
+
     my @supers;
     lives_ok {
         @supers = $meta->superclasses;