use strict;
use warnings;
-use Test::More tests => 9;
-
-BEGIN {
- use_ok('Class::C3');
-}
+use Test::More tests => 11;
{
use warnings;
use Class::C3;
our @ISA = ('Foo');
+ }
+
+ my $bar = Bar->new();
+ isa_ok($bar, 'Bar');
+ isa_ok($bar, 'Foo');
+
+ # test it working with with Sub::Name
+ SKIP: {
+ eval 'use Sub::Name';
+ skip "Sub::Name is required for this test", 3 if $@;
+
+ my $m = sub { (shift)->next::method() };
+ Sub::Name::subname('Bar::bar', $m);
+ {
+ no strict 'refs';
+ *{'Bar::bar'} = $m;
+ }
+
+ Class::C3::initialize();
+
+ can_ok($bar, 'bar');
+ my $value = eval { $bar->bar() };
+ ok(!$@, '... calling bar() succedded') || diag $@;
+ is($value, 'Foo::bar', '... got the right return value too');
}
- use Sub::Name;
+ # test it failing without Sub::Name
+ {
+ package Baz;
+ use strict;
+ use warnings;
+ use Class::C3;
+ our @ISA = ('Foo');
+ }
+
+ my $baz = Baz->new();
+ isa_ok($baz, 'Baz');
+ isa_ok($baz, 'Foo');
- my $m = sub { (shift)->next::method() };
- subname('Bar::bar', $m);
{
- no strict 'refs';
- *{'Bar::bar'} = $m;
- }
+ my $m = sub { (shift)->next::method() };
+ {
+ no strict 'refs';
+ *{'Baz::bar'} = $m;
+ }
- my $bar = Bar->new();
- isa_ok($bar, 'Bar');
- isa_ok($bar, 'Foo');
+ Class::C3::initialize();
- can_ok($bar, 'bar');
- my $value = eval { $bar->bar() };
- ok(!$@, '... calling bar() succedded') || diag $@;
- is($value, 'Foo::bar', '... got the right return value too');
-}
\ No newline at end of file
+ eval { $baz->bar() };
+ ok($@, '... calling bar() with next::method failed') || diag $@;
+ }
+}