1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Test::More; 7 8BEGIN { 9 eval "use NEXT"; 10 plan skip_all => "NEXT required for this test" if $@; 11 plan tests => 4; 12} 13 14use Class::C3::XS; 15 16{ 17 package Foo; 18 use strict; 19 use warnings; 20 21 sub foo { 'Foo::foo' } 22 23 package Fuz; 24 use strict; 25 use warnings; 26 use base 'Foo'; 27 28 sub foo { 'Fuz::foo => ' . (shift)->next::method } 29 30 package Bar; 31 use strict; 32 use warnings; 33 use base 'Foo'; 34 35 sub foo { 'Bar::foo => ' . (shift)->next::method } 36 37 package Baz; 38 use strict; 39 use warnings; 40 require NEXT; # load this as late as possible so we can catch the test skip 41 42 use base 'Bar', 'Fuz'; 43 44 sub foo { 'Baz::foo => ' . (shift)->NEXT::foo } 45} 46 47is(Foo->foo, 'Foo::foo', '... got the right value from Foo->foo'); 48is(Fuz->foo, 'Fuz::foo => Foo::foo', '... got the right value from Fuz->foo'); 49is(Bar->foo, 'Bar::foo => Foo::foo', '... got the right value from Bar->foo'); 50 51is(Baz->foo, 'Baz::foo => Bar::foo => Fuz::foo => Foo::foo', '... got the right value using NEXT in a subclass of a C3 class'); 52 53