use strict;
use warnings;
-use Test::More tests => 6;
+use Test::More tests => 8;
BEGIN {
use_ok('Class::MOP');
[ '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 <-+
=cut
-{
- package My::2::A;
- use metaclass;
- 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 { My::2::B->meta->class_precedence_list };
+ My::2::B->meta->class_precedence_list
+};
ok($@, '... recursive inheritance breaks correctly :)');
=pod
[ '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