whoops-bug
Stevan Little [Thu, 31 Aug 2006 21:33:24 +0000 (21:33 +0000)]
lib/Class/MOP/Class/Immutable.pm
t/000_load.t

index 802a3ba..942708c 100644 (file)
@@ -12,6 +12,19 @@ our $AUTHORITY = 'cpan:STEVAN';
 
 use base 'Class::MOP::Class';
 
+# enforce the meta-circularity here
+# and hide the Immutable part
+
+sub meta { 
+    my $self = shift;
+    # if it is not blessed, then someone is asking 
+    # for the meta of Class::MOP::Class::Immutable
+    return Class::MOP::Class->initialize($self) unless blessed($self);
+    # otherwise, they are asking for the metaclass 
+    # which has been made immutable, which is itself
+    return $self;
+}
+
 # methods which can *not* be called
 for my $meth (qw(
     add_method
index b9edef2..40d59ff 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 19;
+use Test::More tests => 22;
 
 BEGIN {
     use_ok('Class::MOP');
@@ -79,5 +79,17 @@ is_deeply(
        "Class::MOP::Package-"             . $Class::MOP::Package::VERSION             . "-cpan:STEVAN",
     ],
     '... got all the metaclass identifiers');    
-    
-    
+        
+# 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, Class::MOP::Class->meta->meta->meta->meta, 
+   '... Class::MOP::Class->meta == Class::MOP::Class->meta->meta->meta->meta');  
+
+
+