fix make_mutable when option values defaulted
[gitmo/Class-MOP.git] / t / 002_class_precedence_list.t
index aa0d367..2abfeb7 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More no_plan => 1;
+use Test::More tests => 8;
 
 BEGIN {
     use_ok('Class::MOP');   
@@ -22,6 +22,7 @@ B   C
 
 {
     package My::A;
+    use metaclass;
     package My::B;
     our @ISA = ('My::A');
     package My::C;
@@ -31,10 +32,15 @@ B   C
 }
 
 is_deeply(
-    [ Class::MOP::Class->initialize('My::D')->class_precedence_list ], 
+    [ My::D->meta->class_precedence_list ], 
     [ 'My::D', 'My::B', 'My::A', 'My::C', 'My::A' ], 
     '... My::D->meta->class_precedence_list == (D B A C A)');
 
+is_deeply(
+    [ My::D->meta->linearized_isa ], 
+    [ 'My::D', 'My::B', 'My::A', 'My::C' ], 
+    '... My::D->meta->linearized_isa == (D B A C)');
+
 =pod
 
  A <-+
@@ -45,18 +51,24 @@ is_deeply(
 
 =cut
 
-{
-    package My::2::A;
-    our @ISA = ('My::2::C');
+# 5.9.5+ dies at the moment of
+# recursive @ISA definition, not later when
+# you try to use the @ISAs.
+eval {
+    {
+        package My::2::A;
+        use metaclass;    
+        our @ISA = ('My::2::C');
         
-    package My::2::B;
-    our @ISA = ('My::2::A');
+        package My::2::B;
+        our @ISA = ('My::2::A');
     
-    package My::2::C;
-    our @ISA = ('My::2::B');           
-}
+        package My::2::C;
+        our @ISA = ('My::2::B');           
+    }
 
-eval { Class::MOP::Class->initialize('My::2::B')->class_precedence_list };
+    My::2::B->meta->class_precedence_list
+};
 ok($@, '... recursive inheritance breaks correctly :)');
 
 =pod
@@ -72,6 +84,7 @@ ok($@, '... recursive inheritance breaks correctly :)');
 
 {
     package My::3::A;
+    use metaclass;    
     package My::3::B;
     our @ISA = ('My::3::A');
     package My::3::C;
@@ -81,10 +94,15 @@ ok($@, '... recursive inheritance breaks correctly :)');
 }
 
 is_deeply(
-    [ Class::MOP::Class->initialize('My::3::D')->class_precedence_list ], 
+    [ My::3::D->meta->class_precedence_list ], 
     [ 'My::3::D', 'My::3::B', 'My::3::A', 'My::3::C', 'My::3::A', 'My::3::B', 'My::3::A' ], 
     '... My::3::D->meta->class_precedence_list == (D B A C A B A)');
 
+is_deeply(
+    [ My::3::D->meta->linearized_isa ], 
+    [ 'My::3::D', 'My::3::B', 'My::3::A', 'My::3::C' ], 
+    '... My::3::D->meta->linearized_isa == (D B A C B)');
+
 =pod
 
 Test all the class_precedence_lists 
@@ -97,6 +115,7 @@ my @CLASS_PRECEDENCE_LIST;
 
 {
     package Foo;
+    use metaclass;    
     
     sub CPL { push @CLASS_PRECEDENCE_LIST => 'Foo' }    
     
@@ -109,6 +128,7 @@ my @CLASS_PRECEDENCE_LIST;
     }       
     
     package Baz;
+    use metaclass;    
     our @ISA = ('Bar');
     
     sub CPL { 
@@ -137,7 +157,7 @@ my @CLASS_PRECEDENCE_LIST;
 Foo::Bar::Baz->CPL();
 
 is_deeply(
-    [ Class::MOP::Class->initialize('Foo::Bar::Baz')->class_precedence_list ], 
+    [ Foo::Bar::Baz->meta->class_precedence_list ], 
     [ @CLASS_PRECEDENCE_LIST ], 
     '... Foo::Bar::Baz->meta->class_precedence_list == @CLASS_PRECEDENCE_LIST');