1*0Sstevel@tonic-gateuse Test::More tests => 7; 2*0Sstevel@tonic-gate 3*0Sstevel@tonic-gateBEGIN { 4*0Sstevel@tonic-gate if ($ENV{PERL_CORE}) { 5*0Sstevel@tonic-gate chdir('t') if -d 't'; 6*0Sstevel@tonic-gate @INC = qw(../lib); 7*0Sstevel@tonic-gate } 8*0Sstevel@tonic-gate} 9*0Sstevel@tonic-gate 10*0Sstevel@tonic-gateBEGIN { use_ok('NEXT') }; 11*0Sstevel@tonic-gatemy $order = 0; 12*0Sstevel@tonic-gate 13*0Sstevel@tonic-gatepackage A; 14*0Sstevel@tonic-gate@ISA = qw/B C D/; 15*0Sstevel@tonic-gate 16*0Sstevel@tonic-gatesub test { ::ok(++$order==1,"test A"); $_[0]->NEXT::UNSEEN::test; 1} 17*0Sstevel@tonic-gate 18*0Sstevel@tonic-gatepackage B; 19*0Sstevel@tonic-gate@ISA = qw/D C/; 20*0Sstevel@tonic-gatesub test { ::ok(++$order==2,"test B"); $_[0]->NEXT::UNSEEN::test; 1} 21*0Sstevel@tonic-gate 22*0Sstevel@tonic-gatepackage C; 23*0Sstevel@tonic-gate@ISA = qw/D/; 24*0Sstevel@tonic-gatesub test { ::ok(++$order==4,"test C"); $_[0]->NEXT::UNSEEN::test; 1} 25*0Sstevel@tonic-gate 26*0Sstevel@tonic-gatepackage D; 27*0Sstevel@tonic-gate 28*0Sstevel@tonic-gatesub test { ::ok(++$order==3,"test D"); $_[0]->NEXT::UNSEEN::test; 1} 29*0Sstevel@tonic-gate 30*0Sstevel@tonic-gatepackage main; 31*0Sstevel@tonic-gate 32*0Sstevel@tonic-gatemy $foo = {}; 33*0Sstevel@tonic-gate 34*0Sstevel@tonic-gatebless($foo,"A"); 35*0Sstevel@tonic-gate 36*0Sstevel@tonic-gateeval{ $foo->test } 37*0Sstevel@tonic-gate ? pass("Correctly survives after C") 38*0Sstevel@tonic-gate : fail("Shouldn't die on missing ancestor"); 39*0Sstevel@tonic-gate 40*0Sstevel@tonic-gatepackage Diamond::Base; 41*0Sstevel@tonic-gatemy $seen; 42*0Sstevel@tonic-gatesub test { 43*0Sstevel@tonic-gate $seen++ ? ::fail("Can't visit inherited test twice") 44*0Sstevel@tonic-gate : ::pass("First diamond is okay"); 45*0Sstevel@tonic-gate shift->NEXT::UNSEEN::test; 46*0Sstevel@tonic-gate} 47*0Sstevel@tonic-gate 48*0Sstevel@tonic-gatepackage Diamond::Left; @ISA = qw[Diamond::Base]; 49*0Sstevel@tonic-gatepackage Diamond::Right; @ISA = qw[Diamond::Base]; 50*0Sstevel@tonic-gatepackage Diamond::Top; @ISA = qw[Diamond::Left Diamond::Right]; 51*0Sstevel@tonic-gate 52*0Sstevel@tonic-gatepackage main; 53*0Sstevel@tonic-gate 54*0Sstevel@tonic-gateDiamond::Top->test; 55