xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/lib/NEXT/t/unseen.t (revision 0:68f95e015346)
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