1use strict; 2use warnings; 3use Test::More tests => 10; 4 5BEGIN { use_ok('NEXT') }; 6my $order = 0; 7 8package A; 9our @ISA = qw/B C D/; 10use if $] >= 5.009005, 'mro', 'dfs'; 11 12 13sub test { ++$order; ::ok($order==1,"test A"); $_[0]->NEXT::ACTUAL::test;} 14 15package B; 16our @ISA = qw/D C/; 17use if $] >= 5.009005, 'mro', 'dfs'; 18sub test { ++$order; ::ok($order==2,"test B"); $_[0]->NEXT::ACTUAL::test;} 19 20package C; 21our @ISA = qw/D/; 22use if $] >= 5.009005, 'mro', 'dfs'; 23 24sub test { 25 ++$order; ::ok($order==4||$order==6,"test C"); 26 $_[0]->NEXT::ACTUAL::test; 27} 28 29package D; 30use if $] >= 5.009005, 'mro', 'dfs'; 31 32sub test { 33 ++$order; ::ok($order==3||$order==5||$order==7||$order==8,"test D"); 34 $_[0]->NEXT::ACTUAL::test; 35} 36 37package main; 38use if $] >= 5.009005, 'mro', 'dfs'; 39 40my $foo = {}; 41 42bless($foo,"A"); 43 44eval{ $foo->test } 45 ? fail("Didn't die on missing ancestor") 46 : pass("Correctly dies after full traversal"); 47